При переходе на современные редакции «1С:Управление торговлей» (УТ 11) с устаревших конфигураций «1С:Торговля и склад 7.7» или «Управление торговлей 10.3» многие специалисты сталкиваются с неожиданным изменением: в системе отсутствует привычный справочник или регистр персональных настроек пользователя, где ранее можно было жестко задать реквизиты вроде «Основной склад», «Основной покупатель» или «Основная касса». Разберем, как устроен этот механизм в УТ 11, почему разработчики изменили архитектуру и как настроить автозаполнение реквизитов штатными средствами и с помощью доработок.
Проанализируем концепцию типовой конфигурации. В УТ 11 разработчики отказались от концепции жестко зафиксированных персональных значений по умолчанию для каждого оператора. Вместо этого задействованы другие принципы:
Подразделение в справочнике Пользователи, откуда подтягиваются связанные параметры.Прежде чем переходить к доработке программного кода, рассмотрим возможности программы, доступные в пользовательском режиме:
Посмотрим на решение, предложенное участниками сообщества, когда требуется строго зафиксировать розничного покупателя и соглашение при открытии новой формы документа. Рассмотрим пример для формы документа РеализацияТоваровУслуг:
#Область ОбработчикиСобытийФормы
Если НЕ ЗначениеЗаполнено(Объект.Контрагент) Тогда
Объект.Партнер = Справочники.Партнеры.РозничныйПокупатель;
Объект.Контрагент = Справочники.Контрагенты.РозничныйПокупатель;
Объект.Соглашение = Справочники.СоглашенияСКлиентами.НайтиПоНаименованию("Типовое соглашение с клиентами");
КонецЕсли;
#КонецОбласти
Также на стороне формы можно обработать сопутствующие события изменения партнера для корректного пересчета связанных реквизитов документа:
Если Объект.Партнер.Пустая() Тогда
Объект.Партнер = ПолучитьРозничногоПокупателяНаСервере();
ПартнерПриИзменении(Объект.Партнер);
КонецЕсли;
Важное замечание: прямое заполнение реквизитов в процедуре формы ПриОткрытии на клиенте имеет существенный минус — оно срабатывает только при интерактивном создании документа пользователем. Если документ формируется программно, загружается из внешних систем или создается на основании другого объекта, этот код не выполнится.
Разберем наиболее надежный и архитектурно правильный метод доработки с сохранением конфигурации на поддержке. Для этого используем расширение конфигурации и перехватим событие заполнения данных объекта:
РеализацияТоваровУслуг или ЗаказКлиента).&После("ОбработкаЗаполнения").Рассмотрим пример кода в модуле объекта расширения:
&После("ОбработкаЗаполнения")
Процедура Расш1_ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
// Проверяем, что документ новый и реквизит еще не заполнен
Если НЕ ЗначениеЗаполнено(ЭтотОбъект.Партнер) Тогда
// Получаем предопределенные значения или настройки
ЭтотОбъект.Партнер = Справочники.Партнеры.РозничныйПокупатель;
ЭтотОбъект.Контрагент = Справочники.Контрагенты.РозничныйПокупатель;
// Заполняем соглашение по умолчанию
НайденноеСоглашение = Справочники.СоглашенияСКлиентами.НайтиПоНаименованию("Типовое соглашение с клиентами");
Если ЗначениеЗаполнено(НайденноеСоглашение) Тогда
ЭтотОбъект.Соглашение = НайденноеСоглашение;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Такой подход обеспечивает выполнение логики на стороне сервера, не создает лишних клиент-серверных вызовов при открытии формы и гарантирует, что реквизиты будут заполнены как при ручном создании документа, так и при программной генерации.