|
Не могу попасть в модуль внешней обработки | ☑ | ||
---|---|---|---|---|
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"); Исключение ЗаписьЖурналаРегистрации("Ошибка внешней обработки",,,,ОписаниеОшибки()); ВызватьИсключение ОписаниеОшибки(); КонецПопытки; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |