Имя: Пароль:
1C
1С v8
Привязка СообщениеПользователю к реквизиту формы обработки
,
0 Единорог
 
03.08.16
14:40
Может кто сталкивался с таким.
https://yadi.sk/i/wL7E6PVPtswSy
Есть реквизит формы с типом ТаблицаЗначений на форме обработки.
При выводе СообщениеПользователю нужно привязать сообщение к ячейке с ошибкой.

Если прописать буквально поле привязки так:
/////////////////////////////////////////////
Сообщение.Поле  = "ТаблицаНоменклатуры[7].ТоварДня";
/////////////////////////////////////////////
то сообщение корректно привязывается к указанной ячейке

Если собрать динамически строку  так:
/////////////////////////////////////////////
СтрокаВПоле = "ТаблицаНоменклатуры[" + ИндексСтрокиТЗ + "].ТоварДня";
Сообщение.Поле  = СтрокаВПоле;
/////////////////////////////////////////////
то сообщение не привязывается к указанной ячейке, а пристраивается сбоку формы.

На рисунке видно внизу, что обе строки одинаковые.

Платформа 8.2.19.80
Конфа Ут 11.0.8.13
1 Nuobu
 
03.08.16
14:43
Подозреваю, что в одном случае это ссылка, а в другом - текст.
2 Единорог
 
03.08.16
14:45
На рисунке видно в отладчике что Строка, мало того в самом низу есть сравнение этих строк:
////////////////////////////////////
Сообщение.Поле = "ТаблицаНоменклатуры[7].ТоварДня"   ИСТИНА
///////////////////////////////////
3 Единорог
 
03.08.16
14:48
////////////////////////////////////////////
"ТаблицаНоменклатуры[" + ИндексСтрокиТЗ + "].ТоварДня" =  "ТаблицаНоменклатуры[7].ТоварДня"
////////////////////////////////////////////
Учитывая что ИндексСтрокиТЗ = 7; эти два выражение одинаковы
4 Единорог
 
03.08.16
14:50
Но в случае со строкой, которая прописано жестко с фиксированным индексом = сообщение правильно привязывается к ячейке, а в случае со строкой, которая собирается динамически нет.
5 Nuobu
 
03.08.16
14:52
(4) Без промежуточно переменной пробовал?
6 Nuobu
 
03.08.16
14:52
Сообщение.Поле  = "ТаблицаНоменклатуры[" + ИндексСтрокиТЗ + "].ТоварДня";
7 b_ru
 
03.08.16
14:55
Посмотри в отладчике какое значене будет в переменной СтрокаВПоле.
8 Единорог
 
03.08.16
14:56
(5)(6) да, не помогло
9 Единорог
 
03.08.16
15:01
(7) Вот для наглядности
https://yadi.sk/i/IhW2xetAtt2Vt
10 Единорог
 
03.08.16
15:03
(7) и там и там тип Строка и по точке останова видно что заходит в условие равенства и внизу в табло
Сообщение.Поле = СтрокаВПоле      ИСТИНА
11 Единорог
 
03.08.16
15:05
Вот как выглядит на форме
12 Nuobu
 
03.08.16
15:06
13 Nuobu
 
03.08.16
15:07
(8) Не помогло, потому что ты два раза присвоил. Присваивай один раз без промежуточных переменных.
14 Единорог
 
03.08.16
15:07
Тут правильно - это когда
/////////////////////////////////////////////////
Сообщение.Поле = "ТаблицаНоменклатуры[7].ТоварДня"
//////////////////////////////////////////////////
https://yadi.sk/i/J-fd0nZntt37y
15 Единорог
 
03.08.16
15:09
А тут не правильно - это когда
////////////////////////////////////////////
Сообщение.Поле = "ТаблицаНоменклатуры[" + ИндексСтрокиТЗ + "].ТоварДня";
////////////////////////////////////////////

https://yadi.sk/i/KLDWULGHtt3GN
16 aleks_default
 
03.08.16
15:11
ИндексСтрокиТЗ  = 7?
17 Единорог
 
03.08.16
15:12
(8) Если бы...
https://yadi.sk/i/kfMD_Gt3tt44M
18 Единорог
 
03.08.16
15:21
(16) Перевел ИндексСтрокиТЗ в Строку
не помогло
https://yadi.sk/i/RaA1-ZBhtt5KB
19 Единорог
 
03.08.16
15:26
(12) когда есть Объект и Объект.Ссылка, а также, реквизиты этого объекта... это совсем другой разговор...
Тут этого всего нет
https://yadi.sk/i/RaA1-ZBhtt5KB
а главное, если прописать как указано ТУТ
http://its.1c.ru/db/metod8dev/content/3442/hdoc
то у меня так тоже работает, но моя задача предполагает не фиксированный вариант а динамический... иначе какой смысл в таких сообщениях, если я не могу указать где ошибка!
20 Единорог
 
03.08.16
15:34
Строки одинаковые, а результат разный.

Я уже думал про квадратные скобки, заменил их символами (коды 91 и 93)= ничего не изменилось.

Может КЭШ полетел. Почистил = не помогло.
Может что с базой-сервером?
на трех  разных серверах, на четырех разных копиях баз
= результат тот же.
21 aleks_default
 
03.08.16
15:44
Попробуй в ПутьКДанным указать "Элементы.ТаблицаНоменклатуры"
22 aleks_default
 
03.08.16
15:46
23 Единорог
 
03.08.16
15:48
(21) К сожалению такое тоже было проверено, - не помогло.
И потом, как без каких либо видимых других факторов фиксированное присвоение работает?  
/////////////////////////////////////////////////////
Сообщение.Поле = "ТаблицаНоменклатуры[7].ТоварДня"
/////////////////////////////////////////////////////
КАК?
(я не нашел никаких различий...)
24 aleks_default
 
03.08.16
15:53
А почему у тебя ИндексСтрокиТЗ - тип строка, когда должно быть число?
25 Единорог
 
03.08.16
15:56
(24) Было Число, не работало, перевел в Строка = никакой разницы.

(22) Будь у меня объект... я бы еще вчера все сделал)))
это Обработка, без реквизитов, ТЗ - это реквизит формы, хотя с ТЧ тоже пробовал, такая же история...
26 Единорог
 
03.08.16
16:01
Пока результат один и тот же:
Вот такое фиксированное присвоение РАБОТАЕТ!
/////////////////////////////////////////////////////
Сообщение.Поле = "ТаблицаНоменклатуры[7].ТоварДня"
/////////////////////////////////////////////////////
динамически собираю ту же строку = не работает!

(вот оно что Михалыч...)
27 aleks_default
 
03.08.16
16:01
Может через Формат попробовать выразить?
28 Единорог
 
03.08.16
16:03
(27) так отладчик показывает равенство...
(я конечно проверю... 1С бывало и не так удивляло...)
29 Borteg
 
03.08.16
16:05
Для каждого СтрокаТч из Объект.МояТаблица Цикл
        
        Если СтрокаТч.Ошибка Тогда
            Сообщение = Новый СообщениеПользователю();
            Сообщение.Текст = "Ошибка";
            Сообщение.Поле = "Объект.МояТаблица ["+Объект.МояТаблица .Индекс(СтрокаТЧ)+"].МоеПОЛЕ";
            Сообщение.Сообщить();
        
        КонецЕсли;    
    КонецЦикла;
30 Единорог
 
03.08.16
16:09
(29) Да, я так и делаю... когда есть и Объект, и реквизиты этого объекта.
Но тут их нету
https://yadi.sk/i/RaA1-ZBhtt5KB
Звиняйте за повтор картинок.
31 Единорог
 
03.08.16
16:10
(27) Формат ничего не изменил.
Строки как были тождественны так и остались.
А привязки как не было так и нету.
32 Borteg
 
03.08.16
16:11
(31) скорей всего проблема с платформой, у меня на некоторых релизах 8.3 вначале тоже не работала такая конструкция, сейчас работает(8.3.7.2008).
Попробуй с объектом,если не сработает значит точно платформа.
33 Единорог
 
03.08.16
16:56
(32) Да, скорее всего так, я еще через БСП проверил
https://yadi.sk/i/O3JF6celttHZX
никаких отличий нет, а при этом результат так же разный.
34 Единорог
 
03.08.16
18:08
Это работает:
/////////////////////////////////////////////////////
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"ТаблицаНоменклатуры[7].ТоварДня");
/////////////////////////////////////////////////////

и это работает:
/////////////////////////////////////////////////////
ОбычнаяСтрока = "ТаблицаНоменклатуры[7].ТоварДня";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения ,, ОбычнаяСтрока);
/////////////////////////////////////////////////////

и даже ЭТО работает!!!
/////////////////////////////////////////////////////
ИндексЧисло = 7;
ОбычнаяСтрока = "ТаблицаНоменклатуры["+ ИндексЧисло + "].ТоварДня";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения ,, ОбычнаяСтрока);
/////////////////////////////////////////////////////


А вот ЭТО... НЕ РАБОТАЕТ!!!
/////////////////////////////////////////////////////
ИндексВЧисло = ТаблицаНоменклатуры.Индекс(НоваяСтрока); // Тут точно такое же число как и выше
ПолеТЗСтрокой = "ТаблицаНоменклатуры["+ ИндексВЧисло + "].ТоварДня";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения ,, ПолеТЗСтрокой);
/////////////////////////////////////////////////////