Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 6 ОтправитьПечать
Очень популярная тема (более 25 ответов) ТП: ПоставщикДанныхИндексированнаяТаблица (число прочтений - 24442 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #30 - 19. Декабря 2006 :: 07:08
Печать  
DmitrO писал(а) 19. Декабря 2006 :: 05:53:
Имхо если уж делать, то вместо отдельного объекта ПоставщикДанныхИндексированнаяТаблица нужно чтобы ИндексированнаяТаблица была сама поставщиком данных для ТП

Если это возможно, то это, по-моему, лучший вариант!
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #31 - 19. Декабря 2006 :: 07:25
Печать  
artbear писал(а) 19. Декабря 2006 :: 06:45:
Да, по ИТЗ сделать подобное можно.
А вот по ТЗ как? что-то не пойму, объясни подробнее.
Все-таки ТЗ ведь встроенный объект 1С и мы не можем добавить к нему методы С++, необходимые для того, чтобы он мог выступать в качестве провайдера ТП.

Ну как-как, пишешь новый класс, наследуешься от класса-реализации ТЗ и от класса-интерфейса поставщика данных ТП, реализуешь в этом классе интерфейсы поставщика данных.
При загрузке 1с++, разрегистрируй родной класс ТЗ и зарегистрируй свой.
Это самое простое решение, которое идеально и к нему надо стремиться.
Однако, все зависит от того как написана сама 1С, т.к. исходников у нас нет и поправить мы их не можем, могут быть проблемы в родном коде определяющем рантаймкласс объекта, в этом случае решением может быть класс-прокладка, который можно реализовать внутренне.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #32 - 19. Декабря 2006 :: 07:50
Печать  
DmitrO писал(а) 19. Декабря 2006 :: 07:25:
При загрузке 1с++, разрегистрируй родной класс ТЗ и зарегистрируй свой.
Это самое простое решение, которое идеально и к нему надо стремиться.

Ага, про разрегистрацию очень интересный вариант.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #33 - 19. Декабря 2006 :: 09:14
Печать  
"Концепция" не пострадает?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #34 - 19. Декабря 2006 :: 10:11
Печать  
По поводу задачи отображения в ТП данных dbf формата ИБ.
Использование VFP провайдера действительно чревато проблемами блокирования. Грязное чтение реализовать весьма сложно. Если просто отменить блокирование, тогда можно запросто получить при чтении неформатные данные в файле, т.к. сама 1С в это время их пишет.
Имхо лучше направить усилия в направлении написания специального поставщика данных, не SQL. В котором таблицы-источники данных, их связи и поля, будут добавляться методами объекта поставщика данных, принимающими объекты метаданных или имена объектов метаданных. Т.о. реализация такого поставщика может быть выполнена через родные функции доступа к dbf ИБ, а следовательно и через родные дескрипторы файлов. Т.е. будет работать и в монопольном режиме.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #35 - 19. Декабря 2006 :: 10:19
Печать  
И отказаться от sql-запросов, и работать как с XBase?
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #36 - 19. Декабря 2006 :: 10:23
Печать  
DmitrO писал(а) 19. Декабря 2006 :: 10:11:
По поводу задачи отображения в ТП данных dbf формата ИБ.
Использование VFP провайдера действительно чревато проблемами блокирования. Грязное чтение реализовать весьма сложно. Если просто отменить блокирование, тогда можно запросто получить при чтении неформатные данные в файле, т.к. сама 1С в это время их пишет.

ИМХО, ЗАПРОСТО, получить не получится Улыбка ИМХО, наоборот, крайне маловероятно. Например, если запрос использует индексы, то незавершенная операция записи в DBF-файл просто не затронется индексами и никак не сможет на что-либо повлиять. В этом случае проблема может возникнуть при незавершенной записи в индексы, но тут уже все зависит от того, как меняются индексы. Если просто в конец дописываются данные, а потом модифицируются некоторые записи, то вряд ли здесь будут проблемы. Ну и, в конце концов, 1С же работает (читает таблицы в процессе модификации) Улыбка

DmitrO писал(а) 19. Декабря 2006 :: 10:11:
Имхо лучше направить усилия в направлении написания специального поставщика данных, не SQL. В котором таблицы-источники данных, их связи и поля, будут добавляться методами объекта поставщика данных, принимающими объекты метаданных или имена объектов метаданных. Т.о. реализация такого поставщика может быть выполнена через родные функции доступа к dbf ИБ, а следовательно и через родные дескрипторы файлов. Т.е. будет работать и в монопольном режиме.

ИМХО, сложноватая задача для ДБФ, не стоит ДБФ таких усилий Улыбка И действительно, как намекает spock, это сильно походит на реализацию OLE DB самопальными методами. Наверняка получится криво и не удобно по сравнению с OLE DB. Либо понадобится вложить столько работы, что проще будет базу перевести на SQL.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #37 - 19. Декабря 2006 :: 10:24
Печать  
Да, лучший вариант работы с XBase - это XBase. Тем более, что в задаче именно поставщика данных ТП сам SQL используется слабо, да и глубже не нужно.
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #38 - 19. Декабря 2006 :: 10:26
Печать  
Хм, немного туплю. Речь ведь идет только о провайдере для ТП Улыбка А я тут на прямых запросах заклинился Улыбка Да, возможно, для поставщика ТП лучше будет XBase-подобные методы использовать
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #39 - 19. Декабря 2006 :: 10:38
Печать  
Знаете, мне конечно нравится идея поставщика для dbf через xbase и все такое...
Но экономическую целесообразность я бы поставил под сомнение.

Ну где оно нужно, это ТП на дбф базах.
И почему там нельзя применить SQL? Цена вопроса коробки для SQL, я забыл уже сколько? Пару тысяч?

Я тут машину не могу продать - времени нет, невыгодно.
Стоит себе во дворе, к весне еще и подорожает.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #40 - 19. Декабря 2006 :: 10:39
Печать  
Кстати, может вообще не заморачиваться на создание поставщика для OLE DB? А сделать вместо него некий "УниверсальныйПоставщикТП". Он будет использовать некоторый класс со специальными методами по выборке данных. Тогда используя универсальный поставщик можно хоть поставщика для OLE DB сделать, хоть для чего угодно другого Улыбка
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #41 - 20. Декабря 2006 :: 05:28
Печать  
На свежую голову по поводу методов XBase. Эта идея мне нравится все меньше и меньше.
1) Описание "таблиц, связей и полей" уж очень похоже на свой язык запросов. Соответственно, вопрос: зачем делать свой язык запросов, когда есть SQL и отличный движок от OLE DB? Свой язык что, будет лучше? Очень в этом сомневаюсь.

2) Чтобы заюзать стандартные функции для работы с файлами от 1С? Но ведь прямыми запросами мы от этого стараемся отойти, потому что стандартные методы 1С медленные и производительность с ними сильно деградирует с ростом объема данных.

3) Неформатные данные? Очень сомневаюсь. Если в конец ДБФ дописать мусор в количестве кратном размеру записи, то не факт, что это сможет нарушить работу с файлом ДБФ. Проблемы могут быть только в случае порчи заголовка, но этого не произойдет, потому что произойти может только в случае сильных глюков в 1С.

4) Использование стандартных функций 1С разве решит проблему "неформатных данных"? Вряд ли.

В общем, ИМХО, поставщик для OLE DB был бы крайне полезной, быстрой и удобной вещью. Причем сделать его можно достаточно быстро, по сравнению с рукопашной реализацией работы с ДБФ.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #42 - 20. Декабря 2006 :: 10:08
Печать  
Потестировал еще немного OLE DB. Обнаружил грустную вещь: крайне криво работает "SELECT TOP N". (Может, конечно, я запросы неправильно пишу). Возникает впечатление, что сначала делается полная выборка как при отсутствии "TOP N", а затем из этой выборки вытаскиваются первые N записей. Обнаружил это из-за того, что в некоторых случаях поиск по наименованию происходит крайне быстро, а в некоторых наоборот крайне медленно. Причем, от расположения записи в файле зависимости нет, т.е. индексы используются.

Итак, тестовый запрос:
Код
Выбрать все
		|SELECT TOP 1
		|	Товары.Descr AS Наименование
		|FROM
		|	$Справочник.Товары AS Товары
		|ORDER BY Товары.ID
 


Этот запрос должен выполнять мгновенно, но тем не менее сильно тормозит на большом справочнике.

Поэтому получается, что текущий способ организации поставщика ODBC не подходит для создания по аналогии поставщика OLE DB. Думаю, что поставщик ODBC для VFP также не подходит для использования в ТП (но это надо еще проверить).

Думаю, что для поставщика OLE DB нужно использовать для доступа к данным 1С методы XBase (SEEK, в частности). Я считаю, что все равно надо использовать OLE DB, т.к. мало простой навигации по таблице и нужно еще выполнять некоторые запросы к БД. Например, при навигации по справочнику товаров можно выводить остатки. Так вот поставщик данных мог бы вытащить из БД некоторый набор элементов справочника, а потом для них всех скопом выполнить один запрос к таблице остатков. Аналогично для таблицы журнала документов - можно скопом вытащить наименования все контрагентов для отображаемых документов. А для подобных вещей лучше использовать возможности OLE DB. Самостоятельная реализация наверняка будет хромать.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #43 - 20. Декабря 2006 :: 10:13
Печать  
Забавно, а я как раз ночью подумал, что простой XBASE провайдер для системных (и не только) DBF на самом деле - неплохо.
Экономика, конечно, никакая. Но куда применить можно, я уже придумал. Большой прогресс. Улыбка


+
Да, я чуть расшифрую:
ключевое слово для меня - простой.

Это лично моя заморочка - нежелание и отсутствие времени.
Если кто-то лишен таких недостатков - пусть не слушает меня и делает хоть какой сложный Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: ТП: ПоставщикДанныхИндексированнаяТаблица
Ответ #44 - 20. Декабря 2006 :: 10:27
Печать  
Дело в том, что если все нужные поля выбирать методами XBase, то будет наоборот сложно в том случае, когда мы выбираем не только поля одной таблицы, но должны еще джойнить другие.

А проще будет, когда используем такой алгоритм:
1) В поставщике устанавливается базовая таблица и ключевое поле.

2) Для навигации по таблице используем методы XBase. При этом при подгрузке новой порции данных выбирается список ключей.

3)Далее этот список ключей используется для выполнения SQL-запроса методом OLE DB. Этот SQL-запрос устанавливается в поставщике при инициализации. Запрос выполняется и дальше с результатами происходит все то же самое, что сейчас происходит в ODBC-провайдере.

Получается, что отличия от SQL-провайдера минимальны - только добавлена установка базовой таблицы и XBase-навигация и выборка ключевых полей. Остальное точно такое же. Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 6
ОтправитьПечать