Как заполнить обеспечение в Заказе клиента по данным собственной колонки расширения?

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

При разработке расширений для типовых конфигураций, таких как Управление торговлей 11, часто возникает необходимость использовать собственные данные для стандартных бизнес-процессов. Одна из таких задач — заполнение обеспечения по количеству, указанному в добавленной колонке КоличествоТСД, вместо стандартной колонки Количество. Разберем, почему типовой механизм не позволяет это сделать «в лоб» и как правильно реализовать такое решение.

Понимание проблемы

Типовые процедуры, отвечающие за расчет обеспечения, такие как ТаблицаЗаполнениеОбеспечения из общего модуля ОбеспечениеСервер, спроектированы для работы с жестко заданной структурой табличной части Товары. Процедура ожидает наличие колонки Количество и выполняет с ней расчеты, учитывая резервы, обособление и остатки на складах. Передать туда произвольные данные невозможно, так как процедура работает непосредственно с объектом документа.

Решение методом временной подмены данных («Бэкап»)

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

Для реализации этого метода следуйте по шагам:

  1. Добавьте в табличную часть Товары вспомогательную колонку (например, КоличествоИсходное), если вы не хотите рисковать потерей данных в основной колонке.
  2. Перед вызовом процедуры заполнения обеспеченности сохраните текущие значения Количество во вспомогательную колонку или массив.
  3. Перенесите значения из колонки КоличествоТСД в колонку Количество для всех необходимых строк.
  4. Вызовите оригинальную функцию ОбеспечениеСервер.ТаблицаЗаполнениеОбеспечения.
  5. Сразу после получения результата восстановите значения Количество из сохраненного «бэкапа».

Пример программной реализации

Рассмотрим структуру кода, который необходимо реализовать внутри вашего расширения:


// 1. Сохраняем исходные данные
Для Каждого СтрокаТовары Из Объект.Товары Цикл
    СтрокаТовары.КоличествоИсходное = СтрокаТовары.Количество;
    СтрокаТовары.Количество = СтрокаТовары.КоличествоТСД;
КонецЦикла;

// 2. Вызываем типовой механизм
Таблица = ОбеспечениеСервер.ТаблицаЗаполнениеОбеспечения(МассивСтрок, Объект, Объект.Товары, ПараметрыЗаполнения, ПараметрыДокумента);

// 3. Восстанавливаем данные
Для Каждого СтрокаТовары Из Объект.Товары Цикл
    СтрокаТовары.Количество = СтрокаТовары.КоличествоИсходное;
КонецЦикла;

Важные рекомендации при разработке

При использовании данного подхода важно учитывать следующие аспекты:

Таким образом, комбинируя методы временной подмены или пост-обработки результата в расширении, вы сможете добиться корректного заполнения обеспечения, опираясь на ваши специализированные данные КоличествоТСД, при этом сохраняя работоспособность всех типовых механизмов Управления торговлей 11.

← На главную