Имя: Пароль:
1C
1C 7.7
v7: Выгрузка в dbf из 1с 77
, , ,
0 den17
 
05.06.12
09:32
При попытке записать значение в колонку "Gr", которая имеет СТРОКОВЫЙ тип, длину 8 символов, вылетает ошибка с кодом 210, "недопустимый номер поля". С чем может быть связана данная ошибка???
1 den17
 
05.06.12
09:32
Процедура Выполнить()
 ИмяФайла = "tov.dbf";
 Каталог = СоздатьОбъект("ФС");
 Каталог.СоздатьКаталог("c:\");
 ПутьФайла = "c:\";
 Файл = СоздатьОбъект("Xbase");
 Файл.ОткрытьФайл(ПутьФайла+ИмяФайла);
 Если Файл.Открыта() = 0 тогда
 
  Файл.ДобавитьПоле("Code",1,9,0);
  Файл.ДобавитьПоле("Name",2,50,0);
  Файл.ДобавитьПоле("Roditel",2,25,0);
  Файл.ДобавитьПоле("StatZatrat",2,10,0);
  Файл.ДобавитьПоле("Articul",2,10,0);
  Файл.ДобавитьПоле("BazEdIzm",2,10,0);
  Файл.ДобавитьПоле("Ves",2,25,0);
  Файл.ДобавитьПоле("VesK",2,25,0);
  Файл.ДобавитьПоле("PartUchet",2,25,0);
  Файл.ДобавитьПоле("SerialUchet",2,25,0);
  Файл.ДобавитьПоле("HaractUchet",2,25,0);
  Файл.ДобавитьПоле("EdRasch",2,25,0);
  Файл.ДобавитьПоле("EdOst",2,25,0);
  Файл.ДобавитьПоле("Komment",2,25,0);
  Файл.ДобавитьПоле("Nabor",2,25,0);
  Файл.ДобавитьПоле("PolnNaim",2,50,0);
  Файл.ДобавитьПоле("Gr",2,8,0);
  Файл.ДобавитьПоле("NomerGTD",2,25,0);
  Файл.ДобавитьПоле("OsnIzobr",2,25,0);
  Файл.ДобавитьПоле("OsnPostav",2,25,0);
  Файл.ДобавитьПоле("OtvMeneger",2,25,0);
  Файл.ДобавитьПоле("StavkaNDS",2,25,0);
  Файл.ДобавитьПоле("StranaProish",2,25,0);
  Файл.ДобавитьПоле("Usluga",2,50,0);
  Файл.ДобавитьПоле("NomenGruppaZatrat",2,25,0);  
  Файл.ДобавитьПоле("VidNomenkl",2,25,0);
  Файл.ДобавитьПоле("VestiSerialN",2,25,0);
  Файл.ДобавитьПоле("Komplekt",2,25,0);
  Файл.ДобавитьПоле("CenovGruppa",2,25,0);
  Файл.ДобавитьПоле("EdIzmMest",2,25,0);
  Файл.ДобавитьПоле("DopOpisanieN",2,25,0);
 //////////////////////////////////////////////////////  
  Файл.ДобавитьПоле("kod1",1,8,0);
  Файл.ДобавитьПоле("gruppa1",2,50,0);
  Файл.ДобавитьПоле("kod2",1,8,0);
  Файл.ДобавитьПоле("gruppa2",2,50,0);
  Файл.ДобавитьПоле("kod3",1,8,0);
  Файл.ДобавитьПоле("gruppa3",2,50,0);
  Файл.ДобавитьПоле("kod4",1,8,0);
  Файл.ДобавитьПоле("gruppa4",2,50,0);
  /////////////////////////////////////////////////////
  Файл.СоздатьФайл(ПутьФайла+ИмяФайла);
 иначе    
  Файл.ОчиститьФайл();    
 КонецЕсли;
// Заполнение файла выгрузки
Спр = СоздатьОбъект("Справочник.Товары");
Спр.ВыбратьЭлементы(1);
Пока Спр.ПолучитьЭлемент() > 0 цикл                    
   состояние("Обрабатывается товар " + спр.наименование);
   Если Спр.ЭтоГруппа() = 0 Тогда
       Файл.Добавить();
         Файл.УстановитьЗначениеПоля("Code",Спр.Код);
         Файл.УстановитьЗначениеПоля("Name",Спр.Наименование);
         /////////////////////////////////////////////////////
         Файл.УстановитьЗначениеПоля("BazEdIzm","шт");
         Файл.УстановитьЗначениеПоля("VidNomenkl","Товар");
         Файл.УстановитьЗначениеПоля("Articul",Спр.Артикул);
         Файл.УстановитьЗначениеПоля("Gr", Спр.Родитель.Наименование);          
       // Определение вида номенклатуры      
         //Файл.УстановитьЗначениеПоля("Type",Спр.апТип.Идентификатор());
         //Файл.УстановитьЗначениеПоля("Ed",Спр.асОсновнаяУпаковка.Код);
         //Файл.УстановитьЗначениеПоля("FullName",Спр.сПолнНаименование);
       // Определение ставки НДС      
         //Файл.УстановитьЗначениеПоля("StavkaNDS",Спр.чПроцентНдс);
         //Файл.УстановитьЗначениеПоля("StavkaNP",Спр.чПроцентНП);
         
         // Определим группы
         Если Спр.Родитель.Уровень() = 1 тогда
             Файл.УстановитьЗначениеПоля("kod1",Спр.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa1",Спр.Родитель.Наименование);
         КонецЕсли;                                                          
         Если Спр.Родитель.Уровень() = 2 тогда
             Файл.УстановитьЗначениеПоля("kod2",Спр.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa2",Спр.Родитель.Наименование);
             Файл.УстановитьЗначениеПоля("kod1",Спр.Родитель.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa1",Спр.Родитель.Родитель.Наименование);
         КонецЕсли;                                                          
         Если Спр.Родитель.Уровень() = 3 тогда
             Файл.УстановитьЗначениеПоля("kod3",Спр.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa3",Спр.Родитель.Наименование);
             Файл.УстановитьЗначениеПоля("kod2",Спр.Родитель.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa2",Спр.Родитель.Родитель.Наименование);
             Файл.УстановитьЗначениеПоля("kod1",Спр.Родитель.Родитель.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa1",Спр.Родитель.Родитель.Родитель.Наименование);
         КонецЕсли;                                                          
         Если Спр.Родитель.Уровень() = 4 тогда
             Файл.УстановитьЗначениеПоля("kod4",Спр.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa4",Спр.Родитель.Наименование);
             Файл.УстановитьЗначениеПоля("kod3",Спр.Родитель.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa3",Спр.Родитель.Родитель.Наименование);
             Файл.УстановитьЗначениеПоля("kod2",Спр.Родитель.Родитель.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa2",Спр.Родитель.Родитель.Родитель.Наименование);
             Файл.УстановитьЗначениеПоля("kod1",Спр.Родитель.Родитель.Родитель.Родитель.Код);
             Файл.УстановитьЗначениеПоля("gruppa1",Спр.Родитель.Родитель.Родитель.Родитель.Наименование);
         КонецЕсли;                                                          
       Файл.Записать();  
   КонецЕсли;    
КонецЦикла;

Сообщить("В файл выгрузки скопировано записей "+ Файл.КоличествоЗаписей());
Файл.ЗакрытьФайл();
КонецПроцедуры
2 Ёпрст
 
05.06.12
09:41
Спр.Родитель.Наименование - это как правило, строка в 100 символов.

А не как не 8.
3 Ёпрст
 
05.06.12
09:42
либо СокрЛП, если уверен, либо Лев/Прав 8 , если не уверен
4 dk
 
05.06.12
09:43
не помню как с названиями колонок, а на название файла dbf только 8 символов дает
может и на длину в названии полей есть ограничение
5 den17
 
05.06.12
09:46
Изменил длину на 100 -- не помогает:(
6 den17
 
05.06.12
09:48
Другие поля добавляются.. А с этим что не так -- не пойму..
7 1Сергей
 
05.06.12
09:51
чукча писатель
8 Ork
 
05.06.12
09:52
(0) С чем связано использование :
Файл.УстановитьЗначениеПоля("Code",Спр.Код);

вместо
Файл.Code = Спр.Код;

???
9 ЧеловекДуши
 
05.06.12
10:56
При записи в ДБФ, ты попробуй приводить к типу, типо: Строка(), Число(), Дата().
10 ЧеловекДуши
 
05.06.12
10:57
(5)Автор, ДНК, не лечится, приведи значение к правильному типу :)
Кто сказал, что число автоматически трансформируется строку?
11 111Ivan111
 
05.06.12
11:14
Файл.Кодировка=КодировкаXBase.OEM;
12 111Ivan111
 
05.06.12
11:15
Файл = СоздатьОбъект("Xbase");
Файл.Кодировка=КодировкаXBase.OEM; это тоже нужно
13 111Ivan111
 
05.06.12
11:19
Файл.ДобавитьПоле("kod1",1,8,0);
может нужно Файл.ДобавитьПоле("kod1","N",8,0);? или в семерки по другому?)))
14 111Ivan111
 
05.06.12
11:21
"Файл.УстановитьЗначениеПоля" работать не будет.
15 miki
 
05.06.12
11:21
(6)
>>Другие поля добавляются

Не верю! (с)

Научи как добавить поле с именем "NomenGruppaZatrat" или хотя бы "VestiSerialN"...
16 111Ivan111
 
05.06.12
11:23
присваивай как в (8)
17 den17
 
05.06.12
12:05
Спасибо вам.