ВНИМАНИЕ!!! Отладка не работает на платформе версии 8.3.6.2041, 8.3.6.2152, 8.3.6.1999, 8.3.6.2332. (это версии платформ, на которых точно не работает отладка. На основании этих тестов осмелюсь предположить, что отладка не работает на 8.3.6) (список будет корректироваться). На платформе 8.2 — подобных проблем замечено не было.
И так, ни для кого не секрет, что самый распространенный способ обмена данными — это обмен данными посредством XML файлов. Для тех, кто не знает, постараюсь вкратце описать суть процесса. Т.к. статья посвящена другой теме, то в подробности вдаваться не будем. Т.е. есть 2 базы. Необходимо из одной выгрузить данные в другую. Будь то просто справочники или документы, не важно. Процесс настройки обмена данными происходит с помощью типовой конфигурации «Конвертация данных», а сам обмен осуществляется по правилам, которые как раз и настраиваются в конвертации. Для начала необходимо создать структуру метаданных обеих конфигураций (источника и приемника). Затем создать правила, где уже указать конфигурации источника и приемника со своими структурами. После того как правила созданы, открывается в базе источника типовая обработка «Универсальный обмен данными XML», указывается файл правил, файл для данных и данные выгружаются. Затем в конфигурации приемнике открыть эту же обработку, указать файл с выгруженными данными и загрузить. Вот и весь процесс. Самое сложное это создать и отладить правила. Особенно для тех, кто плохо в этом разбирается.
Начну, пожалуй, со сложных правил. Есть вполне рабочие правила обмена данными, которые собирают определенные данные и преобразуют их совершенно в другие виды документов. Проблема возникает в том, что часто непонятно, что именно передается в переменные. Что делает та или иная процедура и т.д. Часто возникает ошибка, что, мол, переменная не определена и т.д. (Было бы прекрасно, если бы можно было нажать Shift+F9 и посмотреть). Такая возможность есть, как при выгрузке, так и при загрузке. Итак, в моих правилах в одном из правил выгрузки данных, в процедуре ПередОбработкой «собираются данные, а затем выгрузка идет по определенному правилу.
Здесь я создаю структуру под названием «ИсходящиеДанныеВыпуска» и выгружаю по правилу «ОбщепитВыпускПродукции». Затем в процедуре ПередВыгрузкой правила конвертации объекта я хочу посмотреть, куда вообще попала та структура, которую я уже подготовил.
Вырезка из встроенной справки по обработчикам:
В справке много параметров, которые передаются в событие, но что в них находится на определенном этапе выгрузки, это уже вопрос. Запускаем конфигуратор и предприятие в режиме отладки Для начала необходимо создать пустую внешнюю обработку, с любым названием, и сохранить в любое место. Итак, сохраняем правила в файл и запускаем обработку «Универсальный обмен данными XML». На вкладке Выгрузка загружаем правила, указываем файл для выгрузки и ставим флажок «Режим отладки обработчиков выгрузки» —> Настройка отладки выгрузки—> Сформировать модуль отладки выгрузки. На экране появится окно с кодом. Весь код копируем в буфер обмена, затем открываем созданную нами ранее обработку, вставляем весь код в модуль объекта и сохраняем. А в поле ввода «Имя файла внешней обработки с модулем отладки» указываем файл этой самой обработки.
Затем «Готово». Ищем в модуле объекта нашей обработки нужную строку кода и ставим точку останова.
Далее запускаем процесс выгрузки и ждем )))) Управление переходит в отладчик, где уже и можно просмотреть все параметры, понять, какой именно код прописать, увидеть ошибку и т.д.
Процесс загрузки абсолютно идентичен… Думаю, с ним вопросов не возникнет. В принципе все. Если кого что интересует, пишите…
АлгоритмыЗапросы
На закладке «АлгоритмыЗапросы» может быть создан программный код или запрос, который, как правило, неоднократно используется в различных обработчиках правил обмена.
Как же отладить правила в этом случае?! Как просмотреть, какие параметры передаются в Алгоритм, выполняется ли текст запроса и т.д.? Я создал алгоритм «ПроверкаНаЗаполнение» и запрос «ПолучитьКонтактнуюИнформацию». Затем в процедуре ПередОбработкой правила выгрузки данных прописал код вызова этих АлгоритмовЗапросов.
Далее в базе источнике запускаю универсальную обработку. Устанавливаю галку «Режим отладки обработчиков выгрузки» —> «Настройка отладки выгрузки». Далее ВНИМАНИЕ!!! Есть 3 режима отладки кода. 1) Без отладки алгоритмов. 2) Вызывать алгоритмы как процедуры. 3) Подставлять код алгоритмов по месту вызова. Первый режим удобно использовать, когда мы точно знаем, что ошибка в обработчике не связана с кодом какого-либо алгоритма. В этом режиме код алгоритмов не выгружается в модуль отладки. Алгоритмы выполняются в контексте оператора «Выполнить()» и их код недоступен для отладки.
Второй режим необходимо использовать в тех случаях, когда ошибка находится в коде алгоритма. При установке этого режима алгоритмы будут выгружены как отдельные процедуры. В момент вызова алгоритма из какого-либо обработчика происходит обращение к соответствующей процедуре обработки. Этот режим удобно использовать, когда для передачи параметров в алгоритмы используется глобальная переменная «Параметры». Ограничения использования этого режима в том, что при отладке в алгоритме недоступны локальные переменные обработчика, из которого он вызывается.
Третий режим отладки используется, как и во втором случае, при отладке кода алгоритмов и в тех случаях, при которых второй режим отладки не подходит. При установке этого режима алгоритмы будут выгружены как интегрированный код в обработчиках. Т.е. взамен оператора вызова алгоритма вставляется полный код алгоритма с учетом вложенных алгоритмов. В этом режиме нет ограничений на использование локальных переменных обработчика, однако есть ограничение при отладке алгоритмов с рекурсивным вызовом.
Разберем все 3 режима на примере: 1) см. выше. Ранее я про него уже говорил. 2) Попробуем сформировать модуль отладки и проверим наши алгоритмы. Как известно, то алгоритмы используют локальные переменные модуля, из которого они вызываются. Т.е. в месте вызова алгоритма такой код:
Пока Выборка.Следующий() Цикл
Выполнить(Алгоритмы.ПроверкаНаЗаполнение);
КонецЦикла;
А в алгоритме будет доступна переменная Выборка.
Если Выборка.Представление = "" Тогда
Сообщить("У объекта: " + Выборка.Объект + " представление не заполнено...");
КонецЕсли;
Но когда мы сформируем модуль отладки и вставим его в модуль внешней обработки, то при сохранении у нас покажется ошибка, что переменная Выборка не обнаружена.
Я в этом случае поступаю так. Может не совсем правильно, но работает. Алгоритмы — это Структура. Нужно найти место, где эта структура заполняется и добавить те параметры, которые используются в алгоритме. А именно процедура
Процедура Конструктор(Владелец)
Затем найти процедуру с названием «Алгоритм_ПроверкаНаЗаполнение» и добавить ей тоже параметр.
Тем самым обработка сохранится. Далее ставим точку останова в нужном месте и смотрим.
Как видно из рисунка, то точка останова стоит в обработчике «ПередОбработкойДанных». А можно легко перейти в нужный алгоритм и просмотреть параметр, который в него передается.
3) Пояснять, думаю, не стоит, т.к. в описании все более чем подробно написано, что это за режим. Лучше разберем на примере. Сформируем модуль отладки с режимом номер 3. Внешняя обработка сохраняется без ошибок, т.к. код алгоритма прописан непосредственно в самой процедуре вызова алгоритма.
Думаю, тут не возникнет вопросов, каким образом сработал код. В этом режиме отладке также доступны такие глобальные переменные как параметры. Проблематичность этого метода, заключается лишь в невозможности отладки при рекурсивном вызове алгоритма. (Если сказать по-простому, то это вызов процедуры самой из себя).
С запросами вообще все просто. Во всех трех режимах запрос передается в структуру под названием Запросы. Кстати, то же самое происходит и с алгоритмами с режимом отладки номер 1.
Отладка правил обмена платформы 7.7
Отладка правил обмена на версии платформы 7.7 происходит гораздо легче, нежели на 8. Причина всему то, что при сохранении правил обмена для версии 7.7 необходимо также указать путь к файлу для выгрузки модуля обработки выгрузки данных.
По выбранному пути на жестком диске будет создан файл txt. В моем случае его название «МодульВыгрузки.txt». Далее открываем конфигуратор 1С:Предприятие 7.7. Открываем типовую обработку V77Exp.ert. (Универсальная выгрузка данных в формате XML (2.1.7)) открываем ее модуль и полностью заменяем на тот программный код, который сформировался в файле «МодульВыгрузки.txt». Сохраняем. Запускаем 1С в режиме отладки, открываем только что созданную обработку, находим нужный кусок кода, ставим точку останова и далее уже в предприятии запускаем выгрузку данных через эту же обработку. Управление перейдет в отладчик. Вот и все.
P.S. Для быстроты тестирования правил обмена расскажу про одну хитрость. В модуле обработки V77Exp.ert не обязательно каждый раз вставлять программый код, созданный конвертаций. Достаточно в модуле прописать лишь одну строчку
#ЗагрузитьИзФайла D:МодульВыгрузки.txt
Я думаю понятно, что после #ЗагрузитьИзФайла нужно указать полное имя файла. Отладка конечно в этом случае будет невозможна, но зато это гораздо ускоряет процесс.
Возможно, кому-то будет полезна статья с ИТС. http://its.1c.ru/db/metod8dev#content:2942:hdoc
На этом все. Всем спасибо, все свободны )))))
Если не ошибаюсь, то данная схема не «взлетит» если в правилах используются загруженные обработки.
(1) davdykin, Поясните пожалуйста. Что значит загруженные обработки? А то я с первого раза хреного понимаю xDDD
(1) davdykin, для семерки они еще необходимы. А для 8x — зачем, если весь код, с учетом совместимости платформ, будет браться непосредственно из файла XML?
(0) Автор, тема интересная и для многих снимет ряд вопросов по созданию и поддержке правил. Но убедительная просьба поправьте хотя бы орфографию. Кровь заливающая глаза мешает вдумчивому чтению.
вместо посредством чего либо.
вместо вкратце
(3) Артано, Прошу прощения за ошибки. На работе просто статью писал. Торопился.
(3) Артано, прошу прощения. А где Вы у меня ошибки то нашли? У меня нет таких в этой статье…
(5) ctrl+F используй
Чтобы посмотреть какие параметры попадают в конкретный обработчик правил и стек вызовов я иногда специально в текст обработчика добавляю синтаксическую ошибку и отладчику ставлю галочку останавливаться по ошибке
Спасибо огромное за статью, Вы очень помогли
Спасибо. Всегда мучалась, что не могу поймать ошибку, а тут так всё просто и легко!!
(3) Артано, Если чего-нибудь мудреное пишешь, гораздо проще писать и отлаживать в обработке, чем в КД.
(6) jamirza, Вы не поверите, я именно так и делал. Только вот ошибки в своем тексте я не заметил. Именно эти слова написаны правильно. Конечно, может ее кто за меня поправил…
(7) i132, можно и так тоже. Просто решил написать, так сказать, основы. А вообще самый простой способ и быстрый, это простое использование Сообщить();
«по средствам XML фалов» — исправьте на «посредством XML файлов»
Использование функции «Сообщить()» в тексте обработчиков бывает полезно, когда отлаживаешь простые правила. А описанный автором способ отладки в разы сокращает время отладки «навороченных» правил обмена. Так что, автору однозначно +. И еще совет: перед публикацией статьи проверять ее текст хотя бы в MS Word, тогда не будет шовинистических нападок и ценность статьи увеличится…
Шикарно. То, что надо
Дякую, друже.
(16) DAnry, Нема за що. Правильно же написал? ))))
Вот и нет, как на счет режима выгрузка on-line?
Что не рассказали про различные режимы выгрузки отладки кода?
(18) ivanov660, как время будет обязательно отредактирую статью.
Мир этому дому!
Статья интересная и полезная. Крупицы чужого опыта часто помогают решать собственные большие проблемы…
То что доктор прописал. Для новичков в самый раз. Спасибо.
Спасибо за интересную статью! Здорово!
тщательно сохраню в эверноут. Бо такие статьи зело полезны и поучительны есть )))
(23) russinow, Чеееееего? У меня, видимо, фигово с пониманием сейчас…
спс:)
(24)в сервис хранения заметок — evernote
Отличная статья, некоторые вопросы недопонимал 🙂 теперь все стало на свои места.
А где бы покурить о последовательности вызовов обработчиков: ПКО, ПКС и т.д.? И вообще документация какая есть по конвертации?
(27) andrey314, естькнига . А также встроенная справка. В ней много чего хорошего.
(23) russinow, эверноут не люблю, по остальному согласна
плюс за то, что было не лень написать эту статью для новичков и вообще))
Огромное, спасибо за статью.
А я по образованию программист, а по факту уже 15 лет бухгалтер и все свои мелкие вопросики по 1С решаю сама. Эта статья для меня! Спасибо. Читать серьезные книжки по 1С нет ни времени, ни возможности. А это как раз то, что нужно. Совсем недавно, готовясь к переходу на БП 3.0, репетировала обмен с УТ. Штатный вариант меня не устроил, пришлось разбираться с конвертацией и регистрацией. Вот, мне в тему…
Хорошо написано, возьму на заметку! 🙂
Хорошая статься, большое спасибо ! ))
Спасибо за статью, даже для новичка наступает просветление!
Спасибо за статью. Вот теперь многое становится понятно.
Спасибо за познавательную статью…
Замечательная статья, возьму на заметку!
Спасибо большое за статью
Отличная статья, большое спасибо, узнал много нового.
Забавная статья, надо будет попробовать этот метод проверки, когда столкнусь с обменом XML. Спасибо автору.
А я не понял как пользоваться — при сохранении ошибка:
Переменная не определена (Источник)…
Переменная не определена (СоздатьВидНоменклатуры_Номенклатура)…
(42) yyx, Значит сделали что то не так как в моей статье. Внимательнее еще раз прочитайте.
Познавательная статья!
Плюсую. Чужой опыт не бывает лишним.
У меня почему то, не останавливается на точке останова, хотя делаю по инструкции, как будто не входит во внешную обработку, хотя раньше все получалось, раньше платформа была другая, а сейчас 8.3.6, в чем проблема не понятно
(46) vikips, я Вам уже написал на другом форуме. Давайте там вести обсуждение.
Точка останова при отладке не срабатывае — думаю из-за того, что после формирования модуля отладки выгрузки приходится из-за сообщеения «Необходимо перезагрузить правила обмена для выгрузки данных.» перезагружаю правила обмена.
Может знаете как быть в этой ситуации?
(48) Star_SU, Да, правила обмена необходимо перезагрузить. Это нормально. Перезагружаете и все нормально должно быть. Проверьте версию вашей платформы. На платформе 8.3.6.2041 например, отладка не работает. На 8.2 таких проблем я не замечал.
Под 8.3.6.2152 тоже, видимо, отладка не работает. Уже все перепробовали… Какой последний стабильный релиз для отладки?
К сожалению на 8.3 дальше чем на 8.3.6.2041 не проверял. Сейчас Вы пишите, что и на 8.3.6.2152 аналогичные проблемы. Запустите на 8.2. Отладьте и все.
Вопросы отладки хорошо рассмотрены в курсе http:// /data-conv/ (не рекламы ради, а знаний для).
Добавили более удобную возможность отладки правил конвертации по второму режиму в наш платный продуктhttps://www.youtube.com/watch?v=KzabP0ccliU (рекламы ради).
А если использовать GCOMP — то не придется вручную копировать тексты модулей обработки выгрузкизагрузки на платформе 7.7 в модули обработок, GCOPM соберет все за вас автоматически.
(54) demon_infernal, для сего использовать лишнее ПО если все делается одной строчкой кода и ничего не нужно копировать. В сьатье же все указал.
Что касается отладки на 8.3.6. При записи файла с модулем обработка убегает на сервер и сохраняет там временный файл. А затем возвращается и проверяет его наличие на клиенте.
Показать
И если клиент и сервер это две разные машины, то конечно ничего не находится.
Это норма? (с) Или я чего-то не понимаю?
(56) kasper076, вообще не понимаю о чем Вы.
(57) как видно из кода, процедура
выполняется на сервере. Там же она и сохраняет создаваемый файл с обработчиками событий. А затем он пытается его прочитать, но делает это уже на клиенте. Только вот если клиент и сервер это разные машины, то прочитать этот файл на клиенте не удастся.
(58) kasper076, не важно. В файловом варианте также не работает отладка на 8.3.
Не совсем верно. На 8.3.5 отладка работает. Не работает именно в 8.3.6.
(60) qwest, Спасибо.
На 8.3.7 работает
Спасибо за статью. В свое время самостоятельно изучал данные возможности при разработке обмена. Сейчас убедился, что использовал их правильно))
(62) garik79, Добрый день.
А не подскажете как у вас получилось запустить отладку на 8.3.7.
Делал все по данному мануалу и плюс статья ИТС.
Использую обработку выгрузки/загрузки версии 2.1.8.
Выгрузил модуль по 3-ему способу, создал обработку новую, подставил ее, но в конфигураторе ну никак не хочет останавливаться по точке.
(64) hamec, лично я не проверял работоспособность на 8.3.7. Поверил на слово garik79. Проверю чуть позже.
Только что проверил на 8.3.7.1776. Отладка не работает.
Спасибо вам за ответ.
А может быть тогда подскажете, как отлаживать правила выгрузки предназначенные для конфигураций последних редакций БП 3, УТ 11, КА 2
(67) hamec, ну на сколько я знаю, то только ждать пока сей недочет поправят в новых версиях платформы. Как коллеги сообщают, то на 8.3.5 отладка работает. Опять же у Вас все в руках. Методом тыка попробуйте разные версии платформ. Не думаю, что это будет уж прям огромное значение иметь на работу самой конфигурации, разве что парочки методов не будет найдено и все.
Для тех у кого не работает отладка в 8.3.7, 8.3.8(8.3.6 не проверял). Необходимо сменить механизм отладки на HTTP. Инструкция по адресуhttp://v8.1c.ru/o7/201506debug/index.htm . После настройки механизма идем в конфигураторе в меню Отладка->Подключение-> Автоматическое подключение, выбираем нужное и вуаля — все заработало.
З.Ы. Возможно ошибка связанна с используемой операционной системой. На WinXP отладка заработала без смены механизма, на Win10 не захотела.
(3) Артано, Вы в самом начале поправляете автора!) И видимо не очень хорошо знаете сами:
Вкратце. это наречие ( предлоги с наречиями пишутся СЛИТНО)
1. Посредством электронной связи = при помощи электронной связи
2. По средствам (кому-либо/чему-либо) = (кто-то/что-то) может себе позволить.. .(а дальше по смыслу, что именно может себе позволить)
Спасибо за методику отладки! С примерами, которые помогают методику понять.