Имя: Пароль:
1C
 
Как лучше спроектировать регистр?
Ø (Волшебник 27.08.2024 11:07)
0 Шебвольник С1
 
26.08.24
16:45
Задача следующая:
Когда появляется реализация, контрагенту нужно отправить уведомление, чтобы тот подписал документ. Если через 5 дней подписания не произойдет, нужно отправить повторное уведомление.

Пока дошел вот до чего.
Измерение:
- Реализация
Ресурс:
- Статус (какое перечисление лучше? ОжидаетОтправки|УведомлениеОтправлено|ПовторноеУведомлениеОтправлено)

Чего не хватает? ДатаСледующейОтправки?

Дальше вопрос производительности. В фоновом задании будем брать СрезПоследних, где Статус В (ОжидаетОтправки,УведомлениеОтправлено). В индексы это дело попадет каким-то образом? Второй регистр лепить не хочется.
1 mmg
 
26.08.24
03:54
(0) Зачем здесь срез последних? Непериодический регистр сведений. Измерение: Реализация, ресурс: дата последнего уведомления.
2 Волшебник
 
26.08.24
07:41
(0) Начните с НАЗВАНИЯ регистра
3 maxab72
 
26.08.24
08:36
(0)
два измерения: адресат, реализация (адресат это контактное лицо у контрагента, которому направлять оповещение о конкретной накладной)
два ресурса: Дата следующей проверки (до этой даты не проверяем подписан или нет документ), и Дата последнего уведомления.
Тогда можно быстро в запросе сразу получить список адресатов,  с накладными на каждый день.
Отправили оповещение - поменяли в регистре Дата следующей проверки, она у разных контрагентов может быть разной. ИП-шника можно долбить хоть каждый день, а какой-нибудь Газпром не любит, когда ему надоедают, может и в спам лист внести.
Пришла подпись - очищаем поле Дата следующей проверки и больше рассылок не уходит.
4 Ненавижу 1С
 
26.08.24
08:51
Похоже на эдо. Изобретение велосипеда?
5 butterbean
 
26.08.24
09:43
(4) прикручивать ЭДО ради отправки одного уведомления??
6 Волшебник
 
26.08.24
11:08
Лучше создать документ "Письмо", а в нём "Основание" со ссылкой на док. "Реализация".
7 ptiz
 
26.08.24
13:51
(0) "Когда появляется реализация" - неправильно. Правильно - когда товар хотя бы отгрузился со склада. Или документ по ЭДО ушел клиенту.
Достаточно двух свойств:
- дата подписания документа контрагентом
- дата последнего уведомления
8 Шебвольник С1
 
26.08.24
14:11
Да, видимо, историю проще в лог вынести. Всем спасибо!
9 Волшебник
 
26.08.24
14:15
(8) а-ха-ха...🤦
10 Irbis
 
26.08.24
14:18
(8) Проще не значит лучше. В данном случае простота хуже воровства
11 Шебвольник С1
 
26.08.24
15:31
(10) В чем проблема?
12 Irbis
 
26.08.24
15:34
(11) Отслеживать по текстовым логам что-то на постоянной основе сомнительное удовольствие
13 Garykom
 
26.08.24
15:35
(0) Справочник ИсходящиеСообщения
14 Garykom
 
26.08.24
15:38
(13)+ РС обычный не периодический
СтатусыУведомленияДокументов

И регламентное для обработки
Еще подписки на события для документов
15 Волшебник
 
26.08.24
15:46
(14) СтатусыУведомленияДокументов - плохое название.
лучше УведомленияКонтрагентов
16 Шебвольник С1
 
26.08.24
16:22
(12) Так а что там отслеживать? Наоборот, на всякий случай пусть будет.
В общем, посыл понятен, благодарю.
17 Волшебник
 
26.08.24
16:45
(16)
>> Так а что там отслеживать?
в (0) написано:
>> Если через 5 дней подписания не произойдет, нужно отправить повторное уведомление.

Как будете отслеживать 5 дней?
18 Шебвольник С1
 
26.08.24
17:06
(18) Непериодический регистр
Измерение:
- Реализация
Ресурсы:
- Статус
- ДатаСледующейОбработки или ДатаПоследнейОтправки

Статус индексируем.
19 Волшебник
 
26.08.24
17:15
(18) Плохое решение.
20 _alex1974
 
26.08.24
17:22
измерение: реализация
ресурс: статус
1. при проведении реализации статус "создана"
2. при отправке клиенту статус "отправлена клиенту"
3. при повторной отправке статус "отправлена клиенту n-раз"
...
4. после ответа клиента статус "принята клиентом"

если периодический РС, то в период пишем дату события
если хочется непериодический, то добавляется измерение "дата события"
21 ManyakRus
 
26.08.24
17:49
Чтоб отправить уведомление - надо сохранить где-то:
1) текст уведомления
2) кому
3) дата отправки
4) текст ошибки
5) и др.
В любом случае потребуется документ "Исходящее сообщение".
Даже регистр не нужен особо, если только для ускорения
22 Шебвольник С1
 
26.08.24
17:49
(19) Аргументы?

(20) И как фоновое задание будет отбирать то, что нужно отправить?
23 Волшебник
 
26.08.24
17:50
(21) а я предлагал в (6)
24 Волшебник
 
26.08.24
17:51
(22) слишком частное
25 Шебвольник С1
 
26.08.24
17:56
(21) С простой отправкой уведомлений проблем нет, вопрос не про это
26 _alex1974
 
26.08.24
17:58
(22) при периодическом регистре срез последних, где статус <> "принята клиентом"

при непериодическом РС придется делать запрос с соединением с самим собой по максимуму даты события

если не нужен аудиторский след, то хватит примитивного варианта с одним измерением (реализация) и двумя ресурсами (дата отправки клиенту, дата ответа клиента).
27 Шебвольник С1
 
26.08.24
18:05
(26) Про СрезПоследних я писал в (0), последний абзац.
28 Mort
 
26.08.24
18:31
Стандартные реквизиты:
- Период

Измерения:
-Документ

Ресурсы:

-Сообщение
-Условие повтора (понятное для трансляции, хоть кодом, например, "документ.Подписан = Истина")
-Период повтора

Читаем все сообщения через срез последних (их всех удалим)
Те у которых условие не сработало, пишем обратно с новым периодом. И т.д.
29 Mort
 
26.08.24
18:33
Период можно вынести в измерение "дата" чтобы читать/удалять наборами, срезы тут особо не нужны.
30 Волшебник
 
26.08.24
18:34
(28) 👍 Да, это уже более общее решение, которое охватит больше документов и больше сценариев. Это более архитектурный подход. Решение более устойчиво к дальнейшему развитию и пересмотру.
31 Mort
 
26.08.24
18:35
Можно добавить ресурс "Количество сообщений отправлено" если очень хочется узнать сколько раз игнорили, и его каждый раз в +.
32 Волшебник
 
26.08.24
18:48
(0) Решение от ChatGPT 4o ниже:

Для более общего решения, подходящего для любого типа документов, можно использовать следующую структуру:

Измерения:
* Документ (тип документСсылка)
Ресурсы:
* Статус (перечисление ОжидаетОтправки | УведомлениеОтправлено | ПовторноеУведомлениеОтправлено, см. ниже)
* ДатаПоследнейОтправки (дата, отражает последнюю дату уведомления)
* ПлановаяДатаСледующейОтправки (дата, когда нужно отправить следующее уведомление, если нет реакции)

Статус:
* ОжидаетОтправки — еще не было отправки уведомления.
* УведомлениеОтправлено — уведомление отправлено, но требуются проверки на подпись.
* ПовторноеУведомлениеОтправлено — отправлено повторно, но подписания по-прежнему нет.

Запрос, который покажет документы, по которым надо отправить уведомление прямо сейчас:

ВЫБРАТЬ
    Документ, 
    Статус, 
    ПлановаяДатаСледующейОтправки 
ИЗ
    РегистрыСведений.Уведомления.СрезПоследних(&ТЕКУЩАЯДАТА)
ГДЕ
    Статус В (&СтатусОжидаетОтправки, &СтатусУведомлениеОтправлено) 
    И ПлановаяДатаСледующейОтправки <= &ТЕКУЩАЯДАТА


Запрос выбирает документы, по которым либо еще не было отправки, либо истек срок ожидания подписания, и требуется отправка нового уведомления.

Такой подход обеспечивает гибкость в работе с различными типами документов и их состояниями.
33 Garykom
 
26.08.24
18:49
(32) Отбор по Статусу индекс нужен
34 Волшебник
 
26.08.24
18:54
(33) Не поможет. Здесь уже СрезПоследних
А может поможет...
Ну можно добавить, чтоб наверняка
35 Шебвольник С1
 
27.08.24
10:35
(30) Про запросы в циклах и тормоза не понаслышке знаете, смотрю
1С Предприятие замедляется, 1С Executer ускоряется. Обсудим будущее 1C Предприятие 8...#41

(32) (34) Садись, два
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший