Переключение на Главную Страницу Страницы: 1 ... 40 41 [42] 43 44 ... 60 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" (число прочтений - 314264 )
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #615 - 11. Мая 2010 :: 06:35
Печать  
Согласен... функция "ПодготовитьСоединениеПоВТ" не универсальная и по идее ее надо делать через регулярные выражения, как и все остальное у тебя сделано (вот только с этими рег. выражениями я еще не работал, а потому мне общий смысл понятен, но ньюансы по составлению паттернов от меня ускользают... наверное надо где то хелп по ним искать Улыбка). Я эту функцию сделал для проверки моих запросов с соединениями по "=" - просто чтобы проверить работоспособность парсинга с 4мя и 5ю параметрами. Тем более там учитывается только для SQL.
Почему ты считаешь что "изменение количества параметров в ВТ = потеря обратной совместимости"? Веть у нас будет отрабатываться оба варианта кол-ва входных параметров - см. функцию "ПарсингВТРегистрОстатки".  Оба варианта проверил - парсинг проходит корректно - ВТ по остаткам работает.
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #616 - 11. Мая 2010 :: 06:40
Печать  
т.е. в данном случае для ВТ "РегистрОстатки" будет
Синтаксис: $РегистрОстатки.<ИмяРегистра>(КонецПериода, [Соединение,] Условие, Измерения, Ресурсы)
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #617 - 11. Мая 2010 :: 06:52
Печать  
Если и решу менять то параметр [Соединения] будет пятым, т.е. последним. А пока ни сроков, ни того, будет ли говорить не стану. Ибо не знаю когда смогу.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #618 - 11. Мая 2010 :: 09:29
Печать  
От людей не имеющих сюда доступ поступило обращение:
Ошибка при УложитьТаблицуЗначений если количество строк = 1.

Ну что ж... посмотримс.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #619 - 11. Мая 2010 :: 09:56
Печать  
Автору отдельное спасибо за оперативность!
По поводу сроков и прочего - я же не настаиваю и не требую чего либо... все мы люди занятые, а на все это требуется время и немало...  Улыбка Я лишь пытаюсь предложить пути расширения функционала и удобства использования данного класса... и только автору решать как быть дальше. Просто, имхо, было бы офигенно круто, если по парсингу текста запроса данный класс будет иметь совместимость с 1С++... но опять же - это только мое имхо.
Кстати, по поводу параметра "Соединения" - имеет ли смысл мне довести это дело "до конца" с последующим предоставлением исходников автору?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #620 - 11. Мая 2010 :: 10:04
Печать  
Я не имею ничего против того, чтобы кто-то предложил готовый код для реализации. Но тестирование на SQL или DBF должно быть проведено. Идеология должна соблюдаться, и синтаксис соответственно тоже.
И еще, по моему мнению соединения должны быть последними параметрами. Именно в таком случае обратная совместимость представляется мне лишь формальным признаком (т.е. элементарно проще старый код изменить).

А совместимость с 1С++... ее к сожалению не будет даже если параметр соединений появится в будущем. Есть же различия не только в реализации ВТ, но и в именовании параметров и таблиц.
Если только опять таки кто-то не сделает надстройку для "предварительного парсинга". Улыбка
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
NicSit
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 19. Апреля 2010
Re: Класс "ПрямойЗапрос"
Ответ #621 - 11. Мая 2010 :: 10:35
Печать  
Добрый день. Вопрос такой: в ВТ РегистрОстатки на дату ТА упорно выводит в остаток документ (измерение КредДокумент) проведенный этой датой. База DBF, версия sqlite 1023. Сам текст запроса:
Код
Выбрать все
	ЗапросОст = СоздатьОбъект("ПрямойЗапрос");

	ТекстЗапросаОст="
	|SELECT
	|Взаиморасчеты.Клиент as [Клиент $Справочник.Контрагенты],
	|Взаиморасчеты.КредДокумент as [КредДокумент $Документ],
	|Взаиморасчеты.ДолгОстаток as НачДолг
	|
	|FROM
	|$РегистрОстатки.ВзаиморасчетыПоставщиков(:ДН,((Клиент = :ВыбКлиент) и (Фирма = :ВыбФирма)),(Клиент,КредДокумент),(Долг)) as Взаиморасчеты
	|  
	|";      

	ЗапросОст.РежимОтладки = 3;

	ЗапросОст.УстановитьТекстовыйПараметр("ДН", ДатаНачала);
	ЗапросОст.УстановитьТекстовыйПараметр("ВыбФирма", глПустаяФирма);
	ЗапросОст.УстановитьТекстовыйПараметр("ВыбКлиент", ВыбКлиент);
	ТЗОст = ЗапросОст.Выполнить("ИндексированнаяТаблица",ТекстЗапросаОст);  

	ТЗОст.Показать();   



Не могу понять в чем косяк.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #622 - 11. Мая 2010 :: 10:57
Печать  
Покажи дату которую подставляешь, дату ТА и режим отладки = 1.

Подозреваю что косяк в классе.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
NicSit
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 19. Апреля 2010
Re: Класс "ПрямойЗапрос"
Ответ #623 - 11. Мая 2010 :: 11:48
Печать  
Вот даты
ПолучитьДатуТА() = 11.05.10
ДатаНачала = 11.05.10

Вот в отладке:

Код
Выбрать все
SELECT
Взаиморасчеты.Клиент as [Клиент $Справочник.Контрагенты],
Взаиморасчеты.КредДокумент as [КредДокумент $Документ],
Взаиморасчеты.ДолгОстаток as НачДолг

FROM
(
	SELECT
		Клиент
		,КредДокумент
		,SUM(ДолгОстаток) AS ДолгОстаток

	FROM
		(SELECT
			rg_933.Клиент AS Клиент
			,rg_933.КредДокумент AS КредДокумент
			,rg_933.Долг AS ДолгОстаток

		FROM
			[РегистрИтоги.ВзаиморасчетыПоставщиков] AS rg_933
		WHERE
			rg_933.PERIOD = '20100501'
		AND
			((rg_933.Клиент = '   5NI   ') AND (rg_933.Фирма = '     0   '))

		UNION ALL

		SELECT
			ra_933.Клиент
			,ra_933.КредДокумент
			,CASE WHEN ra_933.debkred = 0 THEN -ra_933.Долг ELSE ra_933.Долг END

		FROM
			[Журнал] AS docjourn
		LEFT JOIN [Регистр.ВзаиморасчетыПоставщиков] AS ra_933
		ON ra_933.IDDOC = docjourn.IDDOC
		WHERE (docjourn.idx_DATE_TIME_IDDOC >= '20100511     0     0   ')
		AND (docjourn.idx_DATE_TIME_IDDOC < '20100511     0     0   ')
		AND
			((ra_933.Клиент = '   5NI   ') AND (ra_933.Фирма = '     0   '))
		) AS vt_ra_933
	GROUP BY
		Клиент
		,КредДокумент
	HAVING (SUM(ДолгОстаток) <> 0)

) as Взаиморасчеты 

  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #624 - 11. Мая 2010 :: 12:02
Печать  
Смотрю, изучаю, делаю выводы...

Косяк есть подтверждаю.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
NicSit
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 19. Апреля 2010
Re: Класс "ПрямойЗапрос"
Ответ #625 - 11. Мая 2010 :: 12:12
Печать  
В РегистрОстаткиОбороты возможно тоже. По крайней мере в живом отчете, в котором заметили непонятное, РегистрОстаткиОбороты использован.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #626 - 11. Мая 2010 :: 12:33
Печать  
Ошибка в ОстаткиОбороты - следствие ошибки в ВТ Остатки. В общем проверь, скажи что да как:

1.06.006 от 11.05.10 г.
- Исправлена ошибка в расчетах виртуальной таблицы РегистрОстатки по регистрам с типом «Остатки» на начало даты ТА.

Файл в топе и тут на всякий случай.
  

1Cv7_query_004.rar ( 278 KB | Загрузки )

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
NicSit
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 19. Апреля 2010
Re: Класс "ПрямойЗапрос"
Ответ #627 - 12. Мая 2010 :: 03:53
Печать  
Проверил. Вроде бы все нормально.
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #628 - 12. Мая 2010 :: 13:27
Печать  
Выкладываю подправленную версию ПрямойЗапрос (подправленная версия 1.06.006 от 11.05.10 г.). В ВТ (Остатки/Обороты/ОстаткиОбороты) добавлен последний (мнение автора для меня в данном случае приоритетно, хотя имхо - лучше сделать по входым параметрам совместимость с 1С++  Подмигивание) необязательный (т.о. не надо модифицировать старые запросы) параметр "Соединение".
Все проверено для SQL (для DBF тоже должно работать).
Идеология соблюдается и синтаксис соответственно тоже. Вообще старался максимально минимизировать добавленный код.
Блоки "//zar begin/end" оставленны только для удобства определения нового кода для автора - в дальнейшем естественно их надо убрать.
Выражаю надежду что данный код автору пригодится Улыбка
  

_____________001.ert ( 110 KB | Загрузки )
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #629 - 12. Мая 2010 :: 14:46
Печать  
Чтобы понять о чем я пишу примем что "минимальное количество параметров" - это как есть, "Максимальное количество" - это как есть + соединения.

И так... ключевым изменением в данной версии является то, что парсинг проходит в два этапа - сначала минимум, потом максимум. Главная проблема как мне видится здесь в том, от чего мы бежали несколько страниц назад в данной теме. Т.е. скорость парсинга.
Версия 1.06 то была именно с оптимизированным парсингом, а тут мы опять можем вернутся не совсем конечно к 1.05, а скорее к 1.05 с половиной.

Все же остальное - это формальность чистой воды. zar, ты абсолютно верно подметил что парсинг вполне реален через существующие методы. Это касается не только регистров, но и бухгалтерских таблиц.
Кстати для того чтобы ПрямойЗапрос приравнялся к ODBC вполне реально просто сделать публичный флаг. Который бы в начале всех методов присвоение параметров подменял местами. Это было бы самым простым решением. Парсинг не надо было бы менять.

Соединениям быть. В будущем, каком-то. Когда основной функционал будет оттестирован и без ошибок. Чтобы не поддержиать две версии.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 40 41 [42] 43 44 ... 60
ОтправитьПечать