Каталог решений - Конвертация данных 2.1. Методика переноса остатков

Конвертация данных 2.1. Методика переноса остатков

Конвертация данных 2.1. Методика переноса остатков

В наличии

В данной статье я приведу пример использования базовой методики конвертации данных для переноса остатков из одной информационной базы в другую.

Категория:

Описание

 

Введение. Описание и цель задачи

Привет всем! Прошло несколько месяцев как я написал предыдущую статью в сообществе. Мир с того момента, можно сказать, существенно изменился, и продолжает меняться у нас на глазах. На дворе кризис, обусловленный пандемией вируса COVID-19. Нереальное падение производства, повальные сокращения, запрет на работу целых отраслей. Во-первых, мне хотелось бы поддержать тех ребят-коллег, которые выпали из зоны рабочего комфорта в связи с ранее упомянутыми мной событиями.

И, поэтому, надеюсь, что методический и практический материал данной статьи будет максимально полезен всем, кто развивается и хочет развивать свои навыки программирования в среде 1с в настоящих реалиях пандемии и самоизоляции. Сделав обзор данного материала, вы сможете использовать его в своих задачах, подтянуть свой "скилл программирования", что немаловажно в наше время.

Отмечу, что в данной статье я не буду описывать "теоретическое поведение сферического коня в вакууме" и с гордостью приводить результаты вычисления "квадратного корня из этого коня", сравнивая его со среднепотолочным значением.

Цель данной статьи — привести надежный и практический пример работы с такой "любимой" всеми конфигурации как "Конвертация данных 2.1", а именно представить и подробно описать пример по переносу остатков из одной конфигурации в другую. По своему опыту могу сказать, что даже опытные программисты, имеющие за своими плечами написания десятков или даже сотен правил конвертации — все равно делают ошибки и косяки, когда пишут правила. Я осторожно напишу, что конвертацию данных (обмены) можно изучать бесконечно….

Итак, давайте перейдем к подходу и реализации задачи.

 

Подход к реализации задачи.

В качестве начальных условий возьмем две конфигурации — пусть конфигурация источник (откуда будем выгружать данные) будет УТ 10.3 (старенькая, да), а конфигурация приемник (куда загружать) — Розница 2.3. Вот так. Переносить будем остатки.

Первым шагом я "сниму образы конфигураций" — выгружу описания структуры метаданных обеих баз данных с помощью прилагаемых обработок MD83Exp.epf для Розницы (УФ) и MD82Exp.epf для старенькой торговли УТ 10.3.

Делается это так:

Просто открывается соответствующая обработка выгрузки метаданных под управляемыми формами или обычным, выбирается путь и название сохранения файла со структурой и нажимается кнопка "Выгрузить".

Рис.1 Выгрузка метаданных из конфигурации "Розница 2.3" в xml-файл.

 

Затем, я загружаю эти образы в мою подготовленную конфигурацию "Конвертация данных 2.1". Здесь тоже нет ничего сложного конечно.

Рис 2. Загрузка структуры метаданных выгруженных конфигураций.

 

Отмечу, что по-привычке, я всегда сначала загружаю данные в "новую" конфигурацию из образа. А потом уже решаю, модифицировать мне что-то или нет.

Теперь, мы переходим к следующему разделу — "Создание правил обмена".

 

Создание правил обмена "Управление торговлей 10.3 -> Розница 2.3"

Какую задачу мы ставим перед собой? Создать правила переноса остатков склада из УТ 10.3 в Розницу 2.3. Посмотрим каким документом создается ввод остатков в типовой рознице. Понимаем, что ввод остатков в типовой Рознице — это документ "Оприходование товаров". Значит, нам нужно написать правило конвертации, создающее этот документ.

Смотрим дальше, что нам потребуется для заполнения этого документа — это, конечно, перенос справочника "Номенклатура" из УТ 10.3 и, возможно, перенос справочника "Склады" (но, об этом мы подумаем чуть позже, нужен ли он нам будет).

 

"Разгоняемся" на переносе справочника "Номенклатура".

Итак, я пишу первое правило конвертации справочника "Номенклатуры" УТ 10.3 -> Розница 2.3.

Создаю новые правила, вопрос "Конвертация не содержит…" просто закрываю:

Рис 3. Создание новой конвертации.

 

Далее, я создаю вручную правило конвертации объектов Номенклатура — Номенклатура:

Рис 4. Сопоставление объектов Источник-Приемник.

 

На запрос "Создать автоматически правила конвертации" я всегда отвечаю отрицательно:

Рис 5. Отказ от использования автоматического создания правил для прлчиненных объектов.

 

Я самостоятельно подбираю свойства в Приемнике — Рознице, те, являются обязательными к заполнению. В итоге, я должен получить примерно вот такие правила:

Рис 6. "Готовые правила" переноса номенклатуры.

 

Здесь нет ничего сложного — источник переносится в приемник, единственное, что нужно "настроить в источнике" — это свойство "ТипНоменклатуры".

Пишем простое правило конвертации свойств (ПКС) для него (событие "Перед выгрузкой"):

Если Источник.ЭтоГруппа = Ложь Тогда
	Значение = Источник.ВидНоменклатуры.ТипНоменклатуры;
КонецЕсли;

 

выглядит это вот так:

Рис 7. ПКС "ТипНоменклатуры".

 

Так же нужно сопоставить Перечисления "ТипыНоменклатуры":

Рис 8. Сопоставление перечислений "Источник-Приемник".

 

На вспомогательном справочнике "Единицы измерения" поставлю галки, чтобы исключить дубли в "Приемнике", предварительно отметив поля, по которым продолжать поиск — в данном случае "Наименование".

Рис 9. Настройки ПКО для вспомогательного справочников единиц измерения.

 

Все, сохраняю правила и использую их в конфигурации "УТ 10.3"

Рис 10. Выгружаем через универсальных обмен.

 

Загружаю файл с данными через "Универсальный обмен данным в формате XML" в Рознице и проверяю элементы номенклатуры.

Рис 11. Элемент справочника номенклатура в Рознице.

 

в УТ вот так:

Рис 12. Этот же элемент справочника номенклатура в старой УТ 10.3.

 

Все выгрузилось корректно, необходимые значения все заполнены, вспомогательные справочники — не задублировались. Код справочника "Номенклатура" присвоен в рамках конфигурации "Приемника".

Так же проверим вспомогательный справочник, "Единицы измерения", зная, что в УТ — куча единиц измерений на каждую позицию. В Рознице, у нас только одна ссылка на единицу измерения "шт".

Рис 13. Элементы справочника "Базовые единицы измерения".

 

Все работает, теперь, доработаем эти правила для переноса остатков, в чем и заключается наша основная цель.

 

Перенос остатков в документ "Оприходование товаров"

С чего начинаем:

Я начинаю с написания ПКО (правила конвертации объекта) документа "Оприходование товаров" из "пустоты" (объект источник пустой). Выглядит это вот так:

Рис 14. Правило конвертации объектов — "ОприходованиеТоваров" из "пустоты".

 

Далее, создаем правило выгрузки данных для этого документа по произвольному алгоритму:

Рис 15. Правило выгрузки данных для "ОприходованиеТоваров" по произвольному алгоритму.

 

Произвольный алгоритм помещаем в метод ПВД "Перед обработкой". Вот так:

Рис 16. Произвольный алгоритм "Перед обработкой" в ПВД.

 

 

Код выгрузки должен быть примерно такой (пишу на скорую руку, "не вникая особо" в реквизиты и его "красивость"):

//********************************

ВыборкаДанных = Новый ТаблицаЗначений;
ВыборкаДанных.Колонки.Добавить("Организация");
ВыборкаДанных.Колонки.Добавить("Номер");
ВыборкаДанных.Колонки.Добавить("Дата");
ВыборкаДанных.Колонки.Добавить("АналитикаХозяйственнойОперации");
ВыборкаДанных.Колонки.Добавить("Комментарий"); 
ВыборкаДанных.Колонки.Добавить("Контрагент");
ВыборкаДанных.Колонки.Добавить("Склад"); 
ВыборкаДанных.Колонки.Добавить("Магазин"); 
ВыборкаДанных.Колонки.Добавить("СуммаДокумента");
ВыборкаДанных.Колонки.Добавить("Товары");

//********************************

Товары = Новый ТаблицаЗначений;
Товары.Колонки.Добавить("Номенклатура");
Товары.Колонки.Добавить("Количество");
Товары.Колонки.Добавить("Упаковка");
Товары.Колонки.Добавить("Характеристика");
Товары.Колонки.Добавить("КоличествоУпаковок");
Товары.Колонки.Добавить("Цена");
Товары.Колонки.Добавить("Сумма");
Товары.Колонки.Добавить("СтатусУказанияСерий");
Товары.Колонки.Добавить("АлкогольнаяПродукция");
Товары.Колонки.Добавить("НомерГТД");

//********************************

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
|	ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
|	ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
|ПОМЕСТИТЬ ВТ_ТоварыНаСкладе
|ИЗ
|	РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|	ЦеныНоменклатурыСрезПоследних.Цена,
|	ЦеныНоменклатурыСрезПоследних.Номенклатура
|ПОМЕСТИТЬ ВТ_СрезЦен
|ИЗ
|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОстатков, ТипЦен = &ТипЦены) КАК ЦеныНоменклатурыСрезПоследних
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|	ВТ_ТоварыНаСкладе.Номенклатура КАК Номенклатура,
|	ВТ_ТоварыНаСкладе.Количество КАК Количество,
|	ВТ_СрезЦен.Цена КАК Цена
|ИЗ
|	ВТ_ТоварыНаСкладе КАК ВТ_ТоварыНаСкладе
|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СрезЦен КАК ВТ_СрезЦен
|		ПО ВТ_ТоварыНаСкладе.Номенклатура = ВТ_СрезЦен.Номенклатура
|АВТОУПОРЯДОЧИВАНИЕ";

Запрос.УстановитьПараметр("ДатаОстатков", Параметры.ДатаВыгрузки);
Запрос.УстановитьПараметр("Склад", Параметры.Склад);
Запрос.УстановитьПараметр("ТипЦены", Параметры.ТипЦеныОстатков);

	
РезультатЗапроса = Запрос.Выполнить().Выбрать();

		СтрокаДокумента 		= ВыборкаДанных.Добавить();
		СтрокаДокумента.Дата 		= Параметры.ДатаВыгрузки;
				
//********************************

Пока РезультатЗапроса.Следующий() Цикл

	НоваяСтрокаТовары = Товары.Добавить();
        НоваяСтрокаТовары.Номенклатура			= РезультатЗапроса.Номенклатура;
	НоваяСтрокаТовары.Количество 			= РезультатЗапроса.Количество;
	НоваяСтрокаТовары.КоличествоУпаковок 	= РезультатЗапроса.Количество;
	

	НоваяСтрокаТовары.Цена 					= РезультатЗапроса.Цена;
	НоваяСтрокаТовары.Сумма 				= РезультатЗапроса.Количество*РезультатЗапроса.Цена;
	
КонецЦикла;

//********************************

СтрокаДокумента.Товары = Товары;

 

Здесь, мы создаем таблицу значений ВыгрузкаДанных, где повторяем все реквизиты объекта — приемника (документа в "Рознице"). И как-то их "заполняем".

В данном примере кода — мне важно получить такие реквизиты табличной части Товары как Номенклатура, Количество, Цена (определенного типа) на выбранную дату.

Как вы видите, здесь я использую Параметры конвертации: ДатаВыгрузки, Склад, ТипыЦенОстатков

Данные параметры, я внесу на одноименной закладке правил:

Рис 16. Все параметры нашей конвертации УТ 10.3 — > Розница 2.3.

 

Так же, как видите, у меня присутствуют еще 2 параметра МагазинЗагрузки и СкладЗагрузки — о них я напишу чуть дальше.

 

Теперь, возвращаемся в ПКО объекта "Оприходование товаров" в метод "После загрузки" и заполним в нем "Шапку" нашего создаваемого документа:

Рис 17. Работаем с объектов в базе "Розница 2.3", используя метод "После загрузки".

 

Объект — это наш создаваемый документ "Оприходование товаров" в "Рознице". Здесь, как можно видеть, при заполнении Склада и Магазина, я использую "выгружаемые" (установлены галки) параметры, которые вводит пользователь.

 

В методе "Перед загрузкой", я добавляю вот такую строчку

РежимЗаписи = "Запись";

В принципе, наши правила готовы, сохраняем их и переходим к тестам выгрузки-загрузки в следующем разделе.

 

Тестирование работы

Открываем "Универсальный обмен данными в формате XML" в конфигурации УТ 10.3.

Рис 18. Используем правила в "Универсальном обмене".

 

Переходим на закладку параметры и заполняем их. Пользователь правил скопи-пастит название "МагазинЗагрузки" и "СкладЗагрузки" из "Розницы"

Рис 19. Заполняем параметры выгрузки.

 

Выгружаем данные в файл. Открываем универсальный обмен в "Рознице" и загружаем созданный файл выгрузки (не правила).

Смотрим, что загрузилось. Загрузился ВЕСЬ справочник Номенклатуры (у меня он порядка 17 тыс. элементов) и создался документ "Оприходования товаров".

Рис 20. Созданный документ в базе "Розница".

 

Нам весь справочник номенклатуры не нужен, поэтому в ранее скопированную базу выгружаем по этим же правилам, но снимем галки со всех справочников.

Рис 21. Выгружаем только один документ "Оприходование товаров".

 

Так же, выгрузился документ "Оприходование товаров" и объекты, которые в нем используются. Это порядка 1 тыс. номенклатуры. То, что нам и нужно. Тестирование прошло успешно.

 

Выводы

Благодарю всех, кто прочитал данную статью до конца. Я постарался максимально подробно "разжевать" такую базовую работу с конфигурацией "Конвертация данных 2.1". В статье, я затронул описание ПКО, ПКС и использование параметров.

Так же показан подход к переносу остатков по свободному алгоритму (а не совсем тривиальный вариант Документ — > Документ). Каждый шаг переноса я проверил и объяснил, выявляя ошибки (недочеты) правил — исправлял их "по-ходу" статьи, объясняя свои действия.

Если вам понравилась эта статья, прошу поддержать ее. В свою очередь, я обещаю написать еще несколько статей по конвертации данных, охватив все базовые подходы и методы данной конфигурации.

Прошу ознакомиться с моими предыдущими материалами по ссылкам в разделе "Предыдущие материалы".

Всем большое спасибо! До новых встреч!

 

Предыдущие материалы

Так же, я прошу посмотреть мои предыдущие статьи:

Динамический список. Апгрейд справочника "Номенклатура" типовой конфигурации с помощью расширения

Лайфхак работы с СКД. Собираем отчет

СКД. Лайфхак №2. Собираем отчет еще удобнее

СКД. Шаг 3. Используем макеты для оформления отчета

Обсудим планы обмена. Способы регистрации объектов к обмену

1С + IIS + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let’s encrypt

Боремся с запросами в циклах. Мой опыт рефакторинга запросов

has been added to your cart:
Оформление заказа