Создание Установка цен номенклатуры из XML файла
Здравствуйте.
Необходимо создать и записать документ Установка цен номенклатуры
из XML файла
Читаю файл так
Читает, но когда переходит к созданию Документа
Получаю "Поле объекта не обнаружено (cae)". Хотя это реквизит из файла, и читается он первой частью правильно. Что я упускаю?
Необходимо создать и записать документ Установка цен номенклатуры
из XML файла
Фрагмент файла XML |
---|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--13714 8/7/2017 12:16:33 PM--> <data> <tires> <cae>PXR0033103</cae> <price_sk3>11029</price_sk3> <price_sk3_rozn>12350</price_sk3_rozn> <name>245/40R17 91S Blizzak VRX</name> <tiretype>Легковая</tiretype> Bridgestone</brand> <model>Blizzak VRX</model> <width>245</width> <height>40</height> <diameter>R17</diameter> <diametr_out>0</diametr_out> <design>R</design> <speed_index>S</speed_index> <load_index>91</load_index> <season>Зимняя</season> </tires> <tires> <cae>NW00102</cae> <price_sk3>6569</price_sk3> <price_sk3_rozn>7355</price_sk3_rozn> <name>265/60R18 114T Therma Spike TL (шип.)</name> <tiretype>Легковая</tiretype> Nitto</brand> <model>Therma Spike</model> <width>265</width> <height>60</height> <diameter>R18</diameter> <diametr_out>0</diametr_out> <design>R</design> <speed_index>T</speed_index> <load_index>114</load_index> <thorn>Да</thorn> <season>Зимняя</season> </tires> <tires> <cae>100A1574</cae> <price_sk3>4510</price_sk3> <price_sk3_rozn>5002</price_sk3_rozn> <name>225/50R16 96W Champiro UHP1</name> <tiretype>Легковая</tiretype> GT Radial</brand> <model>Champiro UHP1</model> <width>225</width> <height>50</height> <diameter>R16</diameter> <diametr_out>0</diametr_out> <design>R</design> <speed_index>W</speed_index> <load_index>96</load_index> <season>Летняя</season> </tires> <camera> <cae>125603</cae> <price_mkrs>271</price_mkrs> Michelin</brand> <name>Michelin Chambre Scooter</name> </camera> <camera> <cae>733003</cae> <price_mkrs>244</price_mkrs> Michelin</brand> <name>Michelin Chambre Scooter</name> </camera> <camera> <cae>788345</cae> <price_mkrs>261</price_mkrs> Michelin</brand> <name>Michelin Chambre Road</name> </camera> <rims> <cae>WHS140401</cae> <price_sk3>6678</price_sk3> <price_sk3_rozn>7528</price_sk3_rozn> <name>8x19/5x120 ET30 D72,6 MODEL-58 B+R</name> Yokatta</brand> <model>MODEL-58</model> <color>B+R</color> <width>8</width> <diameter>19</diameter> <bolts_count>5</bolts_count> <bolts_spacing>120</bolts_spacing> <bolts_spacing2>0</bolts_spacing2> <et>30</et> <dia>72.6</dia> <img_small> </rims> <rims> <cae>WHS141450</cae> <price_sk3>4474</price_sk3> <price_sk3_rozn>5255</price_sk3_rozn> <name>6,5x17/5x114,3 ET48 D67,1 Прайм (КС721) Алмаз черный</name> K&K</brand> <model>Прайм (КС721)</model> <color>Алмаз черный</color> <width>6.5</width> <diameter>17</diameter> <bolts_count>5</bolts_count> <bolts_spacing>114.3</bolts_spacing> <bolts_spacing2>0</bolts_spacing2> <et>48</et> <dia>67.1</dia> <img_small> </rims> <rims> <cae>WHS140629</cae> <price_sk3>29332</price_sk3> <price_sk3_rozn>33630</price_sk3_rozn> <name>8,5x20/5x120 ET30 D72,5 STC-MS Matt Black Milled</name> Fondmetal</brand> <model>STC-MS</model> <color>Matt Black Milled</color> <width>8.5</width> <diameter>20</diameter> <bolts_count>5</bolts_count> <bolts_spacing>120</bolts_spacing> <bolts_spacing2>0</bolts_spacing2> <et>30</et> <dia>72.5</dia> <img_small> </rims> <rims> <cae>WHS149402</cae> <price_sk3>11025</price_sk3> <price_sk4_rozn>12789</price_sk4_rozn> <name>8,5x20/5x150 ET58 D110,1 TY242 SF (пш)</name> Replay</brand> <model>TY242</model> <color>SF</color> <width>8.5</width> <diameter>20</diameter> <bolts_count>5</bolts_count> <bolts_spacing>150</bolts_spacing> <bolts_spacing2>0</bolts_spacing2> <et>58</et> <dia>110.1</dia> <mount>пш</mount> <mount_note>прессшайба</mount_note> <img_small> </rims> <fastener> <cae>OGS083174</cae> <price_mkrs>80</price_mkrs> <price>100</price> Replay</brand> <name>Вставка унифицированная C570 метал.сф.стикер</name> <sub_type>Вставки/стикеры</sub_type> </fastener> <fastener> <cae>OGS129366</cae> <price_mkrs>30</price_mkrs> <price>34</price> LS</brand> <name>Болт M14x1,25 (55/ 28) hex17 конус CH (КИТАЙ) 966-08</name> <sub_type>Болты</sub_type> </fastener> <fastener> <cae>OGS129368</cae> <price_mkrs>35</price_mkrs> <price>40</price> LS</brand> <name>Болт M14x1,5 (62/ 35) hex17 конус CH (КИТАЙ) 984</name> <sub_type>Болты</sub_type> </fastener> <spare_parts> <cae>OGS145879</cae> <price_mkrs>1973</price_mkrs> -</brand> <name>AM 7Jx16H2 5x112 ET-35</name> </spare_parts> <spare_parts> <cae>OGS146227</cae> <price_mkrs>1336</price_mkrs> -</brand> <name>RC-04 7Jx15H2 5x112 ET-38</name> </spare_parts> <spare_parts> <cae>OGS146216</cae> <price_mkrs>1653</price_mkrs> -</brand> <name>C 7,25Jx15H2 5x112 ET-35</name> </spare_parts> </data> |
Читаю файл так
Процедура КнопкаВыполнитьНажатие(Кнопка)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("F:\OLD_DISK_C\1C\M13714small.xml");
Имя = ЧтениеXML.Имя;
Массив = Новый Структура(Имя);
Пока ЧтениеXML.Прочитать() Цикл
ПолучитьXMLТип(ЧтениеXML);
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Имя = ЧтениеXML.Имя;
Сообщить("Начало " + ЧтениеXML.Имя);
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Атрибут = ЧтениеXML.Значение;
Сообщить("атрибут:" + ЧтениеXML.Имя + "=" + ЧтениеXML.Значение);
КонецЦикла;
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Массив.Вставить(Имя,ЧтениеXML.Значение);
Сообщить(ЧтениеXML.Значение);
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Если ЧтениеXML.Имя = "data" Тогда
ДобавитьЭлемент(Массив);
КонецЕсли;
Сообщить("Конец " + ЧтениеXML.Имя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьЧитает, но когда переходит к созданию Документа
Процедура СоздатьДокУстЦен(Массив)
Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Документ.Дата = ТекущаяДата();
Документ.Ответственный = Пользователи.ТекущийПользователь();
Для Каждого СтрокаДанных Из Массив Цикл
артикул = СтрокаДанных.cae;
НоваяСтрока = Документ.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("артикул",артикул);
НоваяСтрока.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
НоваяСтрока.Цена = Массив.price;
Документ.Товары.Свернуть("Номенклатура, ТипЦен, Цена");
КонецЦикла;
Документ.Записать();
КонецПроцедуры
ПоказатьПолучаю "Поле объекта не обнаружено (cae)". Хотя это реквизит из файла, и читается он первой частью правильно. Что я упускаю?
По теме из базы знаний
- Обработка для загрузки документа "Заказ клиента" и "Установка цен " из файла *.dbf в Управление торговлей 11.4
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Организация обмена с базой филиала (розничного магазина) в торговой сети через XML (универсальный обмен)
- Загрузка файла YML (формат Yandex Market Language) в 1С:УТ11.5
- Загрузка номенклатуры и цен в информационную базу
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Советую самостоятельно найти ошибку, Вам полезнее будет.
а) Можно установить точку останова на строчку про артикул;
б) можно в конфигураторе в меню Отладка / остановка по ошибке включить остановку по ошибке - система остановится при ошибке прямо перед выполнением сбойного участка кода.
Запускаете и смотрите, что у Вас в переменной Массив вообще, и в СтрокаДанных в частности. Потом ищете ошибку.
а) Можно установить точку останова на строчку про артикул;
б) можно в конфигураторе в меню Отладка / остановка по ошибке включить остановку по ошибке - система остановится при ошибке прямо перед выполнением сбойного участка кода.
Запускаете и смотрите, что у Вас в переменной Массив вообще, и в СтрокаДанных в частности. Потом ищете ошибку.
(2) Вижу значение реквизита, но Документ создаётся пустой, без номенклатуры. И я так понимаю, что к ТипЦен что в Шапке так просто не обратишься, для установления значения
Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Документ.Дата = ТекущаяДата();
//Документ.???? = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
Документ.Ответственный = Пользователи.ТекущийПользователь();
артикул = Массив.cae;
Для Каждого СтрокаДанных Из Массив Цикл
НоваяСтрока = Документ.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("артикул",артикул);
// НоваяСтрока.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
// НоваяСтрока.Цена = Массив.price_sk3;
// Документ.Товары.Свернуть("Номенклатура, ТипЦен, Цена");
Документ.Товары.Свернуть("Номенклатура,,");
Документ.Записать();
// Отказ = Истина;
КонецЦикла;
ПоказатьПроцедура СоздатьДокУстЦен(Массив)
Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Документ.Дата = ТекущаяДата();
Документ.Ответственный = Пользователи.ТекущийПользователь();
строкацена = Документ.Товары.Добавить();
строкацена.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
артикул = Массив.cae;
Для Каждого СтрокаДанных Из Массив Цикл
НоваяСтрока = Документ.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("артикул",артикул);
НоваяСтрока.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
НоваяСтрока.Цена = Массив.price_sk3;
Документ.Товары.Свернуть("Номенклатура, ТипЦен, Цена");
Документ.Товары.Свернуть("Номенклатура,,");
Документ.Записать();
// Отказ = Истина;
КонецЦикла;
КонецПроцедуры
ПоказатьОшибок нет, но и заполнения нет. По отладчику Артикул получает.
Процедура КнопкаВыполнитьНажатие(Кнопка)
ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
// ВидВалюты = Справочники.Валюты.НайтиПоНаименованию("руб.");
ЕдиницаИзм = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("F:\4P\M13714small.xml");
Имя = ЧтениеXML.Имя;
Массив = Новый Структура(Имя);
Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Документ.Дата = ТекущаяДата();
Документ.Ответственный = Пользователи.ТекущийПользователь();
// Документ.мВалютаУправленческогоУчета = Справочники.Валюты.НайтиПоНаименованию("руб.");
строкатиповцен = Документ.ТипыЦен.Добавить();
строкатиповцен.ТипЦен= ТипЦен;
Пока ЧтениеXML.Прочитать() Цикл
ПолучитьXMLТип(ЧтениеXML);
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Имя = ЧтениеXML.Имя;
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Атрибут = ЧтениеXML.Значение;
КонецЦикла;
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Массив.Вставить(Имя,ЧтениеXML.Значение);
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Если ЧтениеXML.Имя = "data" Тогда
Для Каждого Атрибут Из Массив Цикл
Цена = Массив.price_sk3;
Арт = Массив.cae;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Артикул,
| Номенклатура.Ссылка,
| Номенклатура.ЕдиницаХраненияОстатков КАК Ед,
| Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК К
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул";
Запрос.УстановитьПараметр("Артикул", Арт);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Строка = Номенклатура.Добавить();
Строка.Артикул = Арт;
Строка.Цена = Цена;
строкацена = Документ.Товары.Добавить();
строкацена.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
строкацена.Номенклатура = ВыборкаДетальныеЗаписи.Ссылка;
строкацена.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.Ед;
Документ.Записать();
строкацена.Цена = Строка.Цена;
КонецЦикла;
Иначе
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование,
| Номенклатура.Ссылка,
| Номенклатура.ЕдиницаХраненияОстатков КАК Ед,
| Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК К
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование",);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Строка = Номенклатура.Добавить();
Строка.Артикул = Арт;
Строка.Цена = Цена;
строкацена = Документ.Товары.Добавить();
строкацена.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
строкацена.Номенклатура = ВыборкаДетальныеЗаписи.Ссылка;
строкацена.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.Ед;
Документ.Записать();
строкацена.Цена = Строка.Цена;
КонецЦикла;
КонецЕсли;
Документ.ПолучитьФорму("ФормаДокумента").Открыть();
КонецПроцедуры
ПоказатьПеределал всё вот так. Заполняет ТипЦен. Добавляет Номенклатуру, но не могу понять как правильно переделать Цикл, что бы попадала вся имеющаяся номенклатура.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот