Имя: Пароль:
 
1C
 
8.2 Как перехватить формирование отчета с СКД?
0 Буратинко
 
06.10.10
16:33
Как можно перехватить формирование отчета, чтобы не делать форму? Я нашел только предопределенную процедуру "ПриКомпоновкеРезультата".

Может я плохо искал? Ведь логично, чтобы для каждого этапа:

1.компоновка макета
2.копоновка данных
3.вывод результата компоновки

присутствовали обработчики, позволяющие программисту вмешиваться в работу.
1 shuhard
 
06.10.10
16:35
(0) логично
делаешь свою кнопку и вперед
   Запрос=Новый Запрос;
   Запрос.Текст="ВЫБРАТЬ
   |    ОстаткиТоваровОстаткиИОбороты.Склад,
   |    ОстаткиТоваровОстаткиИОбороты.Номенклатура,
   |    ОстаткиТоваровОстаткиИОбороты.КоличествоНачальныйОстаток,
   |    ОстаткиТоваровОстаткиИОбороты.КоличествоПриход,
   |    ОстаткиТоваровОстаткиИОбороты.КоличествоРасход,
   |    ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток
   |ИЗ
   |    РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты КАК ОстаткиТоваровОстаткиИОбороты";
   ТЗ=Запрос.Выполнить().Выгрузить();
   ВнешнийНабор=Новый Структура("Наборчик",ТЗ);                                                      
   // схема компановки из реквизита отчета
   СКД=ЭтотОбъект.ПолучитьМакет("ЧерезНабор"); // получим схему из макета
   // настройка из схемы по умолчанию
   НастройкаСКД=ЭтотОбъект.КомпоновщикНастроек.Настройки;  // текущие настройки
   // компановщик макета из схемы и настроек порождает макет
   КомпоновщикМакетаКомпоновкиДанных=Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновкиДанных=КомпоновщикМакетаКомпоновкиДанных.Выполнить(СКД, НастройкаСКД) ;
   // процессор из макета делает себя самого
   ПроцессорКомпоновкиДанных=Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,ВнешнийНабор);
   // прцессор вывода порождает ТД
   ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ЭлементыФормы.Результат.Очистить();
   ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.УстановитьДокумент(ЭлементыФормы.Результат);
   ТД=ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.Вывести(ПроцессорКомпоновкиДанных);
   ТД.Показать();
2 Буратинко
 
06.10.10
16:49
(1) так понятно, а что нельзя "вклиниться" в выполенение без создания формы (с помощью предопределенных процедур)?
3 shuhard
 
06.10.10
17:00
(2) [с помощью предопределенных процедур]
не состругал папа Карло этого
забыл старый или запил
4 cost10
 
06.10.10
17:06
(0) Ну все правильно ПриКомпоновкеРезультата для этого предназначена, и форму можно не делать.


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;
   
   Настройки = КомпоновщикНастроек.Настройки;  
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);

   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

   ДокументРезультат.Очистить();
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

   ПроцессорВывода.Вывести(ПроцессорКомпоновки);  
   
КонецПроцедуры
5 shuhard
 
06.10.10
17:33
(3) был не прав
в 8.2 - можно
6 Буратинко
 
06.10.10
18:20
(4) а в какое время вызывается эта процедура? Нигде не нашел (и программно проверить тоже нельзя, потому что если в форме руками прописать код похожий на ваш, то процедура не вызывается).

Еще одна загадка 1с.
7 shuhard
 
06.10.10
18:27
(6) то же мне загадка
код живёт в модуле Объекта

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
   Сообщить("Я тут!!");
КонецПроцедуры
8 Буратинко
 
06.10.10
18:33
(7) ну и что мне этот "тут" расскажет? Он где конкретно? :)
9 shuhard
 
06.10.10
18:35
(8) модуль не формы, а объекта
10 Буратинко
 
06.10.10
18:37
+(6) Был такой товарищ- Сальвадор Дали. Он носил подкрученные вверх усы и любил делать загадки.

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

Это относится и к запуску программы в режиме Конфигуратор. Причем в последнем режиме количество картин должно вдвое превышать пользовательское количество.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn