Расшифровка табличного документа на управляемой форме 1С 8.3

В статье ранее мы научились использовать расшифровки в табличном документе. Применение расшифровки было довольно примитивным:  можно по двойному клику на ячейку табличного документа выводить или основную форму объекта, или какую-то текстовую информацию. Сейчас же, когда мы научились работать с табличным документом на управляемой форме, мы изучим более сложные возможности расшифровки: при двойном клике мышкой сможем выводить какие-либо табличные документы, открывать произвольные формы, одним словом, делать всё что захочет разработчик.

Статьи о простой расшифровке, и об использовании табличного документа на форме:

Использование простой расшифровки в табличном документе 1С

Табличный документ на управляемой форме 1С

Для демонстрации, я возьму пример, который делал ранее, где выводилась печатная форма документа поступления, и сделаю так, что при клике на любую ячейку строки таблицы с товарами, ценами и т.д, открывался некоторый отчет, в котором содержится информация аналогичная информации в строке. Пример больше учебный, призванный показать возможности расшифровки.

О том, как мы выводим печатную форму документа, можно ознакомиться в этой статье.

Вывод на печать табличного документа 1С, используя команды объектов

Если вы еще слабо разбираетесь в теме табличных документов, то рекомендую сначала ознакомиться со статьями выше (начиная с самой нижней), а также со всеми остальными  моими статьями по использованию табличных документов в 1С 8.3.

Полный список статей по использованию табличных документов

И так, начнем. Первым делом, включим возможность использования расшифровки для всех ячеек строки таблицы макета табличного документа печатной формы документа поступления. Чтобы сделать это для всех ячеек сразу, а не для каждой по отдельности, выделим их всех мышкой и откроем палитру свойств. В открывшейся палитре свойств (это будут свойства для всех выделенных ячеек), заполним свойство  ПараметрРасшифровки, указав в нем значение РасшифровкаСтроки.

 Заполнение параметра расшифровке в палитре свойств

На этом мы закончим работать с этим макетом. Следующим шагом, создадим новый макет, который будет подчинен нашему документу прихода, назовем его РасшифровкаСтроки, в этом макете будет всего одна область с параметрами, которые соответствуют параметрам из шапки и строки основного макета печатной формы документа.

Макет для расшифровки табличного документа

С макетами закончили. Перейдем в модуль менеджера документа, в котором мы создаем и заполняем табличный документ для последующего вывода. И в цикле, в котором идет обход табличной части документа создадим структуру, где в качестве ключей будут названия параметров из нового макета расшифровки, а в качестве значений то, что должно будет выведено в этом табличном документе.

И эту структуру передадим в параметр РасшифровкаСтроки области строки таблицы.

СписокРасшифровки = Новый Структура;
СписокРасшифровки.Вставить("Товар",     Выборка.Номенклатура);
СписокРасшифровки.Вставить("Количество",Выборка.Количество);
СписокРасшифровки.Вставить("Цена",      Выборка.Цена);
СписокРасшифровки.Вставить("Сумма",     Выборка.Сумма);
СписокРасшифровки.Вставить("Склад",     ВыборкаДокумент.Склад);
ОбластьСтрокаТаблицы.Параметры.РасшифровкаСтроки = СписокРасшифровки;

Все на этом доработка кода создания табличного документа завершена. Полностью окончательный варианта кода создания и заполнения табличного документа будет следующим ( в модуле менеджера документа).

Функция СформироватьПечатныйДокумент(МассивДокументов) Экспорт
 
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ТолькоПросмотр = Истина;
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ПриходТовара.Проведен КАК Проведен,
                   |    ПриходТовара.Номер КАК Номер,
                   |    ПриходТовара.Дата КАК Дата,
                   |    ПриходТовара.Склад КАК СкладСсылка,
                   |    ПриходТовара.Склад.Наименование КАК Склад,
                   |    ПриходТовараСписокТоваров.НомерСтроки КАК НомерСтроки,
                   |    ПриходТовараСписокТоваров.Номенклатура.Наименование КАК Номенклатура,
                   |    ПриходТовараСписокТоваров.Количество КАК Количество,
                   |    ПриходТовараСписокТоваров.Цена КАК Цена,
                   |    ПриходТовараСписокТоваров.Сумма КАК Сумма,
                   |    ПриходТовара.Ссылка КАК Ссылка
                   |ИЗ
                   |    Документ.ПриходТовара.СписокТоваров КАК ПриходТовараСписокТоваров
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходТовара КАК ПриходТовара
                   |        ПО ПриходТовараСписокТоваров.Ссылка = ПриходТовара.Ссылка
                   |ГДЕ
                   |    ПриходТовара.Ссылка В(&Массив)
                   |ИТОГИ ПО
                   |    Ссылка";
    Запрос.УстановитьПараметр("Массив",МассивДокументов);

    ВыборкаДокумент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Ссылка");
    Пока ВыборкаДокумент.Следующий() Цикл
        Если Не ВыборкаДокумент.Проведен Тогда
            Сообщить("Документ №" + ВыборкаДокумент.Номер + " от " + ВыборкаДокумент.Дата + " не проведен!");
            Продолжить;
        КонецЕсли;
        Шапка = Макет.ПолучитьОбласть("Шапка");
        Шапка.Параметры.НомерДок = ВыборкаДокумент.Номер;
        Шапка.Параметры.ДатаДок  = Формат(ВыборкаДокумент.Дата,"ДФ=dd.MM.yyyy");
        Шапка.Параметры.Склад = ВыборкаДокумент.Склад;
        Шапка.Параметры.СкладСсылка = ВыборкаДокумент.СкладСсылка;
        Шапка.Параметры.РасшифровкаДок = "Документ ""Поступление товаров"" № " + ВыборкаДокумент.Номер + " от " + Формат(ВыборкаДокумент.Дата,"ДЛФ=DD");
        ТабДокумент.Вывести(Шапка);

        ШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
        ТабДокумент.Вывести(ШапкаТаблицы);
        Выборка = ВыборкаДокумент.Выбрать(ОбходРезультатаЗапроса.Прямой);
        ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы");
        Пока Выборка.Следующий() Цикл

            СписокРасшифровки = Новый Структура;
            СписокРасшифровки.Вставить("Товар",     Выборка.Номенклатура);
            СписокРасшифровки.Вставить("Количество",Выборка.Количество);
            СписокРасшифровки.Вставить("Цена",      Выборка.Цена);
            СписокРасшифровки.Вставить("Сумма",     Выборка.Сумма);
            СписокРасшифровки.Вставить("Склад",     ВыборкаДокумент.Склад);
            ОбластьСтрокаТаблицы.Параметры.РасшифровкаСтроки = СписокРасшифровки;

            ОбластьСтрокаТаблицы.Параметры.Заполнить(Выборка);
            ТабДокумент.Вывести(ОбластьСтрокаТаблицы);
        КонецЦикла;
        ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
        ТабДокумент.Вывести(ОбластьПодвал);
        ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЦикла;

    ЕстьПечать = ТабДокумент.Области.Количество() > 0;
    Возврат ?(ЕстьПечать, ТабДокумент, Неопределено);

КонецФункции

Мы сделали подготовительную работу для получения и отправки данных расшифровки. Следующие шаги будут посвящены тому, чтобы эта расшифровка выводилась так, как нам нужно: а именно при двойном клике на строку таблицы печатной формы открывался или табличный документ с нужными данными, или форма, в которой этот табличный документ выводится.

Для этого, первым делом, зайдем на общую форму вывода печатной формы, которую мы создали в статье ранее, где рассказывали о выводе печатных форм на управляемых формах, именно в этой форме мы и будем отрабатывать расшифровку. В этой форме перейдем в палитру свойств поля табличного документам, и создадим событие ОбработкаРасшифровки (клиентский обработчик этого события).

Создание события обработкарасшифровки

В этом обработчике мы сначала проверим, чтобы у нас в расшифровке была структура (иначе, мы будем перехватывать другие расшифровки, что нам не нужно, а структура передается в параметр РасшифрокаСтроки), и также отключим стандартную обработку.

&НаКлиенте
Процедура ТабличныйДокументФормыОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)

    Если Не ТипЗнч(Расшифровка) = Тип("Структура") Тогда
        Возврат
    КонецЕсли;
    СтандартнаяОбработка = Ложь;

КонецПроцедуры


Следующим шагом получим макет расшифровки и заполним табличный документ по этому макету, я сделаю это в отдельной функции, которая будет выполняться в серверном контексте, и которая будет возвращать заполненный табличный документ. Делать мы это будем в модуле всё той же общей формы.

&НаСервере
Функция ПолучитьМакетРасшифровкиЗаполнитьТабличныйДокумент(ПараметрыРасшифровки)

    ТабДокумент = Новый ТабличныйДокумент;
    Макет = Документы.ПриходТовара.ПолучитьМакет("РасшифровкаСтроки");
    ОбластьМакета = Макет.ПолучитьОбласть("Область");
    ОбластьМакета.Параметры.Заполнить(ПараметрыРасшифровки);

    ТабДокумент.Вывести(ОбластьМакета);

    Возврат ТабДокумент;

КонецФункции


Потом, мы получим в клиентском обработчике события ОбработкаРасшифровки  табличный документ, который вернет созданная только что функция , и покажем этот документ.

&НаКлиенте
Процедура ТабличныйДокументФормыОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)

    Если Не ТипЗнч(Расшифровка) = Тип("Структура") Тогда
        Возврат
    КонецЕсли;
    СтандартнаяОбработка = Ложь;
    ТабДок = ПолучитьМакетРасшифровкиЗаполнитьТабличныйДокумент(Расшифровка);
    ТабДок.Показать();

КонецПроцедуры



Если теперь мы попробуем применить расшифровку к какой-нибудь строке таблицы, то откроется форма с табличным документом.

Вывод табличного документа при помощи расшифровки

Вывод табличного документа при помощи расшифровки

Но, поскольку, мы уже умеем работать с общей формой, в которой можно отображать табличные документы, то будем использовать эту общую форму. Код обработчика в этом случае получится следующий.

&НаКлиенте
Процедура ТабличныйДокументФормыОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
    Если Не ТипЗнч(Расшифровка) = Тип("Структура") Тогда
        Возврат
    КонецЕсли;
    СтандартнаяОбработка = Ложь;
    ТабДок = ПолучитьМакетРасшифровкиЗаполнитьТабличныйДокумент(Расшифровка);
    ПараметрФормы = Новый Структура("ТабДок",ТабДок);
    ОткрытьФорму("ОбщаяФорма.ФормаВыводаПечатнойФормы",
                  ПараметрФормы,,,,,,
                  РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры



Посмотрим, как в этом случае будет отрабатывать расшифровка строки.

Вывод формы с табличным документом при помощи расшифровки

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *