Как добавить ручной учет упаковок и мест в документ «Заказ покупателя» в 1С?

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

В практике программиста 1С часто возникает задача, когда стандартный механизм единиц измерения с фиксированными коэффициентами не удовлетворяет требования бухгалтерии. Типичный пример: учет товара в мешках или коробках, где реальное количество мест может варьироваться независимо от общего веса или объема товара. Бухгалтеры часто требуют возможности ручного ввода количества мест «без танцев с бубном» и автоматических пересчетов, которые могут исказить первичные данные.

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

Анализ проблемы жестких коэффициентов

Стандартная логика 1С предполагает использование справочника ЕдиницыИзмерения, где каждая единица (например, «Мешок») имеет жесткий коэффициент по отношению к базовой единице («кг»). Однако в реальности фасовка может быть нестабильной: в 10 мешков могут упаковать как 500 кг, так и 505 кг сахара из-за особенностей производства или логистики. Если система автоматически пересчитывает количество мест при изменении веса, это мешает бухгалтеру выписать документы на фактическое количество тары.

Для решения этой задачи мы проанализируем несколько подходов: от простого добавления колонок до создания независимых механизмов управления упаковками.

Способ 1. Добавление независимых реквизитов в табличную часть

Самый прямой и надежный способ удовлетворить требование «ручного ввода» — это добавление собственных реквизитов в табличную часть Товары документа ЗаказПокупателя (или аналогичного). Разберем по шагам, как это реализовать.

Шаг 1. Модификация структуры данных. Добавим два реквизита в табличную часть:

  1. КоличествоМест (Тип: Число, точность 0 или 3 в зависимости от специфики).
  2. ВидУпаковки (Тип: СправочникСсылка.ЕдиницыИзмерения или просто Строка, если номенклатура упаковок не важна).

Шаг 2. Настройка логики пересчета. Чтобы автоматизация не мешала пользователю, но помогала, мы внедрим флаг или программную проверку «Ручного редактирования». Проанализируем пример кода для обработчика события ПриИзменении количества товара:


Процедура ТоварыКоличествоПриИзменении(Элемент)
    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
    
    // Если у нас задан коэффициент и пользователь не выбрал ручной режим
    Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест) Тогда
        КоэффициентМеста = СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест.Коэффициент;
        Если КоэффициентМеста <> 0 Тогда
            // Предлагаем пересчитать, но не заставляем
            ТекстВопроса = "Пересчитать количество мест по коэффициенту?";
            Если Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
                СтрокаТабличнойЧасти.КоличествоМест = СтрокаТабличнойЧасти.Количество / КоэффициентМеста;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Способ 2. Ориентация на стандарты ТОРГ-12 и УПД

Часто бухгалтеры просят изменения формы, ориентируясь на печатный бланк ТОРГ-12. Разберем структуру этого документа, чтобы понять, какие именно данные нам нужно хранить:

Для реализации этого подхода мы можем добавить в табличную часть реквизит ЕмкостьМеста. Тогда логика будет следующей: КоличествоМест = Количество / ЕмкостьМеста. Если бухгалтер хочет вводить количество мест вручную, мы позволяем редактировать КоличествоМест, а ЕмкостьМеста вычислять как справочный показатель.

Способ 3. Учет «гуляющего» веса в мешках

Проанализируем ситуацию со специфическим товаром (сахар, мука, зерно). Здесь важно фиксировать вес каждого конкретного мешка. В продвинутых решениях мы рекомендуем использовать отдельную подчиненную таблицу «Состав грузовых мест».

В этой таблице для каждой строки основного документа создаются записи:

  1. Мешок №1 — 50.1 кг
  2. Мешок №2 — 49.8 кг
  3. ...

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

Реализация через расширения (для версии 8.3)

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

В расширении мы создаем те же реквизиты и через механизм &После подключаемся к процедурам расчета:


&НаКлиенте
&После("ТоварыКоличествоПриИзменении")
Процедура Расш1_ТоварыКоличествоПриИзменении(Элемент)
    // Ваша логика обновления колонки "Мешки" 
    // без изменения типового кода
КонецПроцедуры

Визуальное оформление и Юзабилити

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

Заключение

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

← На главную