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