powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Импорт данных из 1С77-dbf в Firebird через Delphi.
12 сообщений из 12, страница 1 из 1
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36420481
Добрый день.

Заранее прошу прощения за, возможно, глупый вопрос, но все же:

Есть отчет "Журнал ордер по счету 311 Текущие счета в национальной валюте". Стоит задача, вытащить данные о движении по счетам в развернутом виде. Под развернутым видом я понимаю возможность добраться до контрагентов и слагаемых суммы.

Также необходимо полностью без каких-либо изменений импортировать в свою базу отчет "Оборотно-сальдовая ведомость" по счетам 361 и 631 (поставщики и покупатели).


Опыта работы с 1С нет. Пока что научился только вытаскивать данные из таблиц, а вот как быть с отчетом разобраться не могу.

Буду очень рад примерам,
Спасибо
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36420488
Dolter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если быстро, то сохранить отчет в эксель и оттуда выгрузить/загрузить куда хошь... если правильно, то "разобраться" в 1С
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36420530
Dolter,

Спасибо за быстрый ответ.

Хотелось бы, чтобы импорт мог происходить в одностороннем порядке.

Или Вы имеете ввиду сохранение в эксель через ОЛЕ, а потом работа с теоретически созданным внешним файлом (я так понимаю, что можно сохранить и в XML) ?

Этот вариант подходит для 361 и 631 счетов, для которых не нужна никакая обработка, а как быть с 311, по которому еще надо получить доступ к контрагентам по каждому субсчету?
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36420604
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторХотелось бы, чтобы импорт мог происходить в одностороннем порядке.

с какой стороны ?

в любом случае вам прийдётся научиться писать запросы к бухгалтерским данным а уже от "стороны" одностороннего порядка зависит прийдётся вам осваивать выгрузку в эксемель или ексель в 1це или же обойдётесь возможностями своего софта

учтите что оле воспринимает только примитивные типы данных т.е. контрагентов скажем по ОКПО прийдётся загружать ну и т.д.
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36420867
Под односторонним доступом я понимаю доступ из моего приложения так, чтобы бухгалтерам, которые работают с 1С вообще ничего делать не надо было.


Last1Cmenв любом случае вам придётся научиться писать запросы к бухгалтерским данным а уже от "стороны" одностороннего порядка зависит придётся вам осваивать выгрузку в эксемель или ексель в 1це или же обойдётесь возможностями своего софта

На данный момент меня больше всего интересует, как вообще запустить отчет через ОЛЕ.
В том числе, мне не понятно, как взять имя отчета и передать ему какие-либо параметры.
Если к справочникам или журналам я могу получить доступ через
Код: plaintext
CreateObject( 'Справочники.НазваниеСправочника' ) 
и
Код: plaintext
CreateObject( 'Журналы.НазваниеЖурнала' )
, то к отчету я таким образом добраться не могу. Я понимаю, что можно построить отчет самому, но этот вариант по ряду причин не удобен.


Last1Cmen
учтите что оле воспринимает только примитивные типы данных т.е. контрагентов скажем по ОКПО прийдётся загружать ну и т.д.

не совсем понял, что именно Вы имеете ввиду, но отвечу как понял: справочники между моей системой и 1С уже более-менее синхронизированы и в 1С даже хранятся идентификаторы контрагентов из моей базы, а если этот идентификатор пустой, то естественно буду сравнивать по ОКПО.


В общем, ближайший промежуточный вопрос, как запустить отчет из своего приложения и получить доступ к его результату?
Если это проще сделать через сохранение отчета во внешний файл, то буду очень рад примерам или ссылкам на литературу, как это сделать.
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36420925
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новичок в 1С, ну если я попробую вот привести нечто

в иннициаторе обмена есть следущий код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	стрВызоваПроцедуры = "глОбменОле(" + стрДатаС + ", " + стрДатаПо + ", "+ стрКодФирмы + ", " + стрКлиентЕДРПОУ + ")";
	//Сообщить(стрВызоваПроцедуры);
	стр = База.EvalExpr(стрВызоваПроцедуры); 
	тб = значениеИзСтроки(стр);
	Если типЗначенияСтр(тб) <> "ТаблицаЗначений" Тогда
		сообщить("Ошибка в процедуре получения продаж консигнатора!");
		возврат;
	КонецЕсли;

т.е. идёт предача вызова процедуры (только в глобальном модуле) которая возвращает таблицу значений результата

в источнике есть следующее в глобальном модуле

авторФункция глОбменОле(ДатаС,ДатаПо,КодПоставщика, ОКПОФирмы) Экспорт

//блаблабла

тбДок = СоздатьОбъект ("ТаблицаЗначений");

стр = ЗначениеВСтроку(тбДок);
возврат стр;
КонецФункции //глОбменОле

в ней выборка необходимых документов и выгрузка и табличных частей

т.е. в вашем случае вместо //блаблабла и т.д. можете вставить вызов любого отчета через ОткрытьФорму("Отчет",Парам) (где парам параметры для отчета) и после того как онотработает то получить свой результат в Парам а уже из него вернуть преобразовав в строку которую и примете в базе иннициаторе
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36428039
наконец-то вернулся к данному вопросу.

Last1Cmen, спасибо за помощь.

Теперь мое непонимание продвинулось чуть дальше:
1. Если как передать параметры отчету, я вроде бы понял:

Код: plaintext
1.
2.
3.
4.
СписокПараметров = СоздатьОбъект( "СписокЗначений" );
СписокПараметров.ДобавитьЗначение( ДатаС );
СписокПараметров.ДобавитьЗначение( ДатаПо );
СписокПараметров.ДобавитьЗначение( НомерСчета );
ОткрытьФорму ("Отчет.ОборотноСальдоваяВедомостьПоСчету", СписокПараметров);

то как их обработать я не представляю. Как я вижу, мне надо дописать в функцию "ПриОткрытии" этого отчета обработку параметров, так?

Но когда я пытаюсь выполнить

Код: plaintext
ОткрытьФорму ( "Отчет.ОборотноСальдоваяВедомостьПоСчету" );

отладчик выдает ошибки на все обращения к методам или переменным глобального модуля, например:
авторЕсли глПроверкаПериода<<?>>(Дата1,Дата2) = 0 Тогда
{Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма.Модуль(118)}: Функция не обнаружена (глПроверкаПериода)

Если глИспользуетсяРазделительУчета <<?>>= 1 Тогда
{Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма.Модуль(122)}: Переменная не определена (глИспользуетсяРазделительУчета)



2. Самое главное, мне ж надо не форму открыть, а получить данные из отчета. Я правильно понимаю, что это можно сделать дописав свою функцию в модуль отчета, которая будет дублировать содержимое обработчика нажатия кнопки "Сформировать" ?
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36428054
Я правильно понимаю, что первой процедурой при открытии отчета методом "ОткрытьФорму", будет метод "ПриОткрытии" ? или метод "Сформировать" ?

В общем, помимо того, что модуль ругается на функции и переменные из главного модуля, еще и не отрабатывает код
Код: plaintext
Сообщить("тест!");
ни в одном из указанных методов, причем указываю его там 1ым оператором.

Да, забыл еще 1 вещь сказать - я вызываю процедуру
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Функция глОбменОЛЕ( ДатаС, ДатаПо, НомерСчета ) Экспорт
                                                                           
	ОткрытьФорму ("Отчет.ОборотноСальдоваяВедомостьПоСчету" );
     
	тбДок = СоздатьОбъект ("ТаблицаЗначений");
	
	стр = ЗначениеВСтроку(тбДок);
	возврат стр;
КонецФункции //глОбменОле   

прямо из главного модуля. Наверное, из-за этого и ругается. Догадываюсь, что так делать не правильно, но подскажите пожалуйста правильный способ трассировать программу.
________________________________________________________________

Last1Cmen в иннициаторе обмена есть следущий код
о каком инициаторе Вы говорите? есть какой-то встренный типа-визард или Вы абстрактно говорите о системе, которая будет подключаться к 1С?

Last1Cmen в источнике есть следующее в глобальном модуле
Функция глОбменОле(ДатаС,ДатаПо,КодПоставщика, ОКПОФирмы) Экспорт

//блаблабла

тбДок = СоздатьОбъект ("ТаблицаЗначений");

стр = ЗначениеВСтроку(тбДок);
возврат стр;
КонецФункции //глОбменОле


в ней выборка необходимых документов и выгрузка и табличных частей

т.е. в вашем случае вместо //блаблабла и т.д. можете вставить вызов любого отчета через ОткрытьФорму("Отчет",Парам) (где парам параметры для отчета) и после того как онотработает то получить свой результат в Парам а уже из него вернуть преобразовав в строку которую и примете в базе иннициаторе

не понятно, как увязать запуск отчета по ОткрытьФорму("Отчет",Парам) и ТаблицуЗначений

Last1Cmen Функция глОбменОле(ДатаС,ДатаПо,КодПоставщика, ОКПОФирмы) Экспорт

ОткрытьФорму("Отчет",Парам)

// т.е. что должно быть здесь не понятно

тбДок = СоздатьОбъект ("ТаблицаЗначений");

стр = ЗначениеВСтроку(тбДок);
возврат стр;
КонецФункции //глОбменОле
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36428404
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новичок в 1С, мдя... в три строки не объяснишь

пока тестировать не буду... попытайтесь проверить следующее

1. кроме самой строки вызова и обработки полученного значения (строка а в ней уже чего вам надо будет) в БД иннициаторе (т.е. откуда вызов будет и куда в ывернёте отработанное значение) ничего нет... задача той базы откуда поключение идет просто передать параметры в базу источник и получить из неё результат а потом уже его обрабатывать в иннициаторе/приёмнике

никаких визардов нет

2. в источнике (куда подключаемся) действуем по той же схеме... делаем вызов чего-то в среде уже поключения (там есть ограничения но я про них не скажу т.к. всё не помню) и у нас это будет вызов отчета

т.е. в базе источнике

Код: plaintext
1.
2.
3.
4.
СписокПараметров = СоздатьОбъект( "СписокЗначений" );
СписокПараметров.ДобавитьЗначение( ДатаС );
СписокПараметров.ДобавитьЗначение( ДатаПо );
СписокПараметров.ДобавитьЗначение( НомерСчета );
ОткрытьФорму ("Отчет.ОборотноСальдоваяВедомостьПоСчету", СписокПараметров);

это правильно

затем в модуле той формы которую открываете (тут я не тестировал в режиме ОЛЕ но в локальном контексте работает) получаете этот список в процедуре ПриОткрытии()

Форма.Параметр - и есть этот список... запускаете внутри отчет на формирование и выводите не в печ. форму а в таблицу которую и присваиваете опять "параметру" формы... после того как она отработает она вернёт в точку вызова таблицу с необходимыми значениями
т.е. тут

// т.е. что должно быть здесь не понятно

будет предварительный разбор полученного значения и ниже перевод его в строку для возврата уже базе откуда было поключение (иннициаторе)

схема в итоге такая (БДИн - база иннициатор т.е. откуда подключаемся, БДИст - база источник данных т.е. куда подключаемся, Отчет БДИст - ваш отчет в базе источнике)

1. БДИн -> БДИст (глобальный модуль)
2. БДИст (глобальный модуль) -> вызов Отчета БДИст
3. выполение Отчета БДИст -> возврат результата в БДИст (глобальный модуль)
4. БДИст (глобальный модуль) -> возврат результата в БДИн

должно быть что-то типа ЗначениеИзСтрокиВнутр(Парам) (где Парам - возвращаемое значение)
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36429730
В общем, продвигаюсь оччень медленно((

Буду спрашивать по-шагово.

Собственно тело отчета формируется в методе "Сформировать". Что происходит в этом методе я до конца не понимаю:

Процедура Сформировать ( Эту часть я понимаю )
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Процедура Сформировать(Ручн= 0 )  
	Если Счет.Выбран() =  0  Тогда
		Предупреждение("Не указан счет!");
		Возврат;
	КонецЕсли;

	Если глПроверкаПериода(Дата1,Дата2) =  0  Тогда
		Возврат;
	КонецЕсли;

	Если глИспользуетсяРазделительУчета =  1  Тогда
		НФ = РазделительУчета;
	Иначе
		НФ = Константа.БазФирма;
	КонецЕсли;

	Если Ручн= 1  Тогда
	    СохранитьЗначение("ОтчРабСчет",Счет);
	КонецЕсли;

	ВидСубконто[ 1 ] = ВыбВидСубконто1;
	Субконто[ 1 ] = Субконто1; ОтборСубконто[ 1 ] = ?(ВидСубконто[ 1 ].Выбран()= 1 , ОтборСубконто1.ТекущаяСтрока(),  3 );
	ПоГруппам[ 1 ] = ПоГруппам1; 
	Номер[ 1 ] =  1 ;                                                                                                       
	
	ВидСубконто[ 2 ] = ВыбВидСубконто2; 
	Субконто[ 2 ] = Субконто2; ОтборСубконто[ 2 ] = ?(ВидСубконто[ 2 ].Выбран()= 1 , ОтборСубконто2.ТекущаяСтрока(),  3 ); 
	ПоГруппам[ 2 ] = ПоГруппам2; 
	Номер[ 2 ] =  2 ;                                                                                                       
	
	ВидСубконто[ 3 ] = ВыбВидСубконто3; 
	Субконто[ 3 ] = Субконто3; ОтборСубконто[ 3 ] = ?(ВидСубконто[ 3 ].Выбран()= 1 , ОтборСубконто3.ТекущаяСтрока(),  3 ); 
	ПоГруппам[ 3 ] = ПоГруппам3; 
	Номер[ 3 ] =  3 ;                     
	
	Если ОтборСубконто[ 1 ] > ОтборСубконто[ 2 ] Тогда
		Поменять( 1 ,  2 );
	КонецЕсли;
	Если ОтборСубконто[ 2 ] > ОтборСубконто[ 3 ] Тогда
		Поменять( 2 ,  3 );
		Если ОтборСубконто[ 1 ] > ОтборСубконто[ 2 ] Тогда
			Поменять( 1 ,  2 );
		КонецЕсли;

		...
	КонецЕсли;


Продолжение процедуры Сформировать ( здесь многое не понятно )
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
		...

	ФлВал=Счет.Валютный;
	
	//!!! Зачем создается этот СписокЗначений я вообще не понимаю, 
	//!!! т.к. в него добавляется куча элементов, но они нигде не используются, 
	//!!!! т.е. значения добавляются впустую
   	Расшифровка = СоздатьОбъект("СписокЗначений");
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");

    Ит.ИспользоватьРазделительУчета(РазделительУчета);
	КолПоСчету =  0 ;
    Заголовок1 = "";
    Для А= 1  По  3  Цикл
		Если ОтборСубконто[А] <>  3  Тогда
		    Ит.ИспользоватьСубконто(ВидСубконто[А], Субконто[А], ОтборСубконто[А], ПоГруппам[А]);
		    Если А <>  1  Тогда
		    	Заголовок1 = Заголовок1+"; ";
		    КонецЕсли;
		    Заголовок1 = Заголовок1+глУкр(ВидСубконто[А]);
		    Если ОтборСубконто[А] =  2  Тогда
		    	Заголовок1 = Заголовок1+":"+Субконто[А];
				КолПоСчету =  1 ;
		    КонецЕсли;
		КонецЕсли;
	КонецЦикла;
                          
	Ит.ВключатьСубсчета(ДанныеПоСубсчетам);
	Если Ит.ВыполнитьЗапрос(Дата1, Дата2, Счет) =  0  Тогда
		Возврат;
	КонецЕсли;

	Если (ТипЗначенияСтр(Т) <> "Таблица") Или (Обновить =  0 ) Тогда
	   	Т = СоздатьОбъект("Таблица");
	Иначе
	 	Т.Очистить();
	КонецЕсли;
	 
	глУстПропись(Гривня);
	Если Константа.ФормыНаУкраинском = Да Тогда
		Т.ИсходнаяТаблица("Таблица_Укр");
	Иначе
		Т.ИсходнаяТаблица("Таблица");
	КонецЕсли;

	Расшифровка.Установить("Отчет", "ОборотноСальдоваяВедомостьПоСчету");
    Расшифровка.Установить("РазделительУчета", РазделительУчета);
   	Расшифровка.Установить("Дата1", Дата1);
   	Расшифровка.Установить("Дата2", Дата2);
   	Расшифровка.Установить("Счет", Счет);
   	Расшифровка.Установить("ДанныеПоСубсчетам", ДанныеПоСубсчетам);
    Для А= 1  По  3  Цикл
   		Расшифровка.Установить("ВидСубконто"+Номер[А], ВидСубконто[А]);
   		Расшифровка.Установить("Субконто"+Номер[А], Субконто[А]);
   		Расшифровка.Установить("ОтборСубконто"+Номер[А], ОтборСубконто[А]);
   		Расшифровка.Установить("ПоГруппам"+Номер[А], ПоГруппам[А]);
	КонецЦикла;

    Т.ВывестиСекцию("Секция_12");
    Т.ВывестиСекцию("Секция_1");


    //!!! это вообще апофигей - добавляли-добавляли, потом взяли и просто очистили список

    Расшифровка.УдалитьВсе();
   	Расшифровка.Установить("Отчет", "КарточкаСчета");
    Расшифровка.Установить("РазделительУчета", РазделительУчета);
   	Расшифровка.Установить("Дата1", Дата1);
   	Расшифровка.Установить("Дата2", Дата2);
   	Расшифровка.Установить("Счет", Счет);

    Для А= 1  По  3  Цикл
		Если ОтборСубконто[А] <>  3  Тогда
			Расшифровка.Установить("ВидСубконто"+Номер[А], ВидСубконто[А]);
			Если ОтборСубконто[А] =  2  Тогда
				Расшифровка.Установить("ОтборСубконто"+Номер[А], Субконто[А]);
				Расшифровка.Установить("Субконто"+Номер[А], Субконто[А]);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Если ДанныеПоСубсчетам =  1  Тогда
		Ит.ВыбратьСчета();
		Ит.ПолучитьСчет();
		Пока Ит.ПолучитьСчет() =  1  Цикл
		   	Расшифровка.Установить("Счет", Ит.Счет);
			Т.ВывестиСекцию("Секция_14");
			Если КолПоСчету =  1  Тогда
				Т.ВывестиСекцию("Секция_15");
			КонецЕсли;
	        Если ФлВал =  1  Тогда
	            Ит.ВыбратьВалюты();
	            Пока Ит.ПолучитьВалюту()= 1  Цикл
				   	Расшифровка.Установить("Валюта",Ит.Валюта);
				   	Расшифровка.Установить("ПоВалюте", 1 );
		            Т.ВывестиСекцию("Секция_16");
	            КонецЦикла;
			   	Расшифровка.Установить("Валюта");
				Расшифровка.Установить("ПоВалюте");
			КонецЕсли;
			ПоСубконто(Ит, Т, ФлВал);
		   	Расшифровка.Установить("Отчет", "КарточкаСчета");
		КонецЦикла;
	Иначе
		ПоСубконто(Ит, Т, ФлВал);
	КонецЕсли;

	Если КолПоСчету =  0  Тогда
		Если ОтборСубконто[ 1 ] <>  3  Тогда
			Т.ВывестиСекцию("Секция_8");
		Иначе
	    	Т.ВывестиСекцию("Секция_17");
		КонецЕсли;
	Иначе
		Если ОтборСубконто[ 1 ] <>  3  Тогда
			Т.ВывестиСекцию("Секция_13");
		Иначе
			Т.ВывестиСекцию("Секция_18");
		КонецЕсли;
	КонецЕсли;
    Ит =  0 ;
    Т.ТолькоПросмотр( 1 );
    Т.Опции( 0 ,  0 ,  7 ,  1 , "ОпцииПечатиОСВПоСчету", "ОСВПоСчету");
	Т.ОбластьПечати( 2 );
    Т.Показать("Оборотно-сальдовая ведомость по счету: "+Счет+" ("+ПериодСтр(Дата1, Дата2)+?(ТипЗначения(РазделительУчета)= 0 , "", " "+РазделительУчета)+")", "");
    Если Закрыть =  1  Тогда
    	СтрокаДействийФормы = "#Закрыть";
    КонецЕсли;
КонецПроцедуры


похоже, что ключевой оператор здесь вот этот
Код: plaintext
Т.ВывестиСекцию
но его описание в книге "Описание встроенного языка" совсем ничего не проясняет:
Метод ВывестиСекцию выполняет перенос именованной секции из исход¬ной таблицы-шаблона в результирую-щую таблицу. Имя секции задается стро¬ковым выражением следующего формата:
ИдентификаторСекции1[<|>|-][|ИдентификаторСекции2[<|>|-]]
Символы "<" , ">" , "-" после идентификатора секции указывают на то, что выбирается только часть секции:
< заголовочная часть (с начала секции до начала вложенной сек¬ции).
> подвальная часть (с конца вложенной секции до конца секции).
— средняя часть (собственно вложенная секция).
В выражении <Секция> можно задавать имена двух секций, разделенных зна¬ком "|". При этом перенесена будет область исходной таблицы, являющаяся пересечением первой и второй указанных секций. При этом одна секция может быть горизонтальной (состоять из строк), а другая — вертикальной (состоять из колонок). В результате перенесется прямоугольная область таблицы.
Если в качестве параметра метода задано строковое значение имени секции, то при переносе ячейки таблицы, имеющие тип «Шаблон» и «Выражение», будут заполнены соответствующими данными.
Метод ВывестиСекцию помещает новую секцию со следующей строки вслед за последней выведенной секцией, начиная с первой колонки.


Итак, вопросы:
1. Нафиг нужен объект
Код: plaintext
Расшифровка = СоздатьОбъект("СписокЗначений");
?
2. Я так понимаю, что тело отчета формируется операторами "ВывестиСекцию". А потом отчет показывается методом "Показать". Как мне сделать, чтоб этот отчет возвращался в качестве результата функции и какой будет тип у этого результата?
3. Как мне вообще распарсить этот отчет в программе-инициаторе?
4. Не будет ли проще, как вроде бы предлагалось в начале, сохранить этот отчет в файл, а в программе-инициаторе парсить уже файл? Если так проще, то все равно не понятно, как сохранить в файл в каком-нибудь простом формате (например XML)? (естественно программно)

Спасибо
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36429869
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В отчете идет вывод в печатную форму, тебе этого делать не надо... тебе нужно вернуть таблицу значений, т.е. в большинстве случаев там где идет ВывестиСекцию() тебе необходимо заменять на конструкцию

Код: plaintext
1.
2.
3.
4.
ТЗ.НоваяСтрока();
ТЗ.Показатель1 = Значение1;
ТЗ.Показатель2 = Значение2;
....
ТЗ.ПоказательЭн = ЗначениеЭн;

таким образом к тому моменту когда отчет отработает у тебя будет ТЗ - таблица необходимых тебе значений

Параметру формы ты присваиваешь эту таблицу и закрываешь форму

Как "выловить" то что сформировать отчет надо как Вам необходимо а не как положено (окрыть нажать на кнопку сформировать и нажать на кнопку закрыть) ?

вот перед вызовом формы из глобального модуля вы делаете список параметров для передачи так и передайте туда ещё один параметр... скажем БезОткрытияФормы

авторСписокПараметров = СоздатьОбъект( "СписокЗначений" );
СписокПараметров.ДобавитьЗначение( ДатаС, "ДатаС");
СписокПараметров.ДобавитьЗначение( ДатаПо "ДатаПо");
СписокПараметров.ДобавитьЗначение( НомерСчета, "НомерСчета");
СписокПараметров.ДобавитьЗначение( 1, "БезОткрытияФормы");

ОткрытьФорму ("Отчет.ОборотноСальдоваяВедомостьПоСчету", СписокПараметров);

далее в модуле отчета уже при открытии получаете этот список (через Форма.параметр.получить(ИмяПараметра)) и если Форма.параметр.получить("БезОткрытияФормы") = 1 присваиваете остальным реквизитам отчета значения из списка и вставляете вызов процедуры формирования

Код: plaintext
1.
2.
3.
Если Форма.параметр.получить("БезОткрытияФормы") =  1   тогда
//присваиваем реквизиты из списка (ну там даты счета и т.д.)
Сформировать();
КонецЕсли;

а в теле процедуры Сформировать() в конце добавляем опять же

Код: plaintext
1.
2.
Если Форма.параметр.получить("БезОткрытияФормы") =  1   тогда
Закрыть();
КонецЕсли;

таким образом отчет отработает без вывода в печатную форму (выводить в таблицу вам необходимую будет) и сам выйдет при этом вернув вам таблицу результата в глобальный модуль

вот и всё в принципе
...
Рейтинг: 0 / 0
Импорт данных из 1С77-dbf в Firebird через Delphi.
    #36429872
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНе будет ли проще, как вроде бы предлагалось в начале, сохранить этот отчет в файл, а в программе-инициаторе парсить уже файл? Если так проще, то все равно не понятно, как сохранить в файл в каком-нибудь простом формате (например XML)? (естественно программно)

можно... только не эксемель а в эксель можно... я думаю вам это проще будет
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Импорт данных из 1С77-dbf в Firebird через Delphi.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]