Образец переноса данных из УПП в УНФ3

Первоначально хотели переносить 20.000 товаров, но потом решили перенести только те, по которым есть остатки и без перемещенных в папку «Удаленные». Таких набралось около 2.000.

С номенклатурой был нюанс, в УПП допустимая длина кода была 9 символов, поэтому более длинные артикулы заносили в артикулы, а код обрезали слева, т.е. в артикуле был полный код, а в коде обрезанный, начинающийся с нуля.

Поэтому я использовал для нового кода алгоритм — если код начинается с нуля, то используется артикул, иначе используется код. Для нового кода в запрос добавил колонку «Новый код».

Проверил наличие дублей по новому коду.

Проверил в консоли запроса, чтобы код не был длинее 11 символов, максимальной длины кода в УНФ

Для выгрузки использовал целое семейство запросов.

Текст запроса (свернут):

ВЫБРАТЬ //РАЗЛИЧНЫЕ ПЕРВЫЕ 100
ВЫБОР
КОГДА Т.Ссылка.Артикул = «»
ТОГДА Т.Ссылка.Код
КОГДА ПОДСТРОКА(Т.Ссылка.Код, 1, 1) = «0»
ТОГДА Т.Ссылка.Артикул
ИНАЧЕ Т.Ссылка.Код
КОНЕЦ КАК НовыйКод,
Т.Ссылка.Код КАК Код,
Т.Ссылка.Артикул КАК Артикул,
Т.Ссылка.Наименование КАК Наименование,
ВЫБОР
КОГДА ЕСТЬNULL(Т.Ссылка.Родитель.Родитель.Родитель.Родитель.Родитель, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА «»
ИНАЧЕ Т.Ссылка.Родитель.Родитель.Родитель.Родитель.Родитель.Наименование + «\»
КОНЕЦ + ВЫБОР
КОГДА ЕСТЬNULL(Т.Ссылка.Родитель.Родитель.Родитель.Родитель, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА «»
ИНАЧЕ Т.Ссылка.Родитель.Родитель.Родитель.Родитель.Наименование + «\»
КОНЕЦ + ВЫБОР
КОГДА ЕСТЬNULL(Т.Ссылка.Родитель.Родитель.Родитель, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА «»
ИНАЧЕ Т.Ссылка.Родитель.Родитель.Родитель.Наименование + «\»
КОНЕЦ + ВЫБОР
КОГДА ЕСТЬNULL(Т.Ссылка.Родитель.Родитель, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА «»
ИНАЧЕ Т.Ссылка.Родитель.Родитель.Наименование + «\»
КОНЕЦ + ВЫБОР
КОГДА ЕСТЬNULL(Т.Ссылка.Родитель, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА «»
ИНАЧЕ Т.Ссылка.Родитель.Наименование
КОНЕЦ КАК ПолныйПуть,
Т.Ссылка КАК Номенклатура,
Т.ПометкаУдаления,
ПОДСТРОКА(Т.НаименованиеПолное, 1, 1024) КАК НаименованиеПолное,
Т.ВидНоменклатуры,
Т.ЕдиницаДляОтчетов,
Т.ЕдиницаХраненияОстатков,
Т.БазоваяЕдиницаИзмерения,
Т.НазначениеИспользования,
Т.Услуга,
Т.СтавкаНДС,
ПОДСТРОКА(Т.Комментарий, 1, 1024) КАК Комментарий,
Т.Производитель,
Т.Импортер
ПОМЕСТИТЬ ТНоменклатура
ИЗ
Справочник.Номенклатура КАК Т
ГДЕ
НЕ Т.Ссылка В ИЕРАРХИИ (&ИсключаемаяГруппа) И НЕ Т.ЭтоГруппа //И НЕ Т.ПометкаУдаления
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТоварыВРозницеОстатки.Склад КАК Склад,
ТоварыВРозницеОстатки.Номенклатура КАК Номенклатура,
ТоварыВРозницеОстатки.КоличествоОстаток КАК Остаток
ПОМЕСТИТЬ ТОстатки
ИЗ
РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад,
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПартииТоваровНаСкладахОстатки.Номенклатура,
ПартииТоваровНаСкладахОстатки.Склад,
ВЫБОР
КОГДА СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток) = 0
ТОГДА 0
ИНАЧЕ ВЫРАЗИТЬ(СУММА(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток) / СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток) КАК ЧИСЛО(10, 2))
КОНЕЦ КАК ЦенаПоПартиям,
Максимум(ПартииТоваровНаСкладахОстатки.ДокументОприходования.Контрагент) КАК Контрагент,
СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстатокПоПартиям,
СУММА(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток) КАК СтоимостьОстатокПоПартиям
ПОМЕСТИТЬ ТПартии
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки

СГРУППИРОВАТЬ ПО
ПартииТоваровНаСкладахОстатки.Номенклатура,
ПартииТоваровНаСкладахОстатки.Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТНоменклатура.НовыйКод КАК НовыйКод,
ТОстатки.Номенклатура.Код КАК Код,
ТОстатки.Номенклатура КАК Номенклатура,
ТОстатки.Склад КАК Склад,
ЕСТЬNULL(ТПартии.Контрагент, «») КАК Контрагент,
ТОстатки.Остаток КАК Остаток,
ЕСТЬNULL(ТПартии.ЦенаПоПартиям, 0) КАК Цена,
ЕСТЬNULL(ТПартии.ЦенаПоПартиям, 0) * ТОстатки.Остаток КАК Сумма
ПОМЕСТИТЬ ТОстаткиРез
ИЗ
ТОстатки КАК ТОстатки
ЛЕВОЕ СОЕДИНЕНИЕ ТПартии КАК ТПартии
ПО ТОстатки.Номенклатура = ТПартии.Номенклатура
И ТОстатки.Склад = ТПартии.Склад
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТНоменклатура КАК ТНоменклатура ПО ТОстатки.Номенклатура = ТНоменклатура.Номенклатура
;

ВЫБРАТЬ
ТНоменклатура.НовыйКод КАК НовыйКод,
Т.МестоХранения,
Т.Склад,
Т.Номенклатура,
Т.Приоритет
ПОМЕСТИТЬ ТХранение
ИЗ
РегистрСведений.МестаХраненияНоменклатуры КАК Т
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТНоменклатура КАК ТНоменклатура ПО Т.Номенклатура = ТНоменклатура.Номенклатура
ГДЕ
ВЫБОР КОГДА &ТолькоОстатки ТОГДА Т.Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ТОстаткиРез ) ИНАЧЕ Истина КОНЕЦ;

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

// РЕЗУЛЬТИРУЮЩИЕ ЗАПРОСЫ

//ВЫБРАТЬ * ИЗ ТОстаткиРез КАК Т //ТАБЛИЦА ОСТАТКОВ

//ВЫБРАТЬ * ИЗ ТХранение КАК Т //ТАБЛИЦА ХРАНЕНИЯ

ВЫБРАТЬ * ИЗ ТЦены КАК Т //ЦЕНЫ

//ВЫБРАТЬ НовыйКод, COUNT() КАК Количество ИЗ ТНоменклатура КАК Т СГРУППИРОВАТЬ ПО НовыйКод ИМЕЮЩИЕ COUNT() > 1 //ПРОВЕРКА ДУБЛЕЙ

//ВЫБРАТЬ * ИЗ ТНоменклатура КАК Т ГДЕ ВЫБОР КОГДА &ТолькоОстатки ТОГДА Т.Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ТОстаткиРез ) ИНАЧЕ Истина КОНЕЦ Упорядочить ПО Т.НовыйКод //НОМЕНКЛАТУРА


Результаты запросов из консоли запросов выгружал в файл и загружал в УНФ.

Категории создал предварительно вручную, их всего было около 5 штук.

Настройки загрузки товаров:

Перенес 1818 товаров.

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

Далее планирую перенести остатки, там всего 3-4 поставщика, перенесу в несколько поступлений в ценах закупа.

В общем, моя старая разработка по загрузке номенклатуры в УНФ и Розницу, хотя и не универсальная и не идеальная, но я ее применяю на реальных внедрениях.

А какие обработки используете вы для переноса номенклатуры, цен, остатков?

Среда: УПП 1.3 БИТ.ФИНАНС 3.0 (1.3.47.2/3.0.12.7), УНФ 3.0.13.305

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *