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


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

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

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

 

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

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


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

ЗакрытиеФормы = Новый ОписаниеОповещения
("ПослеЗакрытияФормы", ЭтаФорма); // Название процедуры, которая будет выполняться после закрытия формы "ФормаПараметров"

ФормаПараметров = ОткрытьФорму("ВнешняяОбработка.СправкаОДоходахСПериодом.Форма.ФормаПараметров", , ,,,,ЗакрытиеФормы);
КонецПроцедуры

//Экспортная процедура выполняется после заполнения ФормыПараметров
&НаКлиенте
Процедура ПослеЗакрытияФормы(Результат, Параметры) Экспорт

Если НЕ ЗначениеЗаполнено(Результат) Тогда
Сообщить("Не указан период!");
Возврат; // Пользователь не стал указывать параметры, останавливаем работу
КонецЕсли;

ТабДок = Новый ТабличныйДокумент;

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

// Результат содержит структуру, полученную из формы "ЗапросПараметров"
//ОбъектЗаполнения - Ссылка на элемент справочника
ТабДок = ПечатьНаСервере(ОбъектЗаполнения, ТабДок, Результат);

ТабДок.Показать("Печать документа");

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

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

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

 

2 Comments

  1. МимохожийОднако

    Покажи код подключения обработки. Какая версия БСП используется?

    Reply
  2. srub

    Код подключения

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

    Показать

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

    Reply

Leave a Comment

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