|
Помогите с решением задачи (грамотная рассылка адресатам) | ☑ | ||
---|---|---|---|---|
0
AneJIbcuH
02.06.18
✎
11:39
|
Добрый день! Прошу накидать идей, как грамотно решить такую задачу (не хотелось бы "влоб").
Есть регистр сведений, с измерениями: Подразделение, ЭлектроннаяПочта. Для каждого подразделения собирается выручка, необходимо её разослать. 1. Если в регистре подразделение не заполнено, значит на этот электронный адрес отправляем выручку по всем подразделениям. 2. Если заполнены подразделения, то выручка только по выбранным. 3. Может быть такой момент, что в регистре подразделение не заполнено, и ниже строка, где заполнено. В этом случае срабатывает пункт 1. Проблема в чем. Выручка собирается в табличный документ. Как говорил, решение "влоб", для каждого электронного адреса собирать свой табличный документ (с доступными подразделениями) и отправлять на эл. адрес. Но если, у некоторых электронных адресов одинаковый набор подразделений, хотелось бы сформировать один табдок и отправить сразу на эти эл. адреса. Кто и как эффективно бы решил такую задачу? Кручу, верчу в голове.. запрос красивый не очень срастается.. Для каждого электронного адреса собрать массив подразделений, а потом эти массивы сравнивать, как-то вообще ерундово.. Вообщем всё сводится к тому, как дать программе понять, что в регистре есть электронные адреса, с одинаковым набором подразделений. |
|||
1
Cyberhawk
02.06.18
✎
11:43
|
Запросом получаешт таблицу из двух колонок "Подразделение - Сумма", в чем дальше-то проблема?
|
|||
2
Cyberhawk
02.06.18
✎
11:44
|
Добавь в запросе третью колонку "МИНИМУМ(АдресЭП)"
|
|||
3
Cyberhawk
02.06.18
✎
11:45
|
И перед этим построй соответствие адресов ЭП и подразделений
|
|||
4
Cyberhawk
02.06.18
✎
11:45
|
(с учетом твоего пункта 3)
|
|||
5
Cyberhawk
02.06.18
✎
11:46
|
В конечном запросе итоги по адресу ЭП
|
|||
6
Cyberhawk
02.06.18
✎
11:48
|
Альтернативный вариант, если хочешь оптимизации - строишь таблицу соответствия "набор подразделений" - "набор адресов ЭП"
|
|||
7
Злопчинский
02.06.18
✎
11:53
|
Правильно (в рамках постановки задачи) организовать "процесс так" чтобы пункт 3 убрать из постановки задачи.
|
|||
8
RomanYS
02.06.18
✎
11:58
|
(0) Итоги по адресам, внутри сортировка по подразделению. Если первое подразделение пустое - формируем по всем и Прервать, иначе - собираем подразделения в массив - формируем отчет по массиву.
Формирование отчета можно оптимизировать, предварительно собрав нужное во временные таблицы или источник данных и построитель |
|||
9
AneJIbcuH
02.06.18
✎
11:58
|
(6) "таблицу соответствия "набор подразделений" - "набор адресов ЭП""
Вот, как её эффективно построить. |
|||
10
AneJIbcuH
02.06.18
✎
12:02
|
(8) "Итоги по адресам, внутри сортировка по подразделению. Если первое подразделение пустое - формируем по всем и Прервать, иначе - собираем подразделения в массив - формируем отчет по массиву. "
Вот так прям сейчас работает. Вопрос как раз в том, что например, по определенному массиву подразделений, уже строился отчет и снова строить надо. Искать массивы с одинаковым набором подразделений каждый раз, не рационально. |
|||
11
RomanYS
02.06.18
✎
12:03
|
(10) посчитай хеш от массива и сохраняй соответствие хеш-результат(табдок)
|
|||
12
RomanYS
02.06.18
✎
12:05
|
(11) можно даже придумать хеш чтобы в запросе считать, тогда можно итог по нему сделать
|
|||
13
RomanYS
02.06.18
✎
12:11
|
(10) кстати сколько сейчас занимает эта процедура, что ты собрался её оптимизировать?
Можно позавидовать такой выручке, что для её отправки нужная столь красивая оптимизация)) |
|||
14
AneJIbcuH
02.06.18
✎
12:14
|
(13) Наверное, больше для себя алгоритм интересен ))
|
|||
15
RomanYS
02.06.18
✎
12:16
|
+(12) самый простой вариант:
нумеруем подразделения, за хеш подразделения берем 2^N, где N - номер (или индекс), в запросе берем сумму это хеша - получаем хеш массива. На каждые 10 подразделений - нужно 3 десятичных знака, так что разрядности 1с должно хватить на 50+ подразделений. |
|||
16
RomanYS
02.06.18
✎
12:18
|
+(15) пустые придется обработать заранее и исключить по ним адреса
|
|||
17
AneJIbcuH
02.06.18
✎
12:20
|
(15) Идею я понял. Она более менее подходит для решения момента "уже строился отчет и снова строить .."
Но тут всё равно, для каждого Адреса ЭП отправляется письмо. А лучше в одном письме сразу необходимые адреса. |
|||
18
RomanYS
02.06.18
✎
12:24
|
(17) так верхний итог делаешь по хешу и вуаля у тебя набор адресов с с одинаковым набором подразделений. Даже сохранять ТД не придется.
Можно проще: держать письма в соответствии/структуре добавляя адреса. Потом всё отправлять |
|||
19
SweetaAngel
02.06.18
✎
12:52
|
(0)
Добавить два соответствия соотНачалоОбластиПодраздлеения( соотКонецОбластиПодраздлеения( Вывести отчет по всем подразделениям. При выводе области подраздлеения пишим соотНачалоОбластиПодраздлеения.Вставить(ВыборкаПодразделение.Подраздление, ТабДок.ВысотаТаблицы) ТабДок.Вывести(ОбластьПодраздленеие) ДелальныеЗаписи = ВыборкаПодразделение.Выбрать(... .... ... соотКонецОбластиПодраздлеения.Вставить(ВыборкаПодразделение.Подраздление, ТабДок.ВысотаТаблицы) Дальше перебираем электронные адреса и их подразделения. Выбирая данные из соответсвий и ТабДок клеим новый табДок по частям. |
|||
20
RomanYS
02.06.18
✎
13:03
|
После (14) вопрос больше теоретический.
(19) а если подразделение не является верхним уровнем группировки? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |