|
УФ - странно поведение для таблицы формы - текущая строка | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |