Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Аналог УложитьСписокОбъктов в дбф (число прочтений - 2587 )
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Аналог УложитьСписокОбъктов в дбф
15. Сентября 2006 :: 00:13
Печать  
Вероятно я не первый это спрашиваю, но всё таки...
Как нечто подобное реализоать на дбф базе? Очень без этого жить трудно.
Например, нужно выбрать ряд документов по людям, которые есть в одном из реквизитов многострочной части документа. Как это красивше реализовать? Строк в документе может быть много, от 300...
  
Наверх
ICQ  
IP записан
 
Uncle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Аналог УложитьСписокОбъктов в дбф
Ответ #1 - 15. Сентября 2006 :: 05:16
Печать  
Я делал сам, вот, если интересно

// ===============================
Функция глПолучитьИмяВремФайла() Экспорт
     ИмяФ = 0;
     Для Сч=1 По 100 Цикл
           ВремИмяФ = КаталогИБ()+"tmp"+Строка(Сч)+".dbf";
           Если ФС.СуществуетФайл(ВремИмяФ)=0 Тогда
                 ИмяФ = "tmp"+Строка(Сч);
                 Прервать;
           КонецЕсли;
     КонецЦикла;
     глСписокВременныхФайлов.ДобавитьЗначение(ИмяФ);
     Возврат ИмяФ;
КонецФункции


//Функция выгружает список объектов (СО) во внешний ДБФ-файл с заданным именем (ИмяФ)
//в каталог ИБ, в качестве СО может быть передан либо список значений, либо ТЗ, во
//втором случае необходимо передать номер или идентификатор колонки, которую надо выгрузить
//Если Дописать=1 тогда дописываем данные в переданный файл
Функция глУложитьСписокОбъектов(СО,ИмяФ=0,НомКол=0,БезГрупп=0,Дописать=0) Экспорт
     Если Дописать=1 Тогда
           Если ИмяФ=0 Тогда
                 Сообщить("Функция глУложитьСписокОбъектов","i");
                 Сообщить("Если флаг Дописать=1, должно передаваться имя существующего DBF файла!","!");
           КонецЕсли;
     Иначе
           Если ИмяФ=0 Тогда
                 ИмяФ = глПолучитьИмяВремФайла();
           КонецЕсли;
           Если ИмяФ=0 Тогда
                 Сообщить("Функция 'УложитьСписокОбъектов'","i");
                 Сообщить("Не удалось создать временный файл!","!");
                 Возврат 0;
           КонецЕсли;
     КонецЕсли;
     Уложено = 0;
     Попытка
           Ф = СоздатьОбъект("XBase");
           Если Дописать=1 Тогда
                 Ф.ОткрытьФайл(КаталогИБ()+ИмяФ);
                 Если Ф.Открыта()=0 Тогда
                       Сообщить("Не удалось открыть файл!","!");
                       Возврат 0;
                 КонецЕсли;
                 Если Ф.НомерПоля("Val")=0 Тогда
                       Сообщить("Файл неверной структуры!","!");
                       Возврат 0;
                 КонецЕсли;
           Иначе
                 Ф.ДобавитьПоле("Val","C",9,0);
                 Ф.СоздатьФайл(КаталогИБ()+ИмяФ);
           КонецЕсли;
           Ф.АвтоСохранение(1);
           Если ТипЗначенияСтр(СО)="СписокЗначений" Тогда
                 Для Сч=1 По СО.РазмерСписка() Цикл
                       Зн = СО.ПолучитьЗначение(Сч);
                       Если (БезГрупп=1)и(Зн.ЭтоГруппа()=1) Тогда
                             Продолжить;
                       КонецЕсли;
                       Уложено = Уложено + 1;
                       Ф.Добавить();
                       Ф.Val = глМета.ЗначениеВСтрокуБД(Зн.ТекущийЭлемент());
                 КонецЦикла;
           ИначеЕсли ТипЗначенияСтр(СО)="ТаблицаЗначений" Тогда
                 Для Сч=1 По СО.КоличествоСтрок() Цикл
                       Зн = СО.ПолучитьЗначение(Сч,НомКол);
                       Если (БезГрупп=1)и(Зн.ЭтоГруппа()=1) Тогда
                             Продолжить;
                       КонецЕсли;
                       Уложено = Уложено + 1;
                       Ф.Добавить();
                       Ф.Val = глМета.ЗначениеВСтрокуБД(Зн.ТекущийЭлемент());
                 КонецЦикла;
           КонецЕсли;
           Ф.ЗакрытьФайл();
     Исключение
     КонецПопытки;
     Возврат Уложено;
КонецФункции      // глУложитьСписокОбъектов
  
Наверх
 
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Аналог УложитьСписокОбъктов в дбф
Ответ #2 - 15. Сентября 2006 :: 06:02
Печать  
думаю затачу для себя..... спасибо
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Аналог УложитьСписокОбъктов в дбф
Ответ #3 - 15. Сентября 2006 :: 06:56
Печать  
А Прямой доступ через OLE DB не устраивает?
Там есть:
УложитьСписокОбъектов / PutObjectList сохраняет Объект (или список объектов, если передан список значений) во временную таблицу. Имя временной таблицы генерируется методом и возвращается через второй параметр (именем является GUID). Временная таблица имеет поле VAL CHAR(9) и служебное поле ISFOLDER NUMERIC(1,0).
  
Наверх
 
IP записан
 
Uncle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Аналог УложитьСписокОбъктов в дбф
Ответ #4 - 15. Сентября 2006 :: 11:21
Печать  
Когда я это делал ОЛИ еще не было
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать