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

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

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

В наличии

Особенности создания ВПФ для ЗУП 3.1 для справочника Сотрудники.

Категория:

Описание

Недавно столкнулся с небольшим затыком при написании Внешней печатной формы для справочника Сотрудники типовой конфигурации ЗУП 3.1. Заказчик попросил сделать справку о доходах с возможностью выбора периода. Вроде ничего сложного и подключаемые внешние печатные формы и подключаемые обработки по заполнению табличных частей  одни из наиболее часто встречающихся, но тут нашла коса на камень. Я довольно быстро сделал тестовую обработку которая выдавала нужные данные через Файл — Открыть и заполнению ссылки на нужный элемент справочника Сотрудники. Когда же попытался подключить обработку раз за разом получал ошибку. Ругалось на часть кода в модуле ОбъектЗаполнения = ВладелецФормы.Объект.Ссылка с помощью которой я передавал ссылку на элемент справочника для дальнейшей обработки. Раз за разом выдавало, что у ВладельцФормы нет Объекта. Я никак не мог понять, в чем дело, ведь всегда этот код работал как надо, а здесь нет. Промучившись несколько часов, я наконец понял, что у справочника Сотрудники, в отличие например от справочника Номенклатура или других, у Формы действительно нет Объекта. Причем это справедливо не только для ЗУП, но и для Бухгалтерии 3.0, специально проверил. Может, для многих это и не новость, а кому то поможет сэкономить время. В моем случае для передачи ссылки на элемент справочника Сотрудники сработал такой код:

Если НЕ ЗначениеЗаполнено(Объект.СсылкаНаОбъект) Тогда//Если не тест
		 //При входе из Справочника Сотрудники ссылка на элемент определяется не как обычно -  ВладелецФормы.Объект.Ссылка,
		 //а отдельно для ФормыЭлемента и ФормыСписка по следующей методе: 
		 Если ВладелецФормы.ИмяФормы = "Справочник.Сотрудники.Форма.ФормаЭлемента" Тогда
		   ОбъектЗаполнения = ВладелецФормы.СотрудникСсылка;
		 ИначеЕсли ВладелецФормы.ИмяФормы = "Справочник.Сотрудники.Форма.ФормаСписка" Тогда  
		   ОбъектЗаполнения = ВладелецФормы.ТекущийЭлемент.ТекущаяСтрока;
	   КонецЕсли;
   	Иначе 
	   ОбъектЗаполнения = Объект.СсылкаНаОбъект;//Тестовый вход для отладки
	КонецЕсли;

 

Полный код в Форме обработки

//Переход для тестовой отладки
&НаКлиенте
Процедура ВыполнитьЗаполнение(Команда)
	Печать(, Объект.СсылкаНаОбъект)
КонецПроцедуры


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

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

код в Форме параметров

&НаКлиенте
Процедура ЗаполнитьДаты(Команда)
	Парам = Новый Структура("ДатаНачала, ДатаОкончания");
    Парам.ДатаНачала = ЭтаФорма.ДатаНачала;
    Парам.ДатаОкончания = ЭтаФорма.ДатаОкончания;
    ЭтаФорма.Закрыть(Парам);
КонецПроцедуры

 

has been added to your cart:
Оформление заказа