Имя: Пароль:
1C
1С v8
Получить текст служебных сообщений
0 kugelfangg
 
27.06.12
15:11
Здравствуйте, господа! Подскажите пожалуйста каким образом программно получить текст выводимый в окно "Служебные сообщения"?
1 FIXXXL
 
27.06.12
15:14
сообщениобошипке() ?
2 DrShad
 
27.06.12
15:15
Глобальный контекст.ПолучитьСообщенияПользователю (Global context.GetUserMessages)
Глобальный контекст (Global context)
ПолучитьСообщенияПользователю (GetUserMessages)
Синтаксис:

ПолучитьСообщенияПользователю(<УдалятьПолученные>)
Параметры:

<УдалятьПолученные> (необязательный)

Тип: Булево.
Признак необходимости удаления полученных сообщений из списка.
Истина - удалять.
Значение по умолчанию: Ложь
Возвращаемое значение:

Тип: ФиксированныйМассив.

Описание:

Получает массив объектов СообщениеПользователю, которые еще не были выведены пользователю.
Такое может происходить при работе в регламентных заданиях, на стороне сервера или в Web-сервисах.

Доступность:

Сервер, толстый клиент, внешнее соединение.
См. также:

СообщениеПользователю
Глобальный контекст, метод Сообщить
3 DrShad
 
27.06.12
15:15
а вообще хз че именно тебе надо
4 kugelfangg
 
27.06.12
15:26
Мне нужно чтобы при возникновении исключения передавать всю инфу в другую базу через ComConnector
5 kugelfangg
 
27.06.12
15:28
(2) Не получилось. Выдает пустой "Фиксированный массив".
6 mikecool
 
27.06.12
15:29
(4) вроде как перехвата исключения вообще, глобально нету
7 FIXXXL
 
27.06.12
15:33
(1) сорри, опшипся

Встроенные функции языка (Script functions)
ИнформацияОбОшибке (ErrorInfo)
Синтаксис:

ИнформацияОбОшибке()
Возвращаемое значение:

Тип: ИнформацияОбОшибке.
Описание:

Получает структурированную информацию об исключении.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:

Попытка
   ...
Исключение
   Инфо = ИнформацияОбОшибке();
   Сообщить("Описание='" + Инфо.Описание + "'");
   Сообщить("ИмяМодуля='" + Инфо.ИмяМодуля + "'");
   Сообщить("НомерСтроки=" + Инфо.НомерСтроки);
   Сообщить("ИсходнаяСтрока='" + Инфо.ИсходнаяСтрока + "'");
КонецПопытки;
8 kugelfangg
 
27.06.12
15:38
(6)Ок, абстрагируемся от исключения. Просто, как программно получить текст, содержащийся в "служебные сообщения"?
9 Пыльный
 
27.06.12
15:50
Стандартными средствами - никак.
Посмотри http://infostart.ru/public/99364/
Или запускай 1с-ку с параметром /Out "полный путь к файлу-логу"
и потом его читай :)
10 orefkov
 
27.06.12
16:17
(0)
В конфигураторе можно, в Предприятии - нет.
11 Maxus43
 
27.06.12
16:18
можно ж писать в файл а потом парси наздоровье
12 kugelfangg
 
27.06.12
16:31
(7) спасибо за подсказку, но это к сожалению не совсем то что требуется=)
Результат:
Инфо    ИнформацияОбОшибке
ИмяМодуля    "Форма.Форма.Форма"
ИсходнаяСтрока    "       ДокСсылка.ПолучитьОбъект().Записать(РежимЗаписиДокумента.Проведение);"
НомерСтроки    19
Описание    "Ошибка при вызове метода контекста (Записать)"
Причина    ИнформацияОбОшибке
ИмяМодуля    ""
ИсходнаяСтрока    ""
НомерСтроки    0
Описание    "Не удалось провести "Поступление товаров XXXXXX от 21.05.2012 16:03:14"!"
Причина
13 Serg_1960
 
27.06.12
17:09
(0) "...каким образом программно..." - это просто.

Берешь типовую конфигурацию(УПП, например) и меняешь там "Сообщить(" на "ОбщегоНазначения.СообщитьОбОшибке(". Будет, примерно, заменено 5765 строк и фсё :)

PS: в УПП есть настройка куда выводить сообщения (в окно сообщений, в окно комментариев, в журнал регистрации) и была сделана попытка "консолидировать" вывод сообщений в единой процедуре... итог этих усилий - указан выше :(
14 kugelfangg
 
28.06.12
11:25
(9) Вы не могли бы кинуть данную обработку в файлообменник. Жадный infostart.ru хочет от меня денег или статью, а сейчас реально не до того=)
15 Cyberhawk
 
28.06.12
11:31
16 kugelfangg
 
28.06.12
11:33
(13) к сожалению это не УПП. В нашей базе "сообщить" используется не только при ошибке, но и для вывода информации. При внешнем соединении "СообщитьОбОшибке" вызывает исключение. То есть даже если все в порядке, и система просто напишет: "документ проведен" внешнее соединение воспримет это как исключение, что крайне нежелательно.
17 kugelfangg
 
28.06.12
11:37
(15) Спасибо.
18 kugelfangg
 
28.06.12
11:43
Обработка не помогла. Он рассчитана на то, что все сообщения выводятся через СообщитьОбОшибке. В нашей базе все сделано через "сообщить()" т.е. Данные об ошибках изначально не сохраняются.

Как бы получить данные которые накапливаются в окне служебных сообщений, отправленные туда через "сообщить()".
19 kugelfangg
 
28.06.12
11:51
ап
20 aleks-id
 
28.06.12
12:08
тебе же сказали - никак!
21 Cyberhawk
 
28.06.12
12:14
(19) т.е. ты хочешь в клиентском сеансе испольнить код, который выведет тебе содержимое окна "Служебные сообщения", так?
22 orefkov
 
28.06.12
12:21
(19)
Могу сделать ВК под толстого клиента, будет вести лог в файл всего, что вываливается в окно сообщений.
10 тыр на яндекс-мани. Готов?
23 Пыльный
 
28.06.12
12:23
(19) ЖЖОШ!
24 kugelfangg
 
28.06.12
13:00
(22) а на безвозмездной основе?=)
Нашел в параметрах конфигурации поле "Файл служебных сообщений" указал путь. Но туда ничего не пишется. Подскажите пожалуйста в чем может быть причина?
25 Пыльный
 
28.06.12
13:09
(24) Ладно. Распишу поподробнее :)
Справка -> Содержание справки -> Запуск 1С:Предприятие 8 и параметры запуска - > Общие параметры запуска -> находишь ключ /Out -> много думаешь.
26 orefkov
 
28.06.12
13:22
(24)
К сожалению на безвозмездной основе некогда.
27 Агент Инфостарта
 
28.06.12
13:28
(26) Щас начнут орать, орефков зажрался, забесплатно пырять не желает.
28 orefkov
 
28.06.12
14:01
(27)
Как говорится - "переходите на 7ку, там это реализовано" :) http://infostart.ru/public/14292/
29 kugelfangg
 
28.06.12
15:13
(25)
Нашел в справке:

Закладка "Дополнительные"
Файл служебных сообщений - если требуется автоматически сохранять служебные сообщения в файл, то в данном параметре указывается его имя (аналог параметру, передаваемому через ключ командной строки /OUT).

НО! в этот файл нифига не пишется, он даже не создается. Подскажите пожалуйста, что я делаю не так=)
30 pumbaEO
 
28.06.12
15:15
(29) на 8.1 писал после выхода из программы, на 8.2 должен писать сразу...
31 kugelfangg
 
28.06.12
15:18
У меня 8.2. Не пишет ни сразу, ни после закрытия. Может еще какую нибудь настройку нужно подкрутить, чтоб эта хрень заработала?
32 kugelfangg
 
28.06.12
15:23
ап
33 kugelfangg
 
28.06.12
16:26
up
34 Пыльный
 
28.06.12
16:39
(29) Так не пробовал, но при запуске из командной строки - всё ОК.
Спецально сейчас проверил :)
35 kugelfangg
 
28.06.12
16:43
Проблема в том что мне это через ComConnector нужно делать.=) так что командная строка тут не прокатит=)
36 sameza
 
16.07.12
09:11
Озабочен той же траблой что и ТС.

Нашёл выход,но он работает через раз ...

вот код:


Процедура СлужебныеСообщенияВФайл (Файл) Экспорт
   WshShell = Новый COMОбъект("Wscript.Shell") ;    
   WshShell.sendKeys("^%(o)") ; // (Ctrl Alt O) фокус ввода в окно "Служебные сообщения"

   WshShell.SendKeys("^(a)") ;  // (Ctrl А)
   WshShell.SendKeys("^(c)") ;  // (Ctrl С)
   
   WshShell.Exec ("ClipD.exe "+Файл) ;
КонецПроцедуры    

ClipD.exe - прога на паскале, которая копирует содержимое буфера обмена в файл (Файл передаётся в неё как парамитр)

вот код ClipD.exe

<Pascal/Delphi>
program ClipD;

{$APPTYPE CONSOLE}

uses
 SysUtils, Classes, Clipbrd;
// ---
Var
 sl : TStringList ;
 FileName : String ;
// ---
begin
   sl := TStringList.Create() ;
   sl.Text := Clipboard.AsText ;
   FileName := ParamStr(1) ;

   if (FileName <> '') then
    Begin
        sl.SaveToFile(FileName) ;
    End ;

   sl.Free() ;
end.
<Pascal/Delphi>

работает через раз ... ковыряю дальше, ищу способы ...
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.