Миграция с ТИС 10.2 на конфигурацию 1С Розница 2.2
Партия сказала «Нада», пионеры сказали «Есть». Итак, задача: перенести остатки из ТИС 10.2 древней не обновляемой конфигурации в современную конфигурацию 1С Розница 2.2
Стандарное средство импорта-экспорта «Коневертация данных» не смогла осились загрузку/выгрузку из 8.1 в 8.3 без промежуточных конфигураций, посему пришлось «велосипедить». Итак, общий алгоритм переноса данных следующий:
- Выгружаем список номекнлатуры и остатки на выбранном складе в ТИС в файл xml. XML файл содержит в себе даные необходимые для создания номенклатуры и её остаток.
- Заполняем в Рознице справочник номенклатуры по файлу xml
- Загружаем в документ прихода остатки номенклатуры с ценами
В принципе всё просто. Далее кратенько, плюс сами обработки для скачивания.
ТИС:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
функция получитьостаток(ном) рез=0; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&дата, ) КАК ТоварыНаСкладахОстатки |ГДЕ | ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура | И ТоварыНаСкладахОстатки.Склад = &Склад"; Запрос.УстановитьПараметр("дата", конецдня(текущаядата())); Запрос.УстановитьПараметр("Номенклатура", ном); Запрос.УстановитьПараметр("Склад", склад); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл рез=ВыборкаДетальныеЗаписи.КоличествоОстаток; КонецЦикла; возврат рез; конецфункции функция получитьштрихкод22(ном) рез=0; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Штрихкоды.Штрихкод |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды |ГДЕ | Штрихкоды.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", ном); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл рез=ВыборкаДетальныеЗаписи.Штрихкод; КонецЦикла; возврат рез; конецфункции функция получитькартинку(ном) рез=""; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХранилищеДополнительнойИнформации.Хранилище |ИЗ | Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации |ГДЕ | ХранилищеДополнительнойИнформации.Объект.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ном); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл рез=ВыборкаДетальныеЗаписи.Хранилище; сообщить("картинка есть!"); КонецЦикла; возврат рез; конецфункции Процедура Кнопка1Нажатие(Элемент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Наименование, | Номенклатура.ЭтоГруппа, | Номенклатура.Код КАК номкод, | Номенклатура.Комментарий, | Номенклатура.ценниктекст, | Номенклатура.логотип, | Номенклатура.БазоваяЕдиницаИзмерения.Наименование, | Номенклатура.БазоваяЕдиницаИзмерения.Код, | Номенклатура.Ссылка, | Номенклатура.ОсновноеИзображение.Хранилище КАК хр, | Номенклатура.Родитель.Код КАК родкод, | Номенклатура.Артикул, | Номенклатура.НаименованиеПолное |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ПометкаУдаления = ЛОЖЬ"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("price_list"); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл если получитьостаток(ВыборкаДетальныеЗаписи.Ссылка)>0 или ВыборкаДетальныеЗаписи.ЭтоГруппа=Истина тогда ЗаписьXML.ЗаписатьНачалоЭлемента("tovar"); сообщить(ВыборкаДетальныеЗаписи.Наименование); цена=ПолучитьЦенуНоменклатуры(ВыборкаДетальныеЗаписи.Ссылка, , справочники.ТипыЦенНоменклатуры.НайтиПоКоду("00001"),ТекущаяДата()); сообщить(цена); сообщить("Остаток:"); ЗаписьXML.ЗаписатьАтрибут("countme",строка(получитьостаток(ВыборкаДетальныеЗаписи.Ссылка))); если значениезаполнено(ВыборкаДетальныеЗаписи.хр)тогда Дан=ВыборкаДетальныеЗаписи.хр.Получить(); ЗаписьXML.ЗаписатьАтрибут("pic", Base64Строка(Дан.ПолучитьДвоичныеДанные())); конецесли; ЗаписьXML.ЗаписатьАтрибут("code", ВыборкаДетальныеЗаписи.номкод); ЗаписьXML.ЗаписатьАтрибут("name", ВыборкаДетальныеЗаписи.Наименование); ЗаписьXML.ЗаписатьАтрибут("group", строка(ВыборкаДетальныеЗаписи.ЭтоГруппа)); ЗаписьXML.ЗаписатьАтрибут("rodkod", строка(ВыборкаДетальныеЗаписи.родкод)); если ВыборкаДетальныеЗаписи.ЭтоГруппа<>Истина тогда ЗаписьXML.ЗаписатьАтрибут("fullname", ВыборкаДетальныеЗаписи.НаименованиеПолное); ЗаписьXML.ЗаписатьАтрибут("opis", строка(ВыборкаДетальныеЗаписи.ценниктекст)); ЗаписьXML.ЗаписатьАтрибут("rozn_price", Формат(цена, "ЧРД=.; ЧГ=0")); ЗаписьXML.ЗаписатьАтрибут("shtrihkod", строка(получитьштрихкод22(ВыборкаДетальныеЗаписи.Ссылка))); ЗаписьXML.ЗаписатьАтрибут("price", строка(ВыборкаДетальныеЗаписи.ценниктекст)); ЗаписьXML.ЗаписатьАтрибут("comment", строка(ВыборкаДетальныеЗаписи.Комментарий)); ЗаписьXML.ЗаписатьАтрибут("bazedname", строка(ВыборкаДетальныеЗаписи.БазоваяЕдиницаИзмеренияНаименование)); ЗаписьXML.ЗаписатьАтрибут("articul", строка(ВыборкаДетальныеЗаписи.Артикул)); конецесли; ЗаписьXML.ЗаписатьКонецЭлемента(); конецесли; КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); СтрокаXML = ЗаписьXML.Закрыть(); мФайл = Новый ТекстовыйДокумент; мФайл.УстановитьТекст(СтрокаXML); мФайл.Записать("c:\price.xml"); КонецПроцедуры |
Розница:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
&НаКлиенте Процедура ЗагрузитьТЗ(Команда) Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = ""; Фильтр = НСтр("ru = 'Текст'; en = 'Text'") + "(*.xml)|*.xml"; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = Истина; ДиалогОткрытияФайла.Заголовок = "Выберите файлы"; Если ДиалогОткрытияФайла.Выбрать() Тогда МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы; Для Каждого ИмяФайла Из МассивФайлов Цикл ВыбФайл = Новый Файл(ИмяФайла); //Сообщить(ИмяФайла+ НСтр("ru = '; Размер = '; en = '; Size = '")+ ВыбФайл.Размер()); файлхмл=Новый ЧтениеXML(); файлхмл.ОткрытьФайл(ИмяФайла); пока файлхмл.Прочитать() Цикл Если файлхмл.ТипУзла=ТипУзлаXML.НачалоЭлемента тогда //сообщить("---------------"); стртаб=ТЗ.Добавить(); пока файлхмл.ПрочитатьАтрибут() цикл // сообщить("Атрибут:"+файлхмл.имя+" Значение:"+файлхмл.Значение); если файлхмл.имя="countme" тогда стртаб.количество=файлхмл.Значение;конецесли; если файлхмл.имя="code" тогда стртаб.Номер=файлхмл.Значение;конецесли; если файлхмл.имя="name" тогда стртаб.Название=файлхмл.Значение;конецесли; если файлхмл.имя="fullname" тогда стртаб.ПолноеНаименование=файлхмл.Значение;конецесли; если файлхмл.имя="opis" тогда стртаб.ОписаниеЦенник=файлхмл.Значение;конецесли; если файлхмл.имя="group" тогда стртаб.Группа=файлхмл.Значение;конецесли; если файлхмл.имя="rodkod" тогда стртаб.РодКод=файлхмл.Значение;конецесли; если файлхмл.имя="rozn_price" тогда стртаб.Цена=файлхмл.Значение;конецесли; если файлхмл.имя="shtrihkod" тогда стртаб.Штрихкод=файлхмл.Значение;конецесли; если файлхмл.имя="comment" тогда конецесли; если файлхмл.имя="bazedname" тогда стртаб.ЕденицаИзмерения=файлхмл.Значение;конецесли; если файлхмл.имя="articul" тогда стртаб.Артикул=файлхмл.Значение;конецесли; если файлхмл.имя="pic" тогда стртаб.Картинка=файлхмл.Значение;конецесли; конеццикла; конецесли; Если файлхмл.ТипУзла=ТипУзлаXML.Текст тогда конецесли; Если файлхмл.ТипУзла=ТипУзлаXML.КонецЭлемента тогда конецесли; конеццикла; конеццикла; конецесли; КонецПроцедуры &НаСервере Процедура ГруппыНоменклатурыНаСервере() // Вставить содержимое обработчика. для каждого стр из ТЗ цикл если стр.группа="истина" тогда //сообщить("Создаю группу:"+стр.название); //проверяю, а может уже есть? ссылканоменклатуры=справочники.Номенклатура.НайтиПоКоду(стр.Номер); если ссылканоменклатуры=справочники.Номенклатура.ПустаяСсылка() тогда // сообщить("--такой номенклатуры нет!Создаем!"); нп=Справочники.Номенклатура.СоздатьГруппу(); нп.Наименование=стр.название; нп.Код=стр.Номер; нп.Записать(); конецесли; конецесли; конеццикла; КонецПроцедуры &НаКлиенте Процедура ГруппыНоменклатуры(Команда) ГруппыНоменклатурыНаСервере(); КонецПроцедуры &НаСервере Процедура ЗагрузитьНоменклатуруНаСервере() для каждого стр из ТЗ цикл если стр.группа="ложь" тогда //сообщить("Создаю/изменяю номенклатуру:"+стр.название); //проверяю, а может уже есть? ссылканоменклатуры=справочники.Номенклатура.НайтиПоКоду(стр.Номер); если ссылканоменклатуры=справочники.Номенклатура.ПустаяСсылка() тогда //сообщить("--такой номенклатуры нет!Создаем!"); нп=Справочники.Номенклатура.СоздатьЭлемент(); нп.Наименование=стр.название; нп.НаименованиеПолное=стр.ПолноеНаименование; нп.Артикул=стр.Артикул; нп.Описание=стр.ОписаниеЦенник; нп.Родитель=справочники.Номенклатура.НайтиПоКоду(стр.РодКод); нп.Код=стр.Номер; нп.ВидНоменклатуры=справочники.ВидыНоменклатуры.НайтиПоНаименованию("Без серийных номеров"); нп.ЕдиницаИзмерения=Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(стр.ЕденицаИзмерения); нп.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС; нп.Записать(); иначе нп=ссылканоменклатуры.ПолучитьОбъект(); нп.ВидНоменклатуры=справочники.ВидыНоменклатуры.НайтиПоНаименованию("Без серийных номеров"); нп.ЕдиницаИзмерения=Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(стр.ЕденицаИзмерения); нп.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС; нп.ФайлКартинки=null; фл=Справочники.НоменклатураПрисоединенныеФайлы.НайтиПоНаименованию(стр.Номер); фф=фл.ПолучитьОбъект(); фф.ПометкаУдаления=истина; фф.Записать(); если фл=Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка() тогда файлк=Справочники.НоменклатураПрисоединенныеФайлы.СоздатьЭлемент(); файлк.Наименование=стр.Номер; файлк.ФайлХранилище=Base64Значение(стр.Картинка); файлк.ВладелецФайла=нп.Ссылка; нп.ФайлКартинки=файлк.Ссылка; файлк.Записать(); конецесли; если стр.штрихкод<>0 тогда если стр.штрихкод<>"0" тогда если стр.штрихкод<>"" тогда новштр=регистрысведений.Штрихкоды.СоздатьМенеджерЗаписи(); новштр.Владелец=нп.Ссылка; новштр.ТипШтрихкода=ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13; новштр.Штрихкод=стр.штрихкод; новштр.Записать(); конецесли; конецесли; конецесли; нп.Записать(); конецесли конецесли; конеццикла; КонецПроцедуры &НаКлиенте Процедура ЗагрузитьНоменклатуру(Команда) ЗагрузитьНоменклатуруНаСервере(); КонецПроцедуры &НаСервере Процедура ЗагрузитьВДокументНаСервере(док) // Вставить содержимое обработчика. если док.ссылка=документы.ПоступлениеТоваров.ПустаяСсылка() тогда сообщить("--не выбран документ куда будем загружать данные!"); иначе док2=этаформа.Объект.ДокументПоступления.ПолучитьОбъект(); для каждого стр из ТЗ цикл если стр.группа="ложь" тогда если стр.название<>"" тогда ссылканоменклатуры=справочники.Номенклатура.НайтиПоКоду(стр.номер); новая=док2.Товары.Добавить(); новая.номенклатура=ссылканоменклатуры; новая.Количество=стр.количество; новая.КоличествоУпаковок=стр.количество; новая.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС; новая.цена=стр.цена; новая.Сумма=стр.цена*стр.количество; конецесли; конецесли; конеццикла; док2.Записать(); конецесли; КонецПроцедуры &НаКлиенте Процедура ЗагрузитьВДокумент(Команда) ЗагрузитьВДокументНаСервере(этаформа.Объект.ДокументПоступления); КонецПроцедуры |