Имя: Пароль:
1C
1C 7.7
v7: DBF-файлы
,
0 Christina_
 
20.08.12
23:07
Была обработка, которая из ексель файла загружала в тз значения, потом из тз в обычную таблицу. Ексель- файлы очень большие и грузятся долго... Сделала ексель ДБФ файлом... с дбф еще не работала никогда...сп почитала.. не могу разобраться, как мне с него теперь читать.. мне нужно из таблицы этого дбф файла случайнм образом выбрать значения...

Буду рада любым разумным советам. Спасибо заранее.
1 Злопчинский
 
20.08.12
23:10
1. выбирай по порядку. - это одна из реализаций случая случайного выбора.
2. читай эксель йокселем - читается сразу в ТЗ и быстро.
2 zladenuw
 
20.08.12
23:11
а как читала с йкселя и как хочешь с дбф ?
Книга знаний: DBF-файлы (XBase)
v8: загрузка и чтение DBF в 1С
3 zladenuw
 
20.08.12
23:12
и поповоду йкселя

Процедура Загрузить() Экспорт
       ExcelФайл = ПолучитьCOMОбъект(мВыбФайл);
       Состояние("Обработка файла Microsoft Excel...");
       // Читаем данные первого листа книги
       Попытка
           ExcelЛист = ExcelФайл.Sheets(1);        
       Исключение
           Предупреждение("Файл открыт, закройте его!!!",,"ОШИБКА");
           Возврат;
       КонецПопытки;
       //
       RowCount     = 6500;
       ВсегоКолонок = 3;
       НомерПервойКолонки = 1;
       //
       СоздатьТЧДанных();
       //Обратаем всю область данных
           Область = ExcelЛист.Range(ExcelЛист.Cells(1,НомерПервойКолонки), ExcelЛист.Cells(RowCount,ВсегоКолонок));
           Данные = Область.Value.Выгрузить();        
       //Создание пустых строк по RowCount    
       Для Счетчик = 1 По RowCount Цикл
           НоваяСтрока = ТЧДанных.Добавить();
       КонецЦикла;
       
       //Заполнение Тч данными
       Для Счетчик = 0 По ВсегоКолонок-1 Цикл
           ТЧДанных.ЗагрузитьКолонку(Данные[Счетчик], "Колонка"+Счетчик);
       КонецЦикла;
       Создать();
       ExcelФайл.Close();
КонецПроцедуры

//------------------------------
Процедура СоздатьТЧДанных()
   
   // Создание описателя типов для таблицы значений
   //КЧ = Новый КвалификаторыЧисла(15,2);
   КС = Новый КвалификаторыСтроки(50);
   Массив = Новый Массив;
   Массив.Добавить(Тип("Строка"));
   ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
   //Массив.Очистить();
//Массив.Добавить(Тип("Число"));
   //ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
   
   // Очистить предыдущие значения
   ТЧДанных.Очистить();
   ТЧДанных.Колонки.Очистить();
   
   // Создать колонки табличного документа
   ТЧДанных.Колонки.Добавить("Колонка0",ОписаниеТиповС,"Х");
   ТЧДанных.Колонки.Добавить("Колонка1",ОписаниеТиповС,"ХХ");    
   ТЧДанных.Колонки.Добавить("Колонка2",ОписаниеТиповС,"ХХX");
   //ТЧДанных.Колонки.Добавить("Колонка3",ОписаниеТиповС,"ХXXX");
   //ТЧДанных.Колонки.Добавить("Колонка4",ОписаниеТиповС,"Норматив");
   //ТЧДанных.Колонки.Добавить("Колонка5",ОписаниеТиповС,"Х");
   //ТЧДанных.Колонки.Добавить("Колонка6",ОписаниеТиповС,"Кво");
       
КонецПроцедуры
4 Конфигуратор1с
 
20.08.12
23:14
Блин, то то неделю дожди льют - на мисте с ходу человеку помогают
5 Конфигуратор1с
 
20.08.12
23:14
(3)человек 7шник судя по секции
6 zladenuw
 
20.08.12
23:15
так примеры. или мне все с гугля копировать ? :)
7 Конфигуратор1с
 
20.08.12
23:16
(6)так человек гуглем не умеет
8 Злопчинский
 
20.08.12
23:18
(6) ой блин.. ща.. залезу в какой-нить свой отчет
9 Злопчинский
 
20.08.12
23:18
а лучше скачать демоконфигу по йокселю - там все есть
10 Злопчинский
 
20.08.12
23:20
//******************************************************************************
//
Процедура ЗагрузитьДанные()
   
   Если ПустоеЗначение(ВыбФайл) = 1
   Тогда
       Предупреждение("Не выбран файл с артикулами!!     ",10);
       Возврат;
   КонецЕсли;    

   Если ФС.СуществуетФайл(СокрЛП(ВыбФайл)) = 0
   Тогда
       Предупреждение("Указанный файл
       |<"+ВыбФайл+"> не существует!     ",30);
       Возврат;
   КонецЕсли;        
   
   ОчиститьОкноСообщений();
   
   //Сообщить(ТекущееВремя()+": чтение данных из файла: "+СокрЛП(ВыбФайл));
   
   ВыбТипФайла        = 2; //эксель всегда
   ВыбСжиматьКартинки    = 1;
   Таб = СоздатьОбъект ("ТабличныйДокумент");
       
   Попытка    Таб.Открыть (ВыбФайл, ВыбТипФайла, ВыбСжиматьКартинки);
   Исключение    
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;
   
   //Сообщить(ТекущееВремя()+": чтение артикулов из файла");
   Форма.ТЗЭксель.Видимость(0);

       ТЗ = СоздатьОбъект("ТаблицаЗначений");
       Конвертер = СоздатьОбъект("Йоксель.КонвертерВТаблицуЗначений");
       Конвертер.УстановитьДокумент(Таб);
       Конвертер.ОпределятьСтруктуру            = 0;
       Конвертер.ПроверятьСтруктуру            = 0;
       Конвертер.СтрокДляОпределенияСтруктуры    = 50;
       Попытка ТЗ = Конвертер.Загрузить();
       Исключение
           Сообщить("ОШИБКА: "+ОписаниеОшибки());    
           Возврат;
       КонецПопытки;
11 zladenuw
 
20.08.12
23:21
(10) круть. а именно        Конвертер = СоздатьОбъект("Йоксель.КонвертерВТаблицуЗначений");
Так и пишем "Йоксель"? :)
12 zladenuw
 
20.08.12
23:22
(9) а можно ссылочку
13 Злопчинский
 
20.08.12
23:27
(11) нет, блин, это я специально херню напис ал чтобы над тобой поглумиться
14 Злопчинский
 
20.08.12
23:27
15 Злопчинский
 
20.08.12
23:28
подключи ДЛЛre и код в (10) будет работать
16 Christina_
 
21.08.12
00:33
всем спасибо))
17 Злопчинский
 
21.08.12
00:33
(16) работает?!
18 zladenuw
 
21.08.12
00:49
(13) я уточнял. мало ли что.
19 Ёпрст
 
21.08.12
09:25
(0) эксель читай через АДО, дбф через фоксовый провайдер.. будет не быстро, а очень быстро. Объем роли не играет
Ошибка? Это не ошибка, это системная функция.