Как изменить отображение и логику ввода скидок и наценок в документах 1С?

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

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

Анализ проблемы и риски

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

Поэтому мы пойдем по пути разделения: представление данных для пользователя и хранение данных в системе.

Метод первый: Использование дополнительных реквизитов (рекомендуемый)

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

  1. Добавим в табличную часть документа новый реквизит, например, ПроцентСкидкиНаценкиПользовательский.
  2. Разместим это поле на форме вместо стандартного поля ПроцентРучнойСкидки.
  3. В обработчике события ПриИзменении для нового поля мы будем выполнять пересчет.

Посмотрим, как это выглядит программно:


&НаКлиенте
Процедура ТоварыПроцентСкидкиНаценкиПользовательскийПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    // Инвертируем значение для записи в стандартный реквизит
    ТекущиеДанные.ПроцентРучнойСкидки = ТекущиеДанные.ПроцентСкидкиНаценкиПользовательский * -1;
    
    // Вызываем стандартный обработчик 1С для пересчета сумм документа
    ТоварыПроцентРучнойСкидкиПриИзменении(Элемент);
КонецПроцедуры

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

Метод второй: Условное оформление и визуальное преобразование

Если задача стоит только в том, чтобы изменить внешний вид (например, убрать красный цвет у отрицательных чисел или изменить подпись), не обязательно менять структуру данных. В управляемых формах 1С существует мощный инструмент — Условное оформление.

Разберем шаги по настройке:

Почему не стоит менять значение напрямую?

В ходе обсуждения мы выяснили, что простая инверсия значения в обработчике ПриИзменении (например, умножение на -1 при каждом вызове) может привести к логическим ошибкам. Если пользователь откроет строку документа несколько раз или изменит значение повторно, данные в ПроцентРучнойСкидки будут постоянно «переворачиваться», что приведет к непредсказуемым результатам.

Важные рекомендации:

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

← На главную