Разработка в конфигурации 1С:Зарплата и управление персоналом 3.1 часто преподносит сюрпризы программистам, привыкшим к архитектуре 1С:Бухгалтерии предприятия. Одним из таких моментов является получение юридических реквизитов организации: ИНН, КПП, ОГРН и адресов. В ЗУП 3.1 данные хранятся в иных регистрах, а привычные функции могут отсутствовать или работать иначе. Рассмотрим подробно, как правильно извлекать эти сведения, какие методы использовать и как избежать типичных ошибок при разработке.
Часто при поиске нужной функции разработчики натыкаются на модули вроде ЭлектронноеВзаимодействиеПереопределяемый или ЭлектронноеВзаимодействиеБЗК. Проанализируем ситуацию: если вы видите там пустые процедуры или «заглушки», это не означает, что функционал не реализован. В современной архитектуре 1С такие модули служат «крючками» для переопределения поведения подсистем БСП в конкретной конфигурации. Если процедура ОписаниеОрганизации в них ничего не возвращает, значит, система использует стандартные механизмы, заложенные в ядро подсистемы. Для получения данных организации нам следует обратиться к специализированным общим модулям подсистемы «Зарплата Кадры».
Наиболее универсальным и рекомендуемым способом получения структуры данных организации в ЗУП 3.1 является использование функций общего модуля ЗарплатаКадрыБазовый. Рассмотрим основной программный интерфейс:
ОрганизацияСсылка = Объект.Организация; // Ссылка на справочник Организации
ДатаСведений = ТекущаяДата();
СписокПоказателей = "ИННЮЛ, КППЮЛ, НаимЮЛПол, АдрЮР"; // Строка или массив параметров
СведенияОрганизации = ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации(ОрганизацияСсылка, ДатаСведений, СписокПоказателей);
Разберем, почему этот метод удобен. Функция автоматически определяет, является ли организация юридическим лицом или индивидуальным предпринимателем, и собирает данные из актуальных регистров сведений (например, ответственные лица, коды и контактная информация). Если параметр СписокПоказателей не заполнен, функция вернет максимально полный набор данных.
Чтобы эффективно использовать метод ПолучитьСведенияОбОрганизации, необходимо знать идентификаторы полей. Выясним, какие показатели можно запрашивать:
ИННЮЛ, КППЮЛ, ОГРН, ОКПО, ОКАТО, ОКТМО, НаимЮЛПол (полное наименование), НаимЮЛСокр (сокращенное).ФИО, ИННФЛ, ОГРНИП, СНИЛС, ДатаРожд.АдрЮР, АдрФакт, АдрПочт, АдрЮР_XML.ФИОРук, ДолжнРук, ФИОБух.РегНомПФР, РегистрационныйНомерФСС, КодПодчиненностиФСС.Использование этого метода позволяет избежать написания громоздких запросов к базе данных, так как система сама заботится о периодичности реквизитов (например, КПП или ответственные лица могут меняться со временем).
Рассмотрим ситуацию, когда при вызове функций общего назначения возникает ошибка «Поле объекта 'ЮридическоеФизическоеЛицо' не существует». Проанализируем причину. Чаще всего это происходит из-за передачи в функцию неверного типа ссылки. В ЗУП 3.1 методы получения сведений об организации жестко ожидают ссылку на справочник Организации.
Если вы по ошибке передадите туда ссылку на справочник Сотрудники или ФизическиеЛица, система попытается найти у них реквизит, определяющий тип лица, и потерпит неудачу. Всегда проверяйте тип передаваемого параметра перед вызовом. Если вам нужны данные работодателя конкретного сотрудника, сначала получите организацию из его кадровых данных:
// Неправильно:
Данные = ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации(СотрудникСсылка, Дата);
// Правильно:
Организация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СотрудникСсылка, "Организация");
Данные = ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации(Организация, Дата);
Работа с адресами в ЗУП 3.1 осложнена тем, что они хранятся в табличных частях или регистрах сведений в виде XML-строк. Посмотрим на пример получения юридического адреса в «читаемом» текстовом виде. Для этого лучше всего использовать возможности модуля РаботаСАдресами.
Шаг 1. Получаем XML-представление адреса через сведения об организации:
Показатели = "АдрЮР_XML";
Сведения = ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации(Организация, Дата, Показатели);
XMLАдрес = Сведения.АдрЮР_XML;
Шаг 2. Преобразуем XML в структуру с понятными полями:
ДанныеАдреса = РаботаСАдресами.СведенияОбАдресе(XMLАдрес);
ПредставлениеАдреса = ДанныеАдреса.Представление;
Этот способ гарантирует, что вы получите актуальное текстовое описание адреса с учетом всех требований КЛАДР или ФИАС (ГАР), которые используются в программе.
Если вам нужно получить только адрес, не обращаясь к общим сведениям, можно использовать специализированный модуль УправлениеКонтактнойИнформациейЗарплатаКадры. Выясним, как это работает:
// Получение юридического адреса организации
АдресТекстом = УправлениеКонтактнойИнформациейЗарплатаКадры.АдресОрганизации(Организация, Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
Данный метод более лаконичен, если ваша задача ограничивается только получением контактных данных для печатной формы.
В случаях, когда необходимо получить данные по большому количеству организаций в цикле, использование функций общих модулей может замедлить работу. В такой ситуации рассмотрим вариант с прямым запросом к табличной части контактной информации. Важно помнить: этот метод требует осторожности, так как структура хранения КИ может меняться в разных версиях платформы.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОрганизацииКонтактнаяИнформация.Представление КАК Адрес
|ИЗ
| Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация
|ГДЕ
| ОрганизацииКонтактнаяИнформация.Ссылка = &Организация
| И ОрганизацииКонтактнаяИнформация.Вид = &ВидКИ";
Запрос.УстановитьПараметр("Организация", ОрганизацияСсылка);
Запрос.УстановитьПараметр("ВидКИ", Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
ТекстАдреса = Результат.Адрес;
КонецЕсли;
Подведем итог: для решения большинства задач программиста в ЗУП 3.1 оптимальным выбором будет метод ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации. Он инкапсулирует в себе всю сложность получения данных по юридическим и физическим лицам, филиалам и обособленным подразделениям, предоставляя удобный интерфейс в виде структуры с ключами-показателями.