Имя: Пароль:
1C
1С v8
СообщениеПользователю для каждой текущей строки в 8.3.13 УФ
,
0 poddex
 
10.12.18
07:46
Добрый день, уважаемые специалисты, эксперты и гости форума.
Накатал такой код

Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Неверная точность. Этот показатель имеет точность " + Строка(ТекущаяСтрока.Точность) + " знаков после запятой";
            Сообщение.Поле = "Объект.ТаблицаПоказателей["+Объект.ТаблицаПоказателей.Индекс(ТекущаяСтрока)+"].План";
            Сообщение.Сообщить();

Для первой строки Сообщение отрабатывает КАК НАДО (подсказка-баллон вылетает в нужной ячейке, ячейка подкрашивается красным, + сообщение текстом внизу окна). А вот для остальных строк код уже не отрабатывает до конца, несмотря на то, что индекс строки исправно передается. "До конца" означает, что текст внизу формы появляется и ячейка подкрашивается красной чертой, НО подсказка-баллон не появляется совсем.

Что мог сделать не так? Всем заранее спасибо.
Платформа 8.3.13 УФ.
1 poddex
 
10.12.18
07:47
Не пояснил - ТаблицаПоказателей - это Табличная часть документа.
2 SleepyHead
 
гуру
10.12.18
07:50
Объект.ТаблицаПоказателей.Индекс(ТекущаяСтрока)

А что у тебя в ТекущаяСтрока? И как ты получаешь ее значение? Лучше организуй цикл типа

Для Сч=0 По Объект.ТаблицаПоказателей.Количество()-1 Цикл

и формируй Сообщение.Поле по переменной Сч.
3 poddex
 
10.12.18
07:55
Фишка придумана так: СообщениеПользователю  повешено на ПриИзменении() ячейки табличной части.

Процедура ТаблицаПоказателейПланПриИзменении(Элемент)
//Получаем текущую строку
ТекущаяСтрока = Элементы.ТаблицаПоказателей.ТекущиеДанные;
//бла-бла, операции с введенными данными
//если не прошел проверку, то
Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Неверная точность. Этот показатель имеет точность " + Строка(ТекущаяСтрока.Точность) + " знаков после запятой";
            Сообщение.Поле = "Объект.ТаблицаПоказателей["+Объект.ТаблицаПоказателей.Индекс(ТекущаяСтрока)+"].План";
            Сообщение.Сообщить();
Цикл тут не катит (по задумке).
4 poddex
 
10.12.18
07:56
По идее, все правильно написано. НО НЕ РАБОТАЕТ! Отрабатывает только для первой строки. Для второй, третьей и так далее баллон не появляется :(
5 hhhh
 
10.12.18
08:12
(3) ТекущаяСтрока  - это не индекс, а идентификатор строки.
6 poddex
 
10.12.18
08:16
Объект.ТаблицаПоказателей.Индекс(ТекущаяСтрока) - в отладчике Индекс отсюда получается правильно.
7 hhhh
 
10.12.18
08:21
(6) ну инргда совпадает. Но если вдруг пользоватедь удалит строку или поменяет их местами, вас ждет засада. Поэтому лучше сразу выкинуть этот ваш быдлокод и делать правильно.
8 poddex
 
10.12.18
08:26
Поэтому лучше сразу выкинуть этот ваш быдлокод и делать правильно.

Ок, понял. Вопрос в другом - я проверял раз 10, каждый раз индекс выводился верно - но баллон все равно не выводится. Вопрос - почему не выводится баллон? Индекс теряется по пути к Клиенту, баг? У меня других предположений уже нет. Ведь для первой строки работает правильно. Не работает для остальных, хотя все то же самое.
9 poddex
 
10.12.18
08:31
Есть еще такой момент. Иногда, после перезапуска Клиента, этот же код отрабатывает тоже неверно, но по-другому: баллон вылетает не в ячейке ввода, как должен, а в заголовке колонки (вне зависимости от номера строки). Так бывает раз в 2-3 запуска Клиента.
Короче, волшебная ботва, видимо, ошибка. Ну или не могу свою ошибку в коде.
10 D3O
 
10.12.18
09:55
(2) не правильный подход. индекс строки в УФ - это не номер по порядку. в процессе редактирования он может очень сильно перекашиваться.
правильнее Для каждого ... Цикл и вот как и в (0)
AdBlock убивает бесплатный контент. 1Сергей