Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как получить макет внешней обработки из самой обработки ?

Как получить макет внешней обработки из самой обработки ?
Я
   AnisaL
 
24.07.18 - 23:10
Доброго времени суток, подскажите, как получить макет внешней обработки из самой внешней обработки ?
 
 
   AnisaL
 
1 - 24.07.18 - 23:12
(0)     Макет = ВнешниеОбработки.ОтчетПоОстаткам.ПолучитьМакет("Макет1");
 вот так ошибку выдает
   RomanYS
 
2 - 24.07.18 - 23:14
в модуле обработки
Макет = ПолучитьМакет("Макет1");
   AnisaL
 
3 - 24.07.18 - 23:17
(2) спасибо, сейчас попробую
   AnisaL
 
4 - 24.07.18 - 23:20
(2) а как быть, если у меня кнопка находится на форме, и мне нужно из формы макет получить?
   AnisaL
 
5 - 24.07.18 - 23:25
мне нужно сформировать отчет, используя макет, по нажатию кнопки на форме обработки
   AnisaL
 
6 - 24.07.18 - 23:30
   RomanYS
 
7 - 24.07.18 - 23:30
(4) Если ОФ, то также. Если УФ - тогда РеквизитФормыВЗначение("Отчет").ПолучитьМакет("Макет1")
   RomanYS
 
8 - 24.07.18 - 23:32
+(7) но возможно лучше весь функционал перенести в модуль отчета. "Идеологически" правильнее
   AnisaL
 
9 - 24.07.18 - 23:32
&НаСервере
Процедура СформироватьНаСервере()
    
    
    Макет = ВнешниеОбработки.ОтчетПоОстаткам.ПолучитьМакет("Макет");
        
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    НОВЫЙ.Характеристика КАК Характеристика,
        |    СУММА(НОВЫЙ.КоличествоКонечныйОстаток) КАК Количество,
        |    НОВЫЙ.Цена КАК Цена
        |ИЗ
        |    (ВЫБРАТЬ
        |        ТоварыНаСкладахОстаткиИОбороты.Характеристика.Наименование КАК Характеристика,
        |        ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование КАК Номенклатура,
        |        СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
        |        ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
        |    ИЗ
        |        РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
        |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
        |            ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
        |                И ТоварыНаСкладахОстаткиИОбороты.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
        |    ГДЕ
        |        ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Родитель = &Номенклатура
        |        И ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад
        |        И ТоварыНаСкладахОстаткиИОбороты.Склад.Магазин = &Магазин
        |        И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
        |    
        |    СГРУППИРОВАТЬ ПО
        |        ТоварыНаСкладахОстаткиИОбороты.Характеристика.Наименование,
        |        ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование,
        |        ЦеныНоменклатурыСрезПоследних.Цена) КАК НОВЫЙ
        |
        |СГРУППИРОВАТЬ ПО
        |    НОВЫЙ.Характеристика,
        |    НОВЫЙ.Цена
        |ИТОГИ
        |    СУММА(Количество)
        |ПО
        |    Характеристика
        |АВТОУПОРЯДОЧИВАНИЕ";
    
    Склад = Справочники.Склады.НайтиПоНаименованию("Склад Пушкина");
    Магазин = Справочники.Магазины.НайтиПоНаименованию("Магазин 1 - Пушкина");
    Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Готовые очки");
    ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Розничная");
    
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Магазин", Магазин);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьХарактеристика = Макет.ПолучитьОбласть("Характеристика");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаХарактеристика = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаХарактеристика.Следующий() Цикл
        ОбластьХарактеристика.Параметры.Заполнить(ВыборкаХарактеристика);
        ТабДок.Вывести(ОбластьХарактеристика, ВыборкаХарактеристика.Уровень());
    
        ВыборкаДетальныеЗаписи = ВыборкаХарактеристика.Выбрать();
    
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
            ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
        КонецЦикла;
    КонецЦикла;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    
    
    
КонецПроцедуры
   AnisaL
 
10 - 24.07.18 - 23:36
(8) Ошибку выдал!
{ВнешняяОбработка.ОтчетПоОстаткам.Форма.Форма.Форма(5)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
    Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("Макет");
по причине:
Недопустимое значение параметра (параметр номер '1')
 
 Рекламное место пустует
   RomanYS
 
11 - 24.07.18 - 23:37
(10) Подставь свой правильный параметр :)
   AnisaL
 
12 - 24.07.18 - 23:39
(11) поставила, вот так правильно: Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
   AnisaL
 
13 - 24.07.18 - 23:40
(11) Спасибо большое )
   AnisaL
 
14 - 24.07.18 - 23:44
(8) а как тогда весь функционал перенести в модуль обработки? если кнопка находится на форме, или я что-то не понимаю
   metanal
 
15 - 25.07.18 - 00:04
(14) Из процедуры сделать функцию, которая возвращает табличный документ. Эту функцию в модуль объекта.
С формы по нажатию кнопки вызывать процедуру. Затем ТабДок.Показать().
   RomanYS
 
16 - 25.07.18 - 00:25
(14) в модуле твоя процедура, точнее функция (см(15)) с экспортом. В форме (на сервере) 
ТабДок = РеквизитФормыВЗначение("Объект").ТвояЭкспортнаяФункуияВМодуле();
   Сияющий в темноте
 
17 - 25.07.18 - 09:30
Модуль обработки при каждом обращении к нему с клиента компилляется заново,так что туда что то массивное пихать ни к чему.
   Фрэнки
 
18 - 25.07.18 - 09:37
(17) это в том случае, если разработанный отчет останется по прежнему Внешним. Если он в самом деле массивный, то в Расширение его запихнуть и компилиться будет только один раз при старте сеанса
   ildary
 
19 - 25.07.18 - 09:41
(18) а ваше замечание "компилляется заново" относится к отчетам, которые помещены в "Дополнительные отчеты и обработки"?
   Фрэнки
 
20 - 25.07.18 - 09:51
(19) ну это не совсем мое замечание, но вообще, да. Размещенные в "Дополнительные отчеты и обработки" перед запуском обработки в целом однозначно заново компилятся...

А вот то, что на каждое обращение к модулю обработки - этого лично я утверждать не буду.

По идее, если посмотреть на внешние печатные формы, то в обработку печати (в экспортную процедуру модуля обработки) забрасывается сразу весь массив объектов печати. Таким образом, не должно быть повторной компилации "внутри" обработки массива, но при старте снаружи - будет.
   RomanYS
 
21 - 25.07.18 - 10:00
(17) Что значит заново? Мы его один раз вызываем. Интересно сравнить время компиляции с временем выполнения запроса, например на коде (9).
Время компиляции будет сидеть в выполнении РеквизитФормыВЗначение("Объект")?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует