Миграция с ТИС 10.2 на конфигурацию 1С Розница 2.2

Партия сказала «Нада», пионеры сказали «Есть». Итак, задача: перенести остатки из ТИС 10.2 древней не обновляемой конфигурации в современную конфигурацию 1С Розница 2.2

Стандарное средство импорта-экспорта «Коневертация данных» не смогла осились загрузку/выгрузку из 8.1 в 8.3 без промежуточных конфигураций, посему пришлось «велосипедить». Итак, общий алгоритм переноса данных следующий:

  1. Выгружаем список номекнлатуры и остатки на выбранном складе в ТИС в файл xml. XML файл содержит в себе даные необходимые для создания номенклатуры и её остаток.
  2. Заполняем в Рознице справочник номенклатуры по файлу xml
  3. Загружаем в документ прихода остатки номенклатуры с ценами

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

ТИС:

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.Записать();
конецесли;
КонецПроцедуры
 
&НаКлиенте
Процедура ЗагрузитьВДокумент(Команда)
ЗагрузитьВДокументНаСервере(этаформа.Объект.ДокументПоступления);
КонецПроцедуры