|
Запись данных из файла xml в документ | ☑ | ||
---|---|---|---|---|
0
Ivan2020
12.07.20
✎
21:35
|
Всем привет!
Прошу помощи. Не могу разобраться, что я делаю не так. Задача стоит в следующем: Есть файл формата XML, необходимо по трем совместным условиям (Если дата, цена и количество из документа Поступление товаров одновременно совпадают со строкой файла XML, то из этой строки файла необходимо взять поле "Оценка" и записать в соответствующий документ 1с. При этом, если у документа есть документ основание, то дата берется оттуда, а оценка записывается и в основной документ и в документ-основание. У меня файл читается, находится первый документ и ничего не происходит, записи нет. хотя поиск верный. Строк в файле может быть очень много. Помогите разобраться, что я делаю не так, пожалуйста. Процедура КомандаЗагрузитьОценку(АдресВХранилище, ААА, ОбновлятьОценку) Экспорт ДД = ПолучитьИзВременногоХранилища(АдресВХранилище); ИмяФайла = ПолучитьИмяВременногоФайла("xml"); ДД.Записать(ИмяФайла); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТовара.Ссылка КАК ДокументПоступление, | ПоступлениеТовара.ДокументОснование КАК ДокументОснование, | ПоступлениеТовара.Дата КАК Дата, | ПоступлениеТовара.ДокументОснование.Дата КАК ДокументОснованиеДата, | ЕСТЬNULL(ПоступлениеТовара.ДокументОснование.Дата, ПоступлениеТовара.Дата) КАК ДатаПродажи, | ПоступлениеТовара.Цена КАК Цена, | ПоступлениеТовара.Количество КАК Количество, | ПоступлениеТовара.Качество КАК Качество |ИЗ | Документ.ПоступлениеТовара КАК ПоступлениеТовара |ГДЕ | НЕ ПоступлениеТовара.ПометкаУдаления | И ЕСТЬNULL(ПоступлениеТовара.ДокументОснование.Дата, ПоступлениеТовара.Дата) = &DATE | И ПоступлениеТовара.Цена = &PRICE | И ПоступлениеТовара.Количе ство = &QUANTITY"; Чтение = Новый ЧтениеXML(); Чтение.ОткрытьФайл(ИмяФайла, , , "UTF-8"); Чтение.ПерейтиКСодержимому(); //НачатьТранзакцию(); Пока Чтение.Прочитать() Цикл Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или Чтение.Имя <> "row" Тогда Продолжить; КонецЕсли; ПоступлениеВыбытие = Документы.ПоступлениеТовара.ПустаяСсылка(); ////////Установка параметров запроса из файла XML///////////////////////// Цена = Число(Чтение.ЗначениеАтрибута("PRICE")); Запрос.УстановитьПараметр("PRICE", Цена); Количество = Число(Чтение.ЗначениеАтрибута("QUANTITY")); Запрос.УстановитьПараметр("QUANTITY", Количество); ДатаБезВремени = Дата(СтрЗаменить(Чтение.ЗначениеАтрибута("TDATE"), "-", "")); DATE = Формат(ДатаБезВремени, "ДФ=dd.MM.yyyy") + " "+ Чтение.ЗначениеАтрибута("TIME"); ДатаСделки = Дата(DATE); Запрос.УстановитьПараметр("DATE", ДатаПродажи); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Сообщить("Нет данных для обработки!"); Возврат; КонецЕсли; Выборка = Результат.Выбрать(); кол = Выборка.Количество(); Сообщить("Обрабатывается записей: "+Строка(кол)); ном = 0; Пока Выборка.Следующий() Цикл ном = ном+1; НачатьТранзакцию(); Попытка ОбъектПоступлениеТовара = Выборка.ДокументПоступление.ПолучитьОбъект(); Оценка= Число(Чтение.ЗначениеАтрибута("OCENKA")); ОбъектПоступлениеТовара.Качество = Оценка; //Если ТипЗнч(Документы.ПоступлениеТовара.ДокументОснование) <> Тип("Неопределено") Тогда // ОбъектПоступлениеТовара.ДокументОснование.Качество = Оценка; //КонецЕсли; ОбъектПоступлениеТовара.ОбменДанными.Загрузка = Истина; ОбъектПоступлениеТовара.Записать(); Исключение Сообщить("Не удалось записать оценку в документ: "+Строка(ОбъектПоступлениеТовара.Ссылка)); ОтменитьТранзакцию(); Продолжить; КонецПопытки; КонецЦикла; КонецЦикла; ЗафиксироватьТранзакцию(); Чтение.Закрыть(); УдалитьФайлы(ИмяФайла); Сообщить("Обработка завершена: "+Строка(ТекущаяДата()) +Символы.ПС+"Обработано записей: "+Строка(ном)+" из "+Строка(кол)); КонецПроцедуры |
|||
1
acht
12.07.20
✎
21:43
|
> Запрос.УстановитьПараметр("DATE", ДатаПродажи);
ДатаПродажи - этачо? |
|||
2
Ivan2020
12.07.20
✎
22:47
|
ДатаБезВремени = Дата(СтрЗаменить(Чтение.ЗначениеАтрибута("TDATE"), "-", ""));
DATE = Формат(ДатаБезВремени, "ДФ=dd.MM.yyyy") + " "+ Чтение.ЗначениеАтрибута("TIME"); ДатаСделки = Дата(DATE); Запрос.УстановитьПараметр("DATE", ДатаПродажи); ДатаБезВремени = Дата(СтрЗаменить(Чтение.ЗначениеАтрибута("TDATE"), "-", "")); DATE = Формат(ДатаБезВремени, "ДФ=dd.MM.yyyy") + " "+ Чтение.ЗначениеАтрибута("TIME"); ДатаПродажи = Дата(DATE); Запрос.УстановитьПараметр("DATE", ДатаПродажи); Код редактировал сейчас и забыл переименовать. Но проблема не в этом. Так как в оригинале все работает. Отбор по запросу |
|||
3
Ivan2020
12.07.20
✎
22:50
|
Почему-то код на форуме двоится. Вместо датасделки переписала датаПродажи
|
|||
4
acht
12.07.20
✎
22:53
|
Чудес не бывает. Ты или пишешь не в тот документ, который ожидаешь или смотришь не в те данные. Дальше варианты - кривой поиск, запись в документ не того типа, сброс данных при открытии документа или перезапись в подписках.
Кстати, а почему ты Иван, если ты Наталья? |
|||
5
Ivan2020
12.07.20
✎
23:00
|
Этот аккаунт создавала супруга и указала свой почтовый ящик. На момент регистрации забыл пароль от своей почты, а нужно было срочно спросить совета.
|
|||
6
MyNick
12.07.20
✎
23:09
|
Увидел переменную ААА и дальше не читал, смысла нет
|
|||
7
acht
12.07.20
✎
23:11
|
У тебя еще там забавная схема начал и фиксации транзакций. Убери ее, пожалуйста и проверь отладчиком по шагам. Результат поиска, результат записи.
|
|||
8
AlvlSpb
12.07.20
✎
23:26
|
(0) Если Результат.Пустой() Тогда
Сообщить("Нет данных для обработки!"); Возврат; КонецЕсли; Замени Возврат на Продолжить |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |