При разработке или доработке печатных форм в 1С:Зарплата и Управление Персоналом 3.1 часто возникает задача вывести в шапку или подвал документа полные реквизиты компании: наименование, юридический адрес, ИНН, КПП, ОГРН и банковские реквизиты. Разберем по шагам, как правильно получить эти данные программно и избежать распространенных ошибок.
Для получения сведений об организации в конфигурации ЗУП 3.1 существует специальная функция, которая учитывает историю изменений и предоставляет актуальные данные на определенную дату. Прямое обращение к справочнику «Организации» не рекомендуется, так как оно не гарантирует получение корректных исторических сведений.
Наиболее правильный способ — использовать функцию ПолучитьСведенияОбОрганизации из общего модуля РегламентированнаяОтчетностьВызовСервера. Давайте рассмотрим на примере, как ее вызвать и обработать результат.
Посмотрим на пример кода:
// Предполагается, что переменная "СсылкаНаОрганизацию" уже получена
// и содержит ссылку на элемент справочника "Организации".
// Например, из реквизита документа: ДокументОбъект.Организация.
// Также предполагается, что есть переменная ТекущаяДата, например, дата документа.
СписокРеквизитов = "НаимЮЛПол, ИННЮЛ, КППЮЛ, ОГРН, ЮрАдресОрганизации";
// Вызываем функцию для получения сведений
СведенияОргЮЛ = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(
СсылкаНаОрганизацию,
ТекущаяДата,
СписокРеквизитов);
// Теперь можно присваивать полученные значения параметрам макета печатной формы
ОбластьМакета.Параметры.ПолноеНаименование = СведенияОргЮЛ.НаимЮЛПол;
ОбластьМакета.Параметры.АдресОрганизации = СведенияОргЮЛ.ЮрАдресОрганизации;
ОбластьМакета.Параметры.ИННКПП = "ИНН " + СведенияОргЮЛ.ИННЮЛ + " / КПП " + СведенияОргЮЛ.КППЮЛ;
ОбластьМакета.Параметры.ОГРН = "ОГРН " + СведенияОргЮЛ.ОГРН;
Таким образом, мы получаем все необходимые данные в одной структуре и можем легко использовать их для заполнения макета.
В процессе разработки часто возникают ошибки. Проанализируем две самые распространенные из них, с которыми столкнулся автор темы, и выясним, как их избежать.
Это одна из самых частых ошибок в 1С. Она возникает, когда код пытается обратиться к свойству или методу переменной, которая не является объектом (например, имеет значение Неопределено или NULL).
Причина: В функцию ПолучитьСведенияОбОрганизации в качестве первого параметра передается не ссылка на организацию, а пустое значение. Например, в коде автора ДанныеДоговоров[0].Организация оказалось не заполнено, что и привело к ошибке внутри стандартной процедуры.
Решение: Всегда проверяйте переменные на заполненность перед тем, как использовать их в функциях или обращаться к их свойствам. Для этого используйте функцию ЗначениеЗаполнено().
// Предположим, что СсылкаНаОрганизацию мы получаем из какой-то структуры
СсылкаНаОрганизацию = ДанныеДоговоров[0].Организация;
// Правильный подход с проверкой
Если ЗначениеЗаполнено(СсылкаНаОрганизацию) Тогда
СведенияОргЮЛ = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(
СсылкаНаОрганизацию,
ТекущаяДата,
"НаимЮЛПол, ИННЮЛ, КППЮЛ, ОГРН, ЮрАдресОрганизации");
// ... дальнейшая работа с реквизитами ...
ОбластьМакета.Параметры.АдресОрганизации = СведенияОргЮЛ.ЮрАдресОрганизации;
Иначе
// Если организация не найдена, нужно предусмотреть альтернативный сценарий.
// Например, вывести сообщение пользователю или пустую строку в макет.
Сообщить("Не удалось определить организацию для печати документа!");
ОбластьМакета.Параметры.АдресОрганизации = "Не удалось определить адрес организации";
КонецЕсли;
Эта ошибка возникает, когда код пытается получить доступ к элементу массива по индексу (например, МойМассив[0]), но массив при этом пуст.
Причина: Функция, которая должна была вернуть данные в виде массива (например, КадровыйУчет.КадровыеДанныеФизическихЛиц), не нашла никаких сведений по заданным параметрам и вернула пустой массив. Попытка обратиться к первому элементу [0] пустого массива и вызывает ошибку.
Решение: Перед обращением к элементам массива всегда проверяйте его размер с помощью метода Количество().
// ДанныеФизическогоЛицаР - это массив, который вернула одна из функций общего модуля КадровыйУчет
// ... здесь был вызов функции, которая заполнила массив ДанныеФизическогоЛицаР ...
// Правильный подход с проверкой количества элементов
Если ДанныеФизическогоЛицаР.Количество() > 0 Тогда
// Обращаемся к первому элементу, только если уверены, что он существует
ОбластьМакета.Параметры.Руководитель = ДанныеФизическогоЛицаР[0].ФамилияИО;
Иначе
// Обрабатываем ситуацию, когда данные не были найдены
ОбластьМакета.Параметры.Руководитель = "___________________";
КонецЕсли;
Этот принцип "безопасного программирования" позволяет создавать надежный код, который не будет аварийно завершаться из-за отсутствия каких-либо данных в базе.
В дополнение к реквизитам организации, в печатных формах часто требуются кадровые данные, например, дата увольнения сотрудника. Для этого в ЗУП 3.1 предназначен общий модуль КадровыйУчет и его функции.
Чтобы получить дату увольнения, используем функцию КадровыеДанныеСотрудников.
// Предполагается, что есть переменная СотрудникСсылка
// с типом СправочникСсылка.Сотрудники
// Запрашиваем только одно поле - "ДатаУвольнения"
ДанныеПоСотруднику = КадровыйУчет.КадровыеДанныеСотрудников(
Истина,
СотрудникСсылка,
"ДатаУвольнения"
);
ДатаУвольненияСотрудника = Неопределено;
// Применяем безопасный подход: проверяем, что массив не пустой
Если ДанныеПоСотруднику.Количество() > 0 Тогда
// Если данные есть, получаем их из первого элемента массива
ДатаУвольненияСотрудника = ДанныеПоСотруднику[0].ДатаУвольнения;
КонецЕсли;
// Теперь можно выводить дату в макет, предварительно обработав пустые значения
Если ЗначениеЗаполнено(ДатаУвольненияСотрудника) Тогда
ОбластьМакета.Параметры.ДатаУвольнения = "Уволен " + Формат(ДатаУвольненияСотрудника, "ДФ=dd.MM.yyyy");
Иначе
ОбластьМакета.Параметры.ДатаУвольнения = ""; // Сотрудник не уволен
КонецЕсли;
Важный момент: функции модуля КадровыйУчет почти всегда возвращают массив, даже если запрашиваются данные по одному сотруднику. Поэтому проверка на количество элементов обязательна.
Используя эти подходы и стандартные функции ЗУП 3.1, вы сможете эффективно и безопасно добавлять любые необходимые данные в ваши печатные формы.