Как в 1С 7.7 создать удобный интерфейс для распределения заказов по складам?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы торговой компании часто возникает задача распределить один клиентский заказ по нескольким складам. Например, часть товара нужно отгрузить с центрального склада, а часть — из ближайшего магазина. Стандартные документы не всегда предоставляют удобный механизм для такой операции, особенно если требуется ручная корректировка автоматического распределения. Рассмотрим, как реализовать подобный диалог в 1С v7.7, проанализировав различные подходы.

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

Решение 1: Жёсткая структура документа (колонки под каждый склад)

Этот подход, предложенный автором изначально, заключается в том, чтобы в табличной части документа (например, "Заказ" или "Перемещение") создать колонки под каждый склад: КоличествоСклад1, КоличествоСклад2 и так далее.

Преимущества:

  1. Простота реализации. Не требуется сложного программирования формы, достаточно добавить реквизиты в конфигураторе.
  2. Наглядность. Пользователь сразу видит "шахматку" в стандартном интерфейсе документа.

Недостатки:

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

Вывод: Этот вариант подходит только как очень быстрое и временное решение, если вы на 100% уверены, что количество складов не изменится в обозримом будущем. В большинстве случаев от него лучше отказаться в пользу более универсальных методов.

Решение 2: Модификация структуры документа с переносом склада в строки

Более правильный с точки зрения архитектуры данных подход. Вместо множества колонок для количества, в табличную часть документа добавляется один реквизит — Склад. Таким образом, одна строка исходного заказа разбивается на несколько строк в документе распределения.

Структура табличной части:

Преимущества:

  1. Максимальная универсальность. Система не зависит от количества складов. Их можно добавлять сколько угодно, не меняя структуру документа.
  2. Простота обработки. Запросы, отчеты и движения по регистрам строятся стандартным образом, используя измерение "Склад".

Недостатки:

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

Вывод: Этот вариант идеален для хранения данных, но требует дополнительной надстройки над интерфейсом. Он отлично сочетается со следующим решением.

Решение 3: Гибкий интерфейс на основе "Таблицы в режиме ввода данных"

Это самый мощный и гибкий подход с использованием стандартных средств 1С 7.7. Идея заключается в том, чтобы отделить визуальное представление от физического хранения данных. Данные хранятся "правильно" (как в Решении 2), а для пользователя рисуется удобная "шахматка" с помощью элемента управления Таблица.

Разберем по шагам, как это реализовать:

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

    Здесь мы программно формируем нашу "шахматку". Сначала создаем колонки: "Номенклатура", "Всего заказано", затем по одной колонке на каждый склад из справочника, и в конце "Итого распределено". После этого перебираем строки табличной части документа и "сворачиваем" их, заполняя ячейки нашей визуальной таблицы.

  4. Процедура чтения данных из таблицы при записи (ПриЗаписи() или по кнопке "ОК").

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

Посмотрим на примерный код логики чтения данных из таблицы:


Процедура ПрочитатьИзТаблицы()
    
    // Очищаем реальную табличную часть документа
    УдалитьСтроки();
    
    // Получаем список складов, чтобы соотнести с колонками
    СписокСкладов = СоздатьОбъект("СписокЗначений");
    // ... здесь код заполнения списка складов в том же порядке, что и колонки
    
    // Обходим строки нашей визуальной таблицы (элемент Таб)
    Для НомСтр = 1 По Таб.ВысотаТаблицы() Цикл
        
        // Получаем номенклатуру из первой колонки
        ТекНоменклатура = Таб.ПолучитьЗначение(НомСтр, 1);
        
        // Обходим колонки, соответствующие складам
        Для НомКол = 1 По СписокСкладов.РазмерСписка() Цикл
            
            ТекСклад = СписокСкладов.ПолучитьЗначение(НомКол);
            
            // Номер колонки в таблице может быть сдвинут (например, первая колонка - номенклатура)
            // Предположим, колонки складов начинаются с 3-й
            КолонкаСклада = НомКол + 2; 
            
            ТекКоличество = Таб.ПолучитьЗначение(НомСтр, КолонкаСклада);
            
            Если ПустоеЗначение(ТекКоличество) = 0 И ТекКоличество > 0 Тогда
                // Если в ячейке есть количество, создаем строку в документе
                НоваяСтрока();
                Номенклатура = ТекНоменклатура;
                Склад = ТекСклад;
                Количество = ТекКоличество;
                // ... заполняем остальные реквизиты (цена, сумма)
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЦикла;
    
КонецПроцедуры

Преимущества:

Недостатки:

Решение 4: Использование Таблицы Значений (ТЗ) на форме

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

Логика схожа: при открытии создаем ТЗ с колонками-складами, заполняем ее, а при записи — читаем данные из ТЗ и переносим в документ. Работа с данными в ТЗ программно несколько проще, чем с ячейками Таблицы.

Преимущества:

Недостатки:

Решение 5: Логический подход с "виртуальным" складом

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

Суть подхода:

  1. Создается фиктивный, "виртуальный" склад, например, "Заказы к распределению".
  2. Все заказы от менеджеров по продажам автоматически резервируют товар на этом виртуальном складе. Менеджеры не думают о том, где физически лежит товар.
  3. Создается отдельный документ или автоматизированное рабочее место (АРМ) логиста "Распределение заказов".
  4. Логист в этом АРМ видит остатки на виртуальном складе ("потребность") и остатки на реальных складах. С помощью удобного интерфейса (например, реализованного по Решению 3) он "перемещает" товар с виртуального склада на реальные.

Преимущества:

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

← На главную