Имя: Пароль:
1C
1С v8
Передача параметра в правилах обмена
,
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. На стороне приемника обращение к параметру происходит так: Параметры.ИмяП;

Ура!