Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 апр 2025, 04:32

Обновление тч после загрузки новых данных

Автор sali, 24 фев 2025, 09:27

0 Пользователей и 1 гость просматривают эту тему.

sali

antoneus, я чёт туплю
переписываю код чтобы товары по коду , а не по наименованию находились
&НаСервере
Процедура ПрочитатьФайлНаСервере()
Объект.ДанныеФайла.Очистить();
Попытка
    Парсер = Новый ЧтениеXML;
    Парсер.ОткрытьФайл(Объект.ПутьКФайлу);
Исключение
Сообщить("При открытии файла произошла ошибка. Операция прервана!");
Сообщить(ОписаниеОшибки());         
Возврат;
КонецПопытки;

Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Парсер);

Для Каждого Элемент2 Из документ.ЭлементДокумента.ДочерниеУзлы[0].ДочерниеУзлы Цикл   
Если Элемент2.ИмяУзла = "doc_det" Тогда   

Док_Дет = Элемент2;
НоваяСтрока = Объект.ДанныеФайла.Добавить();

// НОменклатура   =  Док_Дет.Атрибуты[5].ЗначениеУзла;
ЕИ             =  Док_Дет.Атрибуты[8].ЗначениеУзла;   
ТНВЭД          =  Док_Дет.Атрибуты[7].ЗначениеУзла;

кодтовара1с = справочники.Номенклатура.НайтиПоКоду(Док_Дет.Атрибуты[0].ЗначениеУзла, истина);

// Наименование   =  Справочники.Номенклатура.НайтиПоНаименованию(НОменклатура, Истина);

ЕИНоменклатуры =  Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕИ, Истина);
КодТНВЭД       =  Справочники.КлассификаторТНВЭД.НайтиПоКоду(ТНВЭД, истина);


Если НЕ ЗначениеЗаполнено(кодтовара1с) Тогда
НоваяСтрока.Номенклатура1С = "";
Иначе
НоваяСтрока.Номенклатура1С = Док_Дет.Атрибуты[5].ЗначениеУзла;
КонецЕсли; 


НоваяСтрока.НоменклатураФайла  = Док_Дет.Атрибуты[5].ЗначениеУзла; 
НоваяСтрока.Артикул        = Док_Дет.Атрибуты[6].ЗначениеУзла;
НоваяСтрока.Штрихкод        = Док_Дет.Атрибуты[4].ЗначениеУзла;
НоваяСтрока.КодТовара        = Док_Дет.Атрибуты[0].ЗначениеУзла;

Если Не ЗначениеЗаполнено(КодТНВЭД) Тогда
НоваяСтрока.ТНВЭД       = Док_Дет.Атрибуты[7].ЗначениеУзла;
Иначе
НоваяСтрока.ТНВЭД       = КодТНВЭД;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ЕИНоменклатуры) Тогда
НоваяСтрока.ЕдиницаИзмерения  = Док_Дет.Атрибуты[8].ЗначениеУзла;
Иначе
НоваяСтрока.ЕдиницаИзмерения  = ЕИНоменклатуры;
КонецЕсли;

НоваяСтрока.Количество = Док_Дет.Атрибуты[1].ЗначениеУзла;
НоваяСтрока.Цена    = Док_Дет.Атрибуты[2].ЗначениеУзла;
НоваяСтрока.Сумма    = Док_Дет.Атрибуты[3].ЗначениеУзла;

КонецЕсли;
КонецЦикла; 

Парсер.Закрыть();
 
КонецПроцедуры   

не заполняется колонка, а товары есть

sali

sali, кодтовара1с сюда ничего не приходит , а в Док_Дет.Атрибуты[0].ЗначениеУзла код есть

sali

sali, &НаСервере
Процедура ПрочитатьФайлНаСервере()
Объект.ДанныеФайла.Очистить();
Попытка
    Парсер = Новый ЧтениеXML;
    Парсер.ОткрытьФайл(Объект.ПутьКФайлу);
Исключение
Сообщить("При открытии файла произошла ошибка. Операция прервана!");
Сообщить(ОписаниеОшибки());         
Возврат;
КонецПопытки;

Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Парсер);

Для Каждого Элемент2 Из документ.ЭлементДокумента.ДочерниеУзлы[0].ДочерниеУзлы Цикл   
Если Элемент2.ИмяУзла = "doc_det" Тогда   

Док_Дет = Элемент2;
НоваяСтрока = Объект.ДанныеФайла.Добавить();

// НОменклатура   =  Док_Дет.Атрибуты[5].ЗначениеУзла;
ЕИ             =  Док_Дет.Атрибуты[8].ЗначениеУзла;   
ТНВЭД          =  Док_Дет.Атрибуты[7].ЗначениеУзла;   

кодтовараа =   Док_Дет.Атрибуты[0].ЗначениеУзла;
кодтовара1с = справочники.Номенклатура.НайтиПоКоду(кодтовараа, истина);

// Наименование   =  Справочники.Номенклатура.НайтиПоНаименованию(НОменклатура, Истина);

ЕИНоменклатуры =  Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕИ, Истина);
КодТНВЭД       =  Справочники.КлассификаторТНВЭД.НайтиПоКоду(ТНВЭД, истина);


Если НЕ ЗначениеЗаполнено(кодтовара1с) Тогда
НоваяСтрока.Номенклатура1С = "";
Иначе
НоваяСтрока.Номенклатура1С = кодтовара1с.Наименование;
КонецЕсли; 


НоваяСтрока.НоменклатураФайла  = Док_Дет.Атрибуты[5].ЗначениеУзла; 
НоваяСтрока.Артикул        = Док_Дет.Атрибуты[6].ЗначениеУзла;
НоваяСтрока.Штрихкод        = Док_Дет.Атрибуты[4].ЗначениеУзла;
НоваяСтрока.КодТовара        = Док_Дет.Атрибуты[0].ЗначениеУзла;

Если Не ЗначениеЗаполнено(КодТНВЭД) Тогда
НоваяСтрока.ТНВЭД       = Док_Дет.Атрибуты[7].ЗначениеУзла;
Иначе
НоваяСтрока.ТНВЭД       = КодТНВЭД;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ЕИНоменклатуры) Тогда
НоваяСтрока.ЕдиницаИзмерения  = Док_Дет.Атрибуты[8].ЗначениеУзла;
Иначе
НоваяСтрока.ЕдиницаИзмерения  = ЕИНоменклатуры;
КонецЕсли;

НоваяСтрока.Количество = Док_Дет.Атрибуты[1].ЗначениеУзла;
НоваяСтрока.Цена    = Док_Дет.Атрибуты[2].ЗначениеУзла;
НоваяСтрока.Сумма    = Док_Дет.Атрибуты[3].ЗначениеУзла;

КонецЕсли;
КонецЦикла; 

Парсер.Закрыть();
 
КонецПроцедуры   

Максим75

sali,
Цитата: sali от 24 фев 2025, 13:50sali, кодтовара1с сюда ничего не приходит , а в Док_Дет.Атрибуты[0].ЗначениеУзла код есть
в найти по коду уберите второй параметр

sali

Максим75, всё разобрался . укоротил код , вот
&НаСервере
Процедура ПрочитатьФайлНаСервере()
Объект.ДанныеФайла.Очистить();
Попытка
    Парсер = Новый ЧтениеXML;
    Парсер.ОткрытьФайл(Объект.ПутьКФайлу);
Исключение
Сообщить("При открытии файла произошла ошибка. Операция прервана!");
Сообщить(ОписаниеОшибки());         
Возврат;
КонецПопытки;

Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Парсер);

Для Каждого Элемент2 Из документ.ЭлементДокумента.ДочерниеУзлы[0].ДочерниеУзлы Цикл   
Если Элемент2.ИмяУзла = "doc_det" Тогда   

Док_Дет = Элемент2;
НоваяСтрока = Объект.ДанныеФайла.Добавить();

ЕИ             =  Док_Дет.Атрибуты[8].ЗначениеУзла;   
ТНВЭД          =  Док_Дет.Атрибуты[7].ЗначениеУзла;   

для каждого товар из Объект.ДанныеФайла цикл
новаястрока.номенклатура1с = справочники.Номенклатура.НайтиПоКоду(Док_Дет.Атрибуты[0].ЗначениеУзла);
конеццикла;

ЕИНоменклатуры =  Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕИ, Истина);
КодТНВЭД       =  Справочники.КлассификаторТНВЭД.НайтиПоКоду(ТНВЭД, истина);

НоваяСтрока.НоменклатураФайла  = Док_Дет.Атрибуты[5].ЗначениеУзла; 
НоваяСтрока.Артикул        = Док_Дет.Атрибуты[6].ЗначениеУзла;
НоваяСтрока.Штрихкод        = Док_Дет.Атрибуты[4].ЗначениеУзла;
НоваяСтрока.КодТовара        = Док_Дет.Атрибуты[0].ЗначениеУзла;

Если Не ЗначениеЗаполнено(КодТНВЭД) Тогда
НоваяСтрока.ТНВЭД       = Док_Дет.Атрибуты[7].ЗначениеУзла;
Иначе
НоваяСтрока.ТНВЭД       = КодТНВЭД;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ЕИНоменклатуры) Тогда
НоваяСтрока.ЕдиницаИзмерения  = Док_Дет.Атрибуты[8].ЗначениеУзла;
Иначе
НоваяСтрока.ЕдиницаИзмерения  = ЕИНоменклатуры;
КонецЕсли;

НоваяСтрока.Количество = Док_Дет.Атрибуты[1].ЗначениеУзла;
НоваяСтрока.Цена    = Док_Дет.Атрибуты[2].ЗначениеУзла;
НоваяСтрока.Сумма    = Док_Дет.Атрибуты[3].ЗначениеУзла;

КонецЕсли;
КонецЦикла; 

Парсер.Закрыть();
 
КонецПроцедуры   

antoneus

Блин, что за лютый способ разбора xml? Просто же все

Попытка
    Парсер = Новый ЧтениеXML;
    Парсер.ОткрытьФайл(Объект.ПутьКФайлу);
Исключение
    Сообщить("При открытии файла произошла ошибка. Операция прервана!");
    Сообщить(ОписаниеОшибки());         
    Возврат;
КонецПопытки;

Данные = ФабрикаXDTO.ПрочитатьXML(Парсер);

В отладчике посмотрите - какая красота будет в переменной Данные.

sali

antoneus, как открыть форму записи "номенклатура сегмента" нажав в отчете на саму номенклатуру?

antoneus

В обработке расшифровки получаем значение номенклатуры, потом создаем ключ записи регистра сведений, открываем форму записи, передав в параметры ключ.

sali

antoneus, это будет на форме отчета берем Результат и у него процедура результат обработка расшифровки?

antoneus


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск