Как правильно добавить поля в Заказ покупателя в 1С:УНФ и настроить списание материалов вместо готовой продукции?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Промышленность, строительство и АПК
← На главную

При адаптации 1С:УНФ под нужды мебельного или фасадного производства начинающие разработчики часто совершают критическую ошибку — пытаются создать новый документ "с нуля" вместо того, чтобы использовать штатные механизмы. Рассмотрим, почему создание дублирующих документов (например, "Свой заказ покупателя") ведет к потере связи с регистрами учета, и проанализируем правильные способы реализации специфических требований бизнеса.

Почему нельзя создавать копии типовых документов?

В системе 1С:УНФ все цепочки документов жестко связаны. Типовой документ ЗаказПокупателя делает движения по множеству регистров накопления: ЗаказыПокупателей, Продажи, Запасы, ГрафикДвиженияДенежныхСредств и другим. Создав свой документ, вы будете вынуждены вручную прописывать движения по всем этим регистрам. В противном случае у вас перестанут работать типовые отчеты (например, "План-фактный анализ продаж" или "Анализ заказов").

Важный момент: если ваша задача — добавить высоту, ширину и квадратуру фасада, а также изменить логику списания (списывать материалы вместо готового изделия), рассмотрим пошагово, как это сделать грамотно.

Решение 1: Расширение конфигурации и дополнительные реквизиты

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

  1. Создадим расширение и добавим в него документ ЗаказПокупателя.
  2. Добавим необходимые реквизиты (Высота, Ширина, Квадратура) непосредственно в табличную часть Запасы в расширении. Они будут отображаться в форме документа как родные поля.
  3. Чтобы изменить логику проведения и при этом не удалять типовой код, используем аннотацию &После или &Вместо для процедуры проведения.

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


&НаКлиенте
Процедура Расш1_ВысотаПриИзменении(Элемент)
    ТекущаяСтрока = Элементы.Запасы.ТекущиеДанные;
    Если ТекущаяСтрока <> Неопределено Тогда
        // Рассчитываем квадратуру в метрах
        ТекущаяСтрока.Квадратура = (ТекущаяСтрока.Высота * ТекущаяСтрока.Ширина) / 1000000;
        // Пересчитываем количество, если это необходимо по логике бизнеса
        ТекущаяСтрока.Количество = ТекущаяСтрока.Квадратура;
    КонецЕсли;
КонецПроцедуры

Решение 2: Параметрические спецификации (идеально для фасадов)

Выясним причину, по которой автор темы хотел менять логику списания. Часто это связано с тем, что "Фасад" — это не готовый товар на складе, а изделие, которое нужно изготовить из материалов. В 1С:УНФ для этого существуют Паметрические спецификации.

Разберем алгоритм работы с ними:

  1. В карточке номенклатуры "Фасад" создаем спецификацию.
  2. В спецификации указываем формулы расчета материалов. Например, для материала "Пленка ПВХ" количество будет равно [Высота] * [Ширина] / 1000000 * 1.1 (где 1.1 — коэффициент запаса).
  3. В ЗаказеПокупателя пользователь вводит только параметры (Высота, Ширина), а система сама рассчитывает потребность в материалах.

Этот метод позволяет не менять программный код проведения РасходнойНакладной. Списание материалов произойдет в момент оформления документа Производство, который будет создан на основании заказа.

Решение 3: Использование функционала "Наборы"

Если бизнес-процесс предполагает, что производства как отдельного этапа нет, но при продаже "Фасада" со склада должны списываться "МДФ" и "Клей", используем Наборы. Рассмотрим, как это настроить:

Преимущество: В печатной форме покупатель видит "Фасад", а в регистре Запасы фиксируется списание материалов. Программировать при этом ничего не нужно.

Как изменить логику проведения через расширение

Если же вам все-таки необходимо, чтобы РасходнаяНакладная не делала движений по конкретной номенклатуре, проанализируем использование перехвата проведения. Вместо того чтобы удалять типовой код, мы можем очистить таблицу движений в самом конце процедуры.


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

Рекомендации по переходу на УНФ 3.0

Важно помнить, что 1С:УНФ активно развивается. Версия 3.0 принесла значительные изменения в интерфейс и интеграцию с "1С:Розница". Если вы сейчас создадите "свой документ" в версии 1.6, то при обновлении на 3.0 вы столкнетесь с тем, что ваша доработка станет несовместимой с новыми АРМ (Автоматизированными рабочими местами) менеджеров. Используя дополнительные реквизиты и расширения, вы обеспечиваете легкую миграцию на новые версии программы.

Подведем итог: для решения задачи по расчету фасадов в 1С:УНФ следует комбинировать дополнительные реквизиты в расширении (для визуализации размеров) и параметрические спецификации (для автоматизации расчетов и списаний). Это сохранит целостность управленческого учета и позволит системе работать в штатном режиме без ошибок в регистрах.

← На главную