|
v7: 1C7.7 Тип данных в таблице значений | ☑ | ||
---|---|---|---|---|
0
mygorodok
18.11.21
✎
07:20
|
Коллеги, кто знает как сделать?
Есть таблица значений в 1С7.7 Общепит V.2, требуется некоторые значения перенести в документ. Таблицу значений получаю из .csv файла: ИмяФайла = "D:\vends.csv"; ФайлИмпорта = СоздатьОбъект("Текст"); ФайлИмпорта.КодоваяСтраница(0); Разделитель = ","; Если ФС.СуществуетФайл(ИмяФайла)=0 Тогда Сообщить("Не нашел файл"); Возврат; КонецЕсли; ФайлИмпорта.Открыть(ИмяФайла); // вычисляем максимальное число полей ТекСтрока="2"; ЧислоПолей=1; Для НомерСтроки = 1 По ФайлИмпорта.КоличествоСтрок() Цикл Если ПустаяСтрока(ТекСтрока)>0 Тогда ТекСтрока = СокрЛП(ФайлИмпорта.ПолучитьСтроку(НомерСтроки)); КонецЕсли; ЧислоПолей = Макс(ЧислоПолей,СтрЧислоВхождений(СокрЛП(ФайлИмпорта.ПолучитьСтроку(НомерСтроки)),Разделитель)); КонецЦикла; ЧислоПолей = ЧислоПолей + 1; // выгрузим в ТЗ (Таблица Значений) ТЗ = СоздатьОбъект("ТаблицаЗначений"); Для колКолонок = 1 по ЧислоПолей цикл ТЗ.НоваяКолонка("Поле"+колКолонок); КонецЦикла; Для НомерСтроки = 1 По ФайлИмпорта.КоличествоСтрок() Цикл ТекСтрока = СокрЛП(ФайлИмпорта.ПолучитьСтроку(НомерСтроки)); ТЗ.НоваяСтрока(); Для НомерПоля = 1 По ЧислоПолей Цикл ПозицияРазделителя = Найти(ТекСтрока,Разделитель); Если ПозицияРазделителя=0 Тогда ПозицияРазделителя = СтрДлина(ТекСтрока) + 1; КонецЕсли; ЗначениеПоля = Лев(ТекСтрока,ПозицияРазделителя-1); ТекСтрока = Прав(ТекСтрока,СтрДлина(ТекСтрока)-ПозицияРазделителя); ТЗ.УстановитьЗначение(НомерСтроки,НомерПоля,ЗначениеПоля); КонецЦикла; КонецЦикла; ТЗ.УстановитьПараметрыКолонки("Поле6","Справочник.Номенклатура"); ТЗ.ВыбратьСтроку(); Далее переношу значения в документ: Док = СоздатьОбъект("Документ.РасходнаяНакладная"); Док.Новый(); ТЗ.ВыбратьСтроки(); // где ТЗ - это таблица значений Пока ТЗ.ПолучитьСтроку() = 1 Цикл Док.НоваяСтрока(); Док.Товар=ТЗ.Поле6; // в Поле6 лежит Название товара с неизвестным типом данных Док.Цена=ТЗ.Поле14; // в Поле14 лежит Цена товара с неизвестным типом данных Док.Количество=1; Док.Сумма=Док.Цена*Док.Количество; КонецЦикла; Док.Записать(); Результат: Строки с товаром и с ценой в документе пустые, Суммы при этом отображается, то есть значения полей в документ передаются, но не отображаются. Очевидно это связано с типом данных, так как в документе тип данных для нужных мне полей это "Справочник.Номенклатура" для товара, и "Число" для цены. Как задать тип данных для полей в Таблице значений еще на этапе формирования этой таблицы, я не соображу. Конструкция вида ТЗ.УстановитьПараметрыКолонки("Поле6","Справочник.Номенклатура"); видимого результата не дает. |
|||
1
ДенисЧ
18.11.21
✎
07:22
|
Поле6 - нужно найти номенклатуру, хотя бы по названию
Поле14 - нужно привести к типу числа. А у тебя там строка, автоматом неприводимая, похоже |
|||
2
Volodja
18.11.21
✎
07:42
|
Вместо
ТЗ.УстановитьПараметрыКолонки("Поле6","Справочник.Номенклатура"); Сделайте ТЗ.НоваяКолонка("Номенклатура","Справочник.Номенклатура"); спрНоменклатура=СоздатьОбъект("Справочник.Номенклатура"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если спрНоменклатура.НайтиПоНаименованию(СокрЛП(ТЗ.Поле6),0)=1 ТОгда ТЗ.Номенклатура=спрНоменклатура.ТекущийЭлемент(); КонецЕсли; КонецЦикла; А здесь вместо Док.Цена=ТЗ.Поле14; // в Поле14 лежит Цена товара с неизвестным типом данных _Цена=стрЗаменить(ТЗ.Поле14,",","."); // убрать симовлы " ," _Цена=стрЗаменить(_Цена," ",""); _Цена=стрЗаменить(_Цена,chr(160),""); Док.Цена=_Цена; |
|||
3
Volodja
18.11.21
✎
07:43
|
(2) Док.Цена=Число(_Цена);
|
|||
4
Volodja
18.11.21
✎
07:45
|
(2) А ну и вместо
Док.Товар=ТЗ.Поле6; пишем Док.Товар=ТЗ.Номенклатура |
|||
5
mygorodok
19.11.21
✎
12:36
|
(4) Мое Почтение..., Все работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |