Как в 1С:ЗУП 3.1 добавить реквизиты организации в печатную форму?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При разработке или доработке печатных форм в 1С:Зарплата и Управление Персоналом 3.1 часто возникает задача вывести в шапку или подвал документа полные реквизиты компании: наименование, юридический адрес, ИНН, КПП, ОГРН и банковские реквизиты. Разберем по шагам, как правильно получить эти данные программно и избежать распространенных ошибок.

Получение реквизитов организации через стандартные функции

Для получения сведений об организации в конфигурации ЗУП 3.1 существует специальная функция, которая учитывает историю изменений и предоставляет актуальные данные на определенную дату. Прямое обращение к справочнику «Организации» не рекомендуется, так как оно не гарантирует получение корректных исторических сведений.

Наиболее правильный способ — использовать функцию ПолучитьСведенияОбОрганизации из общего модуля РегламентированнаяОтчетностьВызовСервера. Давайте рассмотрим на примере, как ее вызвать и обработать результат.

  1. Подготовка к вызову функции. Нам понадобится ссылка на элемент справочника «Организации» и дата, на которую мы хотим получить реквизиты (обычно это дата документа). Также нужно составить строку с перечислением необходимых реквизитов.
  2. Вызов функции и получение данных. Функция возвращает структуру, в которой ключами являются имена запрошенных полей, а значениями — их данные.

Посмотрим на пример кода:


// Предполагается, что переменная "СсылкаНаОрганизацию" уже получена
// и содержит ссылку на элемент справочника "Организации".
// Например, из реквизита документа: ДокументОбъект.Организация.
// Также предполагается, что есть переменная ТекущаяДата, например, дата документа.

СписокРеквизитов = "НаимЮЛПол, ИННЮЛ, КППЮЛ, ОГРН, ЮрАдресОрганизации";

// Вызываем функцию для получения сведений
СведенияОргЮЛ = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(
    СсылкаНаОрганизацию,
    ТекущаяДата, 
    СписокРеквизитов);

// Теперь можно присваивать полученные значения параметрам макета печатной формы
ОбластьМакета.Параметры.ПолноеНаименование = СведенияОргЮЛ.НаимЮЛПол;
ОбластьМакета.Параметры.АдресОрганизации = СведенияОргЮЛ.ЮрАдресОрганизации;
ОбластьМакета.Параметры.ИННКПП = "ИНН " + СведенияОргЮЛ.ИННЮЛ + " / КПП " + СведенияОргЮЛ.КППЮЛ;
ОбластьМакета.Параметры.ОГРН = "ОГРН " + СведенияОргЮЛ.ОГРН;

Таким образом, мы получаем все необходимые данные в одной структуре и можем легко использовать их для заполнения макета.

Разбор типичных ошибок при получении данных

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

Ошибка 1: "Значение не является значением объектного типа (Ссылка)"

Это одна из самых частых ошибок в 1С. Она возникает, когда код пытается обратиться к свойству или методу переменной, которая не является объектом (например, имеет значение Неопределено или NULL).

Причина: В функцию ПолучитьСведенияОбОрганизации в качестве первого параметра передается не ссылка на организацию, а пустое значение. Например, в коде автора ДанныеДоговоров[0].Организация оказалось не заполнено, что и привело к ошибке внутри стандартной процедуры.

Решение: Всегда проверяйте переменные на заполненность перед тем, как использовать их в функциях или обращаться к их свойствам. Для этого используйте функцию ЗначениеЗаполнено().


// Предположим, что СсылкаНаОрганизацию мы получаем из какой-то структуры
СсылкаНаОрганизацию = ДанныеДоговоров[0].Организация;

// Правильный подход с проверкой
Если ЗначениеЗаполнено(СсылкаНаОрганизацию) Тогда
    СведенияОргЮЛ = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(
        СсылкаНаОрганизацию,
        ТекущаяДата,
        "НаимЮЛПол, ИННЮЛ, КППЮЛ, ОГРН, ЮрАдресОрганизации");

    // ... дальнейшая работа с реквизитами ...
    ОбластьМакета.Параметры.АдресОрганизации = СведенияОргЮЛ.ЮрАдресОрганизации;
Иначе
    // Если организация не найдена, нужно предусмотреть альтернативный сценарий.
    // Например, вывести сообщение пользователю или пустую строку в макет.
    Сообщить("Не удалось определить организацию для печати документа!");
    ОбластьМакета.Параметры.АдресОрганизации = "Не удалось определить адрес организации";
КонецЕсли;

Ошибка 2: "Индекс находится за границами массива"

Эта ошибка возникает, когда код пытается получить доступ к элементу массива по индексу (например, МойМассив[0]), но массив при этом пуст.

Причина: Функция, которая должна была вернуть данные в виде массива (например, КадровыйУчет.КадровыеДанныеФизическихЛиц), не нашла никаких сведений по заданным параметрам и вернула пустой массив. Попытка обратиться к первому элементу [0] пустого массива и вызывает ошибку.

Решение: Перед обращением к элементам массива всегда проверяйте его размер с помощью метода Количество().


// ДанныеФизическогоЛицаР - это массив, который вернула одна из функций общего модуля КадровыйУчет
// ... здесь был вызов функции, которая заполнила массив ДанныеФизическогоЛицаР ...

// Правильный подход с проверкой количества элементов
Если ДанныеФизическогоЛицаР.Количество() > 0 Тогда
    // Обращаемся к первому элементу, только если уверены, что он существует
    ОбластьМакета.Параметры.Руководитель = ДанныеФизическогоЛицаР[0].ФамилияИО;
Иначе
    // Обрабатываем ситуацию, когда данные не были найдены
    ОбластьМакета.Параметры.Руководитель = "___________________";
КонецЕсли;

Этот принцип "безопасного программирования" позволяет создавать надежный код, который не будет аварийно завершаться из-за отсутствия каких-либо данных в базе.

Бонус: Как получить кадровые данные сотрудника?

В дополнение к реквизитам организации, в печатных формах часто требуются кадровые данные, например, дата увольнения сотрудника. Для этого в ЗУП 3.1 предназначен общий модуль КадровыйУчет и его функции.

Чтобы получить дату увольнения, используем функцию КадровыеДанныеСотрудников.


// Предполагается, что есть переменная СотрудникСсылка
// с типом СправочникСсылка.Сотрудники

// Запрашиваем только одно поле - "ДатаУвольнения"
ДанныеПоСотруднику = КадровыйУчет.КадровыеДанныеСотрудников(
    Истина,
    СотрудникСсылка,
    "ДатаУвольнения"
);

ДатаУвольненияСотрудника = Неопределено;

// Применяем безопасный подход: проверяем, что массив не пустой
Если ДанныеПоСотруднику.Количество() > 0 Тогда
    // Если данные есть, получаем их из первого элемента массива
    ДатаУвольненияСотрудника = ДанныеПоСотруднику[0].ДатаУвольнения;
КонецЕсли;

// Теперь можно выводить дату в макет, предварительно обработав пустые значения
Если ЗначениеЗаполнено(ДатаУвольненияСотрудника) Тогда
    ОбластьМакета.Параметры.ДатаУвольнения = "Уволен " + Формат(ДатаУвольненияСотрудника, "ДФ=dd.MM.yyyy");
Иначе
    ОбластьМакета.Параметры.ДатаУвольнения = ""; // Сотрудник не уволен
КонецЕсли;

Важный момент: функции модуля КадровыйУчет почти всегда возвращают массив, даже если запрашиваются данные по одному сотруднику. Поэтому проверка на количество элементов обязательна.

Используя эти подходы и стандартные функции ЗУП 3.1, вы сможете эффективно и безопасно добавлять любые необходимые данные в ваши печатные формы.

← На главную