Состояния заказов клиентов

24.07.20

Задачи пользователя - Монитор заказов

Конфигурация «Управление торговлей, редакция 11 (11.4.11.104)». Регистр сведений «Состояния заказов клиентов». Описание и устройство.

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

Объект включен в подсистему «Объекты УТ11, КА2, УП2». Должны увидеть его в комплексной и ERP. В аналогичном ли виде — не проверял. Непериодический, регистратору не подчинен. Структура изображена на рисунке №1. Светло-красным выделено измерение. Светло-зеленым ресурсы. Светло-синим, соответственно, реквизиты. Измерение «Заказ» и ресурс «Состояние» имеют составной тип.

 

 

Записи в регистр производятся через процедуру «ОтразитьСостояниеЗаказа» модуля менеджера. Сам метод универсален, рассчитывает состояние заказов и/или заявок. Первым параметром передается массив ссылок. Так что сформирован может быть многострочный набор записей. Инициирующим расчет состояния может выступать один из 42 объектов метаданных. Состав на рисунке №2.

 

 

Вызов метода производится в событиях «ОбработкаПроведения» документов и «ПослеЗагрузкиДанных» планов обмена. Механика такова, что в регистрирующих объектах выполняются операции, изменяющие или возможно изменяющие состояние заказов/заявок. Изменение состояния происходит в разрезе заказа/заявки, расчет выполняется на основании источников данных (рисунок №3). Светло-желтым выделены источники данных. Светло-серым вспомогательные виртуальные таблицы с кратким пояснением состава и назначения. Светло-пурпурным — результирующие виртуальные таблицы, которые будут использоваться в конечном собранном запросе через соединение для расчета состояний заказов/заявок.

 

 

Поэтому расчет состояний может быть выполнен из условно произвольной точки кода через программный интерфейс регистра — упомянутый выше метод «ОтразитьСостояниеЗаказа». В этом вижу простоту и особенность использования данного регистра. К базовому тексту запроса, раскладка которого на рисунке №3, добавляется запрос (методы с текстами находятся в модулях менеджеров) для объекта аналитики. Очевидно, ими выступают:

  • Документ.ЗаказКлиента
  • Документ.ЗаявкаНаВозвратТоваровОтКлиента

В итоге получаем: источники данных + расчет состояний для объекта аналитики (заказа/заявки). Полученный набор в виде таблицы значений пишется в регистр.

Теперь изложу заметки и вопросы, появившиеся у меня «в лоб».

1. Почему регистр не сделали подчиненным регистратору? В конечном счете аналитика ведется в разрезе заказа/заявки. Варианты ответов:
- для возможности отбора по измерению
- для сохранения записей (сделанных-то другими объектами) при отмене проведения заказа/заявки
- сохранение логики, возможности расчета при отсутствии регистратора в принципе, т.к. методически регистратор — выполняющий записи и владеющий ими. При имеющейся схеме записи выполняют другие объекты (не заказ/заявка), но принадлежность отражается к заказу/заявке.

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

Период ЗаказКлиента КОплатеПриход КОплатеПриход1

КОплатеРасход

08.04.2017 Заказ клиента ТД00-000005 от 08.04.2017 17:06:53 30 797,85 30 797,85 102 659,50
15.04.2017 Заказ клиента ТД00-000005 от 08.04.2017 17:06:53 71 861,65 30 797,85 102 659,50
15.04.2017 Заказ клиента ТД00-000005 от 08.04.2017 17:06:53 71 861,65 71 861,65 102 659,50

 

где «КОплатеПриход1» это поле из таблицы справа, т.е. второго экземпляра «ЭтапыРасчетов». После группировки образуется:

08.04.2017 Заказ клиента ТД00-000005 от 08.04.2017 17:06:53 30 797,85 30 797,85 102 659,50
15.04.2017 Заказ клиента ТД00-000005 от 08.04.2017 17:06:53 143 723,3 102 659,5 102 659,50

            
Соответственно, на это накладывается условие:

ИМЕЮЩИЕ
    СУММА(ЭтапыРасчетов.КОплатеПриход) - ЕСТЬNULL(Оплачено.КОплатеРасход, 0) > 0

В итоге в таблице «РезультатРасчетов» остается вторая запись:

15.04.2017 Заказ клиента ТД00-000005 от 08.04.2017 17:06:53 143 723,3 102 659,5 102 659,50

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

3. Предполагаю, что регистр исключительно аналитический. Предназначен для хранения расчетной сводной информации. Используется ли где-то в конфигурации (в других подсистемах) как источник данных?

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

Состояния заказов клиентов

См. также

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный ТСД (терминал сбора данных) сканер для 1С для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    97208    586    189    

321

Монитор заказов Оптовая торговля Розничная торговля Рабочее место Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Ювелирная промышленность и торговля Платные (руб)

CASH DISPLAY 2.0: используйте второй монитор или Android планшет в качестве дисплея покупателя на кассе для работы с клиентами и просмотра рекламы. Интеграция с любой версией 1С. Подходит для использования в торговой сети. Обновленная версия.

6000 руб.

20.01.2022    12054    18    21    

24

Загрузка и выгрузка в Excel Монитор заказов Email рассылки Пользователь Бухгалтерский учет 8.3.14 1С:Бухгалтерия 3.0 Россия Управленческий учет Платные (руб)

Внешняя обработка, осуществляющая автоматическую загрузку новых (непрочитанных) писем, получаемых по электронной почте по расписанию и обрабатывающая вложенные файлы-заказы (в формате EXCEL) по заранее заданному шаблону заказа с различными уведомлениями обработки заказа.

6000 руб.

13.10.2021    10122    3    0    

3

Монитор заказов Анализ продаж 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

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

10 стартмани

28.08.2024    455    7    user1031769    1    

4

Логистика, склад и ТМЦ Монитор заказов Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Абонемент ($m)

Отчет ‘Исполнение заказов поставщиками’ по заказанной/поступившей номенклатуре документов ‘Счет от поставщика’ и ‘Поступление (акты, накладные, УПД)’.

5 стартмани

01.07.2024    689    3    delta    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1747 27.05.20 13:53 Сейчас в теме
(0) есть такое понятие Олап-куб, это первое
второе, представьте, что нет этого регистра, но вам надо постоянно определять состояние (статус) заказа - оплачен/отгружен, тогда вы начнете строить запрос - запрос станет большим - проблему больших запросов я описал здесь в далеком году Большие запросы: взгляд на проблему
польза от использованного регистра - что управлять и программировать свою функциональность можно в одном месте - очень удобно - об этом вы написали
2. totchaz 148 27.05.20 15:27 Сейчас в теме
(1) Добрый день!
По первому. Говорите ли Вы о том, что данный РС это реализация OLAP аналитики состояний заказа/заявки? Если да, то в регистре хранится только одно состояние, рассчитанное по факту, на основании источников (других регистров и таблиц).
По второму. Верно ли понимаю, подтверждаете мое предположение п.3 о том, что РС исключительно аналитический? Здесь мне на текущий момент неизвестно, используется ли в каких-то других подсистемах УТ этот РС.

Насчет построения больших запросов при необходимости получения производных данных Вас понял. Принимать решение хранить или рассчитывать - задача регулярная.
3. RustIG 1747 27.05.20 16:24 Сейчас в теме
(2) я не понял ваших вопросов :)

Говорите ли Вы о том, что данный РС это реализация OLAP аналитики состояний заказа/заявки?

зачем вам такая точность формулировок?

реализация это или подобие ОЛАП аналитики? может 1с-разрабы не доработали концепцию, и через год появятся еще измерения?

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

Вы можете адаптировать этот регистр под свой механизм, добавив измерения, доработав типовой блок записи/чтения данных в /из регистра....
Я к примеру УТ 10.3 перерабатываю достаточно сильно, а вот примеров доработок УТ 11 очень мало - поскольку столкнемся с другими проблемами - чаще лучше не трогать, чем трогать...

(2)
подтверждаете мое предположение п.3 о том, что РС исключительно аналитический


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

Кроме аналитических, какие еще бывают сведения? Сам по себе регистр сведений - из названия - подтверждает, что это таблица для хранения сведений... Как его еще можно использовать?
4. malikov_pro 1324 27.05.20 16:54 Сейчас в теме
(3) "Как его еще можно использовать?" - У меня от этого регистра рассылка уведомлений клиентам работает, достаточно удобно.
nekit_rdx; +1 Ответить
5. RustIG 1747 27.05.20 17:29 Сейчас в теме
(4) в контексте вопроса автора
подтверждаете мое предположение п.3 о том, что РС исключительно аналитический

что скажете? у вас аналитическое использование или не аналитическое? :)
6. malikov_pro 1324 27.05.20 17:52 Сейчас в теме
(5) "АНАЛИЗ, -а, м. 1. Метод исследования путем рассмотрения отдельных сторон, свойств, составных частей чего-н.".
В моем случае изменение регистра используется для старта процесса отправки уведомления, соответственно это не относится к анализу.
7. RustIG 1747 27.05.20 19:19 Сейчас в теме
(6) то есть вы всем подряд рассылаете? или все же предварительно анализируете у кого из клиентов какое состояние по заказу, и, исходя из состояния, посылаете письмо-уведомление?
21. Ranetka 23 14.08.24 14:43 Сейчас в теме
(3) Ну любит автор точность формулировок, что поделаешь. У него и цвет не красный, а "светло-красный", хотя другого оттенка красного там нет, или еще лучше - "светло-пурпурный", блин :))
8. Existkun 29.05.20 10:50 Сейчас в теме
(0) Спасибо за публикацию, было позновательно.
Вопрос: где рисовали схемы? Насколько удобно в "рабочем" формате, когда их накидываешь для себя?
12. totchaz 148 24.07.20 16:04 Сейчас в теме
(8) Добрый день! Схемы созданы в LibreOffice Draw. Второй вопрос не совсем понятен. Промежуточных макетов нет, сразу диаграмка/таблички. Если вы об этом.
9. Yashazz 4790 31.05.20 17:00 Сейчас в теме
Концепция статусов вообще изрядно сомнительна и не всегда адекватна, и даже не всегда работоспособна, и идеологически смутная, но в случае с этим уродством в типовых - вообще полный ахтунг и кошмарик. Спасибо за разбор, по своему опыту знаю, что эту погань раскопать - нужно много времени и нервов.
Правда, никому не советую на неё опираться. Редкостно ненадёжный и скользкий механизм.

Вот будь на моём месте кто-то менее занятый, он бы расписал плюсы и минусы вообще статусов (хронологической развёртки состояний и транзакций, переводящих объекты из одного состояния в другое), конкретно предметных областей, где такое применимо и где не особо, изложил бы подводные камни и методики доработки... Но у меня времени нет, посему автору статьи спасибо за разбор, а писателям типовых конфигов - антиреспект.
13. totchaz 148 24.07.20 16:07 Сейчас в теме
(9) Спасибо за оценку! Оч приятно читать такие отзывы. А также, что труд оказался интересен.
18. fixin 4273 21.03.24 15:14 Сейчас в теме
(13) жаль, что сама 1с не пишет такие мануалы.
10. jONES1979 31.05.20 21:24 Сейчас в теме
Отличный формат публикации! Хотелось бы увидеть и про другие интересные регистры
11. triviumfan 97 03.06.20 20:32 Сейчас в теме
Виртуальная таблица «РезультатРасчетов» возможно содержит ошибку

Это что за зверь такой?:)
14. totchaz 148 24.07.20 16:11 Сейчас в теме
(11) Опечатка, исправил. Конечно же, временная таблица. Спасибо за внимательность!
triviumfan; +1 Ответить
15. zhuravlev_as 436 04.08.20 13:05 Сейчас в теме
Инфа полезная. Но стоит разработчикам поменять что-нибудь в коде конфигурации или структуре регистра сведений (а они это с завидным постоянством делают в новых конфигурацих) и эта инфа поетряет свою актуальность. Мне жаль времени автора в случае, если так случиться (а вероятность высока), т.к. проделана хорошая работа.
16. user1014118 01.04.23 11:59 Сейчас в теме
Автору огромное спасибо!!! за схему респект!
17. fixin 4273 21.03.24 15:13 Сейчас в теме
Спасибо. Делюсь кодом по актуализации состояния заказов.

1. Выбираем не закрытые
ВЫБРАТЬ
	СостоянияЗаказовКлиентов.Заказ КАК Заказ,
	СостоянияЗаказовКлиентов.Состояние КАК Состояние
ИЗ
	РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов
ГДЕ
	СостоянияЗаказовКлиентов.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.Закрыт)
Показать


2. Актуализируем состояния:
ТЗ = Результат[0].Выгрузить();
Заказы = Новый Массив();
Для Каждого Строка ИЗ ТЗ Цикл
	Заказы.Добавить(Строка.Заказ);
КонецЦикла;

УдалениеПроведения = Ложь;
Отказ = ложь;
РегистрыСведений.СостоянияЗаказовКлиентов.ОтразитьСостояниеЗаказа(Заказы, Отказ, УдалениеПроведения);
Показать
AloneWolf; +1 Ответить
19. mikecool 5 23.03.24 08:34 Сейчас в теме
(17) Зачем выгружаешь в ТЗ, чтобы обойти ее? Выборки за глаза. Не плоди сущности в памяти
20. fixin 4273 23.03.24 08:37 Сейчас в теме
(19) это у вас перфекционизм взыграл? Я не любитель экономить на спичках
22. Ranetka 23 14.08.24 15:06 Сейчас в теме
(20) А почему бы не создать еще до кучи дерево, структуру, что там еще есть, и их обходить потом до посинения... Гулять так гулять, на все!
23. fixin 4273 14.08.24 15:14 Сейчас в теме
(22) искусство программирования в 1С - это способность находить разумные компромиссы.
Разумные компромиссы.
Понимаете, разумные компромиссы.
И еще раз повторюсь - разумные компромиссы.
24. Ranetka 23 14.08.24 21:54 Сейчас в теме
(23) Че ты уперся, я не пойму? Выгрузка в ТЧ объективно лишняя. Развел тут мелкую философию на глубоких местах
25. fixin 4273 15.08.24 17:45 Сейчас в теме
(24) у нас в универе был курс АВС - архитектура вычислительных систем.
Разжую, пожалуй основы.
Выборка или курсор не считывает каждую запись из БД, она считывает некий буфер записей, условно 1000 записей.
Поэтому когда ты перебираешь записи, ты перебираешь их в памяти.
Чем это отличается от выгрузки в ТЗ? Ничем. Разве что на больших таблицах будет затрачено много памяти, ТЗ хранится в памяти целиком. Но у нас не тот случай.

Иногда я использую ТЗ вместо выборки, т.к. выборку поменять нельзя, а в ТЗ подменить значение можно. Есть такой финт. Но в целом раньше я использовал выгрузки в ТЗ, сейчас постепенно перешел на выборки, чтобы аудиторы фреша "не делали мне мозг". Тоже свято верующие в производительность товарищи.
27. Pashkaa 16 01.11.24 20:50 Сейчас в теме
(25) Сегодня это относительно небольшая выборка, а завтра это миллион заказов которые при нехватке оперативной памяти приведут к падению выполнения кода.

Раз уж выгружать в ТЗ, дак тогда зачем тебе цикл. Пиши так:

Заказы = Результат[0].Выгрузить().ВыгрузитьКолонку("Заказ");
28. fixin 4273 01.11.24 20:57 Сейчас в теме
(27) мне это напомнило анекдот "А на случай, если я потеряю билет, у меня проездной". Принцип разумности никто не отменял. Если вам нужно копать траншею, вы бросите лопату и купите экскаватор. Не надо рассказывать, что миллион кубометров вы будете продолжать копать лопатой.
30. Pashkaa 16 01.11.24 21:14 Сейчас в теме
(28) @Ranetka просто хотела блеснуть знаниями чем отличается Выбрать() от Выгрузить() и память чего расходуется в том или ином случае, но не на того пассажира нарвалась ;) ну а просто мимо проходил, вставил свои пять копеек.
26. Кадош 05.10.24 19:15 Сейчас в теме
Не хватает описания ресурсов регистра.
29. Pashkaa 16 01.11.24 21:04 Сейчас в теме
Я в УТ 11.5.17.74 наблюдаю другую беду с этим регистром.

Есть Заказ клиента, при его проведении и вызове процедуры Модуля объекта ОбработкаПроведения(...) происходит вызов процедуры общего модуля ПроведениеДокументов.ОбработкаПроведенияДокумента(...), в ней в конце алгоритма идет вызов обновления статуса заказа. Возвращаемся в ОбработкаПроведения видим вызов ЗаказКлиентаЛокализация.ОбработкаПроведения(...) и после опять явный вызов обновления статусов. По итогу в замерах обновление статуса, а именно выполнение запроса занимает 44% времени.

Далее на форме заказа есть самописанная кнопка открывающая окно с вариантами "Оплачен за нал", "Оплачен по эквайрингу", после выбора и нажатия кнопки "Сформировать документы" идет создание связанных документов Реализации товаров и услуг и Платежного документа (ПКО, Эквайринговая операция) и при проведении каждого документа опять идет вызов обновления статуса заказа.

По итогу от начала заказа до закрытия формы, как минимум 4 раза мы обновили статус сожрав кучу ресурсов сервера.

Вот думаю, а можно ли перевешать этот процесс на подписку на событие проведения и вызов выполнения обновления статуса в фоновом задании или в этом случае не обновятся какие нибудь надписи (гиперссылки) на форме заказа?!
Оставьте свое сообщение