Работа с организацией по умолчанию в 1С:Предприятие — одна из самых частых задач при разработке отчетов, обработок или автоматизации бизнес-процессов. Без корректного определения текущей организации невозможно правильно формировать документы, регистрировать операции в бухгалтерии или выгружать данные в внешние системы. При этом в разных конфигурациях (УТ 11, БП 3.0, ЗУП 3.1, ERP 2.5) и даже в кастомизированных решениях способы получения дефолтной организации могут кардинально отличаться.
Новички часто сталкиваются с ошибками вроде "Не установлена организация по умолчанию" или "Недостаточно прав для работы с организацией", когда пытаются получить данные через стандартные методы. В этой статье мы разберем 5 проверенных способов получения организации по умолчанию — от простейших встроенных функций до универсальных программных решений, работающих в любой конфигурации. Особое внимание уделим нюансам для управляемых форм и обычных форм, а также типичным ошибкам, которые ломают логику работы кода.
Если вы работаете с 1С:Розница или 1С:Документооборот, где концепция "организации по умолчанию" может интерпретироваться иначе — в конце статьи есть отдельный раздел с особенностями для этих конфигураций. Также мы рассмотрим, как правильно обрабатывать случаи, когда организация не установлена (например, при первом запуске базы или для пользователей с ограниченными правами).
1. Стандартный способ: функция "ОрганизацияПоУмолчанию()"
Самый очевидный и рекомендуемый метод — использование встроенной функции ОрганизацияПоУмолчанию(). Она доступна в большинстве типовых конфигураций и возвращает ссылку на организацию, установленную как основную для текущего пользователя.
Пример кода:
ТекущаяОрганизация = ОрганизацияПоУмолчанию();
Если ТекущаяОрганизация = Неопределено Тогда
Сообщить("Организация по умолчанию не установлена!");
Иначе
Сообщить("Организация: " + ТекущаяОрганизация.Наименование);
КонецЕсли;
Этот метод работает в управляемых формах и на сервере, но имеет ограничения:
- 🔹 Не доступен в тонком клиенте без прав на чтение данных.
- 🔹 В некоторых конфигурациях (например, 1С:Розница 2.3) может возвращать
Неопределено, если не настроен магазин по умолчанию. - 🔹 Не подходит для обработок, запускаемых из
ВнешнееСоединение, где контекст пользователя отсутствует.
⚠️ Внимание: В конфигурациях на базе БСП 2.4+ функцияОрганизацияПоУмолчанию()может кэшировать результат. Если организация была изменена в сеансе, используйтеОчиститьКэшКонстант()перед вызовом.
Для проверки доступности функции в вашей конфигурации используйте Метаданные().Функции.Найти("ОрганизацияПоУмолчанию"). Если метод отсутствует — переходите к альтернативным способам.
2. Через константу "ОсновнаяОрганизация"
В большинстве типовых конфигураций (БП 3.0, УТ 11, ERP 2.5) организация по умолчанию хранится в константе ОсновнаяОрганизация. Этот способ универсальнее функции, так как работает даже при отсутствии прав на выполнение серверных процедур.
Пример чтения константы:
ТекущаяОрганизация = Константы.ОсновнаяОрганизация.Получить();
Если ТекущаяОрганизация = Неопределено Тогда
// Попытка получить из настроек пользователя
ТекущаяОрганизация = ПAttemptGetUserDefaultOrg();
КонецЕсли;
Особенности метода:
- 📌 В ЗУП 3.1 константа может называться
ОрганизацияДляНачисленияЗарплаты. - 📌 В 1С:Розница вместо организации используется
МагазинПоУмолчанию— требуется дополнительная привязка к юридическому лицу. - 📌 В кастомизированных базах имя константы может отличаться (например,
ДефолтнаяОрганизация).
⚠️ Внимание: Если константа не установлена (например, при первом запуске новой базы), попытка чтения вернет Неопределено. В этом случае используйте резервный метод получения первой организации из справочника.
☑️ Проверка доступности константы
3. Получение из настроек пользователя
Если организация по умолчанию не установлена на уровне системы, она может быть привязана к текущему пользователю. Этот подход часто используется в конфигурациях с мультиорганизационной структурой (например, ERP или УТ для холдингов).
Пример кода для управляемых форм:
ПользовательскиеНастройки = ПользовательскиеНастройкиОбщие.Создать();
ТекущаяОрганизация = ПользовательскиеНастройки.ОрганизацияПоУмолчанию;
Если ТекущаяОрганизация = Неопределено Тогда
// Альтернативный способ
ТекущаяОрганизация = ПолучаемПервуюОрганизациюИзСправочника();
КонецЕсли;
Где искать настройки:
| Конфигурация | Путь к настройкам | Имя параметра |
|---|---|---|
| УТ 11.4 | ПользовательскиеНастройкиОбщие |
ОрганизацияПоУмолчанию |
| БП 3.0 | Пользователь.Настройки |
ОсновнаяОрганизация |
| ERP 2.5 | НастройкиПользователя.Общие |
ТекущаяОрганизация |
| ЗУП 3.1 | НастройкиЗарплаты.Параметры |
ОрганизацияДляРасчета |
Если настройки не сохранены (например, для нового пользователя), можно предложить выбор организации через диалог:
Если ТекущаяОрганизация = Неопределено Тогда
ДиалогВыбора = Новый ДиалогВыбораОрганизации();
ТекущаяОрганизация = ДиалогВыбора.Выбрать();
КонецЕсли;
В ERP 2.5 настройки пользователя могут кэшироваться. После изменения организации через интерфейс обязательно выполните НастройкиПользователя.Обновить(), иначе изменения не применятся в текущем сеансе.
4. Универсальный способ: запрос к справочнику "Организации"
Когда стандартные методы не работают (например, в сильно кастомизированных базах или при работе через ВнешнееСоединение), остается самый надежный способ — прямой запрос к справочнику. Этот метод гарантированно сработает в любой конфигурации, где есть справочник Организации.
Пример запроса для получения первой активной организации:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Организации.Ссылка КАК Организация
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| Организации.ПометкаУдаления = ЛОЖЬ
| И Организации.ЭтоГруппа = ЛОЖЬ";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
ВызватьИсключение "В базе нет ни одной активной организации!";
Иначе
ТекущаяОрганизация = Результат.Получить(0).Организация;
КонецЕсли;
Преимущества метода:
- 🔧 Работает в любой конфигурации с справочником организаций.
- 🔧 Можно добавить дополнительные фильтры (например, по
ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.Юридическое)). - 🔧 Подходит для фоновых задач и внешних обработок.
Недостатки:
- ⚠️ Требует прав на чтение справочника
Организации. - ⚠️ В больших базах запрос может выполняться дольше, чем чтение константы.
⚠️ Внимание: В 1С:Розница вместо справочникаОрганизацииможет использоватьсяМагазиныс привязкой к юрлицу. В этом случае запрос нужно модифицировать:ВЫБРАТЬ ПЕРВЫЕ 1Магазины.Организация КАК Организация
ИЗ
Справочник.Магазины КАК Магазины
ГДЕ
Магазины.ПометкаУдаления = ЛОЖЬ
Запрос к справочнику — единственный метод, который работает в 100% случаев, включая внешние обработки и фоновые задачи. Используйте его как резервный вариант, если другие способы не сработали.
5. Специфические случаи: Розница, Документооборот и кастомизированные базы
Некоторые конфигурации имеют уникальные механизмы работы с организациями. Разберем особенности для самых распространенных исключений.
1С:Розница 2.3+
Здесь вместо организации по умолчанию используется магазин по умолчанию, который привязан к юрлицу. Чтобы получить организацию, сначала найдите магазин:
Магазин = Константы.МагазинПоУмолчанию.Получить();
Если Магазин <> Неопределено Тогда
ТекущаяОрганизация = Магазин.Организация;
КонецЕсли;
1С:Документооборот
В Документообороте организация по умолчанию часто привязана к текущему сотруднику:
ТекущийСотрудник = ПользовательИнформационнойБазы.ТекущийПользователь();
ТекущаяОрганизация = ТекущийСотрудник.Организация;
Кастомизированные конфигурации
Если базу сильно дорабатывали, стандартные методы могут не работать. В этом случае:
- 🛠️ Ищите константы с именами вроде
ДефолтнаяОрганизация,ОсновноеЮрЛицо. - 🛠️ Проверьте наличие обработчика события
ПриНачалеРаботыСистемы— там может устанавливаться глобальная переменная с организацией. - 🛠️ Используйте
Метаданные().Переменные, чтобы найти глобальные переменные с организацией.
Как найти нестандартную организацию по умолчанию в кастомизированной базе?
1. Откройте конфигуратор и выполните поиск по тексту "ОрганизацияПоУмолчанию" во всех модулях.
2. Проверьте список констант (Метаданные().Константы) на наличие нестандартных имен.
3. Изучите модуль управляемого приложения — часто организация устанавливается при старте сеанса.
4. Если ничего не найдено, используйте запрос к справочнику (раздел 4 этой статьи).
Типичные ошибки и их решения
Даже опытные разработчики сталкиваются с проблемами при работе с организацией по умолчанию. Разберем самые распространенные ошибки и способы их исправления.
Ошибка 1: "Недостаточно прав для чтения организации"
Причина: у пользователя нет прав на справочник Организации или константу.
Решение:
- 🔐 Настройте роль пользователя в
Администрирование → Настройка прав. - 🔐 Используйте альтернативный метод (например, через
ПользовательскиеНастройки). - 🔐 В крайнем случае запросите организацию через серверный вызов с повышенными правами.
Ошибка 2: Функция возвращает Неопределено в тонком клиенте
Причина: в тонком клиенте некоторые серверные функции не доступны.
Решение:
ТекущаяОрганизация = Неопределено;
Попытка
ТекущаяОрганизация = ОрганизацияПоУмолчанию(); // Может выдать ошибку
Исключение
// Альтернативный способ
ТекущаяОрганизация = Константы.ОсновнаяОрганизация.Получить();
КонецПопытки;
Ошибка 3: Организация меняется в сеансе, но не обновляется в коде
Причина: кэширование констант или настроек пользователя.
Решение:
// Очистка кэша перед чтением
ОчиститьКэшКонстант();
ОчиститьКэшНастроекПользователя();
ТекущаяОрганизация = ОрганизацияПоУмолчанию();
Ошибка 4: В внешней обработке нет доступа к организации
Причина: отсутствует контекст пользователя.
Решение: передавайте организацию как параметр или используйте запрос к справочнику.
⚠️ Внимание: В 1С:ERP 2.5 при работе с несколькими организациями одновременно (например, в холдинге) функция ОрганизацияПоУмолчанию() может возвращать не ту организацию, которая ожидается. Всегда проверяйте результат и при необходимости предлагайте пользователю выбор через диалог.
FAQ: Частые вопросы по работе с организацией по умолчанию
Как получить организацию по умолчанию в 1С:Розница, если нет справочника "Организации"?
В 1С:Розница организация привязана к магазину. Сначала получите магазин по умолчанию из константы МагазинПоУмолчанию, затем возьмите его свойство Организация:
Магазин = Константы.МагазинПоУмолчанию.Получить();
Организация = Магазин.Организация;
Если магазин не установлен, используйте запрос к справочнику Магазины с фильтром по активным записям.
Почему функция ОрганизацияПоУмолчанию() возвращает не ту организацию, которая нужна?
Это типичная проблема в мультиорганизационных базах (например, ERP или УТ для холдингов). Причины:
- 🔹 Организация привязана к текущему пользователю, а не ко всей базе.
- 🔹 В настройках пользователя установлена другая организация, чем в константе.
- 🔹 Кэширование значений (попробуйте очистить кэш констант).
Решение: всегда проверяйте результат и при необходимости предлагайте пользователю выбрать организацию вручную.
Как получить организацию по умолчанию во внешней обработке без прав?
Во внешних обработках (например, запускаемых через ВнешнееСоединение) контекст пользователя отсутствует. Используйте один из вариантов:
- Передавайте организацию как параметр при вызове обработки.
- Используйте запрос к справочнику
Организациис фильтром по активным записям (раздел 4 статьи). - Если обработка запускается из интерфейса 1С, запросите организацию через диалог:
Организация = Неопределено;ДиалогВыбора = Новый ДиалогВыбораИзСправочника("Справочник.Организации");
Если ДиалогВыбора.Выбрать() Тогда
Организация = ДиалогВыбора.ВыбранноеЗначение;
КонецЕсли;
Можно ли программно изменить организацию по умолчанию для пользователя?
Да, но способ зависит от конфигурации:
- 🔧 В УТ 11 и ERP 2.5 используйте:
Настройки = ПользовательскиеНастройкиОбщие.Создать();Настройки.ОрганизацияПоУмолчанию = НоваяОрганизация;
Настройки.Записать();
- 🔧 В БП 3.0 измените константу:
Константы.ОсновнаяОрганизация.Установить(НоваяОрганизация); - 🔧 В ЗУП 3.1 настройка хранится в параметрах расчета зарплаты.
После изменения обязательно очистите кэш:
ОчиститьКэшКонстант();
ОчиститьКэшНастроекПользователя();
Как узнать, какая организация используется в текущем документе?
Если вам нужно получить организацию не "по умолчанию", а ту, которая указана в конкретном документе (например, в РеализацияТоваровУслуг), используйте свойство документа:
ТекущийДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НомерДокумента);
ОрганизацияДокумента = ТекущийДокумент.Организация;
Если документ еще не записан, организация может быть не установлена — в этом случае берите организацию по умолчанию (способы из этой статьи).