Имя: Пароль:
1C
1С v8
Не выводится окно сообщение во внешшней обработке
0 ArtVC
 
07.04.13
09:17
Здравствуйте. ИБ ЗУП.
В конфигурации в общем модуле есть такой код:
ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений");
ТекстСообщения = "Внимание!
|У этих сотрудников первая половина месяца отработана не полностью.
|При необходимости уточните сумму планового аванса.";
ЗаголовокСообщения = ОбработкаКомментариев.ДобавитьСообщение(ТекстСообщения,Перечисления.ВидыСообщений.ВажнаяИнформация);

Для каждого СтрокаТЗ Из МассивСтрок Цикл
   ОбработкаКомментариев.ДобавитьСообщение(СтрокаТЗ.ФизлицоНаименование, Перечисления.ВидыСообщений.Информация, , ЗаголовокСообщения);
КонецЦикла;

Вставил функцию с этим кодом в свою обработку табличной части документа - в дебагере интерпретатор заходит в эту секцию, добавляет строки в цикле в "ОбработкаКомментариев" но не выводит содержимое; а при выполнении этого кода, когда он вызывается из самого документа-объекта, т.к. в конфигурации, содержимое выводится.
Подскажите, почему не выводятся эти сообщения, да и как они вообще могут выводиться? В конфигурации всего кроме вышеприведённого кода ничего не нашёл, а кажется, что должен быть где-то вызван метод "Вывести" или его подобие, чтобы показать окно с сообщениями. Что мне искать?
1 Has
 
07.04.13
12:40
встал курсором на глЗначениеПеременной
нажимаю F12 -> переход в глоб. модуль
Функция глЗначениеПеременной(ИмяПеременной) Экспорт

встал на ПолучитьЗначениеПеременной
нажимаю F12 -> переход в общ. модуль РаботаСОбщимимиПеременными
Функция ПолучитьЗначениеПеременной(Имя) Экспорт

ищу текст глОбработкаСообщений
нахожу код
НайденноеЗначение = Обработки.СообщенияВыполняемыхДействий.Создать();

вывод
ОбработкаКомментариев это экземпляр обработки СообщенияВыполняемыхДействий

в общем, как говорится, отладчик в зубы и вперед F11
2 ArtVC
 
07.04.13
13:28
У меня версия ИБ 2.5.61.1, так что модули немного отличаются:
РаботаСОбщимимиПеременными - это у меня "ОбщегоНазначения"
а процедура в нём:
Функция ПолучитьЗначениеПеременной(ИмяПараметра, Кэш = Неопределено, КэшИзменен = Ложь) Экспорт
Прошёл дебагером весь процесс заполнения табличной части - отличий от своего кода (от пути выполнения в своей обработки) не нашёл. Вообще код, который я приводил в первом посте, находится в общем модуле ЗарплатаКВыплатеОрганизацийПереопределяемый в экспортной процедуре. Не знаю, как я раньше этого не заметил, но т.к. процедура в нём экспортная, то решил просто вызвать её из этого модуля, и опять же ничего не изменилось.
Мне интересен именно механизм вывода окна с сообщением (думаю, ОбработкаКомментариев - это оно и есть, раз в него добавляются строки текста, и у него по идее я бы вызывал метод в c++)- в какой момент производится его вывод, вы не могли бы мне подсказать? Какая строка кода показывает это окно?
3 Has
 
08.04.13
09:55
глобальным поиском нашел
ОбработкаКомментариев.ПоказатьСообщения();

следующий код во внешней обработке работает (выдает сообщения)

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений");
ТекстСообщения = "Внимание!
|У этих сотрудников первая половина месяца отработана не полностью.
|При необходимости уточните сумму планового аванса.";
ЗаголовокСообщения = ОбработкаКомментариев.ДобавитьСообщение(ТекстСообщения,Перечисления.ВидыСообщений.ВажнаяИнформация);

//Для каждого СтрокаТЗ Из МассивСтрок Цикл
Для ш = 1 По 4 Цикл
//    ОбработкаКомментариев.ДобавитьСообщение(СтрокаТЗ.ФизлицоНаименование, Перечисления.ВидыСообщений.Информация, , ЗаголовокСообщения);
   ОбработкаКомментариев.ДобавитьСообщение(ш, Перечисления.ВидыСообщений.Информация, , ЗаголовокСообщения);
КонецЦикла;
ОбработкаКомментариев.ПоказатьСообщения();
   
КонецПроцедуры
4 ArtVC
 
08.04.13
14:11
Да, спасибо, это дело работает. Но в моём случае ОбработкаКомментариев.ПоказатьСообщения();
пишется в процедуре, которая завершается, передаёт управление наверх; и по какой-то причине окно с сообщениями очищается, становится просто пустым. Ставил точку останова сразу после строки ОбработкаКомментариев.ПоказатьСообщения(); - в предприятии выводятся сообщения, как и должны выводиться, а затем исчезают. Кроме использования глобальной переменной ОбработкаКомментариев нет идей? )
5 Has
 
08.04.13
15:12
поискать выше по коду процедуру
ОчиститьСообщения();
6 ArtVC
 
08.04.13
20:32
Ещё раз прошёлся дебагером, не нашёл. Но выяснил, что окно очищается не сразу при выходе из процедуры вышеприведённым кодом, а при выполнении строки
ДокОбъект.Записать(РежимЗаписи);
в вышестоящей процедуре.
Что такое ДокОбъект:
ДокОбъект = СсылкаНаОбъект.ПолучитьОбъект();
где СсылкаНаОбъект говорит сама за себя.
7 ArtVC
 
09.04.13
07:57
Проблема была в том, что я записывал документ методом .Записать(), в котором очищались сообщения. Спасибо за поддержку.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший