Передача параметра в правилах обмена #696279


#0 by grigo
Задача: передать из одной конфигурации некоторое Число в другую конфигурацию используя механизм обмена. Пишу обмен данными между двумя базами, использую Конвертацию данных 2.1.5.1. При выгрузке данных нужно передавать в приемник номер последнего отправленного сообщения. Но оказалось, что не так - то просто передать произвольные данные при помощи механизмов конвертации данных. Есть какие-нибудь идеи?
#1 by Beduin
Заведи переменную и пиши туда, что хочешь.
#2 by vicof
Параметр, доступный при загрузке, не?
#3 by grigo
Он же заполняется вручную. А мне нужно, чтобы этот параметр заполнялся программно.
#4 by grigo
Какую переменную?
#5 by vicof
Правда? :)
#6 by Umga2002
Пойди туда, незнаю куда.... Можно передавть параметр.
#7 by grigo
Хорошо. Вот код, который выдает правильный результат Узел = ПланыОбмена.Полный.НайтиПоКоду("УА"); НОС - имя объявленного параметра. В каком обработчике этот код прописать? Сразу скажу, что обработчик Конвертация.ПередВыгрузкойДанных и Конвертация.ПослеВыгрузкиДанных не подходят - передается не то значение, которое прописано в коде, а то значение, которое заполнено вручную на закладке "Параметры выгрузки".
#8 by vicof
У меня все нормально передается. Правила перезагружал?
#9 by МойКодУныл
В информации по опбработчикам нет таких ограничений . Событие выполняется самым первым перед началом выгрузки данных и только один раз, после открытия файла для записи. Таким образом в файл могут быть записаны произвольные данные. Кроме того могут быть инициализинованы переменные, которые впоследствии предполагается использовать. Для работы с такими переменными имеется отдельная структура "Параметры". Параметры: Отказ - Булево. Если установить значение Истина, то выгрузка данных не производится Параметры - Структура, в которой хранятся переменные доступные во всех обработчиках Пример: Если ЗначениеНеЗаполнено(Параметры.Организация) Тогда А считать можно в обработчике После загрузки параметров Условия возникновения события Событие выполняется после загрузки параметров переданных из информационной базы источника в информационную базу приемника. Только для обмена V8-V8. Параметры: Отказ - булево. Служит для отказа от продолжения загрузки. ПричинаОтказа - Строка. Содержит информацию о причине отказа от загрузки. Пример: Если Параметры.КодИнформационнойБазы <> 100 Тогда     ПричинаОтказа = "Неверный код информационной базы источника"; Сам не пробовал, но должно сработать.
#10 by grigo
Попробовал прописать первый код в обработчике "Перед выгрузкой данных". В файле обмена этого параметра нет. Вообще, я прочитал в книге Харитонова "Конвертация данных" следующее: "... Поэтому передавать из источника в приемник можно только те параметры, значение которых установлено в диалоге обработки выгрузки". Т. е. только вручную заполненные параметры. И это пипец. Нужно всего-то передать число из одной конфы в другую. И этого нельзя сделать. Пипец.
#11 by vicof
Устанавливаешь в диалоге, или не устанавливаешь, в коде переопределяешь, что сложного?
#12 by grigo
А сложного то, что в файл с данными попадает значение, установленное вручную, а не программно. Я повторю свой вопрос, который тебе уже задавал: в каком обработчике прописать код Пробовал уже в ПередВыгрузкойДанных и в ПослеВыгрузкиДанных. В них не работает. Куда прописать?
#13 by grigo
А сложного то, что в файл с данными попадает значение, установленное вручную, а не программно. Я повторю свой вопрос, который тебе уже задавал: в каком обработчике прописать код Пробовал уже в ПередВыгрузкойДанных и в ПослеВыгрузкиДанных. В них не работает. Куда прописать?
#14 by vicof
Все три галки в параметре стоят?
#15 by grigo
Да, если стоит "Использовать при загрузке", то две другие ставятся автоматически
#16 by vicof
Тогда отладчик в руки, у меня всегда нормально параметры  выгружаются таким образом: Параметр определил, перед выгрузкой данных его изменил, выгрузил, загрузил.
#17 by grigo
"Отладчик в руки". А при чем здесь отладчик? При помощи конвертации написаны правила. Которые помещены в типовую обработку Выгрузка/Загрузка. Результат - выгружается именно вручную заданное значение. Так выгружает стандартная обработка по правилам, написанным в Конвертации данных. Об этом даже написано в книге по Конвертации данных. А мне не нужно использовать "ручные" параметры. Мне нужно выгрузить число, рассчитанное в одной базе, в другую базу. Если у вас работает - это значит, вы модифицировали обработку выгрузки/загрузки. А не правила конвертации.
#18 by vicof
Ничего не модифицировал. Все работает стандартно.
#19 by grigo
Хорошо. Тогда в третий раз повторю вопрос - в каком обработчике переорпеделяли значение параметра? В первые два раза так и не ответили. Мне этой информации будет достаточно. Дальше сам разберусь, хотя, если вы еще строчку с кодом кинете, в которой переопределяете, буду безмерно благодарен.
#20 by vicof
Или перед выгрузкой данных или после загрузки правил обмена.
#21 by grigo
УРА! ЗАРАБОТАЛО! Для тех, кто столкнется с подобной проблемой: 1. Параметры, создаваемые на одноименной закладке в справочнике "конвертации" не получится использовать для передачи в приемник программно вычисляемых параметров. С их помощью можно передать только параметры, задаваемые вручную в обработке выгрузки. 2. Есть замечательная функция   ПередатьОдинПараметрВПриемник(ИмяП, ЗначениеП, ПравилоКонвертации). Так вот, при ее использовании не нужно создавать параметр в справочнике "конвертации". Он создается в момент обращения к функции автоматически. 2,5. Для простых типов данных (число, строка и т.п.) можно не создавать и не указывать правило конвертации 3. Эту замечательную функцию нужно поместить в обработчик ПередВыгрузкойДанных 4. На стороне приемника параметр доступен в обработчике ПослеЗагрузкиПараметров и во всех более поздних обработчиках 5. На стороне приемника обращение к параметру происходит так: Параметры.ИмяП; Ура!
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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