При разработке внешних обработок или расширений для современных конфигураций 1С (таких как ERP 2.5, УТ 11, КА 2 или БП 3.0) программисты часто сталкиваются с ситуацией, когда стандартные функции Библиотеки стандартных подсистем (БСП) ведут себя неочевидно. Одной из таких проблем является вызов функции ОрганизацииСервер.СведенияОбОрганизации, которая вместо ожидаемых данных возвращает пустую структуру или массив пустых структур. Разберем детально, почему так происходит, как устроена эта подсистема "под капотом" и как правильно получать данные об организации.
Рассмотрим типичный сценарий. Разработчик вызывает функцию, передавая в неё только ссылку на организацию, например:
Результат = ОрганизацииСервер.СведенияОбОрганизации(Справочники.Организации.ОрганизацияПоУмолчанию);
В этом случае, несмотря на то что в справочнике Организации все реквизиты заполнены, переменная Результат может содержать пустую структуру. Выясним причину такого поведения. В современных редакциях БСП механизмы получения данных максимально оптимизированы. Чтобы не нагружать сервер запросами к тяжелым полям (логотипы, длинные строковые представления, контактная информация), функция ожидает явного указания списка необходимых полей.
Проанализируем второй параметр функции — Поля. Многие ошибочно полагают, что если оставить его пустым, система вернет все доступные реквизиты. Однако во многих конфигурациях на базе ERP и УТ логика реализована иначе: пустой список полей интерпретируется как отсутствие необходимости в данных, и система возвращает лишь "скелет" структуры без значений.
Для решения проблемы нам необходимо явно перечислить нужные реквизиты через запятую. Важно понимать, что имена полей в этой функции не всегда напрямую соответствуют именам реквизитов справочника Организации. Зачастую используются псевдонимы (алиасы), которые обрабатываются внутри подсистемы.
Рассмотрим пример правильного вызова функции для получения основных реквизитов организации:
СписокПолей = "ИНН, КПП, НаименованиеСокращенное, ЮридическийАдрес, ОГРН";
Сведения = ОрганизацииСервер.СведенияОбОрганизации(СсылкаНаОрганизацию, СписокПолей);
Если Сведения.Количество() > 0 Тогда
Сообщить("ИНН организации: " + Сведения.ИНН);
КонецЕсли;
Обратите внимание: если вы передаете в первый параметр массив организаций, то функция вернет массив структур. Если передаете одну ссылку — вернется одна структура. Проанализируем ситуацию, когда даже при указании полей данные не приходят. В этом случае стоит проверить программный интерфейс переопределяемого модуля.
Хотя сама функция находится в общем модуле ОрганизацииСервер, фактическое наполнение данных происходит в модуле ОрганизацииПереопределяемый. Посмотрим на алгоритм работы системы изнутри. При вызове СведенияОбОрганизации система обращается к процедуре ПриОпределенииРегистрационныхДанныхОрганизации (или аналогичной в зависимости от версии БСП).
Разберем, как это реализовано в коде конфигурации:
Поля в массив.Если вы создали свой собственный реквизит в справочнике Организации и пытаетесь получить его через этот метод, он не вернется автоматически. Вам потребуется добавить логику его заполнения в ОрганизацииПереопределяемый, иначе структура по этому полю останется пустой.
Третий важный параметр функции — Дата. Большинство сведений об организации (ФИО руководителя, название, КПП) являются периодическими и хранятся в регистрах сведений. Проанализируем ситуацию: если вы не указываете дату, система берет текущую дату сеанса. Если вы пытаетесь получить сведения по организации на дату, когда она еще не была создана или записи в регистрах сведений еще не существовало, вы получите пустые значения.
Рекомендуется всегда явно передавать дату, особенно если вы формируете печатную форму документа прошлого периода:
ДатаДокумента = Объект.Дата;
Сведения = ОрганизацииСервер.СведенияОбОрганизации(Организация, "ИНН, Руководитель", ДатаДокумента);
Важно различать механизмы БСП и специфические функции конкретных конфигураций. Например, в конфигурации "Управление нашей фирмой" (УНФ) часто используется другой программный интерфейс. Рассмотрим пример:
// В УНФ вместо ОрганизацииСервер часто используют:
Сведения = ПечатьДокументовУНФ.СведенияОЮрФизЛице(Справочники.Организации.ОсновнаяОрганизация, ТекущаяДата);
Эта функция работает по другим правилам и может возвращать заполненную структуру даже без указания списка полей, так как внутри неё жестко зашит набор собираемых данных для печатных форм. Если ваша обработка должна быть универсальной, всегда проверяйте наличие соответствующего модуля в целевой конфигурации.
Выясним еще одну скрытую причину пустых структур — ограничения прав доступа. В крупных организациях часто включен механизм RLS. Если у пользователя, под которым запускается внешняя обработка, нет прав на чтение регистра ОтветственныеЛица или АдресныйКлассификатор, то функция СведенияОбОрганизации отработает без ошибок, но соответствующие поля (например, ФИО директора или адрес) будут пустыми.
Для диагностики этой проблемы попробуйте выполнить тот же код под пользователем с полными правами. Если под полными правами структура заполнена, значит, проблема в настройках прав доступа и RLS.
Для стабильной работы с функцией ОрганизацииСервер.СведенияОбОрганизации придерживайтесь следующих правил:
ИНН, КПП, КодПоОКПО и т.д.).Соблюдение этих принципов позволит вам избежать ошибок при разработке и обеспечит корректное заполнение данных во всех ваших отчетах и обработках.