Имя: Пароль:
1C
 
СообщениеПользователю() для дерева значений
0 riv40rus
 
22.06.11
16:01
Нужно выдать сообщение об ошибке заполнения с привязкой к конкретной строке дерева значений на управляемой форме. Кто нибудь делал подобное? Или в платформе 8.2 не реализовано?
1 butterbean
 
22.06.11
16:02
не можешь сам строку выделить??
2 riv40rus
 
22.06.11
16:05
Нет я хочу чтобы было все одинаково. На форме есть таблица и дерево. И что мне для таблицы выводить сообщение со стандартным окошком, а для дерева выделять строчку? Как то криво будет на мой взгляд...
3 riv40rus
 
22.06.11
16:08
up
4 Stepa86
 
22.06.11
16:09
а чо мешает попробовать?
5 riv40rus
 
22.06.11
16:11
(4) пробовал не получается, сообщение не привязывается к конкретной строке дерева, а выводится снизу и привязывается ко всему дереву как бы
6 Stepa86
 
22.06.11
16:12
(5) покажи код, как пробовал
7 riv40rus
 
22.06.11
16:16
ТекстСообщения = "Поле ""Подразделение"" не заполнено";
//1
//ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Дерево.ПолучитьСтроки()[0]",,Отказ);                                  
//2
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Дерево",,Отказ);
8 riv40rus
 
22.06.11
16:16
// Формирует и выводит сообщение, которое может быть связано с элементом
// управления формы.
//
//  Параметры
//  ТекстСообщенияПользователю - Строка - текст сообщения.
//  КлючДанных                - Любая ссылка на объект информационной базы.
//                               Ссылка на объект информационной базы, к которому это сообщение относится,
//                               или ключ записи.
//  Поле                       - Строка - наименование реквизита формы
//  ПутьКДанным                - Строка - путь к данным (путь к реквизиту формы)
//  Отказ                      - Булево - Выходной параметр
//                               Всегда устанавливается в значение Истина
//
//    Примеры использования:
//
//    1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта:
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), ,
//        "ПолеВРеквизитеФормыОбъект",
//        "Объект");
//
//    Альтернативный вариант использования в форме объекта:
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), ,
//        "Объект.ПолеВРеквизитеФормыОбъект");
//
//    2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы:
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), ,
//        "ИмяРеквизитаФормы");
//
//    3. Для вывода сообщения связанного с объектом информационной базы
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ);
//
// 4. Для вывода сообщения по ссылке на объект информационной базы
//    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
//        НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ);
//
// Случаи некорректного использования:
//  1. Передача одновременно параметров КлючДанных и ПутьКДанным
//  2. Передача в параметре КлючДанных значения типа отличного от допустимых
//  3. Установка ссылки без установки поля (и/или пути к данным)
//
Процедура СообщитьПользователю(
       Знач ТекстСообщенияПользователю,
       Знач КлючДанных = Неопределено,
       Знач Поле = "",
       Знач ПутьКДанным = "",
       Отказ = Ложь) Экспорт
   
   Сообщение = Новый СообщениеПользователю;
   Сообщение.Текст = ТекстСообщенияПользователю;
   Сообщение.Поле = Поле;
   
   ЭтоОбъект = Ложь;
   
#Если НЕ (ТонкийКлиент ИЛИ ВебКлиент) Тогда
   Если КлючДанных <> Неопределено
      И XMLТипЗнч(КлючДанных) <> Неопределено Тогда
       ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа;
       ЭтоОбъект = Найти(ТипЗначенияСтрокой, "Object.") > 0;
   КонецЕсли;
#КонецЕсли
   
   Если ЭтоОбъект Тогда
       Сообщение.УстановитьДанные(КлючДанных);
   Иначе
       Сообщение.КлючДанных = КлючДанных;
   КонецЕсли;
   
   Если НЕ ПустаяСтрока(ПутьКДанным) Тогда
       Сообщение.ПутьКДанным = ПутьКДанным;
   КонецЕсли;
       
   Сообщение.Сообщить();
   
   Отказ = Истина;
   
КонецПроцедуры
9 riv40rus
 
22.06.11
16:17
в первом случае вообще не привязывается, в просто выводится сообщение
10 Stepa86
 
22.06.11
16:18
(7) дык как минимум нужно указать в поле индекс строки

попробуй ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Дерево[0].Подразделение",,Отказ);
11 riv40rus
 
22.06.11
16:18
(10) тоже пробовал не катит
12 Stepa86
 
22.06.11
16:19
(11) а другие индексы пробовал?
13 riv40rus
 
22.06.11
16:20
(12) щас погляжу
14 riv40rus
 
22.06.11
16:20
так тоже не катит ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Дерево.ПолучитьСтроки()[0].Подразделение",,Отказ);
15 Stepa86
 
22.06.11
16:21
(13) и попробуй ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , ,"Дерево[0].Подразделение",Отказ);

я вот до сих пор не вкурю чем поле от путиКДанным отличается
16 Stepa86
 
22.06.11
16:22
(14) .ПолучитьСтроки() точно лишнее

Посмотри какой индекс у проблемной строки ( ПолучитьИдентификатор() ) и его подставь вместо 0
17 riv40rus
 
22.06.11
16:22
Попробовал : ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Дерево[1].Подразделение",,Отказ);
Сообщение выводится снизу, а не привязывается к строке
18 riv40rus
 
22.06.11
16:27
ТекстСообщения = "Поле ""Подразделение"" не заполнено";
ЭлементыДерева = Дерево.ПолучитьЭлементы();
Для Каждого ТекСтрока Из ЭлементыДерева Цикл
       ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Дерево["+ ТекСтрока.ПолучитьИдентификатор() +"].Подразделение",,Отказ);    
   КонецЦикла;

Тоже не получается, к конкретной строке не привязывается
19 Stepa86
 
22.06.11
16:29
видимо к дереву никак не прицепить
20 riv40rus
 
22.06.11
16:33
Да, скорее всего для деревьев не реализовано