Имя: Пароль:
1C
1С v8
Вызов отчета 1С из формы обработки 8.3, управляемая форма
,
0 Lolipop
 
15.08.16
15:30
Создал обработку, вызываю из модуля формы метод:

ОтчетОбъект = Отчеты.АнализНачисленийИУдержаний.Создать();
    
Заполняю параметры и отборы:

ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", ЭтотОбъект.Объект.ПериодРегистрации);
    ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецМесяца(ЭтотОбъект.Объект.ПериодРегистрации));
    
    Отбор = ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
    Отбор.ПравоеЗначение = ЭтотОбъект.Объект.Организация;

Вызываю метод отчета

ОтчетОбъект.ПриКомпоновкеРезультата(ТабДок, ДанныеРасшифровки, Истина);

И выходит ошибка о том, что метод объекта не обнаружен.

Метод есть, вызывается метод на сервере.

Как вызвать данную процедуру?
1 Nuobu
 
15.08.16
15:35
ОтчетОбъект.СформироватьОтчет()
2 Nuobu
 
15.08.16
15:36
(0) Или дописать "Экспорт".
3 Lolipop
 
15.08.16
15:38
(2) Нет такого метода в отчете, есть только "ПриКомпоновкеРезультата".
Не годится.
4 Evgueni
 
15.08.16
15:44
(3) ПриКомпоновкеРезульта - такой функции не существует. Это виртуальная функция, которую пользователь может  переопределить.
5 var498
 
15.08.16
15:45
Примерно пол года назад была проблема с программой 1С Альфа авто . Был нужен знающий человек . Мне посоветовали сайт , работники которого занимаются только этим . Мою проблему решили очень быстро . Если заинтересовало можете посмотреть здесь http://www.pro1c-alfa.ru/
6 Lolipop
 
15.08.16
15:46
(5) СПАМ!
7 Lolipop
 
15.08.16
15:49
(4) Что значит не существует, если она находится в модуле объекта отчета?
Отчет строится только из этой функции.
8 Горогуля
 
15.08.16
15:50
(7) это обработчик события такой. он сам вызовется, когда надо. а ты же уже погуглил программное формирование отчёта на СКД, правда?
9 Evgueni
 
15.08.16
15:51
(7)
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    Если ИсправитьХарактеристики Тогда
        СтандартнаяОбработка = Ложь;
        СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
        Настройки = КомпоновщикНастроек.ПолучитьНастройки();
        ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

        ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
        
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
        ДеревоПлохСпец = Новый ДеревоЗначений;
        ПроцессорВывода.УстановитьОбъект(ДеревоПлохСпец);
        ДеревоПлохСпец = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
        
        ОбработатьСпецификации(ДеревоПлохСпец);
        
        ВнешниеНаборыДанных = Новый Структура;
        ВнешниеНаборыДанных.Вставить("ТаблНеИсправленные", ДеревоПлохСпец);
        
        СхемаКомпоновкиДанных = ПолучитьМакет("НеИсправленныеСпецификации");
        Настройки = КомпоновщикНастроек.ПолучитьНастройки();
        ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
        
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки);
        
        //Создадим и инициализируем процессор компоновки
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
        ДокументРезультат.Очистить();
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ДокументРезультат);    
        ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    КонецЕсли;
        
КонецПроцедуры
10 Evgueni
 
15.08.16
15:54
(7) В С++ есть понятие виртуальной функции, которую ты можешь переопределять. Как пример - ПриОткрытии() она вроде и есть в форме, но вызвать её нельзя. Можно только переопределить эту пустышку написав свой код.
11 Evgueni
 
15.08.16
15:58
Я кинул как пример кусок своего кода, где я отчет вывожу в ДеревоЗначений, а потом дерево передаю в другой макет в том же отчете и вывожу уже на экран. И всё чудным образом работает.
12 Lolipop
 
15.08.16
16:14
(11) То есть, данную функцию я никак не смогу вызвать из обработки?
Единственное - это в форме отчета идентичную функцию, но уже не обработчик, а именно моя функция?
13 Evgueni
 
15.08.16
16:23
(12) В отчете в самом модуле отчёта есть только две функции: ОбработкаПроверкиЗаполнения и ПриКомпоновкеРезульта. Автоматически добавляете процедуру ПриКомпоновкеРезультата. Пишете СтандартнаяОбработка = Ложь; Далее придётся вручную прерписать все вызовы всяких там компоновщиков. И вот уже из этой процедуры вызываете свою функцию и делаете что хотите, кроме итеракивного обмена
14 Nuobu
 
15.08.16
16:28
(3) Как нету? Я перепутал
ЭтотОбъект.СкомпоноватьРезультат(ЭлементыФормы.ПолеТабличногоДоркумента);
15 Lolipop
 
15.08.16
16:33
(13) Где добавляю? в модуле отчета?
Мне же нужно из моей функции вызвать процедуру, а не наоборот
16 Evgueni
 
15.08.16
16:45
А зачем её вызывать?
17 Evgueni
 
15.08.16
16:47
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    СхемаКомпоновкиДанных = Документы.ОтчетОКонтролеПродукции.ПолучитьМакет("Макет");
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    НастройкиКомпоновки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    ПарметрыДанных = НастройкиКомпоновки.ПараметрыДанных;
    ПарметрыДанных.УстановитьЗначениеПараметра("Ссылка", ПараметрКоманды[0].Ссылка);
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ТабДокумент = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
  // ТабДок.Показать();
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент);
    
КонецПроцедуры
18 Lolipop
 
15.08.16
17:08
(16) Чтобы из обработки сформировать отчет и сохранить его в файлик, чтобы потом отослать по почте.
19 var498
 
15.08.16
19:04
Примерно пол года назад была проблема с программой 1С Альфа авто . Был нужен знающий человек . Мне посоветовали сайт , работники которого занимаются только этим . Мою проблему решили очень быстро . Если заинтересовало можете посмотреть здесь http://www.pro1c-alfa.ru/
20 Mauser
 
15.08.16
19:08
(19) Да пристрелите уже этого армянина
AdBlock убивает бесплатный контент. 1Сергей