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

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

УФ - странно поведение для таблицы формы - текущая строка

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

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

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

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

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

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

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