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

11.02.19

Задачи пользователя - Адаптация типовых решений

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

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

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

 

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

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


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

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

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

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

 

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

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5697    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3947    12    0    

30

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5125    dimanich70    15    

21

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    5662    dimanich70    9    

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

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


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


Делал обработку на версии Зарплата и управление персоналом, редакция 3.1 (3.1.1.95) какая версия БСП не знаю
mangy; user1744813; +2 Ответить
3. пользователь 27.03.20 12:44
Сообщение было скрыто модератором.
...
4. ninch 51 08.04.20 20:10 Сейчас в теме
Спасибо. Реально помогло:)
5. mikmike 9 01.06.22 09:18 Сейчас в теме
А если бы разместили пример ВПФ, то можно было бы подзаработать :)
С готовым примером обычно проще разбираться.
Оставьте свое сообщение