Имя: Пароль:
1C
1С v8
Вывести СообщениеПользователю из общего модуля привязкой к реквизиту
0 Радим1987
 
20.04.17
09:53
Надо вывести такое сообщение к привязкой табчасть Товары.Номенклатура

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "услуги [ "+ВидРезки+" ] не существует";
Сообщение.Поле = "Товары[0].Номенклатура";
Сообщение.Сообщить();     
1 Радим1987
 
20.04.17
09:55
Сообщение выводиться но ни как привязывается к табЧасти
Параметрах процедуры есть (Объект = ДанныеФормыСтруктура,Форма = управляемая форма)
что только не пробывал
2 Радим1987
 
20.04.17
09:58
Попытка
1) ДокументОбъект = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.РеализацияТоваровУслуг"));
Сообщение.УстановитьДанные(ДокументОбъект );

2) Сообщение.КлючДанных = Объект.Ссылка;
Сообщение.ПутьКДанным = "Объект";

3) ДокументОбъект = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.РеализацияТоваровУслуг"));
УстановитьСоответствиеОбъектаИРеквизитаФормы(Документ, "Объект");
Сообщение.УстановитьДанные(ДокументОбъект );

итд итд
3 dezss
 
20.04.17
10:17
Что передаешь в процедуру/функцию общего модуля?
4 Радим1987
 
20.04.17
10:19
Объект = ДанныеФормыСтруктура,Форма = управляемая форма
5 dezss
 
20.04.17
10:19
(3) тьфу, увидел...
а если
Сообщение.Поле = "Форма.Элементы.Товары[0].Номенклатура";
6 drcrasher
 
20.04.17
10:23
(2) установитьДанные(документСсылка)
7 Радим1987
 
20.04.17
10:24
(5) нет не получилось
8 Радим1987
 
20.04.17
10:25
(6) УстановитьДанные(<Объект>)
Параметры:

<Объект> (обязательный)

Тип: Произвольный.
Объект, с которым должно быть связано сообщение.
9 dezss
 
20.04.17
10:26
(7) а попробуй подобным образом привязать к какому-нибудь другому элементу формы, не тч.
10 Радим1987
 
20.04.17
10:26
УстановитьСоответствиеОбъектаИФормы(<Объект>, <ИдентификаторФормыИИмяРеквизита>)

<ИдентификаторФормыИИмяРеквизита> (обязательный)

Тип: Структура.
Содержит идентификатор формы и имя реквизита элемента управления, для которых выполняется установка соответствия.
Структура, передаваемая в параметр, может содержать два элемента с именами ключей:
1. "ИдентификаторФормы" ("FormID") – уникальный идентификатор формы (тип УникальныйИдентификатор);
2. "ИмяРеквизита" ("AttributeName") – имя реквизита в форме (тип Строка). Этот элемент может не указываться.


но когда я делаю через структуру ругается
типа неправильный параметр
11 Радим1987
 
20.04.17
10:27
(9) другим элементам тоже не привязывается
12 Радим1987
 
20.04.17
10:33
УстановитьСоответствиеОбъектаИРеквизитаФормы(ДокументОб,ст);    
по причине:
Несоответствие типов (параметр номер '2')

ПОЧЕМУ ?????

УстановитьСоответствиеОбъектаИФормы(<Объект>, <ИдентификаторФормыИИмяРеквизита>)

<ИдентификаторФормыИИмяРеквизита> (обязательный)

Тип: Структура.

ст = Новый Структура;            Ст.Вставить("ИдентификаторФормы",Форма.УникальныйИдентификатор);            Ст.Вставить("ИмяРеквизита",Форма.Объект);
13 dezss
 
20.04.17
10:35
Ст.Вставить("ИмяРеквизита",Строка(Форма.Объект));
14 dezss
 
20.04.17
10:36
(13) не точно так, но принцип понятен, да?
15 dezss
 
20.04.17
10:37
(13) по идее можно прям так
Ст.Вставить("ИмяРеквизита","Объект");
16 Радим1987
 
20.04.17
10:40
(13),  (15) та же ошибка по причине:
Несоответствие типов (параметр номер '2')
17 dezss
 
20.04.17
10:47
ПолучитьСоответствиеОбъектаИФормы(<Объект>)
что возвращает?
18 Радим1987
 
20.04.17
10:50
(17)
ИдентификаторФормы,00000-000            
ИмяРеквизита,ДанныеФормыСтруктура
19 dezss
 
20.04.17
10:56
(18) а в ДанныеФормыСтруктура что-то есть?
20 Радим1987
 
20.04.17
11:01
Сделал так УстановитьСоответствиеОбъектаИРеквизитаФормы(ДокументОб,"ст");

ПолучитьСоответствиеОбъектаИФормы(Док) вернул структуру
ИдентификаторФормы =  00000-00000-0000000000
ИмяРеквизита = "ст"

Получается не устанавливается идентификатор формы
21 dezss
 
20.04.17
11:04
(20) а с каких пор ДокументОб стал идентификатором формы? О_о
22 Радим1987
 
20.04.17
11:09
я имею ввиду что процедура УстановитьСоответствиеОбъектаИРеквизитаФормы(ДокументОб,"ст"); устанавливает  только имя "ИмяРеквизита = "ст""
23 dezss
 
20.04.17
11:09
(22) а ты передай ему в первом параметре идентификатор формы...вот тогда и увидим что он устанавливает...
24 dezss
 
20.04.17
11:13
(23) тьфу...туплю, блин...
25 dezss
 
20.04.17
11:14
кста, а модуль серверный?
26 Радим1987
 
20.04.17
11:16
(25) да почти решил жду отладку)
27 dezss
 
20.04.17
11:23
(26) ты ж напиши как решил
28 Радим1987
 
20.04.17
11:29
Не получилось
ДокументОб = Форма.РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.РеализацияТоваровУслуг"));

возвращает то что надо
ПолучитьСоответствиеОбъектаИФормы(Док) вернул структуру
ИдентификаторФормы =  rt896-gbfg56-456fdbd3vc5b
ИмяРеквизита = "Объект"

но
после использования
УстановитьСоответствиеОбъектаИРеквизитаФормы(ДокументОб,"Объект")
ИдентификаторФормы =  000-000-00000000
ИмяРеквизита = "Объект"

даже не знаю куда копать
29 dezss
 
20.04.17
11:34
(28) да понятно, что установить... у тебя не работает как написано в сп, передавать только "Объект" безсмысленно.
А попробуй передавать структуру только с идентификатором. Убери строчку:
Ст.Вставить("ИмяРеквизита",Форма.Объект);
Будет тогда ругаться на тип параметра?
30 Радим1987
 
20.04.17
11:36
(29) пробываал тоже самое
31 dezss
 
20.04.17
11:39
Блин....прям вот щас сам попробую. Интересно стало.
32 Радим1987
 
20.04.17
11:39
)))
33 dezss
 
20.04.17
11:46
УстановитьСоответствиеОбъектаИРеквизитаФормы <> УстановитьСоответствиеОбъектаИФормы
Первое у тебя в (28)

УстановитьСоответствиеОбъектаИФормы у меня отработал нормально.
ПолучитьСоответствиеОбъектаИФормы вернул те значения, что я передал в структуре.
Правда делал все модуле формы.
34 Радим1987
 
20.04.17
11:54
ст = Новый Структура;
Ст.Вставить("ИдентификаторФормы",Форма.УникальныйИдентификатор);
Ст.Вставить("ИмяРеквизита",Форма.Объект);
         УстановитьСоответствиеОбъектаИФормы(ДокументОб,ст);
по причине:
Недопустимое значение параметра (параметр номер '2')
35 dezss
 
20.04.17
11:56
(34) да еп жеж....
Ст.Вставить("ИмяРеквизита",<тут должна быть СТРОКА!!!!>);
36 dezss
 
20.04.17
11:57
(34) с реквизитами формы привязка работает, с объектом и всем дочерним к нему чета нет...пороюсь
37 dezss
 
20.04.17
12:20
Кароч. Все решается так:

    об = РеквизитФормыВЗначение("Объект");
    ст = Новый Структура;
    ст.Вставить("ИдентификаторФормы",ЭтаФорма.УникальныйИдентификатор);
    ст.Вставить("ИмяРеквизита","Объект");
    УстановитьСоответствиеОбъектаИФормы(об,ст);
    сообщение = Новый СообщениеПользователю;
    сообщение.Текст = "Все очень плохо";
    сообщение.УстановитьДанные(об);
    сообщение.Поле = "<тут имя поля формы>";
    сообщение.Сообщить();

в модуле формы работает...думаю, и в общем модуле должно
38 Радим1987
 
20.04.17
12:29
ДокументОб = Форма.РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.РеализацияТоваровУслуг"));                
            
            ИдентификаторФормыИИмяРеквизита = Новый Структура;
            ИдентификаторФормыИИмяРеквизита.Вставить("ИдентификаторФормы",Форма.УникальныйИдентификатор);
            ИдентификаторФормыИИмяРеквизита.Вставить("ИмяРеквизита","Объект");

            УстановитьСоответствиеОбъектаИФормы(ДокументОб,ИдентификаторФормыИИмяРеквизита);
            
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "услуги [ "+ВидРезки+" ] не существует";  
            Сообщение.Поле = "Форма.Элементы.Товары";
            Сообщение.УстановитьДанные(ДокументОб);
            Сообщение.Сообщить();     

тоже все работает я дума щас проблема в этом

Товары[0].Номенклатура
39 Радим1987
 
20.04.17
12:30
т.е Сообщение.Поле = ?
40 Радим1987
 
20.04.17
12:35
ПОЛЕ =
Содержит путь к реквизиту формы, для которого было выведено сообщение, или к данным объекта.
Например, путь к реквизиту Номенклатура в строке с индексом 10 табличной части документа, в которой произошла ошибка: ТабличнаяЧастьСоставДокумента[10].Номенклатура.

а в моем случае к чему будет равно Поле = ?

Сообщение.Поле = Форма.ТОвары или
Сообщение.Поле = Объект.ТОвары
41 dezss
 
20.04.17
12:55
А если так:
Сообщение.Поле = "Форма.Элементы.Товары.ТекущаяСтрока";

Я так понимаю Товары[0].Номенклатура - это для ОФ, в УФ работать не будет.
(40) Для УФ поле формы надо сюда пихать, насколько я понял
Сообщение.Поле = Форма.Элементы.Товары
42 dezss
 
20.04.17
12:59
(41) Я не прав, надо именно имя реквизита, а не элемента формы. Только что проверил.

Тебе можно писать просто
Сообщение.Поле = Товары
Так как с объектом ты это сообщение уже связал через
Сообщение.УстановитьДанные(ДокументОб);
43 dezss
 
20.04.17
13:02
Кстати, если надо будет вызвать сообщение на реквизит формы, не подчиненный объекту, то надо будет переустанавливать УстановитьСоответствиеОбъектаИФормы на этот реквизит.
44 Радим1987
 
20.04.17
13:03
пробывал ничего не происходит выводит сообщение только сбоку
45 dezss
 
20.04.17
13:03
(43) Или сделать так:
Сообщение.Поле = "";
сообщение.ПутьКДанным = "<имя реквизита формы>";
46 dezss
 
20.04.17
13:04
(44) Я на обед, а пока покажи код и сообщение.
47 Радим1987
 
20.04.17
13:04
Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "услуги [ "+ВидРезки+" ] не существует";  
            Сообщение.Поле = "Товары[0].Номенклатура";
            Сообщение.КлючДанных = ДокументОб.Ссылка;
            Сообщение.ПутьКДанным = "Объект";
            Сообщение.Сообщить();     
            
            ТекстОшибки = "услуги [ "+ВидРезки+" ] не существует";
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ДокументОб,"Товары[0].Номенклатура",, );
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ДокументОб,"Объект.Товары[0].Номенклатура",, );
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ДокументОб,"ДанныеФормыСтруктураО.Товары[0].Номенклатура",, );
            
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ДокументОб.Ссылка,"Товары[0].Номенклатура","Объект", );
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ДокументОб.Ссылка,"Объект.Товары[0].Номенклатура","Объект", );
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ДокументОб.Ссылка,"ДанныеФормыСтруктураО.Товары[0].Номенклатура","Объект", );
48 dezss
 
20.04.17
14:05
так-с...теперь ты решил воспользоваться уже написанным...но воспользовался неправильно.

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ДокументОб,"Товары","Объект", );
Если реквизит формы не связан с объектом, то так:
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,,"<имя_реквизита>",);

По поводу обращения с индексом сейчас поищу на чем попробовать.
49 Радим1987
 
20.04.17
14:12
В модуле ФОРМЫ (УФ)

&НаСервере
Процедура ПроверкаНаСервере()
        //Объект = ДанныеФормыСтруктура
    РТ.ВывестиСообщение(Объект,ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура Проверка(Команда)
    ПроверкаНаСервере();
КонецПроцедуры



Общий модуль серверная


Процедура ВывестиСообщение(Данные,Форма) Экспорт  
//Данные ФормыВЗначение(Объект,Тип(ДокументОбъект....)) НЕ РАБОТАЕТ при установке УстановитьСоответствиеОбъектаИФормы() ИдентификаторФормы = ПустойУникальныйИдентификатор и Объек = ""

//Поэтому только через  "Форма.РеквизитФормыВЗначение" кто не знает метод управляемой формы    
Док = Форма.РеквизитФормыВЗначение("Объект",Тип("ДокументОбъект.Документ"));               
            
ИдентификаторФормыИИмяРеквизита = Новый Структура;
    ИдентификаторФормыИИмяРеквизита.Вставить("ИдентификаторФормы",Форма.УникальныйИдентификатор);
    ИдентификаторФормыИИмяРеквизита.Вставить("ИмяРеквизита","Объект");

УстановитьСоответствиеОбъектаИФормы(Док,ИдентификаторФормыИИмяРеквизита);
            
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "услуги не существует";  
Сообщение.Поле = "Товары[0].Номенклатура";
Сообщение.УстановитьДанные(Док);
Сообщение.Сообщить();             
    

КонецПроцедуры

50 Радим1987
 
20.04.17
14:14
(48) спасибо все решилось создал новую конфигурацию там работает идеально ко всем реквизитам цепляется. Но только не в моей конфигурации КА 2.2.3.178 видимо где то запрет или что нить такое
51 dezss
 
20.04.17
14:21
вот так у меня все сработало...

&НаСервере
Процедура МояКомандаНаСервере()
    об = РеквизитФормыВЗначение("Объект");
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Все очень плохо",об,"Товары[1].Номенклатура","Объект");
КонецПроцедуры

&НаКлиенте
Процедура МояКоманда(Команда)
    МояКомандаНаСервере();
КонецПроцедуры
52 dezss
 
20.04.17
14:23
(50) ну и хорошо.
Только зачем свой ОМ мутить, если все и так есть.
53 Радим1987
 
20.04.17
14:27
(52) типовой сказали не трогать все процедуры функции только в расширение и тем более вот этот канитель не только для этого документа а для всех документов продажи покупки
54 dezss
 
20.04.17
14:35
(53) типовой конечно не трогать, но им же можно пользоваться)
Ведь всего 2 строчки
    об = РеквизитФормыВЗначение("Объект");
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Все очень плохо",об,"Товары[1].Номенклатура","Объект");