Согласование цен по заказу

Программирование - Практика программирования

программирование согласование заказов

4
Согласование цен по заказу покупателя - менеджер указывает цену с признаком "На согласование". Руководитель визирует "Согласовано". Полный контроль над ценами в два клика. Отдел продаж - 20 менеджеров, 1 руководитель.

ДЛЯ КОГО

Для финансового директора - для понимания, что не Excel'ем единым жив финансовый и управленческий учет.

Для программиста - для понимания, как внедрить предлагаемую финансово-управленческую модель.

ПРО ЧТО

Вашему вниманию представлена статья - пошаговое внедрение в УТ 10.3 финансово-управленческой модели "Согласования цен по заказу покупателя или счету на оплату покупателя" без использования объектов метаданных "Бизнес-процессы" и "Задачи", без использования дополнительных специальных подсистем документооборота.

Подобная фин.-упр. модель не реализована типовым функционалом в УТ 10.3, поэтому потребовалась доработка УТ 10.3. Как и любая модель имеет свои допущения и ограничения. Внедрялась на конкретном предприятии с конкретными бизнес-процессами, и поэтому не претендует на универсальность.

Краткое описание

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

Ряд категорий используются только менеджерами - для них включен признак "Показывать менеджерам", остальные категории им не доступны для использования.

Согласование цен по заказу покупателя (счету на оплату) происходит так.

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

Тогда у менеджера при создании заказа на каждый товар устанавливается автоматом цена по прайсу. Далее, менеджер может выбрать другую категорию цен из раздела "Цены и валюты". Цены перезаполняются по новой категории.

У каждого менеджера есть ограничение, что ниже определенной категории цены документ проводить нельзя.

На этом типовые механизмы в части игр с ценами заканчиваются. 

Далее опишу свою разработку. При необходимости менеджер может снизить цену на товар -  он указывает новую цену в отдельной колонке "Цена новая" с признаком "На согласование". Сам признак - это тоже отдельная колонка. 

Руководитель постоянно мониторит список заказов. В форме имеется подсказка и фильтр на заказы, которые надо согласовать.

 
 Мониторинг заказов на согласование

Руководитель открывает заказ, напротив каждой позиции визирует "Согласовано".

Признак "Согласовано" - это отдельная колонка. При этом сумма по строке пересчитывается, фиксируется "Ответственный за согласование" и "Дата согласования" (см. код ниже).

 
 Алгоритм визирования "Согласовано"

Далее документ проводится и закрывается. При проведении программа проверит категорию цен Ответственного за согласование - чтобы не опуститься по цене ниже его категории. Поскольку у руководителя также установлено стандартное ограничение цен по "минимальной" категории.

Менеджер может продолжить редактировать заказ - добавлять новые товары - при этом согласованные строки товаров становятся не редактируемыми для всех пользователей, кроме Ответственного за согласование (см. код ниже).

 
 Блокировка согласованной строки товаров


Архитектура решения

В документ "Заказ покупателя" добавлены следующие реквизиты:

1) в шапку документа - реквизит "НаСогласование" - который хранит информацию "надо ли согласовывать данный заказ". Определяется перед записью документа (см. код ниже). Реквизит является служебным - на форме заказа не отображается.

2) в табличную часть "Товары" - добавлены колонки "НаСогласование", "ЦенаНовая", "Согласовано", "ОтветственныйЗаСогласование", "ДатаСогласования". 

Дата согласования нужна, чтобы проверять условие "цена действительна в течение 7 календарных дней", иначе будет выдано сообщение с блокировкой проведения "Необходимо пересогласовать цену". Ниже указаны алгоритмы проверок перед записью документа.

 
 Проверки перед записью документа

В модуле документа "Заказ покупателя" для проведения по регистру накопления "Заказы покупателей" переопределяется функция ПодготовитьТаблицуТоваров(). Этого достаточно, чтобы в движения заказа "села" согласованная новая цена (см. код ниже).

 
 Функция ПодготовитьТаблицуТоваров(...)

В процедуре ОбработкаПроведения() переопределяется процедура ПроверитьДопустимостьЦенОтпуска(ДокументОбъект, ИмяТабличнойЧасти, Отказ).

 
 Доработка процедуры ПроверитьДопустимостьЦенОтпуска(ДокументОбъект, ИмяТабличнойЧасти, Отказ)

Первая половина алгоритма переопределяемой процедуры - типовая, и все же я представляю полный листинг процедуры - чтобы можно было скопировать в свою конфигурацию. А в следующем абзаце описана суть изменений - по сути ядро модели.

 
 Переопределение процедуры ПроверитьДопустимостьЦенОтпуска
 
 Вспомомгательные и дополнительные процедуры общего модуля МодульДоработок

Ядро модели

В данной модели наибольшее количество изменений коснулось процедуры ПроверитьДопустимостьЦенОтпуска() - за основу взят типовой алгоритм. В начале процедуры собирается запрос, который в типовом варианте обходится в цикле как РезультатЗапроса - но я переопределил РезультатЗапроса на ТаблицуЗначений. В таблицу значений добавил свои колонки для анализа наименьшей цены - Новый МинимумЦен (см. код ниже).

 
 Адаптация типового алгоритма проверки цен - по сути это ядро модели

  Вот собственно и все.

Кроме основных доработок были доработаны другие алгоритмы и механизмы. Представляю в виде техзадания - по сравнению с затраченным временем на придумывание "основного ядра" механизма, эти работы заняли не так много времени.

1) Разработан механизм согласования цен в документе Счет на оплату. Механизм аналогичен механизму согласования для Заказа покупателя. (1,5 ч)

2) Доработан механизм "Заполнить и провести" в Заказе покупателя. (30 мин)

3) Разработан механизм - когда на основании согласованного Заказа создается Счет на оплату  - при этом счет на оплату не нужно дополнительно согласовывать.(1 ч)

4) Разработан механизм - когда на основании согласованного Счета на оплату создается Заказ или Реализация товаров - дополнительно согласовывать созданный документ не нужно. (45 мин)

5) Доработан механизм согласования - добавление в алгоритм Даты согласования и проверки цены "на 7 календарных дней". (40 мин)

6) Доработаны печатные формы счета на оплату и заказа покупателя. (2 ч)

7) Добавление механизма учета категорий цен контрагента. Менеджер выставляет цены, далее нажимает кнопку "Проверить по ценам Контрагента". Если цена менеджера меньше, чем цена Контрагента (из карточки Контрагента), тогда данная цена копируется в колонку "НоваяЦена" и автоматом ставится галка "НаСогласование" - требуется дополнительное согласование. Если цена менеджера больше или равна цене Контрагента, то ничего не происходит. Документ проводится. (1,5 ч)

Представленный механизм был реализован на платформе 8.3.11.3034 на конфигурации версии УТ 10.3.36.1.

С пользой для клиентов, RustIG 

4

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. pm74 129 04.07.18 08:01 Сейчас в теме
(0) нормально , делал подобную штуку с использованием РС , даже где то видео есть
2. Rustig 1023 04.07.18 09:22 Сейчас в теме
(1) сложно представить , как это можно сделать с РС
3. pm74 129 04.07.18 09:33 Сейчас в теме
(2) для ут 10.3 привязка по ключу строки тч
5. Rustig 1023 04.07.18 09:36 Сейчас в теме
(3) привязка к документу как осуществляется? а если один и тот же товар в двух строках в документе?
4. pm74 129 04.07.18 09:35 Сейчас в теме
(2) там удалось сделать даже без изменения самой тч через ДополнительныеСвойства благо не управляемый интерфейс
6. Rustig 1023 04.07.18 09:38 Сейчас в теме
(4) для меня ДополнительныеСвойства пусть останутся в прошлом, в настоящем только для базовых версий... С Доп.Свойствами начинаются другие проблемы - в запросах - да и регистр ДопСвойства растет как на дрожжах... Поэтому я ушел от этой практики - использовать ДопСвойства...
7. pm74 129 04.07.18 09:43 Сейчас в теме
(6) ДополнительныеСвойства (эм. может неправильно назвал) имелся в виду не регистр а структура привязанная к объекту
8. pm74 129 04.07.18 09:51 Сейчас в теме
(6) там вообще интересная штука получилась , т.е изначально не хотелось редактировать ТЧ
как оказалось в заказе пок-ля и еще паре документов событие ПриВыводеСтроки обращается к общему модулю
само по себе привыводестроки довольно тормознутое если считывать данные из бд ,
но в обычных формах можно сделать такой финт , при открытии считать нужные данные в ДопСвойства (как соответствие) и обновлять из него
работает довольно шустро даже в тяжелых (больше 200 строк заказах) видимо берет из кэша
9. Rustig 1023 04.07.18 10:03 Сейчас в теме
(8)
при открытии считать нужные данные в ДопСвойства (как соответствие)

какие сведения считать? какие считаются нужными?

(8)
и обновлять из него
что обновлять?

(8)
есть вызов на событие при выводе строки на общий модуль
согласен, есть, в ряде задач удобно использовать

(8)
работает довольно шустро даже в тяжелых
согласен - я в одном проекте использовал Соответствие так - при проведении по партиям - сразу позиционировался на строке , по которой не хватает остатков, и все такие строки прокрашивал оранжевым - через Соответствие строк - и также использовал вызов ПриВыводеСтрок
10. pm74 129 04.07.18 10:07 Сейчас в теме
(9) приложил скриншот
Прикрепленные файлы:
11. Rustig 1023 04.07.18 10:08 Сейчас в теме
12. pm74 129 04.07.18 10:09 Сейчас в теме
(9)
что обновлять?

обновлять данные строк "при выводе строки "
13. Rustig 1023 04.07.18 10:12 Сейчас в теме
(12) картинку увидел и все понял :)
правда , у вас и у меня задачи разные - цели разные, но ваша идея и подход мне нравятся, запомню это !
14. pm74 129 04.07.18 10:30 Сейчас в теме
(6) зря кстати ушли
очень хорошо рисовать доп. реквизиты документов без изменения в кф
Прикрепленные файлы:
15. Rustig 1023 04.07.18 10:36 Сейчас в теме
(14) да, интересно получается - напишите публикацию с деталями - у вас интересный проект
16. pm74 129 04.07.18 10:38 Сейчас в теме
17. pm74 129 04.07.18 10:40 Сейчас в теме
(15) вернее была уже с деталями и проч , особого интереса не вызвала я и удалил ))
не умею рекламировать
18. aspirator23 361 07.07.18 14:48 Сейчас в теме
(17)Тоже интересно. Статью можно не писать специально, может можно посмотреть черновики или какие -то примеры?
19. pm74 129 07.07.18 15:30 Сейчас в теме
(18) интересно что ? Про согласование , есть видео в этой статье ,
по поводу доп реквизитов , тут работает через перехват вызова общих модулей (немного соврал что без редактирования кф :), но сами документы остаются на замке )
20. aspirator23 361 07.07.18 15:34 Сейчас в теме
21. pm74 129 07.07.18 15:42 Сейчас в теме
(20) вобще есть в планах сделать платную и бесплатную версии доработки УТ 10
в бесплатной основной функционал по доп реквизитам , в платной
помимо этого статусы заказов , платежные бокументы для БП настройка правил + бух. счета + выгрузка , может быть согласование , работа по комиссии , авансы и еще всякие плюшки по мелочи типа печати от разных подразделений итп , такая вот солянка )
Оставьте свое сообщение