Как в заказе клиента показывать остатки по двум складам в 1С:УТ 11.4

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

В процессе оптовых и розничных продаж часто возникает ситуация, когда менеджеру необходимо видеть остатки товара не только на основном складе отгрузки, но и на других точках хранения (например, на центральном складе или складе-доноре). В конфигурации 1С:Управление торговлей 11.4 эта задача может быть решена несколькими способами: от простых настроек интерфейса до внесения изменений в программный код через расширения. Рассмотрим подробно каждый из вариантов.

Вариант 1. Использование панели подробностей в форме подбора

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

  1. Откроем документ Заказ клиента и перейдем к заполнению табличной части Товары.
  2. Нажмем кнопку Заполнить — Подобрать товары.
  3. В открывшейся форме подбора обратим внимание на нижнюю часть экрана. Если панель с информацией о складах не видна, нажмем кнопку Показать подробности (или соответствующую гиперссылку в зависимости от версии интерфейса).
  4. В появившейся панели отобразится список всех складов, на которых есть выбранный товар, с указанием доступного количества.

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

Вариант 2. Настройка групп складов для отгрузки

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

Проанализируем шаги настройки:

  1. Перейдем в раздел НСИ и администрирование — Склады и магазины.
  2. Создадим новую группу складов или выберем существующую.
  3. В настройках группы установим флаг Разрешить отгрузку из группы складов.
  4. В документе Заказ клиента в поле Склад выберем не конкретный склад, а созданную группу.

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

Вариант 3. Использование отчета «Остатки и доступность товаров»

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

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

Вариант 4. Программная доработка (для разработчиков)

Если типовые средства не подходят и требуется выводить остаток по конкретному второму складу отдельной колонкой непосредственно в списке подбора, необходимо внести изменения в конфигурацию (рекомендуется использовать Расширение).

Основная задача здесь — модифицировать динамический список товаров. Посмотрим на техническую реализацию. Оптимальным местом для внедрения кода является обработчик события ПриПолученииДанныхНаСервере для таблицы товаров в форме подбора.

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


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

Обратите внимание, что для работы этого кода в динамическом списке формы подбора должна быть предварительно добавлена колонка (путь к данным может быть пустым) с именем ОстатокНаВторомСкладе.

Вариант 5. Оптимизация через СКД (Схему компоновки данных)

Форма подбора в УТ 11 построена на использовании системы компоновки данных. Мы можем модифицировать сам запрос схемы. Разберем этот путь подробнее:

  1. В расширении найдем схему компоновки данных, отвечающую за подбор товаров (обычно это Справочник.Номенклатура.Форма.ФормаПодбораТоваров).
  2. Добавим Левое соединение к таблице остатков регистра ТоварыНаСкладах.Остатки.
  3. В параметрах виртуальной таблицы укажем жесткую ссылку на второй склад или вынесем это в настройки пользователя.
  4. Выведем полученное поле в список доступных полей выбора.

Этот метод считается более производительным, так как 1С сама оптимизирует запрос к базе данных на уровне платформы, и нам не нужно вручную обрабатывать каждую строку при получении данных.

Проверка прав доступа (RLS)

Проанализируем еще одну причину, по которой менеджеры могут не видеть остатки по второму складу. В УТ 11 часто включен механизм RLS (Ограничение доступа на уровне записей). Если второму складу назначена группа доступа, к которой у менеджера нет прав, то никакие программные доработки не помогут — остатки будут возвращать "0".

Выясним, как это исправить: необходимо проверить настройки групп доступа в разделе Администрирование — Настройки пользователей и прав — Группы доступа и убедиться, что у менеджеров продаж есть право "Чтение" для всех необходимых складов, даже если они не могут с них отгружать напрямую.

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

← На главную