|   |   | 
| 
 | Как получить макет внешней обработки из самой обработки ? | ☑ | ||
|---|---|---|---|---|
| 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).
 Время компиляции будет сидеть в выполнении РеквизитФормыВЗначение("Объект")? | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |