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