Переключение на Главную Страницу Страницы: 1 ... 27 28 [29] 30 31 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 245572 )
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #420 - 03. Октября 2012 :: 12:50
Печать  
Dolly_EV писал(а) 03. Октября 2012 :: 11:34:
Код
Выбрать все
Если глЭтоSQL=1	Тогда
	лЗначВидДок=глМетаДата.ИДДокумента("РасходнаяНакладная");
Иначе
	,36);
КонецЕсли;
Запрос.УстановитьТекстовыйПараметр("лВидДок",лЗначВидДок);
 



Все Ок, но как только пробую фильтровать ВидДок через вхождение в #СписВидДок с аналогичным заполнением (глЭтоSQL) все ломается и на СКЛ и на ДБФ Печаль

А чем встроенный параметр :ВидДокумента.РасходнаяНакладная не угодил? Даже если список видов заранее не определен, можно собрать строку запроса типа
Код
Выбрать все
ГДЕ РегПарт.ВидДокумента в (:ВидДокумента.А, :ВидДокумента.Б, :ВидДокумента.Ц) 

без использования внешнего параметра и укладывания списков.
  
Наверх
GTalkICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #421 - 03. Октября 2012 :: 13:34
Печать  
Kalen писал(а) 03. Октября 2012 :: 12:50:
[quote author=Dolly_EV link=1285352210/405#419 date=1349264099]
А чем встроенный параметр :ВидДокумента.РасходнаяНакладная не угодил? Даже если список видов заранее не определен, можно собрать строку запроса типа
Код
Выбрать все
ГДЕ РегПарт.ВидДокумента в (:ВидДокумента.А, :ВидДокумента.Б, :ВидДокумента.Ц) 

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


Спасибо! Заарбайтен!! но все же чисто теоретически - почему вариант со уложенным списком не работает?

Вот так нарисовалось:
Код
Выбрать все
...
|ГДЕ
|  (РегПарт.ВидДокумента В (лСписВидДок))";
СтрСписДок="";
Для сч = 1 По СписДокНадо.РазмерСписка() Цикл
	СтрСписДок=СтрСписДок+":ВидДокумента."+СписДокНадо.ПолучитьЗначение(сч)+?(сч = СписДокНадо.РазмерСписка(),"",", ");
КонецЦикла;
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"лСписВидДок",СтрСписДок);
 

« Последняя редакция: 04. Октября 2012 :: 00:36 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #422 - 04. Октября 2012 :: 14:44
Печать  
Нужно тупо

iddocdef in ($ВидДокумента36.Реализация,$ВидДокумента36.Поступление .....)

  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #423 - 05. Октября 2012 :: 01:13
Печать  
Eprst писал(а) 04. Октября 2012 :: 14:44:
Нужно тупо

iddocdef in ($ВидДокумента36.Реализация,$ВидДокумента36.Поступление .....)



Угу, так и сделал, с поправкой на класс
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #424 - 08. Октября 2012 :: 10:54
Печать  
А может поможет периодичность "Документ"?
  
Наверх
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #425 - 14. Октября 2012 :: 12:26
Печать  
Автору вопрос: Александр, а возможно в классе сделать "обратный" парсер? чтобы например, текст запроса под SQL( ODBCRecordSet) парсился в текст на языке "ПрямогоЗапроса"?
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #426 - 15. Октября 2012 :: 07:46
Печать  
Dolly_EV писал(а) 14. Октября 2012 :: 12:26:
Автору вопрос: Александр, а возможно в классе сделать "обратный" парсер? чтобы например, текст запроса под SQL( ODBCRecordSet) парсился в текст на языке "ПрямогоЗапроса"?

Примерно зная трудоемкость процесса, я бы на Вашем месте на это не рассчитывал. Например, можете посмотреть, в какой SQL запрос разворачивается запрос к ВТ РегистрОстатки. И, затем, попробуйте придумать "обратную" свертку для этого многострочного запроса. При этом, достаточно изменить в SQL-запросе значение одного из параметров/полей и SQL в Прямой запрос уже не преобразуется.
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #427 - 15. Октября 2012 :: 08:03
Печать  
Salimbek писал(а) 15. Октября 2012 :: 07:46:
Примерно зная трудоемкость процесса, ...


Да я представляю, это так, мечта))) просто начал использовать qryConsole, а запросы пишу через "ПрямойЗапрос" Печаль

Цитата:
в какой SQL запрос разворачивается запрос к ВТ РегистрОстатки
имелся ввиду парсинг не из чистого T-SQL, а из 1CPP
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #428 - 15. Октября 2012 :: 08:04
Печать  
Dolly_EV, если бы я настолько с парсером копался, то класс прямой запрос был бы полным аналогом 8-й версии. И то... Salimbek прав, ВТ свернуть обратно почти невозможно, ну или крайне сложно.
Можно конечно сделать парсер полей из внутренних идентификаторов в имена реквизитов метаданных, но свернуть обратно ВТ нет. Но и то, в конце концов получится не очень удобный вид.
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #429 - 15. Октября 2012 :: 11:06
Печать  
vandalsvq писал(а) 15. Октября 2012 :: 08:04:
.. класс прямой запрос был бы полным аналогом 8-й версии...
Да вобщем немного осталось  Подмигивание
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #430 - 15. Октября 2012 :: 12:08
Печать  
Dolly_EV, в свое время думал немного попробовать заняться консолью чтобы в синтаксис класса она тоже умела собирать. Но в итоге руки не добрались. Поговори с Иваном и если что я думаю он не пожадничает, разрешит внести изменения. Там синтаксис то не сильно отличается.

В смысле сам чтобы ты сделал Улыбка
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #431 - 16. Октября 2012 :: 02:53
Печать  
vandalsvq писал(а) 15. Октября 2012 :: 12:08:
В смысле сам чтобы ты сделал Улыбка


Сам не осилю  Печаль вобщем-то если суть понимать (чего я надеюсь достиг))) - консоль нужна только чтобы "рыбу" запроса построить, да синтаксис проверить
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #432 - 16. Октября 2012 :: 11:20
Печать  
Dolly_EV писал(а) 15. Октября 2012 :: 11:06:
vandalsvq писал(а) 15. Октября 2012 :: 08:04:
.. класс прямой запрос был бы полным аналогом 8-й версии...
Да вобщем немного осталось  Подмигивание


Поверь очень много. Класс - это обертка, а в 8-ке полноценный разбор запросов. Чтобы быть "полноценным" аналогом, надо делать полный разбор запросов + анализ его по метаданным + сбор запроса на основании данных. А класс делает только небольшие точечные "разборы" и "анализы" Улыбка
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #433 - 18. Октября 2012 :: 08:05
Печать  
Вот такой запрос
Код
Выбрать все
		|ВЫБРАТЬ
		|  $СпрАлк.ВидПродукции КАК [ВидАП $Справочник.алкВидыПродукции],
		|  РегАлкОО.Склад КАК [Склад $Справочник.МестаХранения],
		|  РегАлкОО.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
		|  МАКСИМУМ(ВЫБОР КОГДА($СпрАлк.Производитель<>:ПустойИД) ТОГДА $СпрАлк.Производитель ИНАЧЕ $СпрАлк.Импортер КОНЕЦ) КАК [ПроизвИмп $Справочник.Контрагенты],
		|  РегАлкОО.ТекущийДокумент КАК [ТекДок $Документ],
		|  МАКСИМУМ(РегАлкОО.ВидДокумента) КАК [ТекДок_вид $ВидДокумента],
...
		|  СУММА(РегАлкОО.КоличествоРасход*1/1) КАК П22,
		|  МАКСИМУМ($РегАлк.КодОперации) КАК [КодОпер $Перечисление.КодыОпераций],
		|  МАКСИМУМ($РегАлк.ЛицензияНаша) КАК [ЛицНаша $Справочник.алкСобственныеЛицензии],
		|  МАКСИМУМ($РегАлк.Лицензия) КАК [ЛицКонтр $Справочник.Лицензии]
		| ИЗ
		| $РегистрОбороты.ДвиженияАлкоголя(:лНачДата,:лКонДата~,ДОКУМЕНТ,
		|								(Фирма=:лФирма И 1=1 И 4=4),
		|								(Склад,Номенклатура),
		|								(Количество)) КАК РегАлкОО
		|ЛЕВОЕ СОЕДИНЕНИЕ
		| Регистр.ДвиженияАлкоголя КАК РегАлк $nolock
		|ПО
		| РегАлкОО.ТекущийДокумент=$РегАлк.ТекущийДокумент
		|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		| Справочник.АлкНоменклатура КАК СпрАлк $nolock
		|ПО
		| РегАлкОО.Номенклатура=$СпрАлк.Товар
		|ГДЕ
		|  (2=2 И 6=6)
		|СГРУППИРОВАТЬ
		| нт
		|ИМЕЮЩИЕ
		| 5=5
		|УПОРЯДОЧИТЬ
		| нт"; 



Вот если выкинуть из него ЛЕВОЕ СОЕДИНЕНИЕ с РегАлк и
           |  МАКСИМУМ($РегАлк.КодОперации) КАК [КодОпер $Перечисление.КодыОпераций],
           |  МАКСИМУМ($РегАлк.ЛицензияНаша) КАК [ЛицНаша $Справочник.алкСобственныеЛицензии],
           |  МАКСИМУМ($РегАлк.Лицензия) КАК [ЛицКонтр $Справочник.Лицензии]
то все Ок,
а в таком виде в П22 = РегАлкОО.КоличествоРасход*Количество строк в ТекДок. ПОЧЕМУ? Озадачен
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #434 - 18. Октября 2012 :: 08:11
Печать  
Ну все ведь просто. ВТ Обороты возвращает сгруппированные обороты, т.е. 1 документ = вся сумма по нему. А соединение происходит с таблицей регистра, где на один документ хранится столько записей, сколько у него строк.
Соответственно в результате соединения ты получаешь таблицу у которой сумма свернутого оборота, повторяется столько раз, сколько движений у тебя в документе, и в результате твоей группировки суммируется и увеличивается кратно.
В общем тебе надо перед соединением либо из таблицы движений достать документы со значениями МАКСИМУМ чтобы была одна строка на документ, либо все собирать по этой таблице.
ВТ  с детализацией по строке не работает. В принципе не самая нужная ВТ.

Приблизительно так:

Код
Выбрать все
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РегАлк.ТекущийДокумент, МАКСИМУМ(РегАлк.КодОперации) КАК Код ИЗ Регистр.Алк КАК РегАлк) КАК РегАлк
ПО ВТОбороты.ТекущийДокумент = РегАлк.ТекущийДокумент 



и все будет ОК. Должно быть ОК.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 27 28 [29] 30 31 ... 51
ОтправитьПечать