Как в 1C:IRP 2.0 реализовано заполнение организации по умолчанию в документах

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

При работе с конфигурацией 1C:International Resource Planning (IRP) программисты часто сталкиваются с тем, что при создании нового документа поле Организация (или Company) уже заполнено определенным значением. Это происходит еще до выполнения кода в процедуре ПриСозданииНаСервере модуля формы. Для эффективной кастомизации системы нам необходимо понимать, в какой момент и с помощью каких механизмов платформа и программный код подставляют эти данные.

В этой статье мы подробно разберем жизненный цикл создания объекта в 1C:IRP 2.0, проанализируем роль системных обработчиков и выясним, как управлять заполнением реквизитов по умолчанию.

Порядок вызова событий при создании нового объекта

Прежде всего, разберем хронологию событий, которые происходят на стороне сервера, когда пользователь нажимает кнопку «Создать». Многие начинающие разработчики ищут логику в модуле формы, однако к моменту инициализации формы объект уже существует в памяти сервера с заполненными данными. Порядок следующий:

  1. Вызов конструктора нового объекта на сервере.
  2. Событие ОбработкаЗаполнения (Filling) в модуле объекта. Именно здесь происходит основная программная инициализация.
  3. Создание формы объекта.
  4. Событие ПриСозданииНаСервере (OnCreateAtServer) в модуле формы.

Таким образом, если мы видим заполненную организацию сразу после открытия формы, значит, она была установлена либо платформой автоматически, либо программно в ОбработкаЗаполнения.

Анализ механизма ОбработкаЗаполнения

В конфигурации IRP 2.0 логика заполнения вынесена в модуль объекта. Рассмотрим, как это работает. Когда мы создаем новый документ, система вызывает процедуру ОбработкаЗаполнения, в которую передается параметр ДанныеЗаполнения.

Проанализируем пример кода, который может отвечать за установку организации:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
	
	// Если данные заполнения — это структура, переданная из формы списка
	Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		ЗаполнитьПоСтруктуре(ДанныеЗаполнения);
	КонецЕсли;
	
	// Обращение к системным настройкам пользователя IRP
	Если НЕ ЗначениеЗаполнено(ЭтотОбъект.Company) Тогда
		ЭтотОбъект.Company = UserSettingsServer.GetDefaultUserCompany(Пользователи.ТекущийПользователь());
	КонецЕсли;

КонецПроцедуры

В IRP 2.0 активно используется подсистема UserSettings. Программа ищет настройки в специальном регистре или кэше настроек пользователя. Если вы хотите изменить организацию по умолчанию, в первую очередь проверьте настройки пользователя в интерфейсе самой программы.

Влияние фильтров формы списка

Рассмотрим ситуацию, которую часто упускают из виду: влияние фильтров. Платформа 1С обладает встроенным механизмом: если в форме списка установлен фильтр по какому-либо реквизиту (например, по организации), то при нажатии кнопки «Создать» значение из этого фильтра автоматически передается в ДанныеЗаполнения нового объекта.

Выясним, как это работает пошагово:

  1. Пользователь в списке документов устанавливает отбор: Company = "Main Store".
  2. Нажимает кнопку «Создать».
  3. Платформа формирует структуру и передает её в модуль объекта.
  4. Объект получает значение организации еще до того, как сработает какой-либо ваш программный код.

Если вам кажется, что организация заполняется «магическим» образом, проверьте, не установлены ли фиксированные настройки или отборы в форме списка, из которой вызывается создание.

Использование параметров сеанса и кэша

В 1C:IRP 2.0 для повышения производительности и удобства пользователя часто применяются Параметры сеанса (Session Parameters). При запуске системы инициализируется контекст пользователя, в который считываются основные настройки: компания по умолчанию, склад, валюта и бизнес-единица.

Проанализируем, как можно программно получить эти данные, если стандартные механизмы вам не подходят:


// Пример получения организации из параметров сеанса в IRP
DefaultCompany = ПараметрыСеанса.CurrentUserCompany;

// Или через специализированный серверный модуль
DefaultCompany = UserSettingsServer.GetValue("DefaultCompany");

Важно помнить, что IRP может сохранять «последнее выбранное значение». Это реализуется через ХранилищеОбщихНастроек (CommonSettingsStorage). Если пользователь один раз выбрал организацию «Б», система может запомнить этот выбор и подставлять его в следующий раз, даже если в официальных настройках указана организация «А».

Как изменить логику заполнения?

Если перед вами стоит задача переопределить заполнение организации по умолчанию, рекомендуем следующий алгоритм действий:

  1. Проверьте настройки пользователя. В IRP есть справочник или регистр пользовательских настроек (в зависимости от версии), где жестко задаются значения для подстановки.
  2. Проверьте расширения. Часто логика заполнения переносится в расширения конфигурации. Ищите в расширениях метод ПередОбработкойЗаполнения или ПослеОбработкиЗаполнения.
  3. Используйте подписку на события. Если нужно внедрить общую логику для всех документов системы (например, заполнять организацию в зависимости от подразделения пользователя), лучше всего создать подписку на событие ОбработкаЗаполнения.

Посмотрим на пример кода в подписке на событие, который позволяет гибко управлять организацией:


Процедура УстановитьОрганизациюПриЗаполнении(Источник, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт
	
	// Проверяем, что это новый объект и организация еще не заполнена
	Если Источник.ЭтоНовый() И НЕ ЗначениеЗаполнено(Источник.Company) Тогда
		// Ваша кастомная логика
		Источник.Company = ПолучитьОрганизациюПоПодразделению(ПараметрыСеанса.ТекущийПользователь);
	КонецЕсли;
	
КонецПроцедуры

Резюме

Заполнение организации в 1C:IRP 2.0 — это результат работы нескольких уровней системы: платформенных фильтров, настроек подсистемы UserSettings и логики в модуле объекта (ОбработкаЗаполнения). Понимание этого процесса позволяет не только быстро находить причины «странного» поведения программы, но и корректно вносить изменения в логику автоматизации бизнес-процессов.

← На главную