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