Скидку показываем, наценку - нет

Фрагмент демонстрационного счета на оплату
Фрагмент демонстрационного счета на оплату
Фрагмент демонстрационного счета на оплату

Всем привет!

После этой истории маркетологи полюбят 1с...

Задача. На сырье (утеплитель) выросли закупочные цены (на 15%), поэтому на часть готовой продукции необходимо поднять продажные цены. Но не на всю готовую продукцию, а только на часть - на "утепленные" трубы.

Программа 1С:Управление торговлей, ред. 10.3 позволяет использовать механизм ценовых групп. Я добавил ценовую группу "Утепленка - наценка 15%". Название говорящее, чтобы через полгода вспомнить, что и зачем делал. Присвоил ценовую группу всем утепленным трубам, задал условие наценки в 15% через документ "Установка скидок номенклатуры по ценовым группам" (рис.1).

рис.1. Назначил номенклатуре ценовую группу и провел документ Установка скидок по ценовым группам
рис.1. Назначил номенклатуре ценовую группу и провел документ Установка скидок по ценовым группам
рис.1. Назначил номенклатуре ценовую группу и провел документ Установка скидок по ценовым группам

В документе "Заказ покупателя" при выборе утепленной трубы срабатывает автоматическая наценка в 15%. Моделируем далее: если мы захотим сделать ручную скидку в 10%, то на печатной форме Заказа отобразится исходная цена, наценка, а не скидка (15% наценки больше 10% скидки - получается в итоге наценка 5%), итоговая сумма как будто без скидки 10%, но с наценкой в 5%...

Рис. 2. Демонстрация документа Заказ покупателя
Рис. 2. Демонстрация документа Заказ покупателя
Рис. 2. Демонстрация документа Заказ покупателя

Получается, что при использовании типового механизма покупатель просто не увидит скидку в 10%! Логично, что после задачи увеличения цен на утепленную продукцию на 15% была озвучена задача "Наценку надо скрыть, скидку - показать".

Далее я переработал механизм печати Заказа так, чтобы наценка не выводилась - учитывал ее сразу в цене, а скидка показывалась.

Сравните цены и скидку в документе и в печатной форме - рис.2 и 3. Реализацию доработок опишу ниже.

Рис. 3. Демонстрация печатной формы Заказ покупателя (конечный вариант)
Рис. 3. Демонстрация печатной формы Заказ покупателя (конечный вариант)
Рис. 3. Демонстрация печатной формы Заказ покупателя (конечный вариант)

Реализация доработок. Я разделил понятия "скидка" и "наценка": будем считать, что у компании используются только ручные скидки и автоматические наценки по ценовым группам. Также доработал алгоритм печати (рис. 4).

Рис. 4. Разделил скидку и наценку, добавил расчет для разных сценариев
Рис. 4. Разделил скидку и наценку, добавил расчет для разных сценариев
Рис. 4. Разделил скидку и наценку, добавил расчет для разных сценариев

При этом будем считать, что остальные автоматические скидки не используются (рис. 5). Как оказалось, если исключить использование каких-либо дополнительных автоматических скидок, то автоматическая наценка срабатывать не будет... Разница между наценкой и скидкой состоит только в том, что наценка это когда скидка отрицательная...

Пришлось и здесь доработать алгоритм.

Рис. 5. Учетная политика , раздел Скидки - ничего не используем
Рис. 5. Учетная политика , раздел Скидки - ничего не используем
Рис. 5. Учетная политика , раздел Скидки - ничего не используем

Также пришлось доработать расчет итоговой суммы в зависимости от такой логики: сначала считаем сумму позиции с учетом наценки (если наценка есть), затем считаем сумму с учетом скидки относительно предыдущей суммы (при условии, что скидка есть) (рис. 6).

Если использовать типовой механизм, то он считает итоговую сумму некорректно - математика против - сравните: (Х + 15%) - 10% совсем не равно Х + 5%.

(Х + 15%) - 10% = Х * 1,15 * 0,9 = Х * 1,035 совсем не равно Х*1,05

Рис. 6. Добавил расчет итоговой суммы с учетом наценки и скидки: сначала считаем наценку - затем от полученной суммы вычитаем скидку.
Рис. 6. Добавил расчет итоговой суммы с учетом наценки и скидки: сначала считаем наценку - затем от полученной суммы вычитаем скидку.
Рис. 6. Добавил расчет итоговой суммы с учетом наценки и скидки: сначала считаем наценку - затем от полученной суммы вычитаем скидку.

Понятно, что типовой механизм ручной и автоматической скидки (наценки) накладывается друг на друга, дополняет или уменьшает одно другим. А это значит, что типовой механизм нам не подходит - значит надо дорабатывать программу.

Ко всему прочему, были доработаны печатные формы документов Счета на оплату и Реализации товаров и услуг.

Во время демонстрации задачи появилось замечание, что цена имеет "хвостик" в виде копеек, что не допустимо. Пришлось искать очередное новое решение.

Для начала добавил поле "Наценка" в справочник "Ценовые группы" (см. рис. 7 и 8). В пару модулей добавил увеличение цены на размер наценки.

Рис. 7 и 8. Доработка механизма автоматической наценки для ценовых групп
Рис. 7 и 8. Доработка механизма автоматической наценки для ценовых групп
Рис. 7 и 8. Доработка механизма автоматической наценки для ценовых групп

Также добавил округление итоговой суммы по позициям - я такое часто использую на проектах (рис 9).

Рис. 9. Ручное округление сумм по строкам.
Рис. 9. Ручное округление сумм по строкам.
Рис. 9. Ручное округление сумм по строкам.

Исходный код округления сумм - простой - рис .10.

Рис. 10. Исходный код округления сумм по строкам товаров
Рис. 10. Исходный код округления сумм по строкам товаров
Рис. 10. Исходный код округления сумм по строкам товаров

Обратите внимание, что срабатывает вызов функции ПриИзмененииСуммыТабЧасти(), в которой происходит пересчет или цены или скидки в зависимости от настроек программы. Я заранее настроил всем пользователям пересчет скидок, а не цены при изменении суммы. Что меня и Заказчика устраивает. Поэтому округление суммы всегда сопровождается небольшой коррекцией скидок.

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

Вот так, зная специфику ведения учета Заказчика, я смог подобрать не универсальное, но наилучшее и оптимальное решение.

И так решилась задача, условное имя которой "Наценку не показываем, скидку - показываем".

*Объем работ: два вечера, один рабочий день, две демонстрации с обсуждением задачи по 30 минут (промежуточная и итоговая), общее время 9 часов, срок исполнения две недели. И как всегда, фокус на задаче клиента во время ничегонеделания (отдыха) привел к озарению и поиску оптимального решения. Да здравствует ничегонеделание!

Всем добра!