Имя: Пароль:
1C
1С v8
Не могу попасть в модуль внешней обработки
, ,
0 AlexSib
 
03.05.13
07:19
Подскажите, пожалуйста, столкнулся с такой проблемой.
Создал внешнюю обработку, подключил к УТ 11, подключение прошло без проблем. При попытке выполнить команду обработки вылетает ошибка.

Создал в модуле формы обработки вызов той же самой команды при открытии формы. Запустил обработку через "файл"-"открыть" все сработало как нужно, т.е. ошибка именно связана с подключением через "внешние отчеты и обработки".

Начал смотреть отладчиком, поставил точку останова в общем модуле "Дополнительные отчеты и обработки", в процедуре "Выполнить обработку непосредственно". Процесс получения обработки из хранилища данных происходит успешно, ступор случается когда доходит до момента ВнешняяОбработка.ВыполнитьКоманду(). В этот момент стрелка отладчика просто исчезает, т.е. видимо она проваливается в модуль объекта внешней обработки, но этот модуль у меня не открывается, стрелки, которая показывает текущую строку выполняемого кода просто нет.

Насколько мне известно, в процессе выполнения 1С копирует файл внешней обработки в какой-то временный каталог и оттуда его открывает, но по адресу C:\Users\User\AppData\Local\Temp я ничего похожего не нашел.

Может кто-нибудь сможет помочь, как мне попасть в модуль внешней обработки? Подскажите, пожалуйста, уже третий день ломаю голову, ничего не получается :(
1 Wobland
 
03.05.13
07:20
подели на 0 в попытке и включи остановку по ошибке. и отладку на сервер
2 Повелитель
 
03.05.13
07:32
включи остановку по ошибке
этого достаточно
3 Повелитель
 
03.05.13
07:38
(0) А обработка действительно там создается:
C:\Users\User\AppData\Local\Temp
Но только на время выполнения, потом сразу удаляется, поэтому ты ее не находишь.
4 AlexSib
 
03.05.13
08:11
Попробовал с делением на ноль, появляется такая ошибка:
"Ошибка времени выполнения:
{ВнешняяОбработка.ВнешняяОбработка.МодульОбъекта(81)}: деление на 0 в модуле ВнешняяОбработка.ВнешняяОбработка.МодульОбъекта, строка 81."
Курсор при этом встает на ОбщийМодуль.ДополнительныеОтчетыИОбработки, на строчке: ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКоманды); и самой стрелочки, которая показывает текущую строку нет.

Если не делать деления на ноль, то тоже появляется ошибка:
"Ошибка времени выполнения:
{ВнешняяОбработка.ВнешняяОбработка.МодульОбъекта(82)}: Ошибка при вызове метода контекста  (Записать) в модуле ВнешняяОбработка.ВнешняяОбработка.МодульОбъекта, строка 82."
Курсор позиционируется на том же месте общего модуля, стрелочка текущей строки так же не видна.
5 Emilio
 
03.05.13
08:34
(4) что и куда записываешь? открой обработку из файла под полными правами, в отладчике поставь точку останова на строку выше той, в которой ошибка и проверь, что туда записывается.
6 Kookish
 
03.05.13
08:50
Сейчас попробовал - действительно, при открытии внешней обработки создается несколько файлов tmp, но ни один по размеру не соответствует этой обработке, и либо там внутри не то, либо они не открываются. При запуске внешней печатной формы файл .epf создается.
Можно попробовать прикрутить обработку как внешнюю печатную форму, а форму обработки открывать в функции Печать модуля обработки. И тогда по накатанной: УниверсальныеМеханизмы.НапечататьВнешнююФорму - ИмяФайла = ПолучитьИмяВременногоФайла("epf") - Точка останова, открыть файл в отладчике и т. д...
7 AlexSib
 
03.05.13
10:11
Процедура выполнения команды выглядит так:
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
   ДанныеОстатки = Новый ТекстовыйДокумент;
   ДанныеОстатки.ДобавитьСтроку("Остатки");
   ДанныеОстатки.Записать("C:\data.txt");
КонецПроцедуры

Сделал в модуле формы обработки еще такую процедуру:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   ОбъектОбработка = РеквизитФормыВЗначение("Объект");    
   ОбъектОбработка.ВыполнитьКоманду("ID");
КонецПроцедуры

Захожу в УТ11, открываю из файла обработку, все срабатывает как нужно, в каталоге Temp на диске С: создается указанный файл, в нем записана нужная строка. Если пытаюсь выполнить команду через внешние обработки, то происходит вот такая фигня, как я описал выше.

(6) Буду пробовать, надеюсь что получится :)
8 hhhh
 
03.05.13
11:27
(7) а зачем такое супердикое место выбрал для файла? "C:\data.txt"? Самоубийца что-ли? выбери нормальное какое-нибудь имя, не в корне диска С.
9 AlexSib
 
03.05.13
11:58
(8) А, ну да, изначально было C:\Temp\data.txt
Потом пробовал в разные папки на разные диски, суть остается:
если открывать файл обработки команда спокойно выполняется через открытие формы, файл сохраняется в любую папку, хоть в корень диска С. Если делать через подключение во внешние обработки, то вылетает вышеуказанная ошибка :(
10 Kookish
 
03.05.13
16:48
(7) Не вижу директив &НаКлиенте &НаСервере. Может при включении обработки в конфигурацию она работает на сервере? И там же пытается файлы сохранять?
11 AlexSib
 
03.05.13
17:16
По идее доступность у метода Записать() везде, и на клиенте и на сервере..
Я попробовал директивы компиляции поменять, не помогает
12 Федор Сумкин
 
03.05.13
17:32
По идее (если я все правильно понял), у пользователя под которым выполняется Запись файла на сервере (а это скорее всего не тот пользователь, который запустил клиент) - недостаточно прав для его записи. Попробуй создать какую-то другую папку и в свойствах папки на закладке Безопасность разреши для "Все" полный доступ и пиши обработкой туда.
13 AlexSib
 
03.05.13
17:42
(12) Сделал, не помогает, к сожалению.
14 AlexSib
 
03.05.13
19:10
Оказывается дело было в безопасном режиме, странно что пользователю под полными правами безопасный режим не дал записать файл.
Вот так вышел на ошибку:

Попытка
       ДанныеОстатки = Новый ТекстовыйДокумент;
       ДанныеОстатки.ДобавитьСтроку("Остатки");
       ДанныеОстатки.Записать("C:\Temp\data.txt");
   Исключение
       ЗаписьЖурналаРегистрации("Ошибка внешней обработки",,,,ОписаниеОшибки());
       ВызватьИсключение ОписаниеОшибки();
   КонецПопытки;