Определение текущей организации в 1С:Предприятие — одна из самых частых задач при работе с конфигурациями, где ведется учет по нескольким юридическим лицам. Без этого не обойтись ни при формировании отчетов, ни при написании обработок, ни при настройке прав доступа. Но способов получить эту информацию так много, что даже опытные разработчики иногда путаются: где брать данные из сеанса, а где из документов, как учитывать права пользователя и почему в разных конфигурациях код работает по-разному.
В этой статье мы разберем все актуальные методы получения текущей организации — от простейших встроенных функций до универсальных алгоритмов для сложных конфигураций типа ERP или КА 2.5. Особое внимание уделим типичным ошибкам, которые приводят к падению кода или некорректным данным. А для программистов приведём готовые примеры на встроенном языке с пояснениями.
Если вы пользователь (не программист), не пугайтесь кода — в статье есть раздел с пошаговыми инструкциями через интерфейс 1С без единой строки программирования. Все методы проверены на актуальных релизах платформы 1С:Предприятие 8.3.23 и конфигурациях Бухгалтерия 3.0, Управление торговлей 11.5, Зарплата и управление персоналом 3.1.
1. Встроенная функция ТекущаяОрганизация() — когда она работает
Самый очевидный способ — использовать глобальную функцию ТекущаяОрганизация(). Она возвращает ссылку на организацию, установленную в текущем сеансе пользователя. Но здесь есть три критичных нюанса:
✅ Где работает: Функция доступна только в конфигурациях, где реализован механизм многопользовательского доступа с разделением по организациям. Это практически все типовые решения: БП 3.0, УТ 11, ЗУП 3.1, ERP 2.5, КА 2.5. В самописных конфигурациях или устаревших версиях (например, 1С:Бухгалтерия 7.7) этой функции может не быть.
❌ Когда вернёт пустое значение: Если пользователь не привязан к конкретной организации (например, у него права на все организации или сеанс не инициализирован), функция вернёт Неопределено. Это частая причина ошибок в отчетах.
🔹 Пример кода:
ТекущаяОрг = ТекущаяОрганизация();
Если ТекущаяОрг = Неопределено Тогда
Сообщить("Организация не установлена в сеансе!");
Иначе
Сообщить("Текущая организация: " + ТекущаяОрг.Наименование);
КонецЕсли;
Если функция ТекущаяОрганизация() возвращает Неопределено, проверьте настройки прав пользователя в разделе Администрирование → Пользователи. Возможно, у него не выбрана основная организация.
2. Получение организации из параметров сеанса
Более универсальный метод — обратиться к параметрам сеанса через объект ПараметрыСеанса. Этот способ работает даже там, где ТекущаяОрганизация() недоступна, например, в некоторых самописных конфигурациях.
📌 Как это работает:
- Платформа 1С хранит текущие настройки сеанса в специальном объекте.
- Организация может быть записана в параметре с именем
"Организация"или"ТекущаяОрганизация"(зависит от конфигурации). - Если параметр не установлен, можно попробовать получить его из глобального контекста.
🔹 Пример кода с проверками:
Параметры = ПараметрыСеанса;
ТекущаяОрг = Неопределено;
// Пробуем стандартные имена параметров
Если Параметры.Свойство("Организация") Тогда
ТекущаяОрг = Параметры.Организация;
ИначеЕсли Параметры.Свойство("ТекущаяОрганизация") Тогда
ТекущаяОрг = Параметры.ТекущаяОрганизация;
Иначе
// Пробуем получить из глобального контекста (для старых конфигураций)
Если ГлобальныйКонтекст.Свойство("ТекущаяОрганизация") Тогда
ТекущаяОрг = ГлобальныйКонтекст.ТекущаяОрганизация;
КонецЕсли;
КонецЕсли;
Если ТекущаяОрг = Неопределено Тогда
Сообщить("Организация не найдена в параметрах сеанса!");
Иначе
Сообщить("Организация из сеанса: " + ТекущаяОрг.Наименование);
КонецЕсли;
⚠️ Внимание: В конфигурациях с территориальным делением (например, ERP 2.5) параметр сеанса может содержать не организацию, а подразделение. В этом случае придётся дополнительно получать головную организацию через свойство Организация у подразделения.
3. Определение организации по пользователю (для администрирования)
Если вам нужно получить организацию не для текущего сеанса, а для конкретного пользователя (например, при настройке прав или аудите), используйте справочник Пользователи. Этот метод пригодится администраторам и разработчикам, которые пишут обработки для массового изменения настроек.
🔹 Алгоритм действий:
- Получите ссылку на пользователя (например, через
ТекущийПользователь()). - Найдите его в справочнике
Пользователи. - Извлеките организацию из свойства
ОрганизацияилиОсновнаяОрганизация.
🔹 Пример кода для администрирования:
// Получаем текущего пользователя
ТекущийПользователь = ТекущийПользователь();
// Ищем его в справочнике пользователей
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Пользователи.ОсновнаяОрганизация КАК Организация
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Ссылка = &ТекущийПользователь";
Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
ТекущаяОрг = Результат.Организация;
Сообщить("Основная организация пользователя: " + ТекущаяОрг.Наименование);
Иначе
Сообщить("У пользователя не установлена основная организация!");
КонецЕсли;
📊 Сравнение методов получения организации:
| Метод | Когда использовать | Ограничения | Пример конфигураций |
|---|---|---|---|
ТекущаяОрганизация() |
Быстрое получение в типовых конфигурациях | Не работает, если сеанс не инициализирован | БП 3.0, УТ 11, ЗУП 3.1 |
ПараметрыСеанса |
Универсальный способ, включая самописные конфигурации | Имя параметра может отличаться | Любые конфигурации на 8.3 |
| По пользователю | Администрирование, настройка прав | Требует доступа к справочнику пользователей | ERP 2.5, КА 2.5 |
| Из документа/отчета | Когда организация привязана к конкретному объекту | Не подходит для глобальных настроек | Все типовые конфигурации |
4. Как получить организацию из документа или отчета
В некоторых сценариях текущая организация определяется не сеансом пользователя, а конкретным документом или отчетом. Например, при формировании печатной формы счета или акта выполненных работ организация берется из шапки документа, а не из сеанса.
🔹 Где это актуально:
- 📄 Документы: Счета, реализации, поступления, акты.
- 📊 Отчеты: Оборотно-сальдовая ведомость, анализ счета.
- 🖨️ Печатные формы: Счета-фактуры, ТОРГ-12, УПД.
🔹 Пример кода для документа:
// Предположим, у нас есть ссылка на документ "РеализацияТоваровУслуг"
Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("РТ-000001", Дата(2026,05,20));
Если Док.Ссылка.Пустая() Тогда
Сообщить("Документ не найден!");
Иначе
ТекущаяОрг = Док.Организация; // Поле "Организация" в шапке документа
Сообщить("Организация в документе: " + ТекущаяОрг.Наименование);
КонецЕсли;
🔹 Пример для отчета (в модуле отчета):
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
ТекущаяОрг = ДанныеРасшифровки.Параметры.Организация; // Параметр отчета
Если ТекущаяОрг = Неопределено Тогда
ТекущаяОрг = ТекущаяОрганизация(); // Резервный вариант
КонецЕсли;
КонецПроцедуры
Что делать, если в документе нет поля "Организация"
В некоторых конфигурациях (например, в УТ 10.3) организация может храниться в реквизите ЮрЛицо или Контрагент с отбором по виду (например, "Собственная организация"). В этом случае используйте код:
Если Док.Ссылка.ЮрЛицо.ЭтотОбъект().Вид() = ВидКонтрагента.СобственнаяОрганизация Тогда
ТекущаяОрг = Док.ЮрЛицо;
КонецЕсли;
5. Универсальный метод для любых конфигураций (включая самописные)
Если вы работаете с нетиповыми конфигурациями или нужно гарантированно получить организацию независимо от настроек, используйте этот алгоритм. Он комбинирует все описанные выше методы и добавляет резервные проверки.
🔹 Алгоритм:
- Пробуем
ТекущаяОрганизация(). - Если не сработало — ищем в
ПараметрыСеанса. - Если и там нет — пробуем получить из глобального контекста.
- В крайнем случае возвращаем первую организацию из справочника (если он не пустой).
🔹 Готовая функция для вставки в код:
Функция ПолучитьТекущуюОрганизацию()
// Метод 1: Стандартная функция
ТекущаяОрг = ТекущаяОрганизация();
Если ТекущаяОрг <> Неопределено Тогда
Возврат ТекущаяОрг;
КонецЕсли;
// Метод 2: Параметры сеанса
Параметры = ПараметрыСеанса;
Если Параметры.Свойство("Организация") Тогда
Возврат Параметры.Организация;
ИначеЕсли Параметры.Свойство("ТекущаяОрганизация") Тогда
Возврат Параметры.ТекущаяОрганизация;
КонецЕсли;
// Метод 3: Глобальный контекст
Если ГлобальныйКонтекст.Свойство("ТекущаяОрганизация") Тогда
Возврат ГлобальныйКонтекст.ТекущаяОрганизация;
КонецЕсли;
// Метод 4: Первая организация в справочнике (резервный вариант)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 Справочник.Организации.Ссылка КАК Организация";
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Возврат Результат.Организация;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
⚠️ Внимание: Использование первой организации из справочника как резервного варианта может привести к ошибкам в многопользовательском режиме! Этот метод подходит только для тестовых сценариев или конфигураций с одной организацией.
☑️ Проверка перед использованием универсального метода
6. Получение организации через интерфейс 1С (без программирования)
Если вы не программист, а просто пользователь 1С, и вам нужно узнать текущую организацию для формирования отчета или документа, сделайте это через интерфейс:
🔹 Инструкция для типовых конфигураций:
- Откройте любой документ (например,
Реализация товаров и услуг). - В шапке документа найдите поле "Организация" (обычно первое или второе поле).
- Если поле неактивно — это и есть ваша текущая организация.
- Если поле активно, но пустое — организация не установлена в сеансе (обратитесь к администратору).
🔹 Как посмотреть организацию в настройках пользователя:
- Перейдите в раздел
Администрирование → Пользователи. - Найдите своего пользователя в списке и откройте его карточку.
- На вкладке "Основное" или "Права" будет поле
ОрганизацияилиОсновная организация.
🔹 Где еще можно увидеть организацию:
- 📋 В отчетах: в параметрах отчета обычно есть поле "Организация".
- 📑 В печатных формах: в шапке документа перед печатью.
- 🔧 В настройках программы: раздел
Главное → Организации.
Если в интерфейсе поле "Организация" неактивно или отсутствует, значит в вашей конфигурации используется одна организация по умолчанию, и дополнительные настройки не требуются.
7. Типичные ошибки и как их избежать
Даже опытные разработчики иногда сталкиваются с проблемами при работе с организациями в 1С. Вот самые распространённые ошибки и способы их решения:
🔴 Ошибка 1: Функция ТекущаяОрганизация() возвращает Неопределено
- 🔹 Причина: Пользователь не привязан к организации или сеанс не инициализирован.
- 🔹 Решение: Проверьте настройки пользователя в
Администрирование → Пользователиили используйте резервные методы из раздела 5.
🔴 Ошибка 2: В отчете организация не совпадает с сеансом
- 🔹 Причина: В параметрах отчета явно указана другая организация.
- 🔹 Решение: Проверьте настройки отчета перед формированием или очистите кэш.
🔴 Ошибка 3: При обращении к ПараметрыСеанса возникает исключение
- 🔹 Причина: Параметр с организацией имеет другое имя (например,
"ЮрЛицо"). - 🔹 Решение: Изучите структуру параметров сеанса через отладчик (
Отладка → Вычислить выражение).
🔴 Ошибка 4: В самописной конфигурации нет справочника "Организации"
- 🔹 Причина: Организации хранятся в другом справочнике (например,
"ЮрЛица"или"Контрагенты"). - 🔹 Решение: Уточните структуру конфигурации у разработчика или посмотрите в конфигураторе (
Объекты → Справочники).
🔴 Ошибка 5: При работе с ERP 2.5 возвращается подразделение, а не организация
- 🔹 Причина: В ERP организация может быть привязана к подразделению.
- 🔹 Решение: Используйте код:
Подразделение = ТекущаяОрганизация(); // На самом деле это подразделениеОрганизация = Подразделение.Организация;
⚠️ Внимание: В конфигурациях с территориальным делением (например, ERP 2.5 или КА 2.5) одна организация может иметь несколько подразделений, каждое из которых ведет отдельный учет. В этом случае ТекущаяОрганизация() может возвращать подразделение, а не головную организацию!
8. Практическое применение: примеры для разных задач
Разберём реальные сценарии, где требуется определение текущей организации, и готовые решения для них.
📌 Задача 1: Автоматическое заполнение организации в новом документе
Если вы создаёте документ через код и хотите, чтобы организация подставлялась автоматически:
НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.Организация = ТекущаяОрганизация(); // Или другой метод из статьи
НовыйДок.Записать();
📌 Задача 2: Отбор по организации в запросе
При формировании отчета или выборки данных с отбором по текущей организации:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Документ.Ссылка,
| Документ.Дата
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Документ
|ГДЕ
| Документ.Организация = &ТекущаяОрганизация";
Запрос.УстановитьПараметр("ТекущаяОрганизация", ТекущаяОрганизация());
Результат = Запрос.Выполнить();
📌 Задача 3: Проверка прав пользователя на организацию
Если нужно проверить, имеет ли пользователь доступ к текущей организации:
ТекущаяОрг = ТекущаяОрганизация();
Если НЕ ЗначениеЗаполнено(ТекущаяОрг) Тогда
Сообщить("Ошибка: организация не определена!");
Возврат Ложь;
КонецЕсли;
// Проверяем, есть ли у пользователя права на эту организацию
Если НЕ ПользовательИмеетПраваНаОрганизацию(ТекущийПользователь(), ТекущаяОрг) Тогда
Сообщить("У вас нет прав на работу с этой организацией!");
Возврат Ложь;
КонецЕсли;
📌 Задача 4: Получение логотипа организации для печатной формы
Чтобы вставить логотип текущей организации в печатную форму:
ТекущаяОрг = ТекущаяОрганизация();
Если ЗначениеЗаполнено(ТекущаяОрг) И ЗначениеЗаполнено(ТекущаяОрг.Логотип) Тогда
Картинка = ТекущаяОрг.Логотип.Получить();
// Далее вставляем Картинка в макет печатной формы
КонецЕсли;
📌 Задача 5: Массовая обработка документов по организации
Если нужно обработать все документы за период для текущей организации:
ТекущаяОрг = ТекущаяОрганизация();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Документ.Ссылка КАК Ссылка
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК Документ
|ГДЕ
| Документ.Организация = &ТекущаяОрг
| И Документ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";
Запрос.УстановитьПараметр("ТекущаяОрг", ТекущаяОрг);
Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(ТекущаяДата()));
Результат = Запрос.Выполнить();
При работе с регламентированными отчетами (например, декларацией по НДС) организация должна быть установлена явно, даже если в сеансе она уже выбрана. Иначе отчет может сформироваться с ошибкой.
FAQ: Частые вопросы по работе с организациями в 1С
🔹 Почему в ERP 2.5 функция ТекущаяОрганизация() возвращает подразделение, а не организацию?
В ERP 2.5 и КА 2.5 реализован механизм территориального деления, где учет ведется по подразделениям, привязанным к организациям. Чтобы получить головную организацию, используйте код:
Подразделение = ТекущаяОрганизация();
Организация = Подразделение.Организация;
Если подразделение не привязано к организации (например, это обособленное подразделение), проверьте настройки в справочнике Подразделения организаций.
🔹 Как получить организацию в 1С:Бухгалтерия 7.7?
В 1С:Бухгалтерия 7.7 нет функции ТекущаяОрганизация(). Используйте один из способов:
- Через глобальную переменную
ЮрЛицо(если она установлена). - Через параметры запуска программы (если организация передается при старте).
- Через справочник
ЮрЛица, выбрав первую запись (если организация одна).
Пример кода:
Если ГлобальныйКонтекст.Свойство("ЮрЛицо") Тогда
ТекущаяОрг = ГлобальныйКонтекст.ЮрЛицо;
Иначе
// Получаем первое юрлицо из справочника
ТекущаяОрг = Справочники.ЮрЛица.НайтиПоНаименованию("*", Ложь);
КонецЕсли;
🔹 Можно ли изменить текущую организацию в сеансе программно?
Да, но это не рекомендуется без крайней необходимости, так как может нарушить логику работы программы. Если всё же нужно, используйте код:
ПараметрыСеанса.Организация = Справочники.Организации.НайтиПоНаименованию("ООО Ромашка");
⚠️ Важно:
- Изменение организации в сеансе не влияет на уже открытые документы.
- После изменения может потребоваться перезагрузка формы.
- В некоторых конфигурациях (например, ERP 2.5) это приведет к ошибке из-за территориального деления.
🔹 Как получить организацию в 1С:Розница 2.3, если там нет справочника "Организации"?
В 1С:Розница 2.3 организации хранятся в справочнике Контрагенты с видом Собственная организация. Используйте код:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Контрагенты.Ссылка КАК Организация
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ЭтотОбъект().Вид() = ВидКонтрагента.СобственнаяОрганизация";
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
ТекущаяОрг = Результат.Организация;
КонецЕсли;
🔹 Почему при формировании отчета организация сбрасывается на другую?
Это типичная проблема, когда:
- В настройках отчета явно указана другая организация (проверьте параметры отчета).
- Пользователь имеет права на несколько организаций, и в сеансе установлена не та, которая нужна.
- В конфигурации есть обработчик события
ПередФормированиемОтчета, который меняет организацию.
Решение:
- Откройте настройки отчета и проверьте параметр "Организация".
- Убедитесь, что в сеансе пользователя установлена нужная организация (раздел
Администрирование → Пользователи). - Если проблема сохраняется, обратитесь к разработчику для проверки обработчиков событий.