Имя: Пароль:
1C
1С v8
Как из DBFзагрузить строки в табличную часть обработки?
0 Бестия
 
08.01.12
19:26
Подскажите пожалуйста новичку в 1с 8.2 как из DBF загрузить строки в табличную часть обработки?

&НаКлиенте
Процедура КнопкаВыполнитьНажатие(Кнопка)            
   хб = Новый XBase();
   ФайлДБФ = Новый Файл("D:\dBase.dbf");
   
   хб.ОткрытьФайл("D:\dBase.dbf");
   
   хб.Первая();
               
   Пока НЕ хб.ВКонце() Цикл
       Сообщить(СокрЛП(хб.NAMEKL));
       //ЗаполнитьТЧ();    
       Приход.Добавить(); //Приход - Это имя Табл.части
       ЭлементыФормы.Приход.Колонки.ИмяКлиента=СокрЛП(хб.NAMEKL);
               
       хб.Следующая();
       
   КонецЦикла;
   
   хб.ЗакрытьФайл();

КонецПроцедуры
1 Бестия
 
08.01.12
19:28
Получается только так: возможно можно как то по другому?
&НаКлиенте
Процедура КнопкаВыполнитьНажатие(Кнопка)            
   хб = Новый XBase();
   ФайлДБФ = Новый Файл("D:\dBase.dbf");
   
   хб.ОткрытьФайл("D:\dBase.dbf");
   
   хб.Первая();
               
   Пока НЕ хб.ВКонце() Цикл
       Сообщить(СокрЛП(хб.NAMEKL));
       
       Приход.Добавить().ИмяКлиента=СокрЛП(хб.NAMEKL);
               
       хб.Следующая();
       
   КонецЦикла;
   
   хб.ЗакрытьФайл();

КонецПроцедуры
2 Живой Ископаемый
 
08.01.12
19:36
НоваяСтрока =Приход.Добавить(); //Приход - Это имя Табл.части

       НоваяСтрока .ИмяКлиента=СокрЛП(хб.NAMEKL);
3 rema85
 
08.01.12
19:37
Вот Вам функция. Пользуйтесь на здоровья.

Функция   ЗагрузитьТаблицуЗначенийИзDBF(ТаблицаЗначений, ИмяФайла, Кодировка = "OEM", СтрокаНачало = Неопределено, СтрокаКонец = Неопределено) Экспорт
   
   ВыбФайл = Новый Файл(ИмяФайла);
   Если НЕ ВыбФайл.Существует() Тогда
       Сообщить("Файл """ + ИмяФайла + """ не существует!", СтатусСообщения.Внимание);
       Возврат Ложь;
   КонецЕсли;    
   
   XBase  = Новый XBase;
   
   Попытка
       XBase.ОткрытьФайл(ИмяФайла, , Истина);
       
          XBase.Кодировка = КодировкаXBase[Кодировка];
       
   Исключение
       Сообщить("Ошибка открытия файла """ + ИмяФайла + """!", СтатусСообщения.Внимание);
       Возврат Ложь;
   КонецПопытки;
   
   ТаблицаЗначений.Очистить();
   ТаблицаЗначений.Колонки.Очистить();
   
   ТекущаяКолонка = 0;
   Для Каждого Поле Из XBase.Поля Цикл
       ТекущаяКолонка = ТекущаяКолонка + 1;
       ТаблицаЗначений.Колонки.Добавить(Поле.Имя, тфТип(Поле.Тип), Поле.Имя, Поле.Длина);
   КонецЦикла;    
       
   Если ТипЗнч(СтрокаНачало) = Тип("Число")
       И СтрокаНачало > 0 Тогда
       Рез = XBase.Перейти(СтрокаНачало);    
   Иначе
       Рез = XBase.Первая();
   КонецЕсли;
   
   Пока Не XBase.ВКонце() Цикл
       лСтрокаТабЗначений = ТаблицаЗначений.Добавить();
       
       ТекущаяКолонка = 0;
       Для Каждого Поле Из XBase.Поля Цикл
           ТекущаяКолонка = ТекущаяКолонка + 1;
           лСтрокаТабЗначений[Поле.Имя] = XBase.ПолучитьЗначениеПоля(ТекущаяКолонка - 1);
       КонецЦикла;
       
       Если ТипЗнч(СтрокаКонец) = Тип("Число")
           И СтрокаКонец > 0
           И XBase.НомерЗаписи() >= СтрокаКонец Тогда
           Прервать;    
       КонецЕсли;
       XBase.Следующая();
       
       #Если Клиент Тогда
       ОбработкаПрерыванияПользователя();
       Состояние(XBase.НомерЗаписи());
       #КонецЕсли
   КонецЦикла;
   
   Возврат Истина;
   
КонецФункции
4 Бестия
 
08.01.12
19:37
(2) Спасибочки!!!
5 Бестия
 
08.01.12
19:38
(3) СПАСИБО ОГРОМНОЕ!!!
6 aleks-id
 
08.01.12
19:42
XBase - зло! запрос наше все.
7 Бестия
 
08.01.12
22:59
А подскажите как программно открыть файл DBF, чтобы не прописывать его, а выбирать любой?
8 Бестия
 
08.01.12
23:02
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.Фильтр = "*.xml|*.xml";
   Если Диалог.Выбрать() Тогда
       Объект.ИмяФайла = Диалог.ПолноеИмяФайла;
   КонецЕсли;

КонецПроцедуры

&НаКлиенте

Процедура ИмяФайлаОткрытие(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
   ЗапуститьПриложение(Объект.ИмяФайла);
КонецПроцедуры

{Обработка.ИмпортПриходов.Форма.Форма.Форма(29,29)}: Процедура не может возвращать значение
       Возврат Неопределено<<?>>; (Проверка: Толстый клиент (обычное приложение))
9 Бестия
 
09.01.12
00:01
Вопрос снимается, разобралась.
Программист всегда исправляет последнюю ошибку.