Добрый день! У нас стоит бух предприятия 3 и есть стороняя программа никак не связанная с 1с. И тут встала задача по загрузке данных в 1ску данных из этой "левой" программы с помощью XML. Поискал в инете различные обработки и написал по аналогии свою по загрузке данных в документ,но обработка не загружает ничего. Может кто глянуть и посмотреть что не так или что -то надо исправить или вообще есть уже готовое решение?
По теме из базы знаний
- Внешняя компонента для загрузки файлов Excel 2007-2010 (OpenXML) в табличный документ 1С 8
- Элегантное чтение больших XML файлов
- Лайфхак по бесплатному формированию xml файла ЭДО (СБИС, Диадок, Такском и т.п.) для типовых документов
- Загрузка в 1С документов поступления из файла XML (ЭДО формат 820) для БП 3.0, УТ10/11, КА2.5, УПП1.3
- Загрузка из XML файла ЭДО в документ поступления для конфигураций 1С: Розница 2.2/2.3, Управление торговлей 10.3/11.4
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
&НаСервере
Процедура ПрочитатьXMLФайлНаСервере(Файлик);
ПутьКФайлу = Файлик[0];
//XML
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
СЗ = Новый СписокЗначений;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента
Тогда ЧтениеXML.ПрочитатьАтрибут();
Атрибут = ЧтениеXML.Значение;
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
//дата оказания
Если Атрибут = "visit_date" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
//код услуги
Если Атрибут = "service_code" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
//Услуга
Если Атрибут = "service_name" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
//Кабинет
Если Атрибут = "cablab_name" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента и
Атрибут = "status_mnemo" Тогда
СоздатьЭлементДокумента(СЗ) ;
СЗ.Очистить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура СоздатьЭлементДокумента(СЗ) ;
Если СЗ.Количество() >0 Тогда
НовыйЭлемент = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
НовыйЭлемент.Дата = СЗ[0].Значение;
НовыйЭлемент.Код = СЗ[1].Значение;
НовыйЭлемент.Товары.Номенклатура = СЗ[2].Значение;
НовыйЭлемент.Склад = СЗ[3].Значение;
НовыйЭлемент.Записать();
СЗ.Очистить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьИзФайлаXML(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
Фильтр = "xml|*.xml";
ДиалогОткрытияФайла.Фильтр = Фильтр;
Если ДиалогОткрытияФайла.Выбрать() Тогда
Файлик = ДиалогОткрытияФайла.ВыбранныеФайлы;
ПрочитатьXMLФайлНаСервере(Файлик);
КонецЕсли;
ОбновитьИнтерфейс();
КонецПроцедуры
Показать
(3) Вы еще не заметил ошибку в 3232 строке )))
(1) Точку останова пробовали ставить ? и смотреть как работает код. Судя по тому что Вы написали работать явно не должно. В документе не устанавливаете Организацию . В ТЧ товары добавляете непонятно как, не заполняете все необходимые поля . Логично предположить что документ не может быть записан
(1) Точку останова пробовали ставить ? и смотреть как работает код. Судя по тому что Вы написали работать явно не должно. В документе не устанавливаете Организацию . В ТЧ товары добавляете непонятно как, не заполняете все необходимые поля . Логично предположить что документ не может быть записан
&НаСервере
Процедура ПрочитатьXMLФайлНаСервере(Файлик);
ПутьКФайлу = Файлик[0];
//XML
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
СЗ = Новый СписокЗначений;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента
Тогда ЧтениеXML.ПрочитатьАтрибут();
Атрибут = ЧтениеXML.Значение;
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
//дата оказания
Если Атрибут = "VISIT_DATE" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
//код услуги
Если Атрибут = "SERVICE_CODE" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
//Услуга
Если Атрибут = "SERVICE_NAME" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
//Кабинет
Если Атрибут = "CABLAB_NAME" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
//Сумма
Если Атрибут = "SUMM_WITH_DISCOUNT" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента и
Атрибут = "status_mnemo" Тогда
СоздатьЭлементДокумента(СЗ) ;
СЗ.Очистить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура СоздатьЭлементДокумента(СЗ) ;
Если СЗ.Количество() >0 Тогда
НовыйЭлемент = Справочники.Выгрузка.СоздатьЭлемент();
НовыйЭлемент.Дата = СЗ[0].Значение;
НовыйЭлемент.Код = СЗ[1].Значение;
НовыйЭлемент.Наименование = СЗ[2].Значение;
НовыйЭлемент.Кабинет = СЗ[3].Значение;
НовыйЭлемент.Сумма = СЗ[4].Значение;
НовыйЭлемент.Записать();
СЗ.Очистить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьИзФайлаXML(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
Фильтр = "xml|*.xml";
ДиалогОткрытияФайла.Фильтр = Фильтр;
Если ДиалогОткрытияФайла.Выбрать() Тогда
Файлик = ДиалогОткрытияФайла.ВыбранныеФайлы;
ПрочитатьXMLФайлНаСервере(Файлик);
КонецЕсли;
ОбновитьИнтерфейс();
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот