Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

СообщениеПользователю для каждой текущей строки в 8.3.13 УФ

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

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

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

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

А что у тебя в ТекущаяСтрока? И как ты получаешь ее значение? Лучше организуй цикл типа
Для Сч=0 По Объект.ТаблицаПоказателей.Количество()-1 Цикл

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

ТекущаяСтрока = Элементы.ТаблицаПоказателей.ТекущиеДанные;
//бла-бла, операции с введенными данными

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

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

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