Имя: Пароль:
   
1C
1С v8
УФ - странно поведение для таблицы формы - текущая строка
0 fantomrik
 
01.06.18
09:54
Коллеги привет!
Попросили написать к БП 3.0 обработку для массовой рассылки писем, что бы можно было делать группы контрагентов и рассылать массово выбрав группу.
За основу взял типовую общую форму ОтправкаСообщенияБП и к ней прикрутил создание групп.
Суть проблемы.
Сделал и вывел на форму таблицу значений в которой есть вложенная таблица значений. первая ТЗ - Группы контрагентов, вложенная - сами контрагенты и их адреса.
При выборе контрагентов управление из основной формы переходит в другую, там выбираются контрагенты и через ОповеститьОВыборе выбранные данные о контрагентах возвращаются в основную форму.
Что бы подгруизить их их в нужную строку, определяю ее как Элементы.ГруппаПолучатели.ТекущаяСтрока. Когда группа всего одна все хорошо, но когда групп становится больше (добавляются и удаляются) текущая строка возвращает не верный результат.
На скринах привел пример, когда была одна группа, текущая строка вернула 0, все хорошо. При добавлении второй группы текущая строка стала 2, соответственно далее выход за пределы массива.
Так же была ситуация, когда было 3 группы, 2 я удалил и текущая строка возвращала 2 или 1 (но не 0, как я ожидал).

Подскажите, как решить мою задачу?

https://ibb.co/nE5eTJ
https://ibb.co/bHRWay
https://ibb.co/kZXR8J
https://ibb.co/k4StoJ
https://ibb.co/jpqray
https://ibb.co/gWioNd
https://ibb.co/nB468J
1 Buster007
 
01.06.18
10:11
текущаястрока не равно индекс
2 singlych
 
01.06.18
10:19
ТекущиеДанные используй.
3 1sanekmaloi1
 
01.06.18
10:21
ПолучитьИдентификатор();
НайтиПоИдентификатору(<Идентификатор>)
4 fantomrik
 
01.06.18
10:24
(2) ТекущиеДанные не вариант, так как Наименование группы может быть не уникально, а "Получатели" на клиенте я только вижу в данный момент что это данные формы, но что там не вижу.
5 fantomrik
 
01.06.18
10:25
(3) Это в каком месте вы предлагаете?
6 fantomrik
 
01.06.18
10:27
Вобщем решил так проблему. В таблицу ГруппаПолучатели добавил еще одну колонку ID. ПРи изменении, если в текущей строке он не заполнен - ему присваиваю новый ГУИД.
Далее при переходе на форму выбора контрагентов передаю данный гуид и со списокм выбора возвращаю. И по нему соответствено нахожу строку в ГруппаПолучатели , с которой был вызов выбора. Вроде работает все.
7 Cyberhawk
 
01.06.18
10:31
Раз уникальной колонки в ТЗ нет, то ты и не сможешь находить нужную. Но думаю, что и без добавления твоего ГУИДа можно было решить вопрос, ориентируясь на текущую строку таблицы формы - она ведь однозначно позволяет найти группу
8 perester
 
01.06.18
10:33
Долго не думая добавь гуиды
9 perester
 
01.06.18
10:34
(8) упс... пока понимал в чем проблема уже решил
10 singlych
 
01.06.18
10:34
(4) В текущих данных как раз данные той строки, которую ты пытался получить по ТекущаяСтрока.
11 fantomrik
 
01.06.18
10:48
(7) (10)  ТекущаяСтрока как индекс дает не всегда верные данные, в этом и проблема. А с ТекущиеДанные я не могу работать.
Как пример, я вижу ТекущиеДанные перед вызовом формы выбора контрагентов и что я могу с ними сделать?
https://ibb.co/dXwgay
По ним (без колонки ID) я не смогу найти нужную мне строку, что бы в нее добавить контрагентов. я же не могу в дальнейшем искать как

Отбор =  Новый Структура();
Отбор.Вставить("НаименованиеГруппы", СохраненныеДанные.НаименованиеГруппы);
Отбор.Вставить("Получатели", СохраненныеДанные.Получатели);
ТЗ = ЭтотОбъект.ГруппаПолучатели.НайтиСтроки(Отбор);
Для каждого Эл Из АдресаПолучателей Цикл
    Строка =  ТЗ[0].Получатели.Добавить();
    Строка.Представление = Эл.Представление;
    Строка.email          = Эл.Адрес;
КонецЦикла;

так как Получатели у меня по сути не конкретные данные.
12 fantomrik
 
01.06.18
10:49
С генерацией гуида костыль получается, что не очень хорошо, но вот более правильного решения я не вижу :(
13 singlych
 
01.06.18
11:01
(11) Не надо искать, все уже найдено до нас.

ТекущиеДанные = Элементы.ГруппаПолучатели.ТекущиеДанные;
ТекущиеПолучатели = ТекущиеДанные.Получатели;

Для каждого Эл Из АдресаПолучателей Цикл
    Строка = ТекущиеПолучатели.Добавить();
    Строка.Представление = Эл.Представление;
    Строка.email         = Эл.Адрес;
КонецЦикла;
14 fantomrik
 
01.06.18
11:19
(13) Благодарю! Действительно все отличное работает!
Оптимальное решение без костылей :)

В моем контексте единственное добавление текущих получателей было на стороне сервера ( так как типовая процедура получает адреса контрагентов на стороне сервера)  и ТекущиеДанные я не мог туда передать. Ну переписать не сложно было)
15 fantomrik
 
01.06.18
11:22