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

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

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

Для  этой статьи я использую макет табличного документа, сделанный ранее.

>>Создание и оформление макета табличного документа<<<

Применение расшифровки с ссылочным типом

Реализуем следующую расшифровку: при двойном клике на ячейку со складом откроется основная форма элемента склада, который указан в ячейке.

Первым делом, доработаем наш макет следующим образом: в область шапки добавим новое поле, в котором будем выводить название склада.

У этой ячейки в свойстве Заполнение укажем значение Параметр, и также заполним свойства Параметр и ПараметрРасшифровки, где укажем значения Склад и СкладСсылка.

Заполнение параметров табличного документа

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

Теперь доработаем вывод нашей печатной формы. Подробная информация, как я это сделал есть в этой статье:

>>>Выводим печатную форму, используя подчиненную команду<<<

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

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ТолькоПросмотр = Истина;

 

Следующим шагом доработаем запрос: будем выводить  наименование склада (его запишем в простой параметр), и ссылку на склад для расшифровки.

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

Запрос готов, теперь осталось  заполнить параметры и вывести их в табличную область.

Пока ВыборкаДокумент.Следующий() Цикл
    Шапка = Макет.ПолучитьОбласть("Шапка");
    Шапка.Параметры.НомерДок = ВыборкаДокумент.Номер;
    Шапка.Параметры.ДатаДок  = Формат(ВыборкаДокумент.Дата,"ДФ=dd.MM.yyyy");
    Шапка.Параметры.Склад = ВыборкаДокумент.Склад;
    Шапка.Параметры.СкладСсылка = ВыборкаДокумент.СкладСсылка;
    ТабДокумент.Вывести(Шапка);
    //остальное тело цикла....
КонецЦикла;

На этом наша доработка вывода печатной формы закончилась.

Теперь, если мы выведем нашу печатную форму и кликнем на склад в шапке документа, то откроется форма склада.

Работа расшифровки на печатной форме

Применение расшифровки со строкой

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

Для этого перейдем в палитру свойств нужной ячейки и заполним свойство ПараметрРасшифровки.

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

Шапка.Параметры.РасшифровкаДок = "Документ ""Поступление товаров"" № " + ВыборкаДокумент.Номер + " от " + Формат(ВыборкаДокумент.Дата,"ДЛФ=DD");

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

Простой вариант работы расшифровки на печатной форме

В общем виде процедура заполнения табличного документа с применением обеих расшифровок будет иметь следующий вид:

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

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

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

Более подробно и основательно разработка в 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

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

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

15 − один =