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

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

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