Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Модификаторы :Парам~  == ODBC vs ПрямойЗапрос (число прочтений - 1496 )
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Модификаторы :Парам~  == ODBC vs ПрямойЗапрос
06. Июня 2014 :: 23:13
Печать  
Намучался я с модификаторами параметров. Набил шишек.
Хочу поделится.

Коротко:

Описание модификаторов ODBC:      
http://1cpp.ru/docum/icpp/html/ODBC.html#id42            

Для прямого запроса - в документации (word):      
http://www.1cpp.ru/forum/YaBB.pl?num=1273512019      

Согласно описаний - модификаторы параметров у обоих объектов должны совпадать, но не совпадают.                  
1) ODBC : для модификатора (~~) : нужно исправить документацию:
   для всех агрегатных всегда char(23) формата [Type(2)][KIND36(4)][ID(9)][Space(8)] = т.е. как для ""*"".
   Для скалярных - не применим (для скалярных это внутреннее значение можно получить только ч/з ""*"")
   Объект вполне устраивает. Ошибка в доке.
2) ODBC : для модификатора (~~~) : нужно исправить документацию:
   вид объекта int/char(4) возвращает только для :Счет,Справочник,Документ.
   Для остальных не применим. Ошибка в доке.
3) Прямой запрос: в документации описано поведение
в точности как в документации ODBC (с теми же ошибками документации !).
Но это - не правда. В частности, отрабатывают по разному:

:Число*
:ПустаяСтрока*
:ПустаяСтрока~
:НеПустаяСтрока*
:ПустаяДата*
:ПустаяДата (здесь понятно почему, возможно нужно оставить '1753.01.01' как в ПрямомЗапросе)
:ПустаяДата~
:НеПустаяДата*
:НеПустаяДата~~
:Справочник~~~
:Документ~~~
:Документ~~~~
:Счет~~~

Очень подробно - во вложении:

1) таблица ексель - с расхождениями результатов тестирования
   (в цвете и с поянениями)

2) собственно внешний отчет (UnitTest так сказать)
   который эти расхождения показывает
   Кто хочет - запустите у себя и все увидите.

ВЫВОД:
- в объекте ODBCREcordSet - нужно поправить документацию.
- в классе ПрямойЗапрос - привести всё к виду ODBC (если возможно)

ЗЫ. Я себе сделал "надстройку" над прямым запросом (наследник)
в котором переопределил некоторые методы + добавил свои для удобства.

ЗЫ.ЗЫ, Не знал куда запостить. Запостил сюда ("Напоминалка для всех" так сказать)
+ в обсуждения прямого запроса - оставил сообщение.
Модераторов прошу меня простить. Улыбка

ЗЫ.ЗЫ.ЗЫ. Вложение обновлено 2014-06-09
« Последняя редакция: 09. Июня 2014 :: 10:05 - kos »  

Modifikatory_ODBC_vs_PrjamoiZapros_001.7z ( 12 KB | Загрузки )
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Модификаторы :Парам~  == ODBC vs ПрямойЗапрос
Ответ #1 - 09. Июня 2014 :: 09:49
Печать  
Для класса ПрямойЗапрос нашел простое решение:

для версии SQL (ЭтоSQL=1) нужно отказаться от "парсинга" текстовых параметров средставми класса и оставить всё объекту ODBCRecordSet
а именно:

в приватной процедуре класса ПарсингВнутреннихИдентификаторов
вместо (кусок модуля)

Код
Выбрать все
ИначеЕсли ПодготовкаШаблона = 1 Тогда
	Продолжить;
Иначе
	.....
 



нужно сделать так:

Код
Выбрать все
ИначеЕсли ПодготовкаШаблона = 1 Тогда
	Продолжить;
ИначеЕсли ЭтоSQL = 1 Тогда
	//оставляем право ODBCRecordSet самостоятельно
	//разобраться с текстовыми параметрами
	Продолжить;
Иначе
	.....
 



Получим двойной выигрыш:
+ корректность обработки модификаторов для текстовых параметров
+ скорость "парсинга" для SQL.

ЗЫ.ЗЫ. C SQLite не разбирался, но предполагаю: значения модификаторов
там тоже нужно привести к тому же варианту - что и для SQL.....

Уважаемый vandalsvq

Можно ли ждать такое исправление в классе ?
Ведь делов-то: добавить одну строчку кода.
Зато - сразу 2 "плюса": корректность + скорость ?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать