Книга знаний

1С:Предприятие / Приемы программирования / Обмен данными, УРБД

Как правильно пользоваться переносом остатков 7.7 - 8.0 с помощью КД 2.0

Очень многие допускают очень большую ошибку думая, что в конвертации нужно сочинять и писать правила для совершенно разных структур..Автор статьи: Maniac | Редакторы: Defender aka LINN
Последняя редакция №5 от 29.09.10 | История
URL: http://kb.mista.ru/article.php?id=369

Ключевые слова: Конвертация данных, КД, Конвертация, Перенос остатков, Обмен данными


Дело в том, что в КД2.0 источником данных может являться не только объект ИБ (документ, справочник, перечисление, счет и т.д.), но и абсолютно произвольные данные.
Рассмотрим пошагово на примере (пример очень простой, но общий смысл, думаю, будет ясен):
Задача - перенести остатки по складам из ТиС в УТ.
1. Настраиваем Правила Конвертации Объектов - справочники "Номенклатура" и "Склады".
2. Создаем еще одно ПКО - источник не указываем, а приемником выступает документ "Корректировка записей регистров".
2.1. Добавляем ПКС " -> Дата", т.е. источник - пустой, приемник - реквизит документа "Дата" и устанавливаем галку поиска.
2.2. Теперь добавляем таким же образом ПКС для движений документа по регистру "ТоварыНаСкладах" (как группу), и добавляем в этой группе ПКС для свойств регистра - Номенклатура, Склад и Количество.
3. Добавляем Правило Выгрзуки Данных - в качестве ПКО указываем наше свежесозданное правило, способ выборки - "Произвольный алгоритм". Тут мы можем творить чудеса.
Теперь займемся собственно получением данных. Для того, чтобы создался необходимый документ, мы должны указать источник данных. В нашем случае это будет ТаблицаЗначений. Соответственно, в событии "Перед обработкой" инициализируем нужные данные:
ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений");
ВыборкаДанных.НоваяКолонка("Дата");
ВыборкаДанных.НоваяКолонка("ТоварыНаСкладах");

ВыборкаДанных.НоваяСтрока();
ВыборкаДанных.Дата = ДатаОкончания; //ДатаОкончания - реквизит обработки "Выгрузка данных"
ВыборкаДанных.ТоварыНаСкладах = СоздатьОбъект("ТаблицаЗначений");

ТоварыНаСкладах = ВыборкаДанных.ТоварыНаСкладах;
ТоварыНаСкладах.НоваяКолонка("Активность");
ТоварыНаСкладах.НоваяКолонка("ВидДвижения");
ТоварыНаСкладах.НоваяКолонка("Номенклатура");
ТоварыНаСкладах.НоваяКолонка("Склад");
ТоварыНаСкладах.НоваяКолонка("Количество");

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = 
"//{{ЗАПРОС(Остатки)
|Период с ДатаОкончания по ДатаОкончания;
|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
|Склад = Регистр.ОстаткиТМЦ.Склад;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|Функция Остаток = КонОст(Количество);
|Группировка Номенклатура;
|Группировка Склад;
|"//}}ЗАПРОС
;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Отказ = 1;
    Возврат; //В 8.0/8.1 Возврат использовать нельзя!
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2) = 1 Цикл
        ТоварыНаСкладах.НоваяСтрока();
        ТоварыНаСкладах.Активность        = 1; //1/0 конвертируются в булевские Истина/Ложь
        ТоварыНаСкладах.ВидДвижения        = "Приход"; //Для перечислений достаточно указать имя значения, обработка загрузки вставит нужное значение
        ТоварыНаСкладах.Номенклатура        = Запрос.Номенклатура;
        ТоварыНаСкладах.Склад            = Запрос.Склад;
        ТоварыНаСкладах.Количество        = Запрос.Остаток;
    КонецЦикла;
КонецЦикла;


Все. Что произойдет при выгрузке:
Система, определив, что ВыборкаДанных имеет тип "ТаблицаЗначений" начнет обычный обход этой таблицы через ВыбратьСтроки()/ПолучитьСтроку() и для каждой строки будет вызывать процедуру "ВыгрузитьПоПравилу". В созданном нами правиле источник не указан, однако обработка выгрузки в этом случае пытается получить значение из Источника (в нашем случе - ТЗ) по имени. То есть, добавив в таблицу колонку "Номер" и добавив соответствующее Правило Конвертации Свойств, мы получим при загрузке документ с этим номером. Далее, это же правило распростаняется и на группы свойств (таб. части, движения регистров и т.д.). То есть, система, дойдя до группы свойств "ТоварыНаСкладах" сделает то же самое. После загрузки данных в базе-приемнике будет создан документ "Корректировка записей регистров", который добавит остатки по всей номенклатуре, которая есть на складах.
Следует отметить, что кроме ТаблицыЗначений можно также использовать объекты "СписокЗначений" в 7.7 (Если, например, по данным строки документа нам надо в приемнике создать элемент справочника) и, соответственно, "Структура" для 8.x

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика