При переходе между различными конфигурациями «1С:Предприятие» пользователи и разработчики часто сталкиваются с различиями в механизмах подстановки значений по умолчанию. Рассмотрим вопрос, существует ли в конфигурации «1С:Управление производственным предприятием» (УПП) инструмент, позволяющий произвольно настраивать автозаполнение реквизитов документов при их создании, и разберем возможные пути решения этой задачи.
Проанализируем архитектуру конфигурации. В типовой «1С:Бухгалтерия предприятия» регистр сведений Настройки реквизитов документов не является стандартным объектом метаданных: подобная функциональность представляет собой либо доработку программистов, либо фрагмент отраслевого решения. В типовых решениях БСП для схожих целей применяются ограниченные персональные настройки либо механизм статистики заполнения реквизитов.
В типовой конфигурации 1С:Управление производственным предприятием механизма произвольного сопоставления полей документов произвольным значениям нет. Набор автоматически подставляемых реквизитов строго ограничен:
ПланВидовХарактеристик.НастройкиПользователей.Настройки пользователя.ЗаполнениеДокументов (в частности, через процедуру ЗаполнитьШапкуДокумента), которая вызывается в событии ПриОткрытии формы нового документа.Таким образом, стандартными средствами пользователь УПП может задать лишь базовые параметры (основную организацию, склад, кассу, подразделение), но не может самостоятельно указать в режиме предприятия автоподстановку произвольного реквизита в произвольный документ.
Если требуется реализовать функционал произвольной подстановки значений по умолчанию без постоянного вмешательства в код каждого документа, разработаем универсальное решение на подписках. Разберем по шагам, как построить такую подсистему:
НастройкиРеквизитовДокументов. В качестве измерений укажем пользователя (ссылка на Справочник.Пользователи), имя документа (тип Строка) и имя реквизита (тип Строка). Ресурсом будет выступать Значение с составным типом данных, включающим все необходимые справочники и примитивные типы.ОбработкаЗаполнения с объектом-источником ДокументОбъект.Посмотрим на пример реализации алгоритма в обработчике подписки:
Процедура ОбработкаЗаполненияДокументовАвтоподстановка(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт
ИмяДокумента = Источник.Метаданные().Имя;
ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Настройки.ИмяРеквизита КАК ИмяРеквизита,
| Настройки.Значение КАК Значение
|ИЗ
| РегистрСведений.НастройкиРеквизитовДокументов КАК Настройки
|ГДЕ
| Настройки.Пользователь = &Пользователь
| И Настройки.ИмяДокумента = &ИмяДокумента";
Запрос.УстановитьПараметр("Пользователь", ТекущийПользователь);
Запрос.УстановитьПараметр("ИмяДокумента", ИмяДокумента);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Попытка
Источник[Выборка.ИмяРеквизита] = Выборка.Значение;
Исключение
// Обработка ситуации, если реквизит недоступен для записи напрямую
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Если требуется добавить всего один или два специфических реквизита, разберем более нативный для архитектуры УПП путь без создания новых регистров:
ПланВидовХарактеристик.НастройкиПользователей в конфигураторе и добавим новый предопределенный элемент для нужного параметра, назначив ему требуемый тип данных.ЗаполнениеДокументов и дополним процедуру ЗаполнитьШапкуДокумента считыванием добавленного значения из регистра сведений Настройки пользователя.Проанализируем технические нюансы, с которыми придется столкнуться при реализации любого из вариантов:
ПриОткрытии, ПриИзменении связанных полей вроде организации или договора контрагента). Если заполнить реквизит в событии ОбработкаЗаполнения, код формы при инициализации может очистить или принудительно пересчитать значение. Поэтому универсальные механизмы требуют тщательного тестирования на формах конкретных документов.&Вместо, &После) для логики обычных форм недоступно, поэтому внедрение подсистемы потребует включения возможности изменения конфигурации.