Конвертация данных. Алгоритмы. #718990


#0 by Хорт
Создаю правило. Использую алгоритм. В алгоритме используется переменная Источник. На нее ругается при обмене, мол так и так, НЕ бывает такой. Подскажите, что не так.
#1 by Хорт
Это взято из стандартных правил УТ-БП
#2 by Хорт
Источник вообще везде по идее должно работать...
#3 by salvator
Кто тебе сказал? Передавай источник в параметры алгоритма.
#4 by Хорт
В поле Параметры на форме Алгоритмы - там я вписал Источник
#5 by Зойч
где испоьлзуешь алгоритм? Должен вызываться в группе ПКС
#6 by Хорт
ну где-то начитал, гуглю весь день уже этот ерундовый вопрос :(((((
#7 by Хорт
при перегрузке контактных данных организации, в ПКГС
#8 by Хорт
Передать? Может я чего не доделал , вызываю алгоритм так :
#9 by Хорт
все ушли домой :( буду один тут сидеть
#10 by Зойч
какая ошибка точно?
#11 by Зойч
Точно на источник ругается, а не на входящие данные?
#12 by Зойч
Запрос.УстановитьПараметр("Контрагент", ?(ТипЗнч(Источник.Ссылка) = Тип("СправочникСсылка.КонтактныеЛица"), ВходящиеДанные.КонтактноеЛицоКонтрагента, Источник.Ссылка));
#13 by Хорт
на параметр Источник, при отладке , алгоритм тоже некорректным становится
#14 by Хорт
это что-то совсем не то по-моему
#15 by 13_Mult
Не везде Все зависит от того где вызывать этот алгоритм
#16 by 13_Mult
В каком обработчике?
#17 by 13_Mult
Может быть не Источник а Объект? ))
#18 by Steini
Короче, пилю свою историю, может поможет. Для обмена по самописным правилам есть два способа: 1) подкинуть свои правила в типовой обмен, 2) использовать обработку УниверсальныйОбменВФорматеХМЛ или же использовать свою обработку, вызывающюю ту и подкидывающую ей самописные правила. Так вот. Конфа "Конвертация данных", как я понимаю, написана под актуальную версию обработки УниверсальныйОбменВФорматеХМЛ. А при обмене через типовой обмен используется не она, а вот на 99,999% такой же код, но с маааалюсеньким различием. Но это мааалюсенькое различие способно такооого натворить. В общем, мое мнение: надо запускать в режиме отладки и смотреть именно в том конкретном месте доступны ли те или иные переменный. Ведь всякие "Объект", "Источник" - это просто локальные переменные обработки загрузки и ничего более. Весь код твоих правил выполняется в "Выполнить" обработки загрузки.
#19 by Хорт
Я пытаюсь воспользоваться отладкой, получаю : {ВнешняяОбработка.ОтладкаПравил.МодульОбъекта(164,51)}: Переменная не определена (Источник)     Запрос.УстановитьПараметр("Контрагент", ?(ТипЗнч(<<?>>Источник.Ссылка) = Тип("СправочникСсылка.КонтактныеЛица"), ВходящиеДанные.КонтактноеЛицоКонтрагента, Источник.Ссылка)); (Проверка: Толстый клиент (обычное приложение)) {ВнешняяОбработка.ОтладкаПравил.МодульОбъекта(164,152)}: Переменная не определена (Источник)     Запрос.УстановитьПараметр("Контрагент", ?(ТипЗнч(Источник.Ссылка) = Тип("СправочникСсылка.КонтактныеЛица"), ВходящиеДанные.КонтактноеЛицоКонтрагента, <<?>>Источник.Ссылка)); (Проверка: Толстый клиент (обычное приложение)) {ВнешняяОбработка.ОтладкаПравил.МодульОбъекта(164,110)}: Переменная не определена (ВходящиеДанные)     Запрос.УстановитьПараметр("Контрагент", ?(ТипЗнч(Источник.Ссылка) = Тип("СправочникСсылка.КонтактныеЛица"), <<?>>ВходящиеДанные.КонтактноеЛицоКонтрагента, Источник.Ссылка)); (Проверка: Толстый клиент (обычное приложение))
#20 by Хорт
алгоритм преобразуется в такую процедуру :
#21 by Хорт
Не вижу вот я параметров, которые передаются Алгоритму :(
#22 by GenAcid
А про ограничения при режимах отладки алгоритмов читал? Режим “Вызывать алгоритмы как процедуры” рекомендуется использовать в тех случаях, когда необходимо проводить отладку кода алгоритмов. Алгоритмы выгружаются как отдельные процедуры, а их вызовы вставляются в код обработчиков или других алгоритмов. Для передачи параметров в алгоритмы используется глобальная переменная “Параметры”. Этот способ является рекомендуемым. Однако если разработчик использует какой-либо другой способ передачи параметров (например, используются локальные переменные обработчика), то при попытке запуска выгрузки или загрузки в режиме отладки обработчиков программа выдаст ошибку создания внешней обработки. Для отладки таких алгоритмов существует третий режим. В режиме “Подставлять код алгоритмов по месту вызова” текст алгоритмов подставляется прямо в текст вызывающих их обработчиков или других алгоритмов с учетом вложенности вызовов. В этом режиме сняты ограничения на использование локальных переменных, однако есть ограничение на отладку рекурсивных алгоритмов. В момент формирования модуля отладки при обнаружении рекурсивных вызовов алгоритмов программа сообщит об ошибке.
#23 by Steini
Нет, коллеги, я, когда у меня возникали ошибки при обмене через ХМЛ, и было совершенно неясно, что за ошибки, куда копать, брал конфигуратор, ставил "останавливать отладку при ошибке", запускал обмен (типовой), и далее уже смотрел конкретное место в коде, где был вызван этот алгоритм. Если надо - пользовался стеком вызовов. Вот, допустим, нашел процедуру, где исполняется этот алгоритм посредством "Выполнить", посмотрел, а в какой момент это вообще происходит - при загрузке или после, свойства или конвертации. Тут же в отладчике можно посмотреть, а чему равны всякие локальные переменные, типа Источник или Объект, или структура параметров. Тут же сам текст алгоритма проверил, мало ли. Вся информация будет как на ладони.
#24 by Зойч
как отладку включал? используй подстановку по метсу вызова
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С