|
Передача параметра в правилах обмена | ☑ | ||
---|---|---|---|---|
0
grigo
27.01.14
✎
17:01
|
Задача: передать из одной конфигурации некоторое Число в другую конфигурацию используя механизм обмена.
Пишу обмен данными между двумя базами, использую Конвертацию данных 2.1.5.1. При выгрузке данных нужно передавать в приемник номер последнего отправленного сообщения. Но оказалось, что не так - то просто передать произвольные данные при помощи механизмов конвертации данных. Есть какие-нибудь идеи? |
|||
1
Beduin
27.01.14
✎
17:03
|
(0) Заведи переменную и пиши туда, что хочешь.
|
|||
2
vicof
27.01.14
✎
17:04
|
Параметр, доступный при загрузке, не?
|
|||
3
grigo
27.01.14
✎
17:05
|
(2) Он же заполняется вручную. А мне нужно, чтобы этот параметр заполнялся программно.
|
|||
4
grigo
27.01.14
✎
17:06
|
(1) Какую переменную?
|
|||
5
vicof
27.01.14
✎
17:08
|
(3) Правда? :)
|
|||
6
Umga2002
27.01.14
✎
17:10
|
Пойди туда, незнаю куда....
Можно передавть параметр. |
|||
7
grigo
27.01.14
✎
17:12
|
(5) Хорошо. Вот код, который выдает правильный результат
Узел = ПланыОбмена.Полный.НайтиПоКоду("УА"); Параметры.НОС = Узел.НомерОтправленного + 1; НОС - имя объявленного параметра. В каком обработчике этот код прописать? Сразу скажу, что обработчик Конвертация.ПередВыгрузкойДанных и Конвертация.ПослеВыгрузкиДанных не подходят - передается не то значение, которое прописано в коде, а то значение, которое заполнено вручную на закладке "Параметры выгрузки". |
|||
8
vicof
27.01.14
✎
17:18
|
У меня все нормально передается.
Правила перезагружал? |
|||
9
МойКодУныл
27.01.14
✎
17:20
|
В информации по опбработчикам нет таких ограничений (7).
Событие выполняется самым первым перед началом выгрузки данных и только один раз, после открытия файла для записи. Таким образом в файл могут быть записаны произвольные данные. Кроме того могут быть инициализинованы переменные, которые впоследствии предполагается использовать. Для работы с такими переменными имеется отдельная структура "Параметры". Параметры: Отказ - Булево. Если установить значение Истина, то выгрузка данных не производится Параметры - Структура, в которой хранятся переменные доступные во всех обработчиках Пример: Если ЗначениеНеЗаполнено(Параметры.Организация) Тогда Сообщить("Не указан параметр Организация. Выгрузка невозможна."); Отказ = Истина; КонецЕсли; Параметры.Вставить("НомерВерсии", Константы.НомерВерсииКонфигурации.Получить()); А считать можно в обработчике После загрузки параметров Условия возникновения события Событие выполняется после загрузки параметров переданных из информационной базы источника в информационную базу приемника. Только для обмена V8-V8. Параметры: Отказ - булево. Служит для отказа от продолжения загрузки. ПричинаОтказа - Строка. Содержит информацию о причине отказа от загрузки. Пример: Если Параметры.КодИнформационнойБазы <> 100 Тогда Отказ = Истина; ПричинаОтказа = "Неверный код информационной базы источника"; КонецЕсли; Сам не пробовал, но должно сработать. |
|||
10
grigo
27.01.14
✎
17:35
|
(9) Попробовал прописать первый код в обработчике "Перед выгрузкой данных". В файле обмена этого параметра нет.
Вообще, я прочитал в книге Харитонова "Конвертация данных" следующее: "... Поэтому передавать из источника в приемник можно только те параметры, значение которых установлено в диалоге обработки выгрузки". Т. е. только вручную заполненные параметры. И это пипец. Нужно всего-то передать число из одной конфы в другую. И этого нельзя сделать. Пипец. |
|||
11
vicof
27.01.14
✎
17:39
|
(10) Устанавливаешь в диалоге, или не устанавливаешь, в коде переопределяешь, что сложного?
|
|||
12
grigo
27.01.14
✎
17:42
|
А сложного то, что в файл с данными попадает значение, установленное вручную, а не программно. Я повторю свой вопрос, который тебе уже задавал: в каком обработчике прописать код
Узел = ПланыОбмена.Полный.НайтиПоКоду("УА"); Параметры.НОС = Узел.НомерОтправленного + 1; Пробовал уже в ПередВыгрузкойДанных и в ПослеВыгрузкиДанных. В них не работает. Куда прописать? |
|||
13
grigo
27.01.14
✎
17:42
|
(11) А сложного то, что в файл с данными попадает значение, установленное вручную, а не программно. Я повторю свой вопрос, который тебе уже задавал: в каком обработчике прописать код
Узел = ПланыОбмена.Полный.НайтиПоКоду("УА"); Параметры.НОС = Узел.НомерОтправленного + 1; Пробовал уже в ПередВыгрузкойДанных и в ПослеВыгрузкиДанных. В них не работает. Куда прописать? |
|||
14
vicof
27.01.14
✎
17:46
|
(12) Все три галки в параметре стоят?
|
|||
15
grigo
27.01.14
✎
17:47
|
(14) Да, если стоит "Использовать при загрузке", то две другие ставятся автоматически
|
|||
16
vicof
27.01.14
✎
17:51
|
(15) Тогда отладчик в руки, у меня всегда нормально параметры выгружаются таким образом: Параметр определил, перед выгрузкой данных его изменил, выгрузил, загрузил.
|
|||
17
grigo
27.01.14
✎
18:24
|
"Отладчик в руки". А при чем здесь отладчик? При помощи конвертации написаны правила. Которые помещены в типовую обработку Выгрузка/Загрузка. Результат - выгружается именно вручную заданное значение. Так выгружает стандартная обработка по правилам, написанным в Конвертации данных. Об этом даже написано в книге по Конвертации данных.
А мне не нужно использовать "ручные" параметры. Мне нужно выгрузить число, рассчитанное в одной базе, в другую базу. Если у вас работает - это значит, вы модифицировали обработку выгрузки/загрузки. А не правила конвертации. |
|||
18
vicof
27.01.14
✎
18:30
|
(17) Ничего не модифицировал. Все работает стандартно.
|
|||
19
grigo
27.01.14
✎
18:36
|
(18) Хорошо. Тогда в третий раз повторю вопрос - в каком обработчике переорпеделяли значение параметра? В первые два раза так и не ответили. Мне этой информации будет достаточно. Дальше сам разберусь, хотя, если вы еще строчку с кодом кинете, в которой переопределяете, буду безмерно благодарен.
|
|||
20
vicof
27.01.14
✎
18:44
|
Или перед выгрузкой данных или после загрузки правил обмена.
http://forum-mista.pro/topic.php?id=447429 |
|||
21
grigo
28.01.14
✎
10:58
|
УРА! ЗАРАБОТАЛО!
Для тех, кто столкнется с подобной проблемой: 1. Параметры, создаваемые на одноименной закладке в справочнике "конвертации" не получится использовать для передачи в приемник программно вычисляемых параметров. С их помощью можно передать только параметры, задаваемые вручную в обработке выгрузки. 2. Есть замечательная функция ПередатьОдинПараметрВПриемник(ИмяП, ЗначениеП, ПравилоКонвертации). Так вот, при ее использовании не нужно создавать параметр в справочнике "конвертации". Он создается в момент обращения к функции автоматически. 2,5. Для простых типов данных (число, строка и т.п.) можно не создавать и не указывать правило конвертации 3. Эту замечательную функцию нужно поместить в обработчик ПередВыгрузкойДанных 4. На стороне приемника параметр доступен в обработчике ПослеЗагрузкиПараметров и во всех более поздних обработчиках 5. На стороне приемника обращение к параметру происходит так: Параметры.ИмяП; Ура! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |