Как реализовать автоматическую подстановку максимального остатка товара в форме подбора УТ 11

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

В типовых конфигурациях 1С, таких как Управление торговлей 11, ERP 2 или Комплексная автоматизация 2, механизм подбора товаров спроектирован таким образом, что при выборе позиции в корзину по умолчанию устанавливается количество, равное единице. Для оптовой торговли, где менеджеры часто отгружают весь доступный остаток, это создает дополнительные трудозатраты: приходится вручную корректировать количество для каждой строки. В данной статье мы разберем, как программно изменить это поведение и сделать так, чтобы система автоматически предлагала максимально доступное количество товара на текущем складе.

Анализ архитектуры механизма подбора

Прежде чем приступать к правкам кода, проанализируем, как работает форма подбора. В современных редакциях УТ 11 подбор — это сложная обработка, использующая общие модули для обмена данными между списком номенклатуры и временной корзиной. Ключевым звеном здесь является структура данных, описывающая выбранную строку номенклатуры. Если в этой структуре нет данных о доступном остатке, клиентская часть формы просто не «узнает», какое число нужно подставить.

Основная логика сосредоточена в общем модуле ПодборТоваровКлиентСервер и в самой форме подбора номенклатуры. Процесс добавления товара обычно инициируется двойным кликом или перетаскиванием (drag-and-drop).

Шаг 1: Расширение структуры строки номенклатуры

Первым делом нам необходимо убедиться, что данные об остатках передаются вместе с информацией о товаре. Для этого мы обратимся к функции, которая инициализирует структуру строки. Рассмотрим, как это сделать правильно через механизм расширений, чтобы не снимать конфигурацию с поддержки.

Нам потребуется внести изменения в общий модуль ПодборТоваровКлиентСервер в функцию СтруктураСтрокиНоменклатуры. Мы воспользуемся аннотацией &После, чтобы добавить наше поле Доступно в общую структуру:


&После("СтруктураСтрокиНоменклатуры")
Функция Расш1_СтруктураСтрокиНоменклатуры(Результат)
    
    // Добавляем поле, в котором будет храниться информация об остатке
    Результат.Вставить("Доступно", 0);
    
    Возврат Результат;
    
КонецФункции

Этот шаг критически важен. Без наличия этого ключа в структуре, любые попытки обратиться к ТекущаяСтрокаНоменклатуры.Доступно на стороне клиента могут вызвать ошибку или вернуть неопределенное значение.

Шаг 2: Модификация логики добавления в корзину на клиенте

Теперь, когда структура подготовлена, нам нужно найти место, где количество «1» жестко прописывается в коде. Как выяснилось в ходе обсуждения проблемы, наиболее эффективным местом для правки является функция ПолучитьПараметрыТовараПередДобавлениеВКорзину или непосредственно вызов в процедуре ДобавитьВКорзинуНаКлиенте.

Рассмотрим ситуацию, когда мы хотим, чтобы при клике на товар он сразу попадал в корзину с полным остатком. Выясним причину, почему стандартная процедура ставит единицу. Обычно это выглядит так: ПараметрыТовара.КоличествоУпаковок = 1;. Мы заменим эту логику на использование данных из динамического списка.

Пример модификации кода в форме подбора:


&НаКлиенте
Процедура Расш1_ДобавитьВКорзинуНаКлиенте(ПараметрыФормы)
    
    // Получаем текущие данные из списка номенклатуры
    ТекущаяСтрока = Элементы.СписокНоменклатуры.ТекущиеДанные;
    
    Если ТекущаяСтрока <> Неопределено Тогда
        // Вместо фиксированной единицы подставляем доступный остаток
        // Важно: убедитесь, что колонка "Доступно" выведена в динамический список
        ПараметрыТовара.КоличествоУпаковок = ТекущаяСтрока.Доступно;
    КонецЕсли;
    
КонецПроцедуры

Шаг 3: Обработка различных режимов подбора

Важно помнить, что в УТ 11 есть настройка «Запрашивать цену и количество». Посмотрим на два варианта развития событий:

  1. Флаг установлен: Открывается модальное окно (или всплывающая форма) ввода количества. В этом случае нам нужно доработать процедуру ОткрытьФормуВводаЦенаКоличество, чтобы в поле «Количество» по умолчанию передавалось значение ТекущиеДанные.Доступно.
  2. Флаг снят: Товар мгновенно попадает в корзину. Здесь работает код, описанный в предыдущем шаге.

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


// В процедуре ОткрытьФормуВводаЦенаКоличество
ПараметрыНоменклатуры.Вставить("Количество", Элементы.СписокНоменклатуры.ТекущиеДанные.Доступно);

Нюансы работы с упаковками и характеристиками

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

1. Учет упаковок. Если в системе используются упаковки, то поле Доступно в динамическом списке может отображаться в базовых единицах измерения, а подбор может осуществляться в упаковках (например, коробках). В таком случае простое копирование значения приведет к ошибке в расчетах. Проверьте, в каких единицах выводится остаток, и при необходимости выполните пересчет через коэффициент упаковки.

2. Асинхронная загрузка остатков. В последних версиях 1С остатки в форме подбора могут подгружаться асинхронно для ускорения работы интерфейса. Если пользователь кликнет по товару до того, как система успела вычислить остаток, в поле Доступно может оказаться 0. Рекомендуется добавить проверку: если остаток еще не загружен или равен нулю, оставлять количество равным единице, чтобы не блокировать работу пользователя.

3. Характеристики и серии. Если ведется учет по характеристикам, убедитесь, что вы берете остаток именно по конкретной характеристике. В динамическом списке подбора остаток обычно детализирован, но при программном обращении к ТекущиеДанные важно не перепутать общий остаток по номенклатуре с остатком по конкретному уникальному идентификатору строки.

Рекомендации по стабильности решения

Чтобы решение было долговечным и не вызывало проблем при обновлении системы, придерживайтесь следующих правил:

Таким образом, мы проанализировали механизм работы формы подбора и реализовали автоматическую подстановку максимального количества. Это небольшое изменение способно значительно ускорить процесс формирования заказов и реализаций, делая работу менеджеров более эффективной и комфортной.

← На главную