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

Мы рассмотрим 5 рабочих подходов: от использования реквизитов справочника Организации до анализа регистров сведений и работы с БСП (Библиотека Стандартных Подсистем). Особое внимание уделим типичным ошибкам, например, когда в базе нет явной пометки о «главной» организации, или когда логика определения зависит от подчиненности или иерархии холдинга. Все примеры кода адаптированы для платформы 1С:Предприятие 8.3 (актуально для версий 8.3.20+).

1. Метод 1: Использование реквизита «Основная» в справочнике Организации

Самый очевидный способ — проверка флага Основная (или ЭтоОсновнаяОрганизация) в справочнике Организации. Этот реквизит часто добавляют в конфигурациях на базе БП 3.0, УТ 11 или КА 2.4, но его наличие зависит от доработок.

Пример кода для поиска:

Функция ПолучитьОсновнуюОрганизациюПоРеквизиту()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| Организации.Ссылка КАК Организация

|ИЗ

| Справочник.Организации КАК Организации

|ГДЕ

| Организации.Основная = ИСТИНА";

РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда

Возврат РезультатЗапроса.Выгрузить()[0].Организация;

Иначе

Возврат Неопределено;

КонецЕсли;

КонецФункции

⚠️ Внимание: В стандартных конфигурациях реквизит Основная отсутствует по умолчанию. Его необходимо добавить вручную или использовать альтернативные методы из этой статьи.
  • Плюсы: Простота и скорость выполнения.
  • Минусы: Требует доработки конфигурации, не работает в типовой базе.
  • 🔧 Когда использовать: Если вы контролируете структуру справочника и можете добавить реквизит.
📊 Какой метод вы чаще используете для работы с организациями в 1С?
Реквизиты справочника
Запросы к регистрам
БСП (Библиотека Стандартных Подсистем)
API интеграций
Свой вариант

2. Метод 2: Анализ регистра сведений «Организации» (для БП 3.0 и УТ 11)

В типовых конфигурациях 1С:Бухгалтерия 3.0 и 1С:Управление Торговлей 11 есть регистр сведений Организации, где хранится информация о головной организации холдинга. Это более надежный способ, чем поиск по реквизитам.

Пример запроса к регистру:

Функция ПолучитьГоловнуюОрганизациюИзРегистра()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| Организации.Организация КАК Организация

|ИЗ

| РегистрСведений.Организации КАК Организации

|ГДЕ

| Организации.ГоловнаяОрганизация = ИСТИНА

| И Организации.Период = &МаксимальнаяДата";

Запрос.УстановитьПараметр("МаксимальнаяДата", ТекущаяДата());

РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда

Возврат РезультатЗапроса.Выгрузить()[0].Организация;

Иначе

Возврат Неопределено;

КонецЕсли;

КонецФункции

Конфигурация Регистр сведений Реквизит для фильтра
БП 3.0 Организации ГоловнаяОрганизация
УТ 11 Организации ЭтоГоловнаяОрганизация
КА 2.4 СведенияОбОрганизациях Основная

В конфигурациях на базе БСП 3.1+ логика может отличаться: головная организация определяется через подсистему «Управление холдингом». В этом случае используйте метод 4 из этой статьи.

3. Метод 3: Поиск по иерархии подчинения (для холдингов)

Если в базе ведется учет по нескольким организациям с иерархией (например, головной офис + филиалы), основную организацию можно определить как верхний уровень иерархии. Для этого анализируем поле Родитель в справочнике Организации.

Алгоритм:

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| Организации.Ссылка КАК Организация

|ИЗ

| Справочник.Организации КАК Организации

|ГДЕ

| ЗНАЧЕНИЕЗАПОЛНЕНО(Организации.Родитель) = ЛОЖЬ

|УПОРЯДОЧИТЬ ПО

| Организации.Код";

РезультатЗапроса = Запрос.Выполнить();

Если НЕ РезультатЗапроса.Пустой() Тогда

Возврат РезультатЗапроса.Выгрузить()[0].Организация;

Иначе

Возврат Неопределено;

КонецЕсли;

КонецФункции

⚠️ Внимание: В некоторых конфигурациях поле Родитель может называться ГоловнаяОрганизация или ВышестоящаяОрганизация. Проверьте структуру справочника в Конфигураторе (раздел Объекты → Справочники → Организации → Реквизиты).

Убедиться, что в справочнике есть реквизит "Родитель"|Проверить, что иерархия заполнена корректно|Учесть возможность нескольких "верхних" организаций|Тестировать на копии базы, если логика критична-->

4. Метод 4: Использование Библиотеки Стандартных Подсистем (БСП)

В конфигурациях с БСП 2.4+ (например, 1С:ERP, 1С:УХ) для работы с организациями предназначена подсистема Организации. Она предоставляет готовые функции, в том числе для определения головной организации холдинга.

Пример кода с использованием БСП:

Функция ПолучитьГоловнуюОрганизациюЧерезБСП()

ПодсистемаОрганизации = Подсистемы.Организации;

// Получаем список всех организаций

Организации = ПодсистемаОрганизации.ПолучитьСписокОрганизаций();

// Фильтруем по признаку головной

ГоловныеОрганизации = ПодсистемаОрганизации.ПолучитьГоловныеОрганизации(Организации);

Если ГоловныеОрганизации.Количество() > 0 Тогда

Возврат ГоловныеОрганизации[0];

Иначе

Возврат Неопределено;

КонецЕсли;

КонецФункции

Если в вашей конфигурации БСП отключена или модифицирована, проверьте наличие следующих объектов:

  • 📁 Подсистема Организации в дереве конфигурации.
  • 🔧 Общий модуль ОрганизацииКлиентСервер или ОрганизацииПереопределяемый.
  • 📊 Регистр сведений СведенияОбОрганизациях с реквизитом ЭтоГоловная.
Что делать, если БСП отсутствует?

Если в вашей конфигурации нет Библиотеки Стандартных Подсистем, используйте альтернативные методы из этой статьи (например, анализ регистра сведений или иерархии). Для добавления БСП потребуется обновить конфигурацию до версии, поддерживающей подсистему (например, перейти с УТ 10.3 на УТ 11).

5. Метод 5: Определение по умолчанию (первая организация в списке)

Если в базе нет явной пометки о главной организации, но требуется возвращать какую-либо организацию по умолчанию (например, для интеграций), можно использовать первый элемент справочника. Этот метод подходит для простых баз с одной организацией или когда порядок важен.

Примеры реализации:

// Вариант 1: Первая организация по коду

Функция ПолучитьПервуюОрганизациюПоКоду()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| Организации.Ссылка КАК Организация

|ИЗ

| Справочник.Организации КАК Организации

|УПОРЯДОЧИТЬ ПО

| Организации.Код";

Возврат Запрос.Выполнить().Выгрузить()[0].Организация;

КонецФункции

// Вариант 2: Организация с минимальным кодом (для стабильности)

Функция ПолучитьОрганизациюСМинимальнымКодом()

Организации = Справочники.Организации.Выбрать();

МинимальныйКод = Неопределено;

Результат = Неопределено;

Пока Организации.Следующий() Цикл

Если МинимальныйКод = Неопределено ИЛИ Организации.Код < МинимальныйКод Тогда

МинимальныйКод = Организации.Код;

Результат = Организации.Ссылка;

КонецЕсли;

КонецЦикла;

Возврат Результат;

КонецФункции

⚠️ Внимание: Этот метод не гарантирует корректность с бизнес-логикой! Например, если в базе есть тестовые организации с кодом 001, они могут оказаться «первыми». Всегда добавляйте дополнительные проверки (например, фильтр по ПометкаУдаления = ЛОЖЬ).
💡

Для стабильности кэшируйте результат первой организации в общем модуле с периодом актуальности 1 день. Это сократит количество обращений к базе при частых вызовах функции.

6. Типичные ошибки и как их избежать

При программном получении основной организации разработчики часто сталкиваются с следующими проблемами:

  1. Ошибка «Неопределено» при отсутствии организаций:

    Всегда проверяйте результат функции на Неопределено или NULL. Например:

    Организация = ПолучитьОсновнуюОрганизацию();
    

    Если Организация = Неопределено Тогда

    Сообщить("В базе нет организаций или не задана основная!");

    Возврат;

    КонецЕсли;

  2. Конфликт версий БСП:

    В конфигурациях с кастомизированной БСП стандартные методы могут не работать. Проверяйте наличие модулей через МетодыОбъекта():

    Если НЕ ЗначениеЗаполнено(Подсистемы.Организации) Тогда
    

    // Используем альтернативный метод

    КонецЕсли;

  3. Неучет прав доступа:

    При работе с регистрами сведений (метод 2) убедитесь, что у пользователя есть права на чтение. Иначе запрос вернет пустой результат.

Частая ошибка — предположение, что «основная организация всегда есть». В реальности:

  • 🏢 В новой базе может не быть ни одной организации.
  • 🔄 В холдинге может быть несколько головных организаций (например, по разным направлениям бизнеса).
  • 🔒 Организация может быть помечена на удаление (ПометкаУдаления = ИСТИНА).
💡

Всегда реализуйте резервный механизм на случай отсутствия основной организации (например, возврат первой активной или генерация исключения с понятным сообщением).

FAQ: Частые вопросы по работе с организациями в 1С

Как узнать, есть ли в моей конфигурации реквизит «Основная» в справочнике Организации?

Откройте конфигуратор (Файл → Открыть конфигурацию), перейдите в Объекты → Справочники → Организации → Реквизиты. Если реквизита нет, его можно добавить вручную или использовать альтернативные методы из этой статьи.

Можно ли получить основную организацию через HTTP-сервисы или REST API?

Да, если в конфигурации опубликован WS-сервис или HTTP-сервис с соответствующим методом. Пример вызова:

// Пример для OData (1С:Предприятие 8.3.20+)

Адрес = "http://server/odata/standard.odata/Organization?$filter=IsMain eq true";

Запрос = Новый HTTPЗапрос(Адрес);

Ответ = Новый HTTPСоединение().Получить(Запрос);

Данные = JSON.Прочитать(Ответ.ПолучитьТекст());

Для этого требуется настройка Публикация на веб-сервере в конфигураторе.

Что делать, если в базе несколько организаций с флагом «Основная»?

Это ошибка данных. Решения:

  1. Добавить в запрос сортировку по Код или Наименование и брать первую запись.
  2. Исправить данные вручную через Справочники → Организации.
  3. Реализовать логику выбора (например, приоритет по дате создания).
Как получить основную организацию в 1С:ЗУП 3.1?

В Зарплате и Управлении Персоналом основная организация определяется через регистр сведений Организации с отбором по реквизиту ОсновнаяОрганизация. Используйте метод 2 из этой статьи, заменив имя регистра на РегистрСведений.ОрганизацииЗУП.

Можно ли определить основную организацию по ИНН?

Да, если вы знаете ИНН головной организации. Пример запроса:

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| Организации.Ссылка КАК Организация

|ИЗ

| Справочник.Организации КАК Организации

|ГДЕ

| Организации.ИНН = &ИНН";

Но этот метод не универсален — он работает только если ИНН заранее известен.