- Методика решения проблемы с открытием старой версии внешней обработки
- Причина возникновения проблемы
- Рекомендации по предотвращению возникновения проблемы
- Методика устранения проблемы
- v8.2 УП: Практические нюансы подключения внешних обработок и печатных форм
- Открытие файлов внешних обработок/отчетов без проблем с безопасным режимом в 1С 8.3 (Разрешаем доступ к привилегированному режиму исполнения кода для безопасного режима настройкой профиля безопасности кластера)
- Не могу запустить Внешнюю обработку в отладчике
- Доп обработка не появляется в пользовательском интерфейсе
Методика решения проблемы с открытием старой версии внешней обработки
В процессе разработки конфигураций иногда может возникнуть следующая ситуация.
В конфигураторе создается внешняя обработка. В режиме 1С:Предприятие (в режиме отладки или нет) она проверяется. В конфигураторе в обработку вносятся некоторые изменения. В режиме 1С:Предприятие обработка закрывается и открывается заново, для проверки внесенных изменений. Начиная с определенного момента вносимые изменения перестают появляться, то есть в режиме 1С:Предприятие открывается старая версия внешней обработки. Проблема решается только перегрузкой 1С:Предприятия.
Причина возникновения проблемы
Причина возникновения подобной проблемы заключается в самой обработке. Она возникает в том случае, если разработчик допустил возникновение циклических ссылок.
Рассмотрим ситуацию несколько подробнее. В режиме исполнения (1С:Предприятие) объект обработка существует в памяти в качестве реквизита формы обработки. При закрытии формы обработка прекращает свое существование.
Данная схема нарушается в двух случаях. На саму обработку возникла дополнительная ссылка, либо ссылка возникла на форму, в этом случае закрытие окна формы не означает уничтожение объекта — формы. Соответственно, остается в памяти и обработка.
Следует заметить, что данная ситуация не является уникальной особенность внешних обработок, просто в этом случае она проявляется наиболее явным образом. При открытии внешней обработки платформа пытается найти уже существующую и открывает старый вариант. В случае форм других объектов проблема не столь заметна, однако, как минимум, происходит потеря памяти.
Рекомендации по предотвращению возникновения проблемы
В процессе разработки следует учитывать ссылки, возникающие между различными объектами, и избегать прямых или косвенных взаимных ссылок. Например, поскольку форма ссылается на обработку (через реквизит), обработка не должна ссылаться на форму, т.е. форму нельзя помещать в реквизит обработки или нелокальную переменную ее модуля. Разумеется, нельзя допускать и ссылок объекта на самого себя, например поместить форму в ее собственный реквизит или переменную модуля.
Если «обратная связь» между обработкой и формой все же необходима, следует явным образом позаботиться о ее разрыве. Это можно сделать, например, в обработчике закрытия формы.
Методика устранения проблемы
Даже следование всем рекомендациям не может застраховать от возникновения подобной проблемы.
В первую очередь следует проанализировать алгоритм исполнения обработки на предмет циклических ссылок. Иногда источник проблемы не очевиден. Циклы могут носить достаточно сложный характер, да и возникновение проблемы можно заметить не сразу.
В этом случае можно рекомендовать следующую методику. Сначала необходимо определить момент возникновения ошибки. Следует после перегрузки 1С:Предприятия (сразу заметим, что конфигуратор перегружать не надо) открыть обработку и сразу ее закрыть. Внести в конфигураторе видимые изменения в форму и открыть обработку в 1С:Предприятии.
Если изменения не отразились, значит проблема возникает уже на этапе инициализации или открытии окна. В этом случае проблему следует искать в основном теле модулей обработки и формы, в обработчиках событий, возникающих при открытии и процедурах, вызываемых из них. Если немедленное закрытие не приводит к возникновению проблемы, следует определить, после каких интерактивных действий это происходит.
Примерно определив место возникновения проблемы, следует блоками комментировать код соответствующих процедур в модуле, и после каждой итерации проверять обработку. Разумеется нельзя забывать, что после каждого возникновения проблемы следует перегружать 1С:Предприятие.
Таким способом конкретное место возникновения обычно удается определить достаточно быстро. После чего причина возникновения цикла, в большинстве случаев, становится очевидной.
Источник
v8.2 УП: Практические нюансы подключения внешних обработок и печатных форм
В своё время задался вопросом создания внешней обработки для УНФ и проштудировал несколько статей на эту тему, среди которых встретил и данную публикацию.
Однако, в статье нет примеров для каждого случая. На практике пришлось столкнуться с нюансами, один из которых присущ конкретному релизу УНФ, а второй, подозреваю универсален для всех конфигураций на БСП.
Нюанс конфигурации «Управление небольшой фирмой, редакция 1.4 (1.4.6.19)»
Замечена эта особенность мной была и на предыдущих релизах и до которого просуществует — неизвестно. Выглядит она так.
В процессе подключения внешней обработки необходимо указать разделы командного интерфейса, в которых она будет размещаться. За это отвечает пункт «Размещение«. Нажимаем гиперссылку «Не определено» и в открывшемся окне наблюдаем пустой список. Исследование показало, что в релизе 1.4.5.25 всё было хорошо. Что же случилось? Ответ кроется в общем модуле «ДополнительныеОтчетыИОбработкиПереопределяемый«: процедуры «ОпределитьРазделыСДополнительнымиОбработками» и «ОпределитьРазделыСДополнительнымиОтчетами» пусты. Необходимо добавить в них нужные разделы, как это было раньше. Исходя из принципа внесения минимальных изменений в типовую конфигурацию, снимаем с поддержки только корневой элемент конфигурации для возможности создания новых объектов. Без этого никак.
Если указать стандартный раздел «НастройкаИАдминистрирование«, то всё заработает без дополнительных модификаций. Если же нужен иной раздел, надо проверить существование общей команды «ДополнительныеОбработки[НазваниеРаздела]«. В типовой УНФ на данный момент присутствует команда «ДополнительныеОбработкиАдминистрирование» для одноимённого раздела. Допустим, нам нужно добавить обработку в свой раздел «Доработки«. Копированием существующей команды «ДополнительныеОбработкиАдминистрирование» создаём свою команду «ДополнительныеОбработкиДоработки«, включаем её в нужную подсистему, а в обработчике меняем только название подсистемы. Получается вроде этого:
Теперь в нужной нам подсистеме появляется пункт «Дополнительные обработки» и если мы включали эту подсистему в список выбора разделов в процедуре «ОпределитьРазделыСДополнительнымиОбработками«, то для обработок отныне доступно указание этой подсистемы.
Теперь добрались и до второго нюанса. Это создание и подключение внешней обработки, аналогичной внешней обработке заполнения ТЧ для конфигураций с обычным интерфейсом. Такая обработка вызывается, например, из документа и каким-либо образом обрабатывает табличную часть. В упоминавшейся ранее статье указывается лишь перечень значений для параметра «Использование«. Для обычных обработок это «ОткрытиеФормы«. Нам же, допустим, надо каким-нибудь образом обработать табличную часть без открытия окон. Подозрение падает на значение «ВызовСерверногоМетода«. Описание гласит, что «ВызовСерверногоМетода – вызов экспортного метода из модуля обработки«. Если попробовать сделать экспортную процедуру в модуле обработки, то возникнет ошибка, ссылающаяся на процедуру «ВыполнитьНазначаемуюКомандуДополнительногоОтчетаИлиОбработки» модуля «ДополнительныеОтчетыИОбработки«:
Допускаю, что этот механизм, ранее мог вызывать экспортную процедуру, но сейчас он работает иначе. Вызывается экспортная процедура «ВыполнитьКоманду» с двумя (или тремя) параметрами: ИдентификаторКоманды и ОбъектыНазначения. В первом указывается название команды, которой воспользовался пользователь, а во втором — массив ссылок на объекты, к которым применяется данная команда. Соответственно, в модуле обработки необходимо добавить процедуру, куда можно вставить обработчик команды:
Источник
Открытие файлов внешних обработок/отчетов без проблем с безопасным режимом в 1С 8.3 (Разрешаем доступ к привилегированному режиму исполнения кода для безопасного режима настройкой профиля безопасности кластера)
Дело в том что при использовании клиент-серверного варианта работы 1С внешние обработки/отчеты открываются в безопасном режиме, в котором запрещено использование привилегированного режима. А привилегированный режим используется очень часто в типовых конфигурациях: формирование печатных форм, различные служебные проверки (регистрация обменов) и т.д. В результате, даже используя обычный отчет на СКД без формы (по умолчанию используется общая форма «ФормаОтчета») и сохраняя пользовательские настройки отчета (в соответствующий справочник), вы получите ошибку о недостаточности прав доступа на различные константы и параметры сеанса, используемые в служебных целях после строки УстановитьПривилегированныйРежим (Истина) ;
«Правильным» решением будет подключение внешних обработок и отчетов через механизмы БСП «Дополнительные отчеты и обработки» с отключением безопасного режима либо добавлением разрешений (по-моему, с версии БСП 2.2.2.1). Но если по каким-то причинам необходимо использование именно внешних файлов отчетов/обработок, то можно настроить профиль безопасности кластера, используемого в качестве профиля безопасности безопасного режима для конкретной информационной базы.
Хотел бы сразу заметить, что такой вариант не является предпочтительным, но в силу разных обстоятельств можно его использовать в таком упрощенном виде. Например, у меня несколько баз в разных городах, общая локальная сесть с жёстко ограниченными правами, закрытыми USB и т.п., где-то используется Бухгалтерия 2.0, а где-то 3.0, почти все отчеты делаю средствами СКД без форм, что бы они открывались в обоих версиях. Обслуживать все эти отчеты для разных версий и разных баз дело трудоёмкое и бесперспективное, т.к. в планах есть переход на единую конфигурацию и базу.
Создаем профиль.
В консоли кластера создаём профиль безопасности, в котором устанавливаем флаги «Может использоваться как профиль безопасности безопасного режима» и » в разделе «Разрешен полный доступ:» «к привилегированному режиму».
Далее заходим в свойства базы и в поле «Профиль безопасности безопасного режима» указывает имя созданного профиля.
Во многих случаях использования отчетов и простых обработок данный метод будет применим. Для более сложных ситуаций описывать процесс нет смысла, т.к. он изложен в документации (возможность в настраивать профили безопасности для конкретных внешних файлов через указание его хеш-суммы и т.п.).
Источник
Не могу запустить Внешнюю обработку в отладчике
Подскажите, пожалуйста, столкнулся с такой проблемой.
Создал внешнюю обработку, подключил к УТ 11, подключение прошло без проблем. При попытке выполнить команду обработки вылетает ошибка.
Создал в модуле формы обработки вызов той же самой команды при открытии формы. Запустил обработку через «файл»-«открыть» все сработало как нужно, т.е. ошибка именно связана с подключением через «внешние отчеты и обработки».
Начал смотреть отладчиком, поставил точку останова в общем модуле «Дополнительные отчеты и обработки», в процедуре «Выполнить обработку непосредственно». Процесс получения обработки из хранилища данных происходит успешно, ступор случается когда доходит до момента ВнешняяОбработка.ВыполнитьКоманду(). В этот момент стрелка отладчика просто исчезает, т.е. видимо она проваливается в модуль объекта внешней обработки, но этот модуль у меня не открывается, стрелки, которая показывает текущую строку выполняемого кода просто нет.
Насколько мне известно, в процессе выполнения 1С копирует файл внешней обработки в какой-то временный каталог и оттуда его открывает, но по адресу C:\Users\User\AppData\Local\Temp я ничего похожего не нашел.
Может кто-нибудь сможет помочь, как мне попасть в модуль внешней обработки? Подскажите, пожалуйста, уже третий день ломаю голову, ничего не получается 🙁
PS В продолжение вопроса:
На Мисте подсказали поймать ошибку с помощью «остановки по ошибке». Попробовал сделать в обработке попытку с делением на ноль, попробовал и просто так остановить по ошибке, без изменений в обработке, вот что получается —
«Ошибка времени выполнения:
<ВнешняяОбработка.ВнешняяОбработка.МодульОбъекта(81)>: деление на 0 в модуле ВнешняяОбработка.ВнешняяОбработка.МодульОбъекта, строка 81.»
Курсор при этом встает на ОбщийМодуль.ДополнительныеОтчетыИОбработки, на строчке: ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКоманды); и самой стрелочки, которая показывает текущую строку нет.
Если не делать деления на ноль, то тоже появляется ошибка:
«Ошибка времени выполнения:
<ВнешняяОбработка.ВнешняяОбработка.МодульОбъекта(82)>: Ошибка при вызове метода контекста (Записать) в модуле ВнешняяОбработка.ВнешняяОбработка.МодульОбъекта, строка 82.»
Курсор позиционируется на том же месте общего модуля, стрелочка текущей строки так же не видна.
Источник
Доп обработка не появляется в пользовательском интерфейсе
Создал глобальную внешнюю обработку. Согласно документации для создания внешних обработок для 8.3 в модуле формы обработки добавил код
+ Code
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры
В модуле объекта добавил функцию
Функция СведенияОВнешнейОбработке() Экспорт
РегистрационныеДанные = Новый Структура();
РегистрационныеДанные.Вставить(«Наименование», «Заготовка»);
РегистрационныеДанные.Вставить(«БезопасныйРежим», Ложь);
РегистрационныеДанные.Вставить(«Версия», «v 1.0»);
РегистрационныеДанные.Вставить(«Информация», «v 1.0»);
РегистрационныеДанные.Вставить(«Вид», «ДополнительнаяОбработка»);
тз = Новый ТаблицаЗначений;
тз.Колонки.Добавить(«Идентификатор»);
тз.Колонки.Добавить(«Использование»);
тз.Колонки.Добавить(«Представление»);
тз.Колонки.Добавить(«Модификатор»);
тз.Колонки.Добавить(«ПоказыватьОповещение»);
НоваяСтрока = тз.Добавить();
НоваяСтрока.Идентификатор = «ОткрытьОбработку»;
НоваяСтрока.Использование = «ОткрытиеФормы»;
НоваяСтрока.Представление = «Открыть обработку»;
Затем в справочник «Дополнительные отчеты и обработки» добавил запись с этой обработкой, в ссылке «Указать разделы командного интерфейса» сделал пометку во всех разделах, в колонке «Быстрый доступ» указал всех пользователей. Запись с обработкой появилась в справочнике, однако нигде в интерфейсе я не вижу своей обработки. Я так понимаю ссылка на Дополнительные обработки должна была появиться в разделе «Сервис» пользовательсокого меню. Однако моей обработки нигде нет. В чем может быть проблема?
Источник