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