Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Помогите с решением задачи (грамотная рассылка адресатам)

Помогите с решением задачи (грамотная рассылка адресатам)
Я
   AneJIbcuH
 
02.06.18 - 11:39
Добрый день! Прошу накидать идей, как грамотно решить такую задачу (не хотелось бы "влоб").

Есть регистр сведений, с измерениями: Подразделение, ЭлектроннаяПочта.
Для каждого подразделения собирается выручка, необходимо её разослать.

1. Если в регистре подразделение не заполнено, значит на этот электронный адрес отправляем выручку по всем подразделениям.

2. Если заполнены подразделения, то выручка только по выбранным.

3. Может быть такой момент, что в регистре подразделение не заполнено, и ниже строка, где заполнено. В этом случае срабатывает пункт 1.

Проблема в чем. Выручка собирается в табличный документ. Как говорил, решение "влоб", для каждого электронного адреса собирать свой табличный документ (с доступными подразделениями) и отправлять на эл. адрес.
Но если, у некоторых электронных адресов одинаковый набор подразделений, хотелось бы сформировать один табдок и отправить сразу на эти эл. адреса.
Кто и как эффективно бы решил такую задачу?
Кручу, верчу в голове.. запрос красивый не очень срастается.. Для каждого электронного адреса собрать массив подразделений, а потом эти массивы сравнивать, как-то вообще ерундово..
Вообщем всё сводится к тому, как дать программе понять, что в регистре есть электронные адреса, с одинаковым набором подразделений.
 
 
   Cyberhawk
 
1 - 02.06.18 - 11:43
Запросом получаешт таблицу из двух колонок "Подразделение - Сумма", в чем дальше-то проблема?
   Cyberhawk
 
2 - 02.06.18 - 11:44
Добавь в запросе третью колонку "МИНИМУМ(АдресЭП)"
   Cyberhawk
 
3 - 02.06.18 - 11:45
И перед этим построй соответствие адресов ЭП и подразделений
   Cyberhawk
 
4 - 02.06.18 - 11:45
(с учетом твоего пункта 3)
   Cyberhawk
 
5 - 02.06.18 - 11:46
В конечном запросе итоги по адресу ЭП
   Cyberhawk
 
6 - 02.06.18 - 11:48
Альтернативный вариант, если хочешь оптимизации - строишь таблицу соответствия "набор подразделений" - "набор адресов ЭП"
   Злопчинский
 
7 - 02.06.18 - 11:53
Правильно (в рамках постановки задачи) организовать "процесс так" чтобы пункт 3 убрать из постановки задачи.
   RomanYS
 
8 - 02.06.18 - 11:58
(0) Итоги по адресам, внутри сортировка по подразделению. Если первое подразделение пустое - формируем по всем и Прервать, иначе - собираем подразделения в массив - формируем отчет по массиву.
Формирование отчета можно оптимизировать, предварительно собрав нужное во временные таблицы или источник данных и построитель
   AneJIbcuH
 
9 - 02.06.18 - 11:58
(6)  "таблицу соответствия "набор подразделений" - "набор адресов ЭП""
Вот, как её эффективно построить.
   AneJIbcuH
 
10 - 02.06.18 - 12:02
(8) "Итоги по адресам, внутри сортировка по подразделению. Если первое подразделение пустое - формируем по всем и Прервать, иначе - собираем подразделения в массив - формируем отчет по массиву. "

Вот так прям сейчас работает. Вопрос как раз в том, что например, по определенному массиву подразделений, уже строился отчет и снова строить надо. Искать массивы с одинаковым набором подразделений каждый раз, не рационально.
 
 Рекламное место пустует
   RomanYS
 
11 - 02.06.18 - 12:03
(10) посчитай хеш от массива и сохраняй соответствие хеш-результат(табдок)
   RomanYS
 
12 - 02.06.18 - 12:05
(11) можно даже придумать хеш чтобы в запросе считать, тогда можно итог по нему сделать
   RomanYS
 
13 - 02.06.18 - 12:11
(10) кстати сколько сейчас занимает эта процедура, что ты собрался её оптимизировать?
Можно позавидовать такой выручке, что для её отправки нужная столь красивая оптимизация))
   AneJIbcuH
 
14 - 02.06.18 - 12:14
(13) Наверное, больше для себя алгоритм интересен ))
   RomanYS
 
15 - 02.06.18 - 12:16
+(12) самый простой вариант:
нумеруем подразделения,
за хеш подразделения берем 2^N, где N - номер (или индекс),
в запросе берем сумму это хеша - получаем хеш массива.

На каждые 10 подразделений - нужно 3 десятичных знака, так что разрядности 1с должно хватить на 50+ подразделений.
   RomanYS
 
16 - 02.06.18 - 12:18
+(15) пустые придется обработать заранее и исключить по ним адреса
   AneJIbcuH
 
17 - 02.06.18 - 12:20
(15) Идею я понял. Она более менее подходит для решения момента "уже строился отчет и снова строить .."
Но тут всё равно, для каждого Адреса ЭП отправляется письмо. А лучше в одном письме сразу необходимые адреса.
   RomanYS
 
18 - 02.06.18 - 12:24
(17) так верхний итог делаешь по хешу и вуаля у тебя набор адресов с с одинаковым набором подразделений. Даже сохранять ТД не придется.

Можно проще: держать письма в  соответствии/структуре добавляя адреса. Потом всё отправлять
   SweetaAngel
 
19 - 02.06.18 - 12:52
(0)

Добавить два соответствия
соотНачалоОбластиПодраздлеения(
соотКонецОбластиПодраздлеения(

Вывести отчет по всем подразделениям.

При выводе области подраздлеения пишим
соотНачалоОбластиПодраздлеения.Вставить(ВыборкаПодразделение.Подраздление, ТабДок.ВысотаТаблицы)
ТабДок.Вывести(ОбластьПодраздленеие)
ДелальныеЗаписи = ВыборкаПодразделение.Выбрать(...
....
...
соотКонецОбластиПодраздлеения.Вставить(ВыборкаПодразделение.Подраздление, ТабДок.ВысотаТаблицы)

Дальше перебираем электронные адреса и их подразделения.

Выбирая данные из соответсвий и ТабДок клеим новый табДок по частям.
   RomanYS
 
20 - 02.06.18 - 13:03
После (14) вопрос больше теоретический.
(19) а если подразделение не является верхним уровнем группировки?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует