Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: 1C7.7 Тип данных в таблице значений

v7: 1C7.7 Тип данных в таблице значений
Я
   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 - нужно привести к типу числа. А у тебя там строка, автоматом неприводимая, похоже
   Volodja
 
2 - 18.11.21 - 07:42
Вместо  
    ТЗ.УстановитьПараметрыКолонки("Поле6","Справочник.Номенклатура");

Сделайте 
  ТЗ.НоваяКолонка("Номенклатура","Справочник.Номенклатура");
   спрНоменклатура=СоздатьОбъект("Справочник.Номенклатура");
  ТЗ.ВыбратьСтроки();             
  Пока ТЗ.ПолучитьСтроку() = 1 Цикл
      Если спрНоменклатура.НайтиПоНаименованию(СокрЛП(ТЗ.Поле6),0)=1 ТОгда
           ТЗ.Номенклатура=спрНоменклатура.ТекущийЭлемент();
      КонецЕсли;
  КонецЦикла;

А здесь вместо
  Док.Цена=ТЗ.Поле14;                //  в Поле14 лежит Цена товара с неизвестным типом данных


_Цена=стрЗаменить(ТЗ.Поле14,",",".");  // убрать симовлы " ,"

_Цена=стрЗаменить(_Цена," ","");  
_Цена=стрЗаменить(_Цена,chr(160),"");  
  Док.Цена=_Цена;
   Volodja
 
3 - 18.11.21 - 07:43
(2)   Док.Цена=Число(_Цена);
   Volodja
 
4 - 18.11.21 - 07:45
(2) А ну и вместо
Док.Товар=ТЗ.Поле6;
пишем  
Док.Товар=ТЗ.Номенклатура
   mygorodok
 
5 - 19.11.21 - 12:36
(4) Мое Почтение..., Все работает.

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.