При работе в 1С:ERP Управление предприятием многие пользователи и разработчики сталкиваются с интересным поведением системы: при создании нового документа (например, «Заказа клиента») поле Организация заполняется автоматически, даже если в персональных настройках пользователя («Мои настройки») основная организация не указана. Часто это обнаруживается при отладке, когда в процедуре ПриСозданииНаСервере данные уже присутствуют, хотя явного кода по их заполнению в модуле формы на первый взгляд нет. В этой статье мы подробно разберем, как работает этот «магический» механизм, где хранятся данные и как ими управлять.
Для начала проанализируем ситуацию и поймем, что в системе 1С существует строгая иерархия того, как заполняются поля в новом объекте. Когда пользователь нажимает кнопку «Создать», система последовательно проверяет несколько источников данных:
Рассмотрим подробнее именно четвертый пункт, так как он является наиболее скрытым и часто вводит в заблуждение.
Этот механизм не просто запоминает последнее выбранное значение. Он работает интеллектуально, анализируя историю действий конкретного пользователя. Разберем алгоритм по шагам:
Во-первых, система отслеживает последние 3–5 созданных пользователем документов одного и того же типа. Например, если вы создали пять «Заказов клиента», система сохранит информацию о том, какие организации в них были выбраны.
Во-вторых, происходит расчет приоритета. Если в выборке из последних документов одна и та же организация встречается чаще других или используется несколько раз подряд, система начинает считать её наиболее вероятным выбором для текущего пользователя. Именно это значение будет подставлено в следующий новый документ.
В-третьих, данные сохраняются в разрезе пар «Пользователь — Тип объекта — Реквизит». Это означает, что для «Заказа клиента» у вас может подставляться «Организация А», а для «Заказа поставщику» — «Организация Б», в зависимости от того, с какими данными вы чаще работали в конкретных журналах.
Если мы проанализируем программный код конфигураций на базе 1С:ERP, то увидим, что заполнение происходит не в самой форме, а в модуле объекта или через специализированные серверные вызовы БСП в обработке заполнения. Основная логика сосредоточена в общем модуле ЗаполнениеСвойствПоСтатистикеСервер. При необходимости более глубокого изучения подобных механизмов можно воспользоваться справочником по методам БСП с примерами кода.
Посмотрим на пример того, как вызывается этот механизм в коде:
// В обработке заполнения или при создании на сервере может вызываться:
ЗаполнениеСвойствПоСтатистикеСервер.ЗаполнитьСвойстваОбъекта(ЭтотОбъект);
Данные о накопленной статистике хранятся в системной таблице Хранилище общих настроек. Ключ объекта в этом хранилище обычно имеет вид СтатистикаЗаполненияРеквизитов. Важно понимать, что это не обычный регистр сведений, который можно легко открыть и отредактировать через интерфейс, а сериализованные данные в хранилище настроек.
Как отмечают практикующие специалисты, иногда такая помощь платформы бывает неудобной. Разберем ситуацию: в компании принято решение, что организация в заказе должна жестко определяться выбранным договором. Пользователь выбирает договор, срабатывает логика пересчета, и организация меняется. Но если статистика уже подставила «неверную» организацию, это может привести к путанице или лишним итерациям выбора. Для контроля корректности учета после такой путаницы применяется автоматическая сверка бухгалтерских и налоговых проводок между базами.
В современных версиях 1С:ERP (начиная с определенных релизов БСП) этим механизмом можно и нужно управлять.
Если вы хотите изменить поведение системы, выполните следующие действия:
Если вы разрабатываете собственный документ и хотите включить или исключить его из этого механизма, обратите внимание на следующие моменты:
Проверьте, включен ли ваш документ в состав определяемого типа ОбъектСПоддержкойЗаполненияПоСтатистике. Если документ там присутствует, БСП будет автоматически пытаться анализировать его реквизиты.
Если вам нужно программно подавить заполнение по статистике в определенном контексте, можно использовать параметры заполнения. Выясним причину подстановки, проанализировав стек вызовов в процедуре ОбработкаЗаполнения модуля объекта. Часто достаточно убедиться, что реквизит уже заполнен другим, более приоритетным алгоритмом, и тогда статистика его не перезапишет.
Важный нюанс: Механизм статистики срабатывает только в том случае, если поле на момент вызова функции ЗаполнитьСвойстваОбъекта остается пустым. Если вы программно установили организацию в начале ОбработкиЗаполнения, статистика её не изменит.
Таким образом, мы выяснили, что «невидимое» заполнение организации — это результат работы интеллектуальной подсистемы БСП. Она призвана ускорить ввод данных, минимизируя количество кликов, но требует понимания принципов своей работы для корректной настройки бизнес-процессов предприятия.