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

Публикация № 1000400

Программирование - Практика программирования

Справочник Сотрудники ЗУП печатная форма передача параметры

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

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

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

 

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

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


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

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

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

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

 

5

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. МимохожийОднако 121 12.02.19 08:48 Сейчас в теме
Покажи код подключения обработки. Какая версия БСП используется?
2. srub 30 12.02.19 09:19 Сейчас в теме
Код подключения
Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = Новый Структура;
	
	МассивНазначений = Новый Массив;
	МассивНазначений.Добавить("Справочник.Сотрудники");
	
	ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма");
	ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
	ПараметрыРегистрации.Вставить("Наименование", "Справка о доходах с периодом");
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
	ПараметрыРегистрации.Вставить("Версия", "1.0");
	ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма");
	ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);
	
	//Команды
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = "Справка о доходах с периодом"; 
	НоваяКоманда.Идентификатор = "Справка о доходах с периодом";
	НоваяКоманда.Использование = "ВызовКлиентскогоМетода";
	НоваяКоманда.ПоказыватьОповещение = Ложь;
	НоваяКоманда.Модификатор = "";

	
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	
	Возврат ПараметрыРегистрации
		
КонецФункции


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


Делал обработку на версии Зарплата и управление персоналом, редакция 3.1 (3.1.1.95) какая версия БСП не знаю
Оставьте свое сообщение