В статье ранее мы научились использовать расшифровки в табличном документе. Применение расшифровки было довольно примитивным: можно по двойному клику на ячейку табличного документа выводить или основную форму объекта, или какую-то текстовую информацию. Сейчас же, когда мы научились работать с табличным документом на управляемой форме, мы изучим более сложные возможности расшифровки: при двойном клике мышкой сможем выводить какие-либо табличные документы, открывать произвольные формы, одним словом, делать всё что захочет разработчик.
Статьи о простой расшифровке, и об использовании табличного документа на форме:
Использование простой расшифровки в табличном документе 1С
Табличный документ на управляемой форме 1С
Для демонстрации, я возьму пример, который делал ранее, где выводилась печатная форма документа поступления, и сделаю так, что при клике на любую ячейку строки таблицы с товарами, ценами и т.д, открывался некоторый отчет, в котором содержится информация аналогичная информации в строке. Пример больше учебный, призванный показать возможности расшифровки.
О том, как мы выводим печатную форму документа, можно ознакомиться в этой статье.
Вывод на печать табличного документа 1С, используя команды объектов
Если вы еще слабо разбираетесь в теме табличных документов, то рекомендую сначала ознакомиться со статьями выше (начиная с самой нижней), а также со всеми остальными моими статьями по использованию табличных документов в 1С 8.3.
Полный список статей по использованию табличных документов
И так, начнем. Первым делом, включим возможность использования расшифровки для всех ячеек строки таблицы макета табличного документа печатной формы документа поступления. Чтобы сделать это для всех ячеек сразу, а не для каждой по отдельности, выделим их всех мышкой и откроем палитру свойств. В открывшейся палитре свойств (это будут свойства для всех выделенных ячеек), заполним свойство ПараметрРасшифровки, указав в нем значение РасшифровкаСтроки.
На этом мы закончим работать с этим макетом. Следующим шагом, создадим новый макет, который будет подчинен нашему документу прихода, назовем его РасшифровкаСтроки, в этом макете будет всего одна область с параметрами, которые соответствуют параметрам из шапки и строки основного макета печатной формы документа.
С макетами закончили. Перейдем в модуль менеджера документа, в котором мы создаем и заполняем табличный документ для последующего вывода. И в цикле, в котором идет обход табличной части документа создадим структуру, где в качестве ключей будут названия параметров из нового макета расшифровки, а в качестве значений то, что должно будет выведено в этом табличном документе.
И эту структуру передадим в параметр РасшифровкаСтроки области строки таблицы.
СписокРасшифровки = Новый Структура; СписокРасшифровки.Вставить("Товар", Выборка.Номенклатура); СписокРасшифровки.Вставить("Количество",Выборка.Количество); СписокРасшифровки.Вставить("Цена", Выборка.Цена); СписокРасшифровки.Вставить("Сумма", Выборка.Сумма); СписокРасшифровки.Вставить("Склад", ВыборкаДокумент.Склад); ОбластьСтрокаТаблицы.Параметры.РасшифровкаСтроки = СписокРасшифровки;
Все на этом доработка кода создания табличного документа завершена. Полностью окончательный варианта кода создания и заполнения табличного документа будет следующим ( в модуле менеджера документа).
Функция СформироватьПечатныйДокумент(МассивДокументов) Экспорт ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ТолькоПросмотр = Истина; Макет = ПолучитьМакет("Макет"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПриходТовара.Проведен КАК Проведен, | ПриходТовара.Номер КАК Номер, | ПриходТовара.Дата КАК Дата, | ПриходТовара.Склад КАК СкладСсылка, | ПриходТовара.Склад.Наименование КАК Склад, | ПриходТовараСписокТоваров.НомерСтроки КАК НомерСтроки, | ПриходТовараСписокТоваров.Номенклатура.Наименование КАК Номенклатура, | ПриходТовараСписокТоваров.Количество КАК Количество, | ПриходТовараСписокТоваров.Цена КАК Цена, | ПриходТовараСписокТоваров.Сумма КАК Сумма, | ПриходТовара.Ссылка КАК Ссылка |ИЗ | Документ.ПриходТовара.СписокТоваров КАК ПриходТовараСписокТоваров | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходТовара КАК ПриходТовара | ПО ПриходТовараСписокТоваров.Ссылка = ПриходТовара.Ссылка |ГДЕ | ПриходТовара.Ссылка В(&Массив) |ИТОГИ ПО | Ссылка"; Запрос.УстановитьПараметр("Массив",МассивДокументов); ВыборкаДокумент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Ссылка"); Пока ВыборкаДокумент.Следующий() Цикл Если Не ВыборкаДокумент.Проведен Тогда Сообщить("Документ №" + ВыборкаДокумент.Номер + " от " + ВыборкаДокумент.Дата + " не проведен!"); Продолжить; КонецЕсли; Шапка = Макет.ПолучитьОбласть("Шапка"); Шапка.Параметры.НомерДок = ВыборкаДокумент.Номер; Шапка.Параметры.ДатаДок = Формат(ВыборкаДокумент.Дата,"ДФ=dd.MM.yyyy"); Шапка.Параметры.Склад = ВыборкаДокумент.Склад; Шапка.Параметры.СкладСсылка = ВыборкаДокумент.СкладСсылка; Шапка.Параметры.РасшифровкаДок = "Документ ""Поступление товаров"" № " + ВыборкаДокумент.Номер + " от " + Формат(ВыборкаДокумент.Дата,"ДЛФ=DD"); ТабДокумент.Вывести(Шапка); ШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ТабДокумент.Вывести(ШапкаТаблицы); Выборка = ВыборкаДокумент.Выбрать(ОбходРезультатаЗапроса.Прямой); ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы"); Пока Выборка.Следующий() Цикл СписокРасшифровки = Новый Структура; СписокРасшифровки.Вставить("Товар", Выборка.Номенклатура); СписокРасшифровки.Вставить("Количество",Выборка.Количество); СписокРасшифровки.Вставить("Цена", Выборка.Цена); СписокРасшифровки.Вставить("Сумма", Выборка.Сумма); СписокРасшифровки.Вставить("Склад", ВыборкаДокумент.Склад); ОбластьСтрокаТаблицы.Параметры.РасшифровкаСтроки = СписокРасшифровки; ОбластьСтрокаТаблицы.Параметры.Заполнить(Выборка); ТабДокумент.Вывести(ОбластьСтрокаТаблицы); КонецЦикла; ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ТабДокумент.Вывести(ОбластьПодвал); ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЦикла; ЕстьПечать = ТабДокумент.Области.Количество() > 0; Возврат ?(ЕстьПечать, ТабДокумент, Неопределено); КонецФункции
Мы сделали подготовительную работу для получения и отправки данных расшифровки. Следующие шаги будут посвящены тому, чтобы эта расшифровка выводилась так, как нам нужно: а именно при двойном клике на строку таблицы печатной формы открывался или табличный документ с нужными данными, или форма, в которой этот табличный документ выводится.
Для этого, первым делом, зайдем на общую форму вывода печатной формы, которую мы создали в статье ранее, где рассказывали о выводе печатных форм на управляемых формах, именно в этой форме мы и будем отрабатывать расшифровку. В этой форме перейдем в палитру свойств поля табличного документам, и создадим событие ОбработкаРасшифровки (клиентский обработчик этого события).
В этом обработчике мы сначала проверим, чтобы у нас в расшифровке была структура (иначе, мы будем перехватывать другие расшифровки, что нам не нужно, а структура передается в параметр РасшифрокаСтроки), и также отключим стандартную обработку.
&НаКлиенте Процедура ТабличныйДокументФормыОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) Если Не ТипЗнч(Расшифровка) = Тип("Структура") Тогда Возврат КонецЕсли; СтандартнаяОбработка = Ложь; КонецПроцедуры
Следующим шагом получим макет расшифровки и заполним табличный документ по этому макету, я сделаю это в отдельной функции, которая будет выполняться в серверном контексте, и которая будет возвращать заполненный табличный документ. Делать мы это будем в модуле всё той же общей формы.
&НаСервере Функция ПолучитьМакетРасшифровкиЗаполнитьТабличныйДокумент(ПараметрыРасшифровки) ТабДокумент = Новый ТабличныйДокумент; Макет = Документы.ПриходТовара.ПолучитьМакет("РасшифровкаСтроки"); ОбластьМакета = Макет.ПолучитьОбласть("Область"); ОбластьМакета.Параметры.Заполнить(ПараметрыРасшифровки); ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; КонецФункции
Потом, мы получим в клиентском обработчике события ОбработкаРасшифровки табличный документ, который вернет созданная только что функция , и покажем этот документ.
&НаКлиенте Процедура ТабличныйДокументФормыОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) Если Не ТипЗнч(Расшифровка) = Тип("Структура") Тогда Возврат КонецЕсли; СтандартнаяОбработка = Ложь; ТабДок = ПолучитьМакетРасшифровкиЗаполнитьТабличныйДокумент(Расшифровка); ТабДок.Показать(); КонецПроцедуры
Если теперь мы попробуем применить расшифровку к какой-нибудь строке таблицы, то откроется форма с табличным документом.
Но, поскольку, мы уже умеем работать с общей формой, в которой можно отображать табличные документы, то будем использовать эту общую форму. Код обработчика в этом случае получится следующий.
&НаКлиенте Процедура ТабличныйДокументФормыОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) Если Не ТипЗнч(Расшифровка) = Тип("Структура") Тогда Возврат КонецЕсли; СтандартнаяОбработка = Ложь; ТабДок = ПолучитьМакетРасшифровкиЗаполнитьТабличныйДокумент(Расшифровка); ПараметрФормы = Новый Структура("ТабДок",ТабДок); ОткрытьФорму("ОбщаяФорма.ФормаВыводаПечатнойФормы", ПараметрФормы,,,,,, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); КонецПроцедуры
Посмотрим, как в этом случае будет отрабатывать расшифровка строки.
Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009