Имя: Пароль:
1C
1С v8
Розница 2.0 Программно заполнить ТЧ док ПоступлениеТовара Не заполняется Количес
,
0 planod
 
05.03.13
17:18
Всем привет. Есть xml-файл, в котором хранится информация о поступлении товара. Содержимое этого файла необходимо преобразовать в документ поступление товара. Имеется такой код:

   ТЗ = Новый ТаблицаЗначений;;
   ТЗ.Колонки.Добавить("Номенклатура");
   ТЗ.Колонки.Добавить("Количество");
   ТЗ.Колонки.Добавить("Коэффициент");
   ТЗ.Колонки.Добавить("Цена");

   ПутьКФайлу = "C:\Users\Администратор\Desktop\Перенос\Обработки\from77.xml";
   Чтение = Новый ЧтениеXML;
   Чтение.ОткрытьФайл(ПутьКФайлу);
   Пока Чтение.Прочитать() Цикл
       Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и Чтение.Имя = "ДанныеДокумента" Тогда
           Пока Чтение.ПрочитатьАтрибут() Цикл
               Если Чтение.Имя = "Контрагент" Тогда Контрагент = Чтение.Значение; КонецЕсли;
               Если Чтение.Имя = "НомерДок" Тогда НомерДок = Чтение.Значение; КонецЕсли;
               Если Чтение.Имя = "ДатаДок" Тогда ДатаДок = Чтение.Значение; КонецЕсли;
           КонецЦикла;    
       КонецЕсли;
       
       Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и Чтение.Имя = "Номенклатура" Тогда
           НоваяСтрока = ТЗ.Добавить();
           Пока Чтение.ПрочитатьАтрибут() Цикл
               Если Чтение.Имя = "Ном" Тогда НоваяСтрока.Номенклатура = Чтение.Значение; КонецЕсли;
               Если Чтение.Имя = "Количество" Тогда НоваяСтрока.Количество = Чтение.Значение; КонецЕсли;
               Если Чтение.Имя = "Коэффициент" Тогда НоваяСтрока.Коэффициент = Чтение.Значение; КонецЕсли;
               Если Чтение.Имя = "Цена" Тогда НоваяСтрока.Цена = Чтение.Значение; КонецЕсли;
           КонецЦикла;    
       КонецЕсли;
   КонецЦикла;
   
   НовоеПоступление = Документы.ПоступлениеТоваров.СоздатьДокумент();
   Если Справочники.Контрагенты.НайтиПоНаименованию(Контрагент) = Неопределено Тогда
       Сообщить("Не найден контрагент "+Контрагент);
   КонецЕсли;    
   НовоеПоступление.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(Контрагент).Ссылка;
   СтрокаДата = Сред(ДатаДок,0,4)+Сред(ДатаДок,6,2)+Сред(ДатаДок,9,2);
   НовоеПоступление.Дата = Дата(СтрокаДата);
   НовоеПоступление.Комментарий = "Перенесен из ТиС 7.7 за номером "+НомерДок;
   НовоеПоступление.Склад = Справочники.Склады.НайтиПоНаименованию("Склад");
   НовоеПоступление.Организация = Справочники.Организации.НайтиПоНаименованию("ИП");
   НовоеПоступление.Магазин = Справочники.Магазины.НайтиПоНаименованию("Магазин");
   
   Для НомерСтроки = 0 По ТЗ.Количество() - 1 Цикл
       Попытка
           СтрокаТЧ = НовоеПоступление.Товары.Добавить();
           СтрокаТЧ.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТЗ[НомерСтроки].Номенклатура);
           СтрокаТЧ.Цена = ТЗ[НомерСтроки].Цена;
           СтрокаТЧ.Сумма = ТЗ[НомерСтроки].Количество*ТЗ[НомерСтроки].Цена;
           СтрокаТЧ.Количество = Число(ТЗ[НомерСтроки].Количество);
       Исключение
           Сообщить("Не найдена номенклатурная позиция!");
       КонецПопытки;    
   КонецЦикла;    
   
   НовоеПоступление.Записать();
   
   Сообщить("Создание документа завершено");

И вот тут получается ньюанс: в Табличной части не заполняется поле Количество. В чем я ошибся?
1 sapphire
 
05.03.13
17:20
Если Чтение.Имя = "Количество" Тогда try НоваяСтрока.Количество = Число(Чтение.Значение); except endtry; КонецЕсли;
2 sapphire
 
05.03.13
17:21
(0) Неужели сложно догадаться, что Чтение.Значение скорее всего строка....
3 planod
 
05.03.13
17:24
(1)
СтрокаТЧ.Количество = Число(ТЗ[НомерСтроки].Количество);
пытаюсь же преобразовать...
4 КонецЕсли
 
05.03.13
17:25
Убери неразрывный пробел в строке с числом. СтрЗаменить.
5 sapphire
 
05.03.13
17:26
(3) ТЗ[НомерСтроки].Количество - если ТЗ типизирована, то нуль будет
6 sapphire
 
05.03.13
17:26
(4) в 77 НП нет вроде как
7 Тарантул
 
05.03.13
17:30
Если Чтение.Имя = "Количество" Тогда НоваяСтрока.Количество = Чтение.Значение; КонецЕсли;
Тип столбца "Количество" - число? Тогда и нулевое значение присвоится. смотрел что в таблице в этом столбце?
8 planod
 
05.03.13
17:33
Поставил
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));

Все равно количество не ставится....
9 Тарантул
 
05.03.13
17:35
(8) так хотя бы так попробуй:
Если Чтение.Имя = "Количество" Тогда НоваяСтрока.Количество = 0+Чтение.Значение; КонецЕсли;
10 planod
 
05.03.13
17:36
Тип переменной - число, проверил с помощью ТипЗнч()
11 Тарантул
 
05.03.13
17:37
(10) Чтение.Значение - строка наверное
12 planod
 
05.03.13
17:38
(11) так я её сразу преобразую с помощью Число() по совету(1)
13 Тарантул
 
05.03.13
17:39
Если Чтение.Имя = "Количество"  
условие выполняется?
14 planod
 
05.03.13
17:42
(13) да, с помощью Сообщить() значение количество выводится...
15 sapphire
 
05.03.13
17:44
(14) Преобразовать строку в число как тебе и было предложено в  (1) религия не позволяет?
16 planod
 
05.03.13
17:45
(15) читай (12)
17 sapphire
 
05.03.13
17:47
(16) Код?
18 planod
 
05.03.13
17:49
(17)
Если Чтение.Имя = "Количество" Тогда НоваяСтрока.Количество = 0+Число(СтрЗаменить(Чтение.Значение,Символы.НПП,"")); КонецЕсли;
19 sapphire
 
05.03.13
17:51
(18) В условие заходит?

Если Чтение.Имя = "Количество" Тогда

НоваяСтрока.Количество =0+Число(СтрЗаменить(Чтение.Значение,Символы.НПП,"")); // Встань сюда отладчиком

КонецЕсли;
20 planod
 
05.03.13
17:58
(19) да заходит, спасибо большое за советы и терпение, проблема оказалось в логике документа... У табличной части два реквизита: "Количество" и "КоличествоУпаковок".... На форме в табличной части заголовок висит Количество, а отражается значение реквизита "КоличествоУпаковок".....
21 sapphire
 
05.03.13
18:01
(20) Вот видишь...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn