Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 249533 )
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
24. Сентября 2010 :: 18:16
Печать  
В данной теме обсуждается КОП "ПрямойЗапрос".

Что он может:
- выполнение запроса на языке подобном 1Cv8
- выполнение запроса независимо от формата БД (DBF - 1sqlite, SQL - ODBCRecordset)
- наличие виртуальных таблиц, вроде Остатки, Обороты и ОстаткиОбороты по БухИтогам и Регистрам

Что он не умеет:
- не отличает возможные реквизиты объектов метаданных совпадающих с предопределенными реквизитами этих объектов (например: Код, Наименование в справочнике и т.п.)

К классу приложена подробная документация.

Пы.сы. спасибо всем у кого я натырил идей:
тов. berezdetsky за AccountsRecordset
тов. Steban за шаблон параметра
тов. JohnyDeath за ВТ ПодчиненныеДокументы и прочее
тов. Orefkov за 1sqlite
тов. Dmitro за практические советы
всем разработчикам 1С++ за 1С++
ну и всем остальным кто словом и делом помогал.  Подмигивание

Обновления брать тут

Версии внешних компонент рекомендованные к использованию:
1. 1C++
2. 1sqlite. Версия 1.0.2.3 и выше.


Часть № 1: - тут

Поскольку иногда ветки имеют свойство ломаться, настоятельно рекомендую обсуждение продолжать вести в этой теме. Все вопросы оставшиеся при переходе прошу продублировать сюда.
« Последняя редакция: 11. Марта 2012 :: 19:41 - vandalsvq »  

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


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

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

Предполагается реализовать функционал таким образом чтобы можно было дополнять таблицу периодами входящими в указанные границы, но не имеющими оборота. Для периодичности Документ и Период ДОПОЛНЕНИЕ будет проигнорировано.

Возникает следующий вопрос: суть в том что как должна дополняться таблица? Например есть период n, у которого есть обороты по пересечению измерений 1 и 2. У периода n+1 оборотов по данным пересечениям нет.
Так вот таблица должна дополняться только датой (и пустыми значениями измерений) или иметь дату и весь набор пересечений со значением оборотов = 0?

Т.е. есть таблица
01.01.10 | КонтрА | ОснДог | 100
01.01.10 | КонтрБ | ОснДог | 100
Обороты за 02.01.10 отсутствуют.

Дополненная таблица №1:
01.01.10 | КонтрА | ОснДог | 100
01.01.10 | КонтрБ | ОснДог | 100
02.01.10 |            |             | 0

Дополненная таблица №2:
01.01.10 | КонтрА | ОснДог | 100
01.01.10 | КонтрБ | ОснДог | 100
02.01.10 | КонтрА | ОснДог | 0
02.01.10 | КонтрБ | ОснДог | 0

Что-то мне подсказывает что будет выбран вариант №2.
  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #2 - 24. Сентября 2010 :: 18:44
Печать  
Однозначно вариант 2
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #3 - 24. Сентября 2010 :: 18:48
Печать  
Цитата:
Что-то мне подсказывает что будет выбран вариант №2.
угу.
В моей голове почему то результат представляется так: Измерения, Период, Ресурсы.
А следовательно:
КонтрА | 01.01.10 | 100
КонтрА | 02.01.10 | 0
КонтрА | 03.01.10 | 0
КонтрА | 04.01.10 | 100
КонтрА | 05.01.10 | 0
КонтрБ | 01.01.10 | 0
КонтрБ | 02.01.10 | 200
КонтрБ | 03.01.10 | 0
КонтрБ | 04.01.10 | 200
КонтрБ | 05.01.10 | 0
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #4 - 26. Сентября 2010 :: 11:41
Печать  
В общем я рассчитываю на бутылку от всех кто домогался до меня по поводу данных доработок  Смех.
И так встречайте первую бету:

1.07.018 от 26.09.10 г.
- Исправлена ошибка, при которой не правильно подготавливались ВТ если в параметре «Измерения» присутствуют пробелы.
- Изменен параметр «Периодичность» ВТ «РегистрОстаткиОбороты. Добавлена возмозможность указывать необходимость дополнения таблицы всеми периодами независимо от наличия и отсутствия остатков и/или движений.

Как пример текст запроса с дополнением:
Код
Выбрать все
"select *
|from $РегистрОстаткиОбороты.ТМЦ(
|		:НачПериода,
|		:КонПериода,
|		ДЕНЬ ДОПОЛНЕНИЕ,
|		,
|		,
|		(Контрагент,Договор),
|		(Количество)) as ОстаткиОбороты
|order by
|	Контрагент, Договор, НачалоПериода" 


Периодичность: День, Неделя, Месяц, Квартал, Год.

ПЫ.СЫ. Большое спасибо тов. leshik-у за участие в процессе появления данного функционала.
  

1Cv7_query_009.rar ( 219 KB | Загрузки )

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #5 - 26. Сентября 2010 :: 12:11
Печать  
Гип-гип ура!
Пошел тестировать Улыбка
  
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #6 - 26. Сентября 2010 :: 16:39
Печать  
В общем функционал дополнений периодичности выполнен в полном объеме для всех ВТ ОстаткиОбороты. На длительное время я ушел в запой писанину на 8.2. Всех прошу простить.
Ошибки исправляться будут, нового функционала пока нет.

1.07.018 от 26.09.10 г.
- Исправлена ошибка, при которой не правильно подготавливались ВТ если в параметре «Измерения» присутствуют пробелы.
- Изменен параметр «Периодичность» ВТ «РегистрОстаткиОбороты» и «БИОстаткиОбороты». Добавлена возмозможность указывать необходимость дополнения таблицы всеми периодами независимо от наличия и отсутствия остатков и/или движений.
  

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



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #7 - 27. Сентября 2010 :: 08:09
Печать  
vandalsvq писал(а) 26. Сентября 2010 :: 16:39:
В общем функционал дополнений периодичности выполнен в полном объеме для всех ВТ ОстаткиОбороты. На длительное время я ушел в запой писанину на 8.2. Всех прошу простить.
Ошибки исправляться будут, нового функционала пока нет.

1.07.018 от 26.09.10 г.
- Исправлена ошибка, при которой не правильно подготавливались ВТ если в параметре «Измерения» присутствуют пробелы.
- Изменен параметр «Периодичность» ВТ «РегистрОстаткиОбороты» и «БИОстаткиОбороты». Добавлена возмозможность указывать необходимость дополнения таблицы всеми периодами независимо от наличия и отсутствия остатков и/или движений.

Пасиб! Первый пункт подтверждаю - баг ушел.
А по поводу Дополнения - извини что морочил голову, но то что мне нужно получить действительно не так просто как мне казалось Печаль Немного поразмыслив понял это.... теперь еще нужно немного поразмыслить, чтобы понять как это таки получить Улыбка
  
Наверх
ICQ  
IP записан
 
andrmit
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 23. Августа 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #8 - 09. Октября 2010 :: 19:34
Печать  
Может кто помочь в вопросе...
А как максимально быстро можно получить документы определённого вида с определённым значением реквизита шапка/табличной части?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Как правило текст будет выглядеть так:

Код
Выбрать все
ВЫБРАТЬ [Поля выбора]
ИЗ ДокументСтроки.ВидДокумента КАК ДокументСтроки
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВидДокумента КАК Документ
ПО $ДокументСтроки.ТекущийДокумент = $Документ.ТекущийДокумент
ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК ЖурналДокументов
ПО $ДокументСтроки.ТекущийДокумент = $ЖурналДокументов.ТекущийДокумент
И $ЖурналДокументов.ВидДокумента = :ВидДокумента.ИмяВидаДокумента
ГДЕ [Описание условий] 

  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #10 - 10. Октября 2010 :: 08:35
Печать  
Хотелось бы дополнить что для отбора есть еще графы отбора по которым также можно более эффективно наложить фильтр чем просто по реквизиту шапки или табличной части.
Если нужен пример кода - пишите выложу.
  
Наверх
IP записан
 
andrmit
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 23. Августа 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #11 - 10. Октября 2010 :: 18:32
Печать  
Пишу... Можно посмотреть?  Подмигивание
  
Наверх
 
IP записан
 
andrmit
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 23. Августа 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #12 - 10. Октября 2010 :: 19:02
Печать  
vandalsvq писал(а) 10. Октября 2010 :: 08:30:
Табличные части документов хранятся в таблице "ДОкументСтроки.ВидДокумента", шапка хранится в "Документ.ВидДокумента". Общие реквизиты с признаком отбор, а также поля вроде Дата, НОмер, Проведен хранятся в общей таблице "ЖурналДокументов". Соединение происходит по полю $ПредставлениеТаблицы.ТекущийДокумент.
А отборы и прочее это в секции "ГДЕ" описываешь и все.

Как правило текст будет выглядеть так:

Код
Выбрать все
ВЫБРАТЬ [Поля выбора]
ИЗ ДокументСтроки.ВидДокумента КАК ДокументСтроки
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВидДокумента КАК Документ
ПО $ДокументСтроки.ТекущийДокумент = $Документ.ТекущийДокумент
ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК ЖурналДокументов
ПО $ДокументСтроки.ТекущийДокумент = $ЖурналДокументов.ТекущийДокумент
И $ЖурналДокументов.ВидДокумента = :ВидДокумента.ИмяВидаДокумента
ГДЕ [Описание условий] 


А можно конкретный пример с отбором по реквизиту шапки... Извините за назойливость...
  
Наверх
 
IP записан
 
vi-sa
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 28. Сентября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #13 - 11. Октября 2010 :: 11:32
Печать  
Очень, очень хочется видеть в комплекте набор примеров (запросы простые и сложные)
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #14 - 11. Октября 2010 :: 11:35
Печать  
Прошу у Вас прощения за отсутствие времени на консультации - алкогольные декларации. Как только освобожусь сразу же дополнительно приведу примеры.
  
Наверх
IP записан
 
vi-sa
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 28. Сентября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #15 - 11. Октября 2010 :: 11:39
Печать  
у меня на DBF почему то далеко не всегда результат получается... при прочих равных условиях либо есть данные, либо пусто.. жмешь по нескольку раз кнопку "Сформировать" - раз на пятый получаешь результат, потом снова "перерыв"... Что-то где-то тупит (м.б. 1sqlite.dll?).. Всё самое последнее (1CPP.dll - 3.2.2.0, 1sqlite.dll - 1.0.2.3, 1Cv7_query_010).. такое ощущение, что необходимо паузы выдерживать между запросами. Что за мультик?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #16 - 11. Октября 2010 :: 12:07
Печать  
vi-sa писал(а) 11. Октября 2010 :: 11:39:
у меня на DBF почему то далеко не всегда результат получается... при прочих равных условиях либо есть данные, либо пусто.. жмешь по нескольку раз кнопку "Сформировать" - раз на пятый получаешь результат, потом снова "перерыв"... Что-то где-то тупит (м.б. 1sqlite.dll?).. Всё самое последнее (1CPP.dll - 3.2.2.0, 1sqlite.dll - 1.0.2.3, 1Cv7_query_010).. такое ощущение, что необходимо паузы выдерживать между запросами. Что за мультик?

Соберите тестовую конфигурацию для воспроизведения случая.
  
Наверх
IP записан
 
vi-sa
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 28. Сентября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #17 - 11. Октября 2010 :: 14:23
Печать  
leshik писал(а) 11. Октября 2010 :: 12:07:
vi-sa писал(а) 11. Октября 2010 :: 11:39:
у меня на DBF почему то далеко не всегда результат получается... при прочих равных условиях либо есть данные, либо пусто.. жмешь по нескольку раз кнопку "Сформировать" - раз на пятый получаешь результат, потом снова "перерыв"... Что-то где-то тупит (м.б. 1sqlite.dll?).. Всё самое последнее (1CPP.dll - 3.2.2.0, 1sqlite.dll - 1.0.2.3, 1Cv7_query_010).. такое ощущение, что необходимо паузы выдерживать между запросами. Что за мультик?

Соберите тестовую конфигурацию для воспроизведения случая.

..Млин.. Не получается воспроизвести на простых примерах... Пока что заметил, что это связано с "условиями" (в запросах по регистрам Обороты и ОстаткиОбороты). т.е. если упростить (а лучше совсем убрать) условия, то глюков нет.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #18 - 12. Октября 2010 :: 06:47
Печать  
vi-sa писал(а) 11. Октября 2010 :: 14:23:
..Млин.. Не получается воспроизвести на простых примерах... Пока что заметил, что это связано с "условиями" (в запросах по регистрам Обороты и ОстаткиОбороты). т.е. если упростить (а лучше совсем убрать) условия, то глюков нет.

Для таких случаев я ставлю сохранение нужных данных в Лог-файл, в Вашем случае, можно сохранять тексты запросов в какой-либо служебный файл (с нужной для анализа дополнительной информацией) чтобы было что анализировать.
  
Наверх
ICQ  
IP записан
 
andrmit
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 23. Августа 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #19 - 12. Октября 2010 :: 15:47
Печать  
leshik писал(а) 11. Октября 2010 :: 11:35:
Прошу у Вас прощения за отсутствие времени на консультации - алкогольные декларации. Как только освобожусь сразу же дополнительно приведу примеры.


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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #20 - 12. Октября 2010 :: 17:52
Печать  
Кстати есть предложение, давайте я добавлю флаг "ЗаписыватьЖурналРегистрации" тогда данный объект будет писать данные о запросе (текст, подготовленный текст, параметры), времени подготовки и прочие ошибки в журнал регистрации. Действовать будет для данного объекта, т.о. можно не писать в ЖР регламентные запросы, а только наиболее сложные и важные.
Что думает сообщество?
  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #21 - 12. Октября 2010 :: 18:09
Печать  
vandalsvq писал(а) 12. Октября 2010 :: 17:52:
Кстати есть предложение, давайте я добавлю флаг "ЗаписыватьЖурналРегистрации" тогда данный объект будет писать данные о запросе (текст, подготовленный текст, параметры), времени подготовки и прочие ошибки в журнал регистрации. Действовать будет для данного объекта, т.о. можно не писать в ЖР регламентные запросы, а только наиболее сложные и важные.
Что думает сообщество?

А какие цели это будет преследовать?
  
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #22 - 12. Октября 2010 :: 18:21
Печать  
Цель: раздуть ЖР до неимоверных размеров.  Смех
Я думаю что туда можно было бы писать некоторую информацию о запросах которые проходили в системе, чтобы понимать кто где как часто вызывается, время выполнения и время подготовки. Может было бы полезно. Хотя решать конечно вам. Мне например не очень надо, я запросы тестирую на всех версиях БД, хотя это и затратно по времени, но приносит наиболее реальные плоды.
  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #23 - 13. Октября 2010 :: 04:47
Печать  
vandalsvq писал(а) 12. Октября 2010 :: 18:21:
Цель: раздуть ЖР до неимоверных размеров.  Смех
Я думаю что туда можно было бы писать некоторую информацию о запросах которые проходили в системе, чтобы понимать кто где как часто вызывается, время выполнения и время подготовки. Может было бы полезно. Хотя решать конечно вам. Мне например не очень надо, я запросы тестирую на всех версиях БД, хотя это и затратно по времени, но приносит наиболее реальные плоды.

Понятно - я думаю что функционал достаточно нужны - правда в стандартный журнал... Улыбка))).
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #24 - 13. Октября 2010 :: 05:48
Печать  
Нужно писать в отдельный лог.
Не засоряется основной ЖР.
Можно прибить в любой момент. (Когда эти записки будут не нужны из ЖР их не выковыряешь)

Отличное средство для записи в лог - BinaryData.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #25 - 13. Октября 2010 :: 05:54
Печать  
Свойства:

Трассировка = 1/0 (по умолчанию 0)
ТрассировкаФайл = ПутьКФайлу (по умолчанию КаталогИБ()+"syslog\Прямой.log")
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #26 - 13. Октября 2010 :: 07:56
Печать  
Посмотрел БинариДата, да, отлично подходит.
Надо только подумать что будем писать туда. Есть желающий продумать информационное поле лог файла?
  

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



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #27 - 13. Октября 2010 :: 08:51
Печать  
ну вот же:
Цитата:
(текст, подготовленный текст, параметры), времени подготовки и прочие ошибки

Цитата:
кто где как часто вызывается, время выполнения и время подготовки
  

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


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

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

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #29 - 13. Октября 2010 :: 10:01
Печать  
vandalsvq писал(а) 13. Октября 2010 :: 09:02:
А ничего если от этого время подготовки запросов малость подрастет, ну на пару мс наверное  Улыбка

При включенном логировании? Или в любом случае?
  
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #30 - 13. Октября 2010 :: 10:32
Печать  
Я думаю при влюченном логировании, хотя дополнительные "ЕСЛИ Лог = 1 ТОГДА" не знаю как в целом отразятся. Будет их не много, но будут Улыбка
  

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


1С++ rulezzz!

Сообщений: 85
Местоположение: Украина, Винница
Зарегистрирован: 20. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #31 - 15. Октября 2010 :: 10:00
Печать  
Не могу никак составить элементарный прямой запрос типа:
ВЫБРАТЬ БИ.Субконто1, БИ.Субконто2, БИ.СуммаОборот
ИЗ $БИОборотыДтКт.Основной(:Дата1, :Дата2, МЕСЯЦ, #Счета,БЕЗСУБКОНТО,#Счета, (Субконто1,Субконто2), (Сумма), ((Субконто1 IN (SELECT Val FROM #ВыбПодр)) AND (Субконто2 IN (SELECT Val FROM #Статьи)))) КАК БИ";

Подскажите, что не так?
Я уже пробовал и имена этих видов субконто писать, и "безсубконто" не писать, и СубконтоКт1 где ни попадя...

Версии всего вроде последние. При том запросе, что я привел в условиях отбора получается такая фигня:

           AND (entry_vt.PROVKIND = ' ')
           AND ((( IN (SELECT Val FROM #ВыбПодр)) AND ( IN (SELECT Val FROM #Статьи))))

Т.е. теряет "Субконто1". Если в условия пишу СубконтоКт1, то условие такое:

           AND (entry_vt.PROVKIND = ' ')
           AND (((entry_vt.KTSC0 IN (SELECT Val FROM #ВыбПодр)) AND ( IN (SELECT Val FROM #Статьи))))

Извините, уже разобрался сам
  

Восторгаюсь 1С++ и классами к ней!
Наверх
ICQ  
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #32 - 25. Октября 2010 :: 20:48
Печать  
Всем доброй ночи, кто не спит! Улыбка

Запрос:

глТекст = "
|SELECT";
Если флВывПоТоварам = 0 Тогда
глТекст = глТекст + "
|      Ш.Контрагент as [Клиент $Справочник.Контрагенты]
|,      Ш.ТоргТочка as [ТоргТочка $Справочник.ТорговыеТочки], ";
КонецЕсли;
глТекст = глТекст + "
|      Т.Номенклатура as [Товар $Справочник.Номенклатура]";
Если ВыводитьСуммы = 0 Тогда
глТекст = глТекст + "
|,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Количество)) ELSE 0 END) ПродКол
|,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Количество)) ELSE 0 END) ВозвКол
|,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Количество)) ELSE 0 END) ОтказКол
|,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Количество)) ELSE 0 END) БракКол";
Иначе
глТекст = глТекст + "
|,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Сумма)) ELSE 0 END) ПродКол
|,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Сумма)) ELSE 0 END) ВозвКол
|,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Сумма)) ELSE 0 END) ОтказКол
|,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Сумма)) ELSE 0 END) БракКол";
КонецЕсли;
глТекст = глТекст + "
|FROM
|      ЖурналДокументов as Ж $NOLOCK
|INNER JOIN
|      Документ.Реализация as Ш $NOLOCK ON $Ж.ТекущийДокумент = $Ш.ТекущийДокумент
|INNER JOIN
|      ДокументСтроки.Реализация as Т $NOLOCK ON $Ш.ТекущийДокумент = $Т.ТекущийДокумент
|WHERE
|      $Ж.Проведен & 1 = 1 AND $Ж.ДатаДокумента BETWEEN :Дата01 AND :Дата02~"+?(ПустаяСтрока(Условие)=0," "+Условие,"")
+?(флИсклТару=1," "+УсловиеПоТаре,"")+"
|GROUP BY
|      "+?(флВывПоТоварам=0,"Ш.Контрагент, Ш.ТоргТочка, ","")+"Т.Номенклатура
|
|
|UNION ALL
|
|
|SELECT";
Если флВывПоТоварам = 0 Тогда
     глТекст = глТекст + "
|      Ш.Контрагент as [Клиент $Справочник.Контрагенты]
|,      Ш.ТоргТочка as [ТоргТочка $Справочник.ТорговыеТочки], ";
КонецЕсли;
глТекст = глТекст + "
|      Т.Номенклатура as [Товар $Справочник.Номенклатура]";
Если ВыводитьСуммы = 0 Тогда
глТекст = глТекст + "
|,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Количество)) ELSE 0 END) ПродКол
|,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Количество)) ELSE 0 END) ВозвКол
|,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Количество)) ELSE 0 END) ОтказКол
|,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Количество)) ELSE 0 END) БракКол";
Иначе
глТекст = глТекст + "
|,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Сумма)) ELSE 0 END) ПродКол
|,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Сумма)) ELSE 0 END) ВозвКол
|,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Сумма)) ELSE 0 END) ОтказКол
|,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Сумма)) ELSE 0 END) БракКол";
КонецЕсли;
глТекст = глТекст + "
|FROM
|      ЖурналДокументов as Ж $NOLOCK
|INNER JOIN
|      Документ.ВозвратОтПокупателя as Ш $NOLOCK ON $Ж.ТекущийДокумент = $Ш.ТекущийДокумент
|INNER JOIN
|      ДокументСтроки.ВозвратОтПокупателя as Т $NOLOCK ON $Ш.ТекущийДокумент = $Т.ТекущийДокумент
|WHERE
|      $Ж.Проведен & 1 = 1 AND $Ж.ДатаДокумента BETWEEN :Дата01 AND :Дата02~"+?(ПустаяСтрока(Условие)=0," "+Условие,"")
+?(флИсклТару=1," "+УсловиеПоТаре,"")+"
|GROUP BY
|      "+?(флВывПоТоварам=0,"Ш.Контрагент, Ш.ТоргТочка, ","")+"Т.Номенклатура
|";


Получаю следующий результат (итоги по колонкам):
Цитата:
ПродКол: 345.696
ВозвКол: 0
ОтказКол: 89.33
БракКол: 0
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #33 - 25. Октября 2010 :: 20:52
Печать  
А вот следующий запрос:

глТекст = "
|SELECT
|            $Ж.ТекущийДокумент as [Док $Документ.Реализация]
|,      $Ш.КодОперации as [КодОперации $Перечисление.КодыОпераций]";
Если флВывПоТоварам = 0 Тогда
     глТекст = глТекст + "
     |            Ш.Контрагент as [Клиент $Справочник.Контрагенты]
     |,      Ш.ТоргТочка as [ТоргТочка $Справочник.ТорговыеТочки], ";
КонецЕсли;
глТекст = глТекст + "
|,            Т.Номенклатура as [Товар $Справочник.Номенклатура]";
Если ВыводитьСуммы = 0 Тогда
     глТекст = глТекст + "
     |,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Количество)) ELSE 0 END) ПродКол
     |,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Количество)) ELSE 0 END) ВозвКол
     |,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Количество)) ELSE 0 END) ОтказКол
     |,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Количество)) ELSE 0 END) БракКол";
Иначе
     глТекст = глТекст + "
     |,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Сумма)) ELSE 0 END) ПродКол
     |,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Сумма)) ELSE 0 END) ВозвКол
     |,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Сумма)) ELSE 0 END) ОтказКол
     |,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Сумма)) ELSE 0 END) БракКол";
КонецЕсли;
глТекст = глТекст + "
|FROM
|            ЖурналДокументов as Ж $NOLOCK
|INNER JOIN
|            Документ.Реализация as Ш $NOLOCK ON $Ж.ТекущийДокумент = $Ш.ТекущийДокумент
|INNER JOIN
|            ДокументСтроки.Реализация as Т $NOLOCK ON $Ш.ТекущийДокумент = $Т.ТекущийДокумент
|WHERE
|            $Ж.Проведен & 1 = 1 AND $Ж.ДатаДокумента BETWEEN :Дата01 AND :Дата02~"+?(ПустаяСтрока(Условие)=0," "+Условие,"")
+?(флИсклТару=1," "+УсловиеПоТаре,"")+"
|GROUP BY
|            $Ж.ТекущийДокумент,$Ш.КодОперации"+?(флВывПоТоварам=0,",Ш.Контрагент, Ш.ТоргТочка","")+",Т.Номенклатура
|
|
|UNION ALL
|
|
|SELECT
|            $Ж.ТекущийДокумент as [Док $Документ.ВозвратОтПокупателя]
|,      $Ш.КодОперации as [КодОперации $Перечисление.КодыОпераций]";
Если флВывПоТоварам = 0 Тогда
     глТекст = глТекст + "
     |            Ш.Контрагент as [Клиент $Справочник.Контрагенты]
     |,      Ш.ТоргТочка as [ТоргТочка $Справочник.ТорговыеТочки], ";
КонецЕсли;
глТекст = глТекст + "
|,            Т.Номенклатура as [Товар $Справочник.Номенклатура]";
Если ВыводитьСуммы = 0 Тогда
     глТекст = глТекст + "
     |,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Количество)) ELSE 0 END) ПродКол
     |,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Количество)) ELSE 0 END) ВозвКол
     |,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Количество)) ELSE 0 END) ОтказКол
     |,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Количество)) ELSE 0 END) БракКол";
Иначе
     глТекст = глТекст + "
     |,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Сумма)) ELSE 0 END) ПродКол
     |,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Сумма)) ELSE 0 END) ВозвКол
     |,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Сумма)) ELSE 0 END) ОтказКол
     |,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Сумма)) ELSE 0 END) БракКол";
КонецЕсли;
глТекст = глТекст + "
|FROM
|            ЖурналДокументов as Ж $NOLOCK
|INNER JOIN
|            Документ.ВозвратОтПокупателя as Ш $NOLOCK ON $Ж.ТекущийДокумент = $Ш.ТекущийДокумент
|INNER JOIN
|            ДокументСтроки.ВозвратОтПокупателя as Т $NOLOCK ON $Ш.ТекущийДокумент = $Т.ТекущийДокумент
|WHERE
|            $Ж.Проведен & 1 = 1 AND $Ж.ДатаДокумента BETWEEN :Дата01 AND :Дата02~"+?(ПустаяСтрока(Условие)=0," "+Условие,"")
+?(флИсклТару=1," "+УсловиеПоТаре,"")+"
|GROUP BY
|            $Ж.ТекущийДокумент,$Ш.КодОперации"+?(флВывПоТоварам=0,",Ш.Контрагент, Ш.ТоргТочка","")+",Т.Номенклатура
|";

Дает следующий результат:
Цитата:
ПродКол: 345.69599999999989
ВозвКол: 6.76
ОтказКол: 82.57
БракКол: 0

Неважно, что поле ПродКол не округлено. Здесь только добавил вывод документа и кода операции документа с включением этих полей в группировку. В итоге получил правильные данные! В первом запросе поле ВозвКол почему-то пустое, а его результат сложился с полем ОтказКол. Что может быть не так?
« Последняя редакция: 26. Октября 2010 :: 05:33 - ReLock »  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #34 - 26. Октября 2010 :: 05:12
Печать  
Озадачен ты бы хотяб выделил маркером что добавил  Ужас
  
Наверх
wwwICQ  
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #35 - 26. Октября 2010 :: 05:34
Печать  
Anatol писал(а) 26. Октября 2010 :: 05:12:
Озадачен ты бы хотяб выделил маркером что добавил  Ужас

Ну я вообще-то словами описал... Но еще выделил жирным куски текста, которые добавил.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #36 - 26. Октября 2010 :: 06:06
Печать  
непонятно как работал запрос из #32
если по Ш.КодОперации нет ни группировки ни агрегирования
Озадачен
  

1&&2&&3
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #37 - 26. Октября 2010 :: 06:33
Печать  
trad писал(а) 26. Октября 2010 :: 06:06:
непонятно как работал запрос из #32
если по Ш.КодОперации нет ни группировки ни агрегирования
Озадачен

Вообще мне в запросе ни группировки, ни агреагирование по полю Ш.КодОперации вообще не нужно. Во втором запросе я это ввел, чтобы посмотреть, по каким документам и операциям какие проходят суммы. Как раз второй запрос мне и показал, что был один документ на сумму 6.76 с признаком "ВозвратОтПокупателя".
Если я просто делаю группировку только! по товару, данная сумма почему-то падает в колонку ОтказКол, где суммируются суммы документов с признаком "ОтказОтПокупателя". И очень бы хотелось выяснить, по какой причине это происходит. Просто получается ситуация, что запрос по продажам с детализацией по документам показывает правильные данные, а без детализации - врет!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #38 - 26. Октября 2010 :: 07:14
Печать  
Все равно не понятно как проходит проверку синтаксиса первый запрос. Там явная ошибка.

Надо так:
|,      SUM(CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN Т.Количество ELSE 0 END) ПродКол
  

1&&2&&3
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #39 - 26. Октября 2010 :: 07:30
Печать  
trad писал(а) 26. Октября 2010 :: 07:14:
Все равно не понятно как проходит проверку синтаксиса первый запрос. Там явная ошибка.

Надо так:
|,      SUM(CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN Т.Количество ELSE 0 END) ПродКол

С чего же там ошибка???

Запрос (вывел текст запроса через <Сообщить>):
Цитата:
SELECT
           Т.Номенклатура as [Товар $Справочник.Номенклатура]
,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Количество)) ELSE 0.00 END) ПродКол
,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Количество)) ELSE 0.00 END) ВозвКол
,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Количество)) ELSE 0.00 END) ОтказКол
,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Количество)) ELSE 0.00 END) БракКол
FROM
           ЖурналДокументов as Ж $NOLOCK
INNER JOIN
           Документ.Реализация as Ш $NOLOCK ON $Ж.ТекущийДокумент = $Ш.ТекущийДокумент
INNER JOIN
           ДокументСтроки.Реализация as Т $NOLOCK ON $Ш.ТекущийДокумент = $Т.ТекущийДокумент
WHERE
           $Ж.Проведен & 1 = 1 AND $Ж.ДатаДокумента BETWEEN :Дата01 AND :Дата02~
GROUP BY
           Т.Номенклатура


UNION ALL


SELECT
           Т.Номенклатура as [Товар $Справочник.Номенклатура]
,      (CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN (SUM(Т.Количество)) ELSE 0.00 END) ПродКол
,      (CASE WHEN Ш.КодОперации = :ВозвратОтПокупателя THEN (SUM(Т.Количество)) ELSE 0.00 END) ВозвКол
,      (CASE WHEN Ш.КодОперации = :ОтказОтПокупателя THEN (SUM(Т.Количество)) ELSE 0.00 END) ОтказКол
,      (CASE WHEN Ш.КодОперации = :ВозвратРазбраковка THEN (SUM(Т.Количество)) ELSE 0.00 END) БракКол
FROM
           ЖурналДокументов as Ж $NOLOCK
INNER JOIN
           Документ.ВозвратОтПокупателя as Ш $NOLOCK ON $Ж.ТекущийДокумент = $Ш.ТекущийДокумент
INNER JOIN
           ДокументСтроки.ВозвратОтПокупателя as Т $NOLOCK ON $Ш.ТекущийДокумент = $Т.ТекущийДокумент
WHERE
           $Ж.Проведен & 1 = 1 AND $Ж.ДатаДокумента BETWEEN :Дата01 AND :Дата02~
GROUP BY
           Т.Номенклатура


Режим отладки:
Цитата:
SELECT
           Т.Номенклатура as [Товар $Справочник.Номенклатура]
,      (CASE WHEN Ш.КодОперации = '   16S   ' THEN (SUM(Т.Количество)) ELSE 0.00 END) ПродКол
,      (CASE WHEN Ш.КодОперации = '   15O   ' THEN (SUM(Т.Количество)) ELSE 0.00 END) ВозвКол
,      (CASE WHEN Ш.КодОперации = '   5Z0   ' THEN (SUM(Т.Количество)) ELSE 0.00 END) ОтказКол
,      (CASE WHEN Ш.КодОперации = '   61S   ' THEN (SUM(Т.Количество)) ELSE 0.00 END) БракКол
FROM
           [Журнал] as Ж
INNER JOIN
           [Документ.Реализация] as Ш  ON Ж.IDDOC = Ш.IDDOC
INNER JOIN
           [ДокументСтроки.Реализация] as Т  ON Ш.IDDOC = Т.IDDOC
WHERE
           Ж.CLOSED&1 & 1 = 1 AND Ж.DATE BETWEEN '20100901' AND '20100930Я'
GROUP BY
           Т.Номенклатура


UNION ALL


SELECT
           Т.Номенклатура as [Товар $Справочник.Номенклатура]
,      (CASE WHEN Ш.КодОперации = '   16S   ' THEN (SUM(Т.Количество)) ELSE 0.00 END) ПродКол
,      (CASE WHEN Ш.КодОперации = '   15O   ' THEN (SUM(Т.Количество)) ELSE 0.00 END) ВозвКол
,      (CASE WHEN Ш.КодОперации = '   5Z0   ' THEN (SUM(Т.Количество)) ELSE 0.00 END) ОтказКол
,      (CASE WHEN Ш.КодОперации = '   61S   ' THEN (SUM(Т.Количество)) ELSE 0.00 END) БракКол
FROM
           [Журнал] as Ж
INNER JOIN
           [Документ.ВозвратОтПокупателя] as Ш  ON Ж.IDDOC = Ш.IDDOC
INNER JOIN
           [ДокументСтроки.ВозвратОтПокупателя] as Т  ON Ш.IDDOC = Т.IDDOC
WHERE
           Ж.CLOSED&1 & 1 = 1 AND Ж.DATE BETWEEN '20100901' AND '20100930Я'
GROUP BY
           Т.Номенклатура
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #40 - 26. Октября 2010 :: 07:34
Печать  
trad писал(а) 26. Октября 2010 :: 07:14:
Все равно не понятно как проходит проверку синтаксиса первый запрос. Там явная ошибка.

Надо так:
|,      SUM(CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN Т.Количество ELSE 0 END) ПродКол

Хотя мысль уловил! Щас попробую! Может действительно в этом ошибка!  Улыбка
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #41 - 26. Октября 2010 :: 07:44
Печать  
trad писал(а) 26. Октября 2010 :: 07:14:
Все равно не понятно как проходит проверку синтаксиса первый запрос. Там явная ошибка.

Надо так:
|,      SUM(CASE WHEN Ш.КодОперации = :ПродажаПокупателю THEN Т.Количество ELSE 0 END) ПродКол

Огромное спасибо за помощь! Все получилось. Очень довольный
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #42 - 26. Октября 2010 :: 08:06
Печать  
ReLock писал(а) 26. Октября 2010 :: 07:30:
С чего же там ошибка???

Цитата:
по Ш.КодОперации нет ни группировки ни агрегирования
при наличии group by
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #43 - 26. Октября 2010 :: 08:19
Печать  
Все понятно. это парсер sqlite не просёк нарушение семантики sql.
Фигня этот ваш sqlite. Подмигивание
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #44 - 26. Октября 2010 :: 09:20
Печать  
trad писал(а) 26. Октября 2010 :: 08:19:
Все понятно. это парсер sqlite не просёк нарушение семантики sql.
Фигня этот ваш sqlite. Подмигивание

А мне наоборот стало как-то комфортнее с sqlite. Не надо указывать MIN/MAX в полях, где по группировке будет одно значение.
А то что автор забыл поставить SUM - это, как мне кажется, проблемы автора. Такие ошибки можно и в программе допустить и не заметить.  Подмигивание
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #45 - 26. Октября 2010 :: 09:43
Печать  
JohnyDeath писал(а) 26. Октября 2010 :: 09:20:
Не надо указывать MIN/MAX в полях, где по группировке будет одно значение.

ну и не надо "это" называть sql
хотя да, никто и не называет.
это и не sql, это sq
Улыбка
  

1&&2&&3
Наверх
 
IP записан
 
ЧебурЗлоп
Senior Member
****
Отсутствует


Ябба!

Сообщений: 314
Местоположение: г.Москва
Зарегистрирован: 14. Августа 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #46 - 27. Октября 2010 :: 00:29
Печать  
artbear ушел на 8-ку, vandal: "На длительное время я ушел в запой писанину на 8.2.".. закрадываются справедливые сомнения - если уходят апологеты - пора может и падаванам уходить на 8-ку? в итоге-то получится и спросить не у кого будет при проблеме...
  
Наверх
www  
IP записан
 
kansler
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 05. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #47 - 29. Октября 2010 :: 10:29
Печать  
Доброго времени суток!
Подскажите, пожалуйста, как получить значение периодической константы на выбраную дату?
Прочитав документацию, написал:
[code]$ПоследнееЗначение.Константа.ПроцентСкидки(0,:КонДата)[/code]
Но парсер ругается:
[code]
Meta name parser error: объект не найден "$ИсторияРеквизита.0"
ЗначениеИстории = ита);[/code]
Как написать правильно?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #48 - 30. Октября 2010 :: 12:21
Печать  
Покажи весь текст запроса
  
Наверх
IP записан
 
kansler
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 05. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #49 - 02. Ноября 2010 :: 04:44
Печать  
[quote author=leshik link=1285352210/45#48 date=1288441279]Покажи весь текст запроса[/quote]
[code]
ВЫБРАТЬ
    $ПоследнееЗначение.Константа.ПроцентСкидки(0,:КонДата) как Процент
[/code]
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #50 - 02. Ноября 2010 :: 09:14
Печать  
Ошибку подтверждаю.
В классе используется для построения запроса инструкция $ИсторияРеквизита которая предназначена только для справочников.
Просим автора высказаться о возможности исправления.
  
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #51 - 02. Ноября 2010 :: 15:07
Печать  
Проверим, если есть ошибка исправим.
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #52 - 10. Ноября 2010 :: 19:37
Печать  
Всем привет. Есть запрос:
Код
Выбрать все
глТекст = "
|SELECT
|	Номенклатура AS [Товар $Справочник.Номенклатура]
|,	Склад AS [Склад $Справочник.Склады]
|,	КоличествоОстаток AS Остаток
|FROM
|	$РегистрОстатки.ОстаткиТМЦ(
|	:Позиция
|,	(Фирма = :Фирма AND Номенклатура = :Номенклатура AND Склад = :Склад)
|,	(Номенклатура,Склад)
|,	(Количество)
|	)
|";
 



Есть проведенный документ. В документе пытаются изменить количество (сделать коррекцию). Хочу получить остаток товара на начало проведенного документа. Если передаю в переменную :Позиция текущий документ, то остаток считается на конец документа (после проведения), а мне нужно на начало. Каким образом можно это сделать?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #53 - 11. Ноября 2010 :: 05:49
Печать  
Получай нужную позицию документа
Цитата:
СформироватьПозициюДокумента(<Докум>,<ФлагСмещения>)
---
<ФлагСмещения> - необязательный параметр. Число: -1 (минус единица) - предыдущая позиция. 1 - следующая позиция. 0 - текущая позиция.
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #54 - 11. Ноября 2010 :: 05:58
Печать  
Вообще-то остатки как и обороты при передачи в качестве значения документа считаются строго "до" этого документа (можно вкл. режим отладки и посмотреть). Так что показывай результат выполнения если "ПрямойЗапрос.РежимОтладки = 1".

2 Salimbek
Позицию документа в качестве значения параметра передать нельзя.
  

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


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #55 - 11. Ноября 2010 :: 06:16
Печать  
vandalsvq писал(а) 11. Ноября 2010 :: 05:58:
2 Salimbek
Позицию документа в качестве значения параметра передать нельзя.

А разве нельзя передать момент (дату+время) этой позиции?
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #56 - 11. Ноября 2010 :: 06:52
Печать  
Salimbek писал(а) 11. Ноября 2010 :: 05:49:
Получай нужную позицию документа
Цитата:
СформироватьПозициюДокумента(<Докум>,<ФлагСмещения>)
---
<ФлагСмещения> - необязательный параметр. Число: -1 (минус единица) - предыдущая позиция. 1 - следующая позиция. 0 - текущая позиция.

Вариант №1:
Цитата:
Позиция = СформироватьПозициюДокумента(Позиция,-1);
ПрямойЗапрос.УстановитьТекстовыйПараметр("Позиция",Позиция);

Вариант №2:
Цитата:
глМета = СоздатьОбъект("MetaDataWork");
Позиция = глМета.ПолучитьДатуВремяИдДок(СформироватьПозициюДокумента(Позиция,-1));
ПрямойЗапрос.УстановитьТекстовыйПараметр("Позиция",Позиция);

Результат:
Цитата:
Неверное значение параметра 'Позиция'
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #57 - 11. Ноября 2010 :: 06:55
Печать  
vandalsvq писал(а) 11. Ноября 2010 :: 05:58:
Вообще-то остатки как и обороты при передачи в качестве значения документа считаются строго "до" этого документа (можно вкл. режим отладки и посмотреть). Так что показывай результат выполнения если "ПрямойЗапрос.РежимОтладки = 1".

2 Salimbek
Позицию документа в качестве значения параметра передать нельзя.


Прежде чем писать пост, я уже этот вариант пробовал:
Код
Выбрать все
ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
ПрямойЗапрос.РежимОтладки = 1;
ПрямойЗапрос.БухгалтерскийУчет = 0;

ПрямойЗапрос.УстановитьТекстовыйПараметр("Фирма",Фирма);
ПрямойЗапрос.УстановитьТекстовыйПараметр("Склад",Склад);
ПрямойЗапрос.УстановитьТекстовыйПараметр("Номенклатура",Номенклатура);
ПрямойЗапрос.УстановитьТекстовыйПараметр("Позиция",Позиция);

глТекст = "
|SELECT
|	Номенклатура AS [Товар $Справочник.Номенклатура]
|,	Склад AS [Склад $Справочник.Склады]
|,	КоличествоОстаток AS Остаток
|FROM
|	$РегистрОстатки.ОстаткиТМЦ(
|		:Позиция
|	,	(Фирма = :Фирма AND Номенклатура = :Номенклатура AND Склад = :Склад)
|	,	(Номенклатура,Склад)
|	,	(Количество)
|	)
|";

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ПрямойЗапрос.Текст = глТекст;
ПрямойЗапрос.Выполнить().Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку();
 


Цитата:
SELECT
           Номенклатура AS [Товар $Справочник.Номенклатура]
     ,      Склад AS [Склад $Справочник.Склады]
     ,      КоличествоОстаток AS Остаток
FROM
           (
     SELECT
           Номенклатура
           ,Склад
           ,SUM(КоличествоОстаток) AS КоличествоОстаток
           
     FROM
           (SELECT
                 rg_405.Номенклатура AS Номенклатура
                 ,rg_405.Склад AS Склад
                 ,rg_405.Количество AS КоличествоОстаток
                 
           FROM
                 [РегистрИтоги.ОстаткиТМЦ] AS rg_405
           WHERE
                 rg_405.PERIOD = '20101101'
           AND
                 (rg_405.Фирма = '     2   ' AND rg_405.Номенклатура = '    MA   ' AND rg_405.Склад = '     8   ')
           
           UNION ALL
           
           SELECT
                 ra_405.Номенклатура
                 ,ra_405.Склад
                 ,CASE WHEN ra_405.debkred = 0 THEN -ra_405.Количество ELSE ra_405.Количество END
                 
           FROM
                 [Журнал] AS docjourn
           LEFT JOIN [Регистр.ОстаткиТМЦ] AS ra_405
           ON ra_405.IDDOC = docjourn.IDDOC
           WHERE (docjourn.idx_DATE_TIME_IDDOC >= '201011115KV82O  DOTC   ')
           AND (docjourn.idx_DATE_TIME_IDDOC < '201011115KV82O  DOTC   ')

           AND
                 (ra_405.Фирма = '     2   ' AND ra_405.Номенклатура = '    MA   ' AND ra_405.Склад = '     8   ')
           ) AS vt_ra_405
     GROUP BY
           Номенклатура
           ,Склад
     HAVING (SUM(КоличествоОстаток) <> 0)


Очень смущает запись, выделенная жирным шрифтом.

В результате вернулся остаток товара ПОСЛЕ проведения текущего документа, а не ДО!
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #58 - 11. Ноября 2010 :: 07:30
Печать  
Нет, нельзя. Принимаемые типы значений: Дата, Документ.
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #59 - 11. Ноября 2010 :: 07:34
Печать  
ReLock, версию класса на всякий случай скажи. И этот документ случайно не является документом ТА?
Вообще то условие само по себе противоречивое >= и < соответственно не должен был документ попадать. Другое дело что вместо "201011115KV82O  DOTC   " должно было наверное быть "20100111     0   0      0" (вроде того). Т.е. с начала месяца, а не с позиции документа Улыбка.
Если версия старая то в новой может быть исправлено, если новая... пиши больше симптомов, что за док, где ТА, позиция и док ТА.
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #60 - 11. Ноября 2010 :: 07:46
Печать  
vandalsvq писал(а) 11. Ноября 2010 :: 07:34:
ReLock, версию класса на всякий случай скажи. И этот документ случайно не является документом ТА?
Вообще то условие само по себе противоречивое >= и < соответственно не должен был документ попадать. Другое дело что вместо "201011115KV82O  DOTC   " должно было наверное быть "20100111     0   0      0" (вроде того). Т.е. с начала месяца, а не с позиции документа Улыбка.
Если версия старая то в новой может быть исправлено, если новая... пиши больше симптомов, что за док, где ТА, позиция и док ТА.

Цитата:
ПрямойЗапрос.Версия = "1.07.017 23.09.2010"

Да. Документ является документом ТА. Но остаток то нужен ДО проведения документа.

Цитата:
ПрямойЗапрос.ert
Строка №4976
ТекстЗапроса = ТекстЗапроса + КлючевоеСлово + " (" + СтрДатаТаблицы + " >= '" + НачГраницаТабДвижений + НачВремяТабДвижений + "')
|            AND (" + СтрДатаТаблицы + " < '" + КонГраницаТабДвижений + КонВремяТабДвижений + "')
|            ";

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #61 - 11. Ноября 2010 :: 08:07
Печать  
Сделал еще один эксперимент. Если документ не является документом ТА, то при коррекции остаток товара показывается как надо (до проведения документа).
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #63 - 12. Ноября 2010 :: 06:31
Печать  
Спасибо.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #64 - 12. Ноября 2010 :: 16:28
Печать  
Выложена новая версия, брать в топе:
1.7.20 от 12.11.10 г.
- Исправлена ошибка подготовки виртуального значения «ПоследнееЗначение» для констант.
- Исправлена ошибка расчета границы ТА для использования при подготовке виртуальных таблиц по регистрам.
  

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #65 - 13. Ноября 2010 :: 13:48
Печать  
Вроде просмотрел документацию, не увидел такого примечания, но если пропустил, то прошу прощения.
Встретил такую проблемму:

Не выполняется запрос:

|ВЫБРАТЬ
|      *
|ИЗ
|      Документ.ОтсутствиеМенеджеров КАК ДокОтсутствия $nolock
|";

Если документ "ОтсутствиеМенеджеров" не может проводиться, то есть не стоит флажок "Разрешить проведение документа"

Выдается такая ошибка:

no such table: Документ.ОтсутствиеМенеджеров
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #66 - 13. Ноября 2010 :: 14:14
Печать  
Sserj, DBF? А версия 1sqlite и класса?
  

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #67 - 13. Ноября 2010 :: 14:21
Печать  
vandalsvq писал(а) 13. Ноября 2010 :: 14:14:
Sserj, DBF? А версия 1sqlite и класса?


DBF
1sqlite - 1.0.2.3
ПрямойЗапрос - только обновил - 1.7.20

ну и на всякий случай:
1CPP - 3.2.3.1
Win7 x64
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #68 - 13. Ноября 2010 :: 14:25
Печать  
Хотя вопрос можно наверно и снять.
Пошерстил файлик DD, в нем есть только "Документ (Мн.ч.) ОтсутствиеМенеджеров"
Я так понимаю это потому как в шапке этого документа нет ни одного реквизита, ну кроме предопределенных и общих Улыбка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #69 - 13. Ноября 2010 :: 15:12
Печать  
Да, именно по этому. Нет таблицы и все тут Улыбка))))))
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #70 - 14. Ноября 2010 :: 21:37
Печать  
Сегодня случайно в 8-ке понял насколько мне параметра "ДОПОЛНЕНИЕ" не хватает... в итоге пришлось извращаться. Улыбка
  

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #71 - 16. Ноября 2010 :: 07:30
Печать  
После обновления до версии 1.7.20
Стала вываливаться ошибка!!!

Вот текст:

ТЗОбщийЗапрос = ОбщийЗапрос.Выполнить();      
{D:\SERGEI\MYPROJECTS\ЭКСИОН\ЭКСИОН12\EXTFORMS\НАКОПЛЕНИЕ VER 4_3.ERT(1153)}: ПрямойЗапрос::РегистрОстаткиОбороты_DBF(АссоциативныйВектор ВекторВыражения=) : ПрямойЗапрос::ВыполнитьЗапрос(Строка ТекстЗапроса=insert into vt_totalrg_405_65194331
select
     crosstable.НачалоПериода
     ,crosstable.Номенклатура
     ,crosstable.Склад
     ,ifnull(vt_totalreg.КоличествоНачальныйОстаток,0) КоличествоНачальныйОстаток
     ,ifnull(vt_totalreg.КоличествоПриход,0) КоличествоПриход
     ,ifnull(vt_totalreg.КоличествоРасход,0) КоличествоРасход
     ,ifnull(vt_totalreg.КоличествоОборот,0) КоличествоОборот
     ,ifnull(vt_totalreg.КоличествоКонечныйОстаток,0) КоличествоКонечныйОстаток
from
     (select case when datetable.start_of_period < :НачалоПериода then :НачалоПериода else datetable.start_of_period end НачалоПериода
           ,vt_def.Номенклатура
     ,vt_def.Склад
     from vt_dd_65194331 as datetable
     cross join (select distinct Номенклатура
     ,Склад from vt_totalrg_405_65193515) as vt_def
     ) as crosstable
left join vt_totalrg_405_65193515 as vt_totalreg
     on crosstable.НачалоПериода = vt_totalreg.НачалоПериода
     and crosstable.Номенклатура = vt_totalreg.Номенклатура
     and crosstable.Склад = vt_totalreg.Склад, Число БезПодготовки=1) : Ошибка подстановки текстового параметра НачалоПериода - Неизвестный параметр
ЗапросSQLite.ВыполнитьЗапрос(ПодготовленныйТекстЗапроса);
{ПрямойЗапрос@MD(13182) }

я().ВыполнитьЗапрос("insert into "+ИмяНовойТаблицы+"
{ПрямойЗапрос@MD(5707) }

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #72 - 16. Ноября 2010 :: 09:39
Печать  
Покажи полный вызов запроса и установку всех параметров. Есть некоторые подозрения.
В txt файл и прикрепи к посту.
  

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #73 - 16. Ноября 2010 :: 13:07
Печать  
Вот текст и установка параметров.
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #74 - 16. Ноября 2010 :: 13:43
Печать  
Вроде все в норме, процерь всегда ли в НачДата передается значение дата (документ), и это не пустая дата (документ).
Пы.сы. если работает на предыдущей версии тогда просто скажи "на версии х.хх.ххх работает". Поищем Улыбка
  

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #75 - 16. Ноября 2010 :: 13:48
Печать  
Работает на версии 1.07.018 от 26.09.10 г.
Если устанавливаю версию 1.7.20 от 12.11.10 г. то вываливается эта ошибка Печаль
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #76 - 16. Ноября 2010 :: 14:45
Печать  
Интуитивно, точнее методом тыка нашел строку, которая вызывает данную ошибку, точнее может и не вызывает, но ее можно обойти:

Строка 5683 это в Функции РегистрОстаткиОбороты_DBF(ВекторВыражения)

СтрПериодТаблицы = "case when datetable.start_of_period < :НачалоПериода then :НачалоПериода else datetable.start_of_period end";

В таком варианте вываливается ошибка.

Если вернуть то что было в версии 1.07.018, точнее там конечно такой строки не было, но было в строке 5706:
select datetable.start_of_period НачалоПериода

Вообщем если я в версии 1.7.20 делаю:
СтрПериодТаблицы = "datetable.start_of_period";

То ошибки нет.

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #77 - 16. Ноября 2010 :: 15:48
Печать  
Симптом и источник проблемы понятен. Это связано с реализацией возможности дополнения. Исправлю.
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #78 - 24. Ноября 2010 :: 20:27
Печать  
Выпущена версия класса 1.7.21 от 25.11.10 г.
Исправлена описанная выше ошибка. Всем брать в топе.
  

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #79 - 01. Декабря 2010 :: 07:10
Печать  
Возникла новая проблема.
В соседней ветки выложили новую версию 1sqlite 1.0.2.4
При ее использовании элементарный запрос:
     Запрос.Текст = "
     |ВЫБРАТЬ
     |      РегОстатки.Склад КАК [Склад $Справочник.Склады]
     |      ,РегОстатки.ЦенаПрод КАК [РозничнаяЦена]
     |      ,РегОстатки.КоличествоОстаток КАК [КонОст]
     |ИЗ
     |      $РегистрОстатки.ОстаткиТМЦ(,
     |       ,
     |      (Номенклатура,Склад,ЦенаПрод),
     |      (Количество),
     |      ) КАК РегОстатки
     |      СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрТовар $nolock
     |      ПО РегОстатки.Номенклатура =  $СпрТовар.ТекущийЭлемент
     |";

Приводит к полному зависанию 1С, помогает только завершение процесса Печаль
При использовании версии 1sqlite 1.0.2.3 - запрос отрабатывается нормально.
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #80 - 01. Декабря 2010 :: 07:12
Печать  
Sserj писал(а) 01. Декабря 2010 :: 07:10:
Возникла новая проблема.
В соседней ветки выложили новую версию 1sqlite 1.0.2.4
При ее использовании элементарный запрос:
     Запрос.Текст = "
     |ВЫБРАТЬ
     |      РегОстатки.Склад КАК [Склад $Справочник.Склады]
     |      ,РегОстатки.ЦенаПрод КАК [РозничнаяЦена]
     |      ,РегОстатки.КоличествоОстаток КАК [КонОст]
     |ИЗ
     |      $РегистрОстатки.ОстаткиТМЦ(,
     |       ,
     |      (Номенклатура,Склад,ЦенаПрод),
     |      (Количество),
     |      ) КАК РегОстатки
     |      СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрТовар $nolock
     |      ПО РегОстатки.Номенклатура =  $СпрТовар.ТекущийЭлемент
     |";

Приводит к полному зависанию 1С, помогает только завершение процесса Печаль
При использовании версии 1sqlite 1.0.2.3 - запрос отрабатывается нормально.


Забыл дописать, возмоно поможет. Запрос без соединения, т.е. :

     Запрос.Текст = "
     |ВЫБРАТЬ
     |      РегОстатки.Склад КАК [Склад $Справочник.Склады]
     |      ,РегОстатки.ЦенаПрод КАК [РозничнаяЦена]
     |      ,РегОстатки.КоличествоОстаток КАК [КонОст]
     |ИЗ
     |      $РегистрОстатки.ОстаткиТМЦ(,
     |       ,
     |      (Номенклатура,Склад,ЦенаПрод),
     |      (Количество),
     |      ) КАК РегОстатки
     |";

Отрабатывается нормально на новой версии 1sqlite 1.0.2.4
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #81 - 01. Декабря 2010 :: 07:31
Печать  
А если написать ЛЕВОЕ соединение?
Покажи текст отладки запроса.
  
Наверх
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #82 - 01. Декабря 2010 :: 08:07
Печать  
leshik писал(а) 01. Декабря 2010 :: 07:31:
А если написать ЛЕВОЕ соединение?
Покажи текст отладки запроса.


     Запрос.Текст = "
     |ВЫБРАТЬ
     |      РегОстатки.Склад КАК [Склад $Справочник.Склады]
     |      ,РегОстатки.ЦенаПрод КАК [РозничнаяЦена]
     |      ,РегОстатки.КоличествоОстаток КАК [КонОст]
     |ИЗ
     |      $РегистрОстатки.ОстаткиТМЦ(,
     |       ,
     |      (Номенклатура,Склад,ЦенаПрод),
     |      (Количество),
     |      ) КАК РегОстатки
     |   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрТовар $nolock
    |      ПО РегОстатки.Номенклатура =  $СпрТовар.ТекущийЭлемент
     |";

Работает отрабатывает нормально.

А вот как выложить что выдается при РежимОтладки = 1 пока не знаю, 1С же сразу зависает намертво. Может можно как то это в файлик выводить, но в доке вроде не увидел такого.
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #83 - 03. Декабря 2010 :: 13:05
Печать  
Огромное спасибо vandalsvq за такой чудесный класс! Это весч!! В восторг приводит неописуемый! )

Использую КОП ПрямойЗапрос 1.7.21 25.11.2010, 1с++ 3.2.3.1. База на SQL.

1. Еще в одном месте $БИОстатки давится пробелом:
Код
Выбрать все
ТекстЗапроса = "
|ВЫБРАТЬ *
|ИЗ
|$БИОстатки.Основной(:КонДата~,, (Подразделения, Товары), (Количество, Сумма), ((Субконто1 = :ВыбПодразделение) И (Счет = :ВыбСчет)),)
|КАК Би
|";
 


дает ошибку "В метод необходимо передавать непустые объекты типа метаданных". Если между идентификаторами видов субконто убрать пробел - все нормально. Если вместо (Подразделения, Товары) задать через пробел (Субконто1, Субконто2) - ошибки не возникает.

2. Тот же запрос. КонДата - тип Дата. Хочу получить остатки на конец 31.12.2010. Расчет Бухгалтерских итогов в базе установлен по 4 квартал 2010. $БИОстатки остатков не находит. Кусок из отладчика:
Код
Выбрать все
                ...
		FROM _1SBKTTL bkttl_vt (nolock)
		WHERE (bkttl_vt.DATE = '20110101')
                ...
 


На начало 31.12.2010 (|$БИОстатки.Основной(:КонДата,,......) остатки дает нормально:
Код
Выбрать все
                ...
		FROM _1SBKTTL bkttl_vt (nolock)
		WHERE (bkttl_vt.DATE = '20101001')
                ...
	UNION ALL
                ...
		FROM _1SENTRY AS entry_vt (nolock)
		WHERE (entry_vt.DATE_TIME_DOCID >= '20101231     0     0   ')
		AND (entry_vt.DATE_TIME_DOCID < '20110101     0     0   ')
                ...
	UNION ALL
                ...
		FROM _1SENTRY AS entry_vt (nolock)
		WHERE (entry_vt.DATE_TIME_DOCID >= '20101231     0     0   ')
		AND (entry_vt.DATE_TIME_DOCID < '20110101     0     0   ')
                ...
 



3. И еще вопрос: als и ints файлы для КОП ПрямойЗапрос существуют?
« Последняя редакция: 08. Декабря 2010 :: 21:11 - BlueWind »  
Наверх
 
IP записан
 
Uncle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #84 - 13. Декабря 2010 :: 19:00
Печать  
Странно, почему не работает конструкция
Код
Выбрать все
спСтатусы = СоздатьОбъект("СписокЗначений");
спСтатусы.ДобавитьЗначение("А");
спСтатусы.ДобавитьЗначение("Б");
спСтатусы.ДобавитьЗначение("В");

глПрямойЗапрос.УложитьСписокЗначений(спСтатусы,"#ВыбСтатусы");
глПрямойЗапрос.Выполнить(,"ВЫБРАТЬ С.* ИЗ #ВыбСтатусы КАК С").ВыбратьСтроку();
 



Приходится извращаться:
Код
Выбрать все
тзСтатусы = СоздатьОбъект("ТаблицаЗначений");
тзСтатусы.НоваяКолонка("val","Строка",1);
Для Сч=1 По спСтатусы.РазмерСписка() Цикл
	тзСтатусы.НоваяСтрока();
	тзСтатусы.val = спСтатусы.ПолучитьЗначение(Сч);
КонецЦикла;
глПрямойЗапрос.УложитьТаблицуЗначений(тзСтатусы,"#ВыбСтатусы");
глПрямойЗапрос.Выполнить(,"ВЫБРАТЬ С.* ИЗ #ВыбСтатусы КАК С").ВыбратьСтроку();
 


так работает!
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #85 - 14. Декабря 2010 :: 07:10
Печать  
"УложитьСписокЗначений" не укладывает простые типы, о чем написано в документации.
  
Наверх
 
IP записан
 
Uncle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #86 - 14. Декабря 2010 :: 07:51
Печать  
Хорошо, а почему не работает такая конструкция:
Код
Выбрать все
спСтатусы = СоздатьОбъект("СписокЗначений");
спСтатусы.ДобавитьЗначение("А");
спСтатусы.ДобавитьЗначение("Б");
спСтатусы.ДобавитьЗначение("В");

тзСтатусы = СоздатьОбъект("ТаблицаЗначений");
спСтатусы.Выгрузить(тзСтатусы);
глПрямойЗапрос.УложитьТаблицуЗначений(тзСтатусы,"#ВыбСтатусы");
глПрямойЗапрос.Выполнить(,"ВЫБРАТЬ С.* ИЗ #ВыбСтатусы КАК С").ВыбратьСтроку();
 


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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #87 - 16. Декабря 2010 :: 09:47
Печать  
Потому что не надо так делать, вот выгрузил, дай колонке имя и тип, тогда только запихивай в объект Улыбка. Он капризный
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #88 - 10. Января 2011 :: 22:42
Печать  
Выпущен новый релиз:

1.7.22 от 11.01.11 г.
- Исправлена ошибка при подготовке ВТ БИОстатки если дата снятия остатков находилась за пределами точки расчета бухгалтерских итогов, а также без указания параметра «КонецПериода».
- Исправлена ошибка при подготовке ВТ БИОбороты, иногда возможно неоптимальное построение запроса.
- Исправлена документация. Добавлен общий совет для использования виртуальных таблиц.

ВНИМАНИЕ: при построении запросов с использованием временных таблиц, у которых существуют параметры, предусматривающие перечисления через запятую, рекомендуется:
- одно значение писать без обрамления в скобки
- два и более значения писать только в скобках.
Например: БИОстатки(,,Субконто1) или БИОстатки(,,(Субконто1, Субконто2)).
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #89 - 13. Января 2011 :: 22:41
Печать  
Вышла новость и ни одного коммента Улыбка)) это верный признак что разработка подошла к логическому завершению.
  

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


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #90 - 14. Января 2011 :: 00:29
Печать  
Новость хорошая Улыбка Спасибо!.. Забрали, будем использовать.. Про завершение забудьте! Мы, поклонники класса, наверняка будем бесконечно чего-то от него желать и хотеть.. Облапаем вот только со всех сторон.. ))
  
Наверх
 
IP записан
 
viddik
Junior Member
**
Отсутствует



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #91 - 14. Января 2011 :: 06:11
Печать  
vandalsvq писал(а) 13. Января 2011 :: 22:41:
Вышла новость и ни одного коммента Улыбка)) это верный признак что разработка подошла к логическому завершению.

Конец квартала, конец года - суета сует, потому и тишина пока Улыбка
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #92 - 18. Января 2011 :: 06:45
Печать  
Очень вкусная вещь, а нет ли уже консоли запросов (конструктор запросов) по этом классу?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #93 - 19. Января 2011 :: 11:24
Печать  
Считаю что до тех пор пока консоль не научится разбирать запросы смысл ее крайне незначительный. Единственный вариант, это если консоль будет сохранять настройки, тогда загрузил настройки, изменил, попробовал текст запроса Улыбка.

Как то начинал делать ее... но увы не реализовал до конца. Проблема в том что не очень то видимо и хотелось. А счас после 8.х не хватает ее Улыбка. Можно использовать консоль от Ивана (aka berezdetsky), правда синтаксис отличается, так что ручками надо будет кое что поправить. Улыбка
  

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


1C++ rocks!

Сообщений: 2
Зарегистрирован: 30. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #94 - 30. Января 2011 :: 19:36
Печать  
Только учусь писать прямые...

[quote]ТекстЗапроса = "ВЫБРАТЬ
|ОстаткиБН.ОстатокНУ,
|ОстаткиБН.ОстатокБУ,
|ОстаткиБН.Субконто1  КАК [Субконто1 $Субконто],
|ОстаткиБН.Субконто1_вид КАК Субконто1_вид,
|СрезРеквизитов.ТекущийЭлемент КАК [ТекущийЭлемент $Справочник.ОсновныеСредства]
|ИЗ
|(Выбрать
|Сумма(ВЫБОР КОГДА Остатки.Счет = :СчетНУ ТОГДА
|Остатки.СуммаОстатокДт
|ИНАЧЕ
|0
|КОНЕЦ) КАК ОстатокНУ,
|Сумма(ВЫБОР КОГДА Остатки.Счет <> :СчетНУ ТОГДА
|Остатки.СуммаОстатокДт
|ИНАЧЕ
|0
|КОНЕЦ) КАК ОстатокБУ,
|Остатки.Субконто1,
|Остатки.Субконто1_вид
|ИЗ
|$БИОстатки.Основной(:КонецПериода, #счета,(ОсновныеСредства),, , ) КАК Остатки
|СГРУППИРОВАТЬ Субконто1,субконто1_вид)КАК ОстаткиБН
|ЛЕВОЕ СОЕДИНЕНИЕ лезногоИспользованияН,
|ПервоначальнаяСтоимость,ПервоначальнаяСтоимостьН),,) КАК СрезРеквизитов
|ПО ОстаткиБН.Субконто1 = СрезРеквизитов.ТекущийЭлемент";[/quote]

Отдельно запросы выполняются, а соединение не работает.
Как я понимаю, проблема в том, что Субконто1 13значный, а ТекущийЭлемента 9значный. База DBF, ПРАВ/RIGHT вызывает ошибку. Как быть?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #95 - 30. Января 2011 :: 20:03
Печать  
Воспользуйся СРЕД(Строка,НачальныйСимвол,КоличествоСимволов).
  

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


1C++ rocks!

Сообщений: 2
Зарегистрирован: 30. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #96 - 30. Января 2011 :: 20:08
Печать  
Ура! Спасибо за оперативность, и вообще за чудо-класс!
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #97 - 07. Февраля 2011 :: 10:49
Печать  
ПОМОГИТЕ!!! работал с 1с++ версии 2.5, скачал qrymaker, и получалось вроде неплохо. Тут острая необходимость остатков по дням даже если нет движений, скачал 1с++ версии 3, обработки "прямойзапрос.ert" и prm файл. Что делать сними и как работать с классом "Прямой запрос". Уже 3 дня бьюсь!
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #98 - 07. Февраля 2011 :: 11:13
Печать  
temrmal писал(а) 07. Февраля 2011 :: 10:49:
ПОМОГИТЕ!!! работал с 1с++ версии 2.5, скачал qrymaker, и получалось вроде неплохо. Тут острая необходимость остатков по дням даже если нет движений, скачал 1с++ версии 3, обработки "прямойзапрос.ert" и prm файл. Что делать сними и как работать с классом "Прямой запрос". Уже 3 дня бьюсь!

Для начала почитай основы:
http://www.script-coding.com/1cpp.html
http://www.script-coding.com/Direct_queries.html
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #99 - 14. Февраля 2011 :: 08:33
Печать  
Вроде разобрался.
Теперь сам запрос
     Запрос = СоздатьОбъект("ПрямойЗапрос");
     ТекстЗапроса = "
           |SELECT НачислениеПроцентовОстаткиОбороты.Договор [Договор $Справочник.Договоры]
           |      , NullIf(НачислениеПроцентовОстаткиОбороты.ДатаПлатежа, '17530101') ДатаПлатежа
           |      , Sum(НачислениеПроцентовОстаткиОбороты.СуммаПриход) СуммаСуммаПриход
           |FROM $РегистрОстаткиОбороты.НачислениеПроцентов(:НачДата,
           |            :КонДата,День,
           |            ДвиженияИГраницыПериода,
           |            (Договор IN (:ВыбДоговор)),
           |            (Договор, ДатаПлатежа),) AS НачислениеПроцентовОстаткиОбороты
           |GROUP BY НачислениеПроцентовОстаткиОбороты.Договор
           |      ,
НачислениеПроцентовОстаткиОбороты.Период
           |      ,
НачислениеПроцентовОстаткиОбороты.ДатаПлатежа
           |";
     
     Запрос.УстановитьТекстовыйПараметр("ВыбДоговор", ВыбДоговор);
   Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
   Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
     Запрос.РежимОтладки = 1;
   
   ТабЗапроса = Запрос.Выполнить(,ТекстЗапроса);
   
   ТабЗапроса.Показать();

Выдает ошибку
Ругается на "период" Invalid column name 'Период'


Может условие неправильно прописано?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #100 - 14. Февраля 2011 :: 09:39
Печать  
Очень смущает вот это условие
Код
Выбрать все
 (Договор IN (:ВыбДоговор)) 


Если "ВыбДоговор" - это группа, тогда необходимо уложить эту группу во временную таблицу и писать условие
Код
Выбрать все
Договор В (ВЫБРАТЬ val ИЗ #МассивДоговоров) 


Если же "ВыбДоговор" это элемент справочника то тогда условие должно иметь вид
Код
Выбрать все
Договор = :ВыбДоговор 


И проверь есть ли колонка "Период", потому как в какой то ВТ (БИ или регистры) колонка "НачалоПериода", а в другой "Период".
  

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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #101 - 14. Февраля 2011 :: 14:23
Печать  
Спасибо! Точно - НачалоПериода. А условие работает.
  
Наверх
 
IP записан
 
Андрей_Минск
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 05. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #102 - 16. Февраля 2011 :: 14:08
Печать  
Привет, подскажите а по реквизиту условие должно отрабатывать?
Что то ругается
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'КодОперации'.

Код
Выбрать все
$РегистрОбороты.ПартииТоваров(:НачДата,:КонДата,День,
	|			(КодОперации = :КодОпер),
	|			(Товар),
	|			("+выбРесурс+")) AS ПартииТоваровОбороты
 


В простом запросе работает точно
Код
Выбрать все
$РегистрОбороты.ПартииТоваров(:НачДата,:КонДата,,,
				(КодОперации = :КодОпер),
				Товар,
				ОстатокТовара) AS ПартииТоваровОбороты 

  
Наверх
 
IP записан
 
Андрей_Минск
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 05. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #103 - 16. Февраля 2011 :: 18:12
Печать  
указал название поля из DDS тогда условие сработало...
SP3027 = :КодОпер
  
Наверх
 
IP записан
 
ssamm
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #104 - 25. Февраля 2011 :: 14:00
Печать  
Обновил класс, и налетел на грабли, был запрос:
|SELECT
|      Рег.Склад КАК [Склад $Справочник.Склады],
|      Рег.Номенклатура КАК [Номенклатура   $Справочник.Номенклатура],
|      (Рег.КоличествоОстаток) КАК КонОст,
|  $ПоследнееЗначение.Цены.Цена(СпрЦ.ID, :КонПериода) КАК Цена
|FROM
|      $РегистрОстатки.ОстаткиТМЦ(
|                                          :КонПериода~,
|                                          (Фирма В (Выбрать val ИЗ #Фирмы)),
|                                          (Склад, Номенклатура),
|                                          (Количество)
|                                          ) КАК Рег
|ЛЕВОЕ СОЕДИНЕНИЕ
|  Справочник.Цены КАК СпрЦ ON ((СпрЦ.ParentExt=Рег.Номенклатура) AND
|  ($СпрЦ.ТипЦен = :ТипЦен) and ($СпрЦ.ПометкаУдаления=0))
|";

стал возвращать не Последнее значение цены на дату, а первое, пришлось добавить в :КонПериода -> "~"
  
Наверх
 
IP записан
 
Gimalaj
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 15. Февраля 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #105 - 25. Февраля 2011 :: 16:32
Печать  
Собственно, код:
Код
Выбрать все
//
Процедура Сформировать()
	ТЗАвто = СоздатьОбъект("ТаблицаЗначений");
	ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
	ПрямойЗапрос.Текст = " СОЗДАТЬ ТАБЛИЦА #Счет411 (Счет VARCHAR(9) ПОУМОЛЧАНИЮ 41.1)";
	ПрямойЗапрос.Выполнить();

	ПрямойЗапрос.Текст = "ВСТАВИТЬ ВНУТРЬ #Счет411 ПОУМОЛЧАНИЮ ЗНАЧЕНИЯ";
	ПрямойЗапрос.Выполнить();

	ПрямойЗапрос.Текст = "
	|ВЫБРАТЬ
	|	ОстаткиОсновной.Счет КАК [Счет $Счет.Основной],
	|	ОстаткиОсновной.Субконто1 КАК [Субконто1 $Субконто],
	|	ОстаткиОсновной.СуммаОстатокДт КАК ОстатокДт
	|ИЗ
	|	$БИОстатки.Основной(:КонПериода, #Счет411, (Номенклатура), (Сумма)) КАК ОстаткиОсновной
	|";

	ПрямойЗапрос.УстановитьТекстовыйПараметр("КонПериода", КонДата);
	//ПрямойЗапрос.РежимОтладки = 1;
	ТЗАвто = ПрямойЗапрос.Выполнить(ТЗАвто);
	ТЗАвто.Выгрузить(ТЗ);

	ПрямойЗапрос.СброситьТаблицу("#Счет411");

КонецПроцедуры
 



Результат:
Код
Выбрать все
ПрямойЗапрос::Выполнить(ТаблицаЗначений ТипОбъекта=, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: val
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{D:\1cbase\Complex_buh\ПрямойЗапрос.ert(13153) }

ТЗАвто = ПрямойЗапрос.Выполнить(ТЗАвто);
{D:\SHISHKIN\COMPLEX_BUH_16-02-2011\EXTFORMS\БИОСТАТКИ.ERT(22)}: ПрямойЗапрос::Выполнить(ТаблицаЗначений ТипОбъекта=, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: val
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{D:\1cbase\Complex_buh\ПрямойЗапрос.ert(13153) } 



Подскажите, что я делаю не так?
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #106 - 25. Февраля 2011 :: 17:00
Печать  
Gimalaj писал(а) 25. Февраля 2011 :: 16:32:
Собственно, код:
Код
Выбрать все
//
Процедура Сформировать()
	ТЗАвто = СоздатьОбъект("ТаблицаЗначений");
	ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
	ПрямойЗапрос.Текст = " СОЗДАТЬ ТАБЛИЦА #Счет411 (Счет VARCHAR(9) ПОУМОЛЧАНИЮ 41.1)";
	ПрямойЗапрос.Выполнить();

	ПрямойЗапрос.Текст = "ВСТАВИТЬ ВНУТРЬ #Счет411 ПОУМОЛЧАНИЮ ЗНАЧЕНИЯ";
	ПрямойЗапрос.Выполнить();

	ПрямойЗапрос.Текст = "
	|ВЫБРАТЬ
	|	ОстаткиОсновной.Счет КАК [Счет $Счет.Основной],
	|	ОстаткиОсновной.Субконто1 КАК [Субконто1 $Субконто],
	|	ОстаткиОсновной.СуммаОстатокДт КАК ОстатокДт
	|ИЗ
	|	$БИОстатки.Основной(:КонПериода, #Счет411, (Номенклатура), (Сумма)) КАК ОстаткиОсновной
	|";

	ПрямойЗапрос.УстановитьТекстовыйПараметр("КонПериода", КонДата);
	//ПрямойЗапрос.РежимОтладки = 1;
	ТЗАвто = ПрямойЗапрос.Выполнить(ТЗАвто);
	ТЗАвто.Выгрузить(ТЗ);

	ПрямойЗапрос.СброситьТаблицу("#Счет411");

КонецПроцедуры
 



Подскажите, что я делаю не так?


Если манипуляции с таблицей ради отбора остатков по счету, тогда вместо них

Код
Выбрать все
	ПрямойЗапрос.УстановитьТекстовыйПараметр("Счет411", СчетПоКоду("41.1"));
 



Код
Выбрать все
	|...
	|ИЗ
	|	$БИОстатки.Основной(:КонПериода, , (Номенклатура), (Сумма), (Счет = :Счет411), ) КАК ОстаткиОсновной
	|...
 


  
Наверх
 
IP записан
 
Gimalaj
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 15. Февраля 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #107 - 25. Февраля 2011 :: 17:39
Печать  
BlueWind писал(а) 25. Февраля 2011 :: 17:00:
Если манипуляции с таблицей ради отбора остатков по счету, тогда вместо них
...

Спасибо, получилось.
  
Наверх
 
IP записан
 
nixstill
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 19. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #108 - 26. Февраля 2011 :: 10:58
Печать  
Подскажите, что не так? Делаю простой по сути запрос:
Код
Выбрать все
		|ВЫБРАТЬ		  
		| ВРасчеты.Докум КАК [Докум $Документ],
		| ВРасчеты.Докум_вид КАК Докум_вид,
		| ВРасчеты.Договор КАК [Договор $Справочник.Договоры],
		| СУММА(ВРасчеты.СумПриход) КАК СумПриход,
		| СУММА(ВРасчеты.СумРасход) КАК СумРасход
		|
		|ИЗ(
		|
		| ВЫБРАТЬ		  
		|  Поставщики.ТекущийДокумент КАК Докум,
		|  Поставщики.ВидДокумента КАК Докум_вид,
		|  Поставщики.Договор КАК Договор,
		|  Поставщики.СуммаУпрПриход КАК СумПриход,
		|  Поставщики.СуммаУпрРасход КАК СумРасход
		|
		| ИЗ
		|  $РегистрОбороты.Поставщики(:ДатаНачала, :ДатаКонца~, Документ, , (Договор), СуммаУпр) Поставщики $nolock
		|
		|ОБЪЕДИНИТЬ
		|
		| ВЫБРАТЬ		  
		|  Покупатели.ТекущийДокумент КАК Докум,
		|  Покупатели.ВидДокумента КАК Докум_вид,
		|  Покупатели.Договор КАК Договор,
		|  Покупатели.СуммаУпрПриход КАК СумПриход,
		|  Покупатели.СуммаУпрРасход КАК СумРасход
		|
		| ИЗ
		|  $РегистрОбороты.Покупатели(:ДатаНачала, :ДатаКонца~, Документ, , (Договор), СуммаУпр) Покупатели $nolock
		|
		|) КАК ВРасчеты
		|
		|СГРУППИРОВАТЬ
		| ВРасчеты.Докум, ВРасчеты.Докум_вид, ВРасчеты.Договор
 



Но вываливается с ошибкой:
Цитата:
Поставщики содержит больше столбцов, чем указано в списке столбцов.


А если сделать запрос по ВТ $РегистрОстаткиОбороты, то все норм.
И еще подскажите как на донном классе сделать запрос с иерархией групп например Контрагентов или Номенклатуры?


Версии класса, 1С++ и т.д. последние.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #109 - 26. Февраля 2011 :: 12:34
Печать  
Получить результат запроса в иерархическом виде не получится. Необходимо потом уже ИТЗ вертеть.
Покажи РежимОтладки = 1 (только в виде прикрепленного тхт чтобы тут не охреневать Улыбка)
  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #110 - 28. Февраля 2011 :: 03:37
Печать  
Код
Выбрать все
|  $РегистрОбороты.Поставщики(:ДатаНачала, :ДатаКонца~, Документ, , (Договор), СуммаУпр) Поставщики $nolock 


вот этот nolock как минимум лишний и в одной ВТ и в другой так как ВТ это по сути подзапрос а не конкретная таблица.
  
Наверх
IP записан
 
ssamm
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #111 - 01. Марта 2011 :: 11:36
Печать  
Подскажите, как выполнить запрос сразу к двум виртуальным таблицам? скажем к регистру Остатки и Продажи, два разных запроса написать получается а одим ну никак...

Вот например запрос к продажам:
SELECT
     Рег.Фирма КАК [Фирма $Справочник.Фирмы],
     Рег.Период КАК [Дата],                                                   
     Рег.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
     Рег.КоличествоОборот КАК [Продано],
     Рег.КоличествоВОборот КАК [Возвращено],
     Рег.ПродСтоимостьОборот КАК [СтоимПродаж],
     Рег.ПродСтоимостьВОборот КАК [СтоимВозвр]
FROM
     $РегистрОбороты.Продажи(
                                         :НачПериода,
                                         :КонПериода~,
                                         День,
(Фирма В (Выбрать val ИЗ #Фирмы)) AND (Номенклатура   in (SELECT Val FROM #ГруппаНоменклатура))                                                                                  (Номенклатура,Фирма),                            
                                         (Количество,КоличествоВ,ПродСтоимость,ПродСтоимостьВ)
                                         ) КАК Рег

хотелось бы на выходе еще колонку с остатком товара на каждый день
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #112 - 01. Марта 2011 :: 16:41
Печать  
Ну теперь сочини текст запроса остатков а я поправлю Улыбка
  
Наверх
IP записан
 
ssamm
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #113 - 02. Марта 2011 :: 06:29
Печать  
leshik писал(а) 01. Марта 2011 :: 16:41:
Ну теперь сочини текст запроса остатков а я поправлю Улыбка


хм, вот остатки на каждый день (условие у них одинаковое):
|SELECT
|      РегОст.НачалоПериода КАК [НачПериода],
|      РегОст.Фирма КАК [Фирма $Справочник.Фирмы],
|      РегОст.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
|      (РегОст.КоличествоКонечныйОстаток) КАК КолОстКон
|FROM
|      $РегистрОстаткиОбороты.ОстаткиТМЦ(
|                                          :НачПериода,
|                                          :КонПериода~,
|                                          День ДОПОЛНЕНИЕ,
|                                          ДвиженияИГраницыПериода,
|";
ТекстЗапроса=ТекстЗапроса+Условие+",
|                                          (Фирма,Номенклатура),
|                                          (Количество)
|                                          ) КАК РегОст  

Заранее спасибо, а то никак мне не удается разобраться с джойнами
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #114 - 02. Марта 2011 :: 07:17
Печать  
Код
Выбрать все
|SELECT
|     Рег.Фирма КАК [Фирма $Справочник.Фирмы],
|     Рег.Период КАК [Дата],
|     Рег.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
|     Рег.КоличествоОборот КАК [Продано],
|     Рег.КоличествоВОборот КАК [Возвращено],
|     Рег.ПродСтоимостьОборот КАК [СтоимПродаж],
|     Рег.ПродСтоимостьВОборот КАК [СтоимВозвр],
|	 ISNULL(РегОст.КоличествоОстаток,0) КАК КолВоОстатка
|FROM
|     $РегистрОбороты.Продажи(
|						     :НачПериода,
|						     :КонПериода~,
|						     День,
|(Фирма В (Выбрать val ИЗ #Фирмы)) AND (Номенклатура   in (SELECT Val FROM #ГруппаНоменклатура))													    (Номенклатура,Фирма),
|						     (Количество,КоличествоВ,ПродСтоимость,ПродСтоимостьВ)
|						     ) КАК Рег
|ЛЕВОЕ СОЕДИНЕНИЕ
|	$РегистрОстаткиОбороты.ОстаткиТМЦ(
|							:НачПериода,
|							:КонПериода~,
|							День ДОПОЛНЕНИЕ,
|							ДвиженияИГраницыПериода,
|";
ТекстЗапроса=ТекстЗапроса+Условие+",
|							(Фирма,Номенклатура),
|							(Количество)
|							) КАК РегОст
|ПО (Рег.Фирма = РегОст.Фирма) И (Рег.Период = РегОст.Период) и (Рег.Номенклатура = РегОст.Номенклатура) 

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


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #115 - 02. Марта 2011 :: 07:58
Печать  
Вот спасибо огромное, а я дурень, после левого соединения еще СЕЛЕКТ пытался сделать, чуток поправил и вроде на выходе получил что требовалось:

Код
Выбрать все
|SELECT
|     РегОст.Фирма КАК [Фирма $Справочник.Фирмы],
|     РегОст.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
|     РегОст.НачалоПериода КАК [НачПериода],
|	  РегОст.КоличествоКонечныйОстаток КАК [КолВоОстатка],
|     Рег.Период КАК [Дата],
|     Рег.КоличествоОборот КАК [Продано],
|     Рег.КоличествоВОборот КАК [Возвращено],
|     Рег.ПродСтоимостьОборот КАК [СтоимПродаж],
|     Рег.ПродСтоимостьВОборот КАК [СтоимВозвр]
|FROM
|	$РегистрОстаткиОбороты.ОстаткиТМЦ(
|							:НачПериода,
|							:КонПериода~,
|							День ДОПОЛНЕНИЕ,
|							ДвиженияИГраницыПериода,
|";
ТекстЗапроса=ТекстЗапроса+Условие+",
|							(Фирма,Номенклатура),
|							(Количество)
|							) КАК РегОст
|ЛЕВОЕ СОЕДИНЕНИЕ
|     $РегистрОбороты.Продажи(
|						     :НачПериода,
|						     :КонПериода~,
|						     День,
|";
ТекстЗапроса=ТекстЗапроса+Условие+",
|							(Номенклатура,Фирма),
|						     (Количество,КоличествоВ,ПродСтоимость,ПродСтоимостьВ)
|						     ) КАК Рег
|ПО (Рег.Фирма = РегОст.Фирма) И (Рег.Период = РегОст.НачалоПериода) и (Рег.Номенклатура = РегОст.Номенклатура)
|";
 



только вот результаты разочаровали, средствами 1С аналогисный запрос выполнился за 163125мс, а этот за 306338мс Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #116 - 02. Марта 2011 :: 09:31
Печать  
Нефик брать ВТ ОстаткиИОбороты, когда нужен только конечный Остаток.
Да и, не верю я, чтоб запрос с группировкой День будет быстрее.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #117 - 02. Марта 2011 :: 10:27
Печать  
Тем более быстрее от использования "ДОПОЛНЕНИЕ" он не станет  Подмигивание
  

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


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #118 - 02. Марта 2011 :: 12:28
Печать  
Так потому и взял ОстаткиОбороты, т.к. там есть ПЕРИОДИЧНОСТЬ и ДОПОЛНЕНИЕ. Нужно на каждый день анализируемого периода увидеть Остаток и Продажу, независимо от того была ли в этот день продажа, или если товар отутствовал на остатке
Пока вижу выход только в периодичности НЕДЕЛЯ

А типовой запрос, вот он:
"//{{ЗАПРОС(Сформировать)
|Период с ДатаНачала по ДатаКонца;
|Номенклатура = Регистр.Продажи.Номенклатура,
|Регистр.ОстаткиТМЦ.Номенклатура;
|УпрАналитика = Регистр.Продажи.Фирма.УпрАналитика,
|Регистр.ОстаткиТМЦ.Фирма.УпрАналитика;
|КолПродано = Регистр.Продажи.Количество;
|КолВозвращено = Регистр.Продажи.КоличествоВ;
|КолОстатки = Регистр.ОстаткиТМЦ.Количество;
|СуммаПрод = Регистр.Продажи.ПродСтоимость;
|СуммаВозвр = Регистр.Продажи.ПродСтоимостьВ;
|Функция Продано = Сумма(КолПродано);
|Функция Возвращено = Сумма(КолВозвращено);
|Функция Остатки = КонОст(КолОстатки);
|Функция СтоимПродаж = Сумма(СуммаПрод);
|Функция СтоимВозвр = Сумма(СуммаВозвр);
|Группировка Номенклатура Без групп;
|Группировка День Все ВошедшиеВЗапрос;      
|Условие(Номенклатура в СпТов);
|Условие(УпрАналитика=Константа.ОсновнаяФирма.УпрАналитика);
|"
  
Наверх
 
IP записан
 
ssamm
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #119 - 03. Марта 2011 :: 13:11
Печать  
Убрал ДОПОЛНЕНИЕ, скорость запроса выросла до 75410мс, на тех-же данных, теперь в два с лишним раза обгоняет типовой Подмигивание  А пропущенными днями таблицу дополнил уже после запроса, так существенно быстрее.
Эх, вот еще бы получить ту скорость которая в монопольном режиме, вообще бы сказка была
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #120 - 14. Марта 2011 :: 09:52
Печать  
Доброго дня!
вот запрос
     ТекстЗапроса = "
           |Выбрать
НачислениеПроцентовОстаткиОбороты.Договор [Договор $Справочник.Договоры]
           |      , НачислениеПроцентовОстаткиОбороты.НачалоПериода Период
           |      , НачислениеПроцентовОстаткиОбороты.СуммаНачальныйОстаток СуммаПроцентыНачОст
           |      , НачислениеПроцентовОстаткиОбороты.СуммаПриход СуммаПроцентыПриход
           |      , НачислениеПроцентовОстаткиОбороты.СуммаРасход СуммаПроцентовРасход
           |      , НачислениеПроцентовОстаткиОбороты.СуммаКонечныйОстаток СуммаПроцентовКонОст
           |ИЗ $РегистрОстаткиОбороты.НачислениеПроцентов(:НачДата~,
           |            :КонДата~,
           |            День,
           |            ДвиженияИГраницыПериода,
           |            (Договор В (:ВыбДоговор)),
           |            (Договор),) КАК НачислениеПроцентовОстаткиОбороты
           |";

выдает все движения и остатки , КРОМЕ ПОСЛЕДНЕГО ДНЯ, т.е. если сделать отчет на вчерашний день - все верно, беру на дату ТА - последний день не берет, сдвинул датуТА на "завтра", сегодняшний день появились движения. ЧТО НЕ ТАК???
Спасибо заранее!
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #121 - 14. Марта 2011 :: 10:40
Печать  
Может так:
Код
Выбрать все
:КонДата~~ 


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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #122 - 14. Марта 2011 :: 11:16
Печать  
Версия класса? Сразу скажу если не последняя то взять ее, проверить и отписаться.
  

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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #123 - 14. Марта 2011 :: 15:45
Печать  
версия query-007, а вот ссылку где посмотреть последнюю не дадите? чего - то не нахожу даже где эту скачал)))))
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #124 - 15. Марта 2011 :: 08:49
Печать  
Итак поставил 1C_query_009, компонента 1СPP.dll 3.2.3.7
Результат тот же, как описал выше. ЧТО ДЕЛАТЬ? Очень надо!
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #125 - 16. Марта 2011 :: 07:03
Печать  
Вообщем, есть изменения. Дело даже не в дате, а в ТА. Итоги рассчитываются на ТА. т.е. не по ТА, а на ТА. грубо говоря - движения последнего документа, который в точке ТА, не учитываются. А расчет должен быть ПО ТА.

ЗЫ. Кто нибудь этот форум вообще посещает????????????
  
Наверх
 
IP записан
 
viddik
Junior Member
**
Отсутствует



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #126 - 16. Марта 2011 :: 08:13
Печать  
temrmal писал(а) 16. Марта 2011 :: 07:03:
ЗЫ. Кто нибудь этот форум вообще посещает????????????

Разработчики переползают на "снеговика", увы. Так что заходят редко. Ошибки с расчетом на ТА и не только были в предыдущих версиях класса, вполне возможно, что не исправлены пока...
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #127 - 16. Марта 2011 :: 09:31
Печать  
я разобрался, скачал последнюю версию, все заработало, все спс за молчанье))) это золото говорят)))

кстати, одно непонятно или просто непривычно - когда делаю параметр ~ тогда запрос заканчивается следующей датой, те.е. ставлю параметр :КонДата - 16.03.2011, в таблице показывается в конце дата 17.03.2011 с нулевыми оборотами
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #128 - 23. Марта 2011 :: 09:55
Печать  
Нужны мысли общественности...

Хочу модифицировать СрезПоследних и СрезПервых.
Кратко суть модификации: получение даты, времени и документа которым было установлено последнее значение.
Варианты модификации:
1. Добавить поле "Период" (+время + документ), но тогда таблица изменится.

Текущий вид:
Элемент Реквизит1 Реквизит2
Контрагент 1 Значение Значение

Новый вид
Период Элемент Реквизит1 Реквизит2
Дата Контрагент 1 Значение NULL
Дата Контрагент 1 NULL Значение

Собственно пострадают те кто просто соединялся и получал кучу последних значений (не важно какого периода).
2. Добавить параметр управления выводом периода. Т.о. достигнется обратная совместимость. Текущие запросы будут исполняться как есть, а если РазворачиватьПоПериодам = 1 тогда будет вид описаный выше.

Хочу сказать что первая таблица (текущий вид) и вторая таблица на самом деле существуют уже сейчас в запросе, просто вторая всегда сворачивается по элементу Улыбка. Т.о. я просто уберу сворачивание таблицы. Ну это если на пальцах Улыбка
  

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


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #129 - 23. Марта 2011 :: 14:45
Печать  
Не помню используется ли у меня где-то, но лутше оставить обратную совместимость, поэтому вариант 2.
  
Наверх
wwwICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #130 - 28. Марта 2011 :: 13:16
Печать  
РЕБЯТА! а почему не работает когда у меня запрос к РегистрОстаткиОбороты с двумя условиями, т.е. (ВыбСклад в (:ВыбСклад)  и ВыбНоменклатура в (:ВыбНоменклатура))?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #131 - 28. Марта 2011 :: 14:52
Печать  
Код
Выбрать все
((ВыбСклад = :ВыбСклад)  и (ВыбНоменклатура = :ВыбНоменклатура)) 

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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #132 - 28. Марта 2011 :: 19:10
Печать  
а если ВыбНоменклатура - это группа номенклатуры? У меня именно так
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #133 - 29. Марта 2011 :: 06:03
Печать  
Тогда
Код
Выбрать все
УложитьСписокОбъектов(Группа,ИмяТаблицы,ИмяСправочника); 

после чего условие сравнения
Код
Выбрать все
ВыбНоменклатура В (ВЫБРАТЬ val ИЗ ИмяТаблицы) 

  

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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #134 - 29. Марта 2011 :: 10:09
Печать  
Ура! Спасибо!)))))
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #135 - 07. Апреля 2011 :: 21:07
Печать  
Версия = "1.7.22 11.01.2011";

Код
Выбрать все
глТекст = "
|SELECT
|	Подотчет.*
|FROM
|	$РегистрОбороты.Подотчет(,,Документ,(КредДокумент = :ТекКредДок),(Контрагент,Статья,КредДокумент),(Сумма)) AS Подотчет
|";

ПрямойЗапрос.УстановитьТекстовыйПараметр("ТекКредДок",ТекДок);

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ПрямойЗапрос.РежимОтладки = 1;
ПрямойЗапрос.Текст = глТекст;
ПрямойЗапрос.Выполнить().Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку();
 



Цитата:
SELECT
           Подотчет.*
FROM
           (
     SELECT
           ТекущийДокумент
           ,ВидДокумента
           ,ПозицияДокумента
           ,Контрагент
           ,Статья
           ,КредДокумент
           ,SUM(СуммаПриход) AS СуммаПриход
           ,SUM(СуммаРасход) AS СуммаРасход
           ,SUM(СуммаОборот) AS СуммаОборот
           
     FROM
           (SELECT
                 docjourn.IDDOC AS ТекущийДокумент
                 ,docjourn.IDDOCDEF AS ВидДокумента
                 ,docjourn.idx_DATE_TIME_IDDOC AS ПозицияДокумента
                 ,ra_8580.Контрагент AS Контрагент
                 ,ra_8580.Статья AS Статья
                 ,ra_8580.КредДокумент AS КредДокумент
                 ,CASE WHEN ra_8580.debkred = 0 THEN ra_8580.Сумма ELSE 0 END AS СуммаПриход
                 ,CASE WHEN ra_8580.debkred = 1 THEN ra_8580.Сумма ELSE 0 END AS СуммаРасход
                 ,CASE WHEN ra_8580.debkred = 0 THEN ra_8580.Сумма ELSE -ra_8580.Сумма END AS СуммаОборот
                 
           FROM
                 [Журнал] AS docjourn
           LEFT JOIN [Регистр.Подотчет] AS ra_8580
           ON ra_8580.IDDOC = docjourn.IDDOC
           WHERE docjourn.ПодотчетФр = 1
           WHERE
                 (ra_8580.КредДокумент = '  ET7T   ')
           ) AS vt_ra_8580
     GROUP BY
           ТекущийДокумент
           ,ВидДокумента
           ,ПозицияДокумента
           ,Контрагент
           ,Статья
           ,КредДокумент
     HAVING (SUM(СуммаПриход) <> 0)
     OR (SUM(СуммаРасход) <> 0)
     OR (SUM(СуммаОборот) <> 0)
     
) AS Подотчет
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "WHERE": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{F:\Bases\ВЕС\New\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13153) }

ПрямойЗапрос.Выполнить().Выгрузить(ТЗ);
{F:\BASES\ВЕС\NEW\EXTFORMS\ТОТЧЕТПОСТАТЬЯМ.ERT(542)}: ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "WHERE": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{F:\Bases\ВЕС\New\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13153) }


Строки №№3611,3977,4024.
Код в этих строках:
Цитата:
Если МетаРегистр.БыстраяОбработкаДвижений = 0 Тогда
     ТекстЗапроса = ТекстЗапроса + "AND docjourn."+ИдентификаторРегистра+"Фр = 1
     |            ";
КонецЕсли;

Кажется в конце оператора условия не хватает строчки:
Цитата:
КлючевоеСлово = "AND";


По крайней мере вставил эту строку в первый блок на адресу №3611 и мой запрос заработал!  Очень довольный
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #136 - 07. Апреля 2011 :: 21:23
Печать  
В предыдущем посте на регистр накладывается условие по колонке КредДокумент. Но условие (КредДокумент = :ТекКредДок) не срабатывает, т.к. поле КредДокумент неопределенного вида. Как правильно привести условие к одному типу?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #137 - 07. Апреля 2011 :: 21:39
Печать  
Посмотри документацию раздел посвященный преобразованиям значений БД в значения 1С, и если я не ошибаюсь то ":ТекДокумент*". Но там все равно посмотри Улыбка)))

По исправлению подтверждаю... странно что ты первый нашел Улыбка))
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #138 - 08. Апреля 2011 :: 05:22
Печать  
Цитата:
Значение типа Документ
•      0: Строка длинной 9 - внутренний идентификатор значения
•      1: Строка длинной 13 - внутренний идентификатор значения с видом значения
•      2: Строка длинной 15 – внутренний идентификатор значения с типом и видом значения
•      3: Строка или число длиной 4 символа. Зависит от формата ИБ. SQL: int - идентификатор вида объекта; DBF: char(4) - 36-й идентификатор вида объекта.


Т.е. если не делать преобразования, то выдает правильно: '  ET7T   '.
У меня реквизит "КредДокумент" -  тип "Документ" неопределенного вида. Применяю преобразование в условии: (КредДокумент=:ТекКредДок*). В результате получаю поле: 'O1 1PT  ET7T           '. Итого 23 символа вместо 13-ти.  Печаль
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #139 - 08. Апреля 2011 :: 05:26
Печать  
Как временное решение сделал так. В переменную ТекКредДок внес связку: Вид+Ид из запроса:
Цитата:
|$Ж.ВидДокумента as Вид
|,Ж.IDDOC as Ид

Решение работает. Но хотелось бы разобраться и понять работу модификаторов (преобразователей).  Улыбка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #140 - 08. Апреля 2011 :: 05:55
Печать  
А... ну блин, я то подумал что тип значения "Неопределенный" Улыбка)) поэтому и этот модификатор посоветовал. А так тебе надо модификатор "~", т.е. "1: Строка длинной 13 - внутренний идентификатор значения с видом значения".
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #141 - 08. Апреля 2011 :: 06:40
Печать  
Точно. Спасибо.  Улыбка
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #142 - 08. Апреля 2011 :: 20:05
Печать  
Как "уложить" выбранную группу справочника, чтобы включились и элементы и группы, вместе с выбранной?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #143 - 09. Апреля 2011 :: 04:07
Печать  
УложитьСписокОбъектов (Значений)
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #144 - 09. Апреля 2011 :: 05:43
Печать  
К сожалению, всё, что в выбранной группе, попадает в результат, а сама, выбранная группа, нет.
Цитата:
Если задана иерархия (название справочника либо плана счетов), то вместо объектов-групп выгружаются все входящие в группу элементы/счета всех нижележащих уровней.


Про иерархический вид можно пока забыть?  Подмигивание
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #145 - 09. Апреля 2011 :: 07:10
Печать  
ReLock писал(а) 09. Апреля 2011 :: 05:43:
К сожалению, всё, что в выбранной группе, попадает в результат, а сама, выбранная группа, нет.
Цитата:
Если задана иерархия (название справочника либо плана счетов), то вместо объектов-групп выгружаются все входящие в группу элементы/счета всех нижележащих уровней.


Про иерархический вид можно пока забыть?  Подмигивание

А у тебя данные с привязкой к группе хранятся? Т.е. в регистре, например, записано "Товар А" - +50 шт. и одновременно "Группа товара А" - +50 шт.? А иначе зачем тебе во временной таблице еще и группы? Тем более информации о принадлежности товаров к группам там все равно не хранится.
Можешь создать свою временную таблицу на сервере с нужной структурой, (типа "Группа 0 уровня", "Группа 1 уровня" и т.д. и в конце "Товар А") и делать запрос к этой таблице.
Лично я делаю так: Выбираю данные по списку товаров, а затем результат в ИТЗ группирую по полю "Номенклатура" с учетом иерархии.
  
Наверх
ICQ  
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #146 - 09. Апреля 2011 :: 07:37
Печать  
Вот я сейчас примерно тоже самое и реализовываю.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #147 - 19. Апреля 2011 :: 08:11
Печать  
Всем привет. Ну так у меня и не получается уложить список значений во временную таблицу, чтобы там были группы.  Плачущий
У меня в списке значений выбранные группы номенклатуры. Делаю укладку: Цитата:
, а в итоге групп там нет!

Уже извращнулся так:
Цитата:
//*****************************************************************************
Процедура ЗаполнитьСписокТоваров()
     Спр = СоздатьОбъект("Справочник.Номенклатура");
     Спр.ВключатьПодчиненные(1);

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

Цитата:
ЗаполнитьСписокТоваров();
     
глТекст = "
|SELECT
|      $СпрНом.ТекущийЭлемент as [Номенклатура $Справочник.Номенклатура]
|,      $СпрНом.ЭтоГруппа as ЭтоГруппа
|FROM
|      Справочник.Номенклатура as СпрНом $NOLOCK
|WHERE
|      $СпрНом.ТекущийЭлемент IN (SELECT Val FROM #Номенклатура)";
     
ТЗ = СоздатьОбъект("ТаблицаЗначений");

ПрямойЗапрос.Текст = глТекст;
ПрямойЗапрос.Выполнить().Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку();

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #148 - 19. Апреля 2011 :: 08:48
Печать  
Точно не помню, реализовывал ли я метод "УложитьСписокГрупп", может и да, если да то:
Код
Выбрать все
УложитьСписокОбъектов(,Таблица1);
УложитьСписокГрупп(,Таблица2); 



и далее искусственно создаешь таблицу 3
Код
Выбрать все
insert into Таблица3
select val from Таблица1
union all
select val from Таблица2 



Если же не реализовывал, то добавить можно и самому (код подсмотреть в AccountRecordset тов. berezdetsky (куда мы без него)).
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #149 - 19. Апреля 2011 :: 09:08
Печать  
Спасибо. Посмотрю. Попробую.
  
Наверх
 
IP записан
 
Irik
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 20. Апреля 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #150 - 22. Апреля 2011 :: 06:47
Печать  
Здравствуйте, поскажите пожалуста, в чем ошибка?

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

выпадает ошибка: State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name '#TD445E51CA0EA48CF8473E58BC7943A36'.
помогите разобраться
  
Наверх
 
IP записан
 
viddik
Junior Member
**
Отсутствует



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #151 - 24. Апреля 2011 :: 12:49
Печать  
Irik писал(а) 22. Апреля 2011 :: 06:47:
Здравствуйте, поскажите пожалуста, в чем ошибка?

Вероятно, $ОтгрузкаОстаткиОбороты.ВидДокумента
  
Наверх
 
IP записан
 
Irik
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 20. Апреля 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #152 - 25. Апреля 2011 :: 05:30
Печать  
Я не поняла где именно надо написать $ОтгрузкаОстаткиОбороты.ВидДокумента?
Вообще-то этот запрос написан в консоли (и в консоли он выполняется), ошибка появляется именно когда я добавляю детализацию по документам, и выполняю запрос в коде обработки. Но я не знаю как еще можно отобрать движения регистра сделанные документами определенных видов?
  
Наверх
 
IP записан
 
viddik
Junior Member
**
Отсутствует



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #153 - 27. Апреля 2011 :: 04:03
Печать  
Irik писал(а) 25. Апреля 2011 :: 05:30:
Я не поняла где именно надо написать $ОтгрузкаОстаткиОбороты.ВидДокумента?
Вообще-то этот запрос написан в консоли (и в консоли он выполняется), ошибка появляется именно когда я добавляю детализацию по документам, и выполняю запрос в коде обработки. Но я не знаю как еще можно отобрать движения регистра сделанные документами определенных видов?

Вероятно, там где у вас без $ написано. Не совсем понятно, как выполняется этот запрос в консоли, т.к. у вас, например, стоит группировка по Фирме, а в выбираемых полях Фирмы нет и в измерениях в РегистрОстаткиОбороты только Контрагент указан...
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #154 - 29. Апреля 2011 :: 08:33
Печать  
Добрый день. А возможен ли вызов Fox функций в запросах? Например, BINTOC()
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #155 - 29. Апреля 2011 :: 09:35
Печать  
ReLock писал(а) 29. Апреля 2011 :: 08:33:
Добрый день. А возможен ли вызов Fox функций в запросах? Например, BINTOC()


врят ли, тут же класс построен на 1sqlite, на сколько я понял..
а не на фоксовом провайдере.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #156 - 05. Мая 2011 :: 06:13
Печать  
Eprst писал(а) 29. Апреля 2011 :: 09:35:
ReLock писал(а) 29. Апреля 2011 :: 08:33:
Добрый день. А возможен ли вызов Fox функций в запросах? Например, BINTOC()


врят ли, тут же класс построен на 1sqlite, на сколько я понял..
а не на фоксовом провайдере.

Ну а чем тогда можно заменить тип данных binary?
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #157 - 05. Мая 2011 :: 09:35
Печать  
Доброго времени суток, уважаемые коллеги!
Заинтересовала разработка.
Хотелось бы узнать, где можно скачать последнюю версию, т.к. в топе прикреплена версия 1.07.005 от 28.05.10 г.
Заранее спасибо.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #158 - 05. Мая 2011 :: 11:21
Печать  
ziflex писал(а) 05. Мая 2011 :: 09:35:
Доброго времени суток, уважаемые коллеги!
Заинтересовала разработка.
Хотелось бы узнать, где можно скачать последнюю версию, т.к. в топе прикреплена версия 1.07.005 от 28.05.10 г.
Заранее спасибо.

В топе обработка от 11.01.2011 (1Cv7_query_007.rar)
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #159 - 07. Мая 2011 :: 08:46
Печать  
Выложена новая версия (помните старый разговор про изменение ВТ СрезПервых и СрезПоследних).

1.7.23 от 07.05.11 г.
- Для вирт. таблиц СрезПоследних и СрезПервых добавлена возможность получения даты, времени и документа, которым установлено значение. Для этого добавлен параметр № 5 – «Разворачивать периоды». Возможные значения: 1 или 0. По умолчанию: 0. Примеры таблиц приведены в описании СрезПервых.

Собственно сам архив с классами в топе.
  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #160 - 10. Мая 2011 :: 02:11
Печать  
Доброго времени суток!
При построении запросов и последующей выгрузки их результатов в ИТЗ возник следующий вопрос. Если в запросе я группирую поля, можно ли сделать, чтоб при последующей выгрузки результата в ИТЗ в этой самой ИТЗ формировалась древовидная структура, если бы я вручную сделал ИТЗ.Группировать() ? Либо же все таки нужно группировку делать уже после выгрузки , не делая ее в запросе, если необходимо во время перебора строк разворачивать эту группировку?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #161 - 10. Мая 2011 :: 04:45
Печать  
В данной реализации класса подобная возможность отсутствуют. Необходимо делать ее вручную.
Доделать ее можно было бы (когда то была версия класса с итогами), но в текущий момент не вижу смысла в подобной реализации. Есть ИТЗ умеющая делать это хорошо и правильно.
  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #162 - 12. Мая 2011 :: 01:01
Печать  
Доброго времени суток!
У меня снова вопрос Улыбка

Решил переделать отчет по остаткам ТМЦ написанный стандартным 7шным запросом используя ПрямойЗапрос.
Суть в том, что необходимо вывести остатки и резервы за период.
Имеется два регистра: ОстаткиТМЦ и РезервыТМЦ.
Проблема вот в чем - если делать запрос только к ВТ ОстаткиИОбороты.ОстаткиТМЦ, то результат верный (если сравнивать с 7ым запросом), но стоит присоединить ВТ ОстаткиИОбороты.РезервыТМЦ как количество выходных строк увеличивается т.е. данные по остаткам искажаются.

Думаю, что я не первый кто делает подобный запрос и скорей всего я гдето чтото неправильно делаю. База DBF.

Вот пример запроса:

Код
Выбрать все
|ВЫБРАТЬ
	|	ОстаткиТМЦ.НачалоПериода [День $Дата],
	|	ОстаткиТМЦ.Номенклатура [Номенклатура $Справочник.Номенклатура],
	|	ОстаткиТМЦ.Склад [Склад $Справочник.Склады],
	|	ОстаткиТМЦ.КоличествоПриход КАК Приход,
	|	ОстаткиТМЦ.КоличествоКонечныйОстаток КАК Остаток
	|	,(ISNULL(РезервыТМЦ.КоличествоКонечныйОстаток, 0)) Резерв
	|ИЗ
	|	$РегистрОстаткиОбороты.ОстаткиТМЦ(:НачПериода,:КонПериода,День ДОПОЛНЕНИЕ,,((Номенклатура <> :Серт) и (Склад = :БазовыйСклад)),,,) КАК ОстаткиТМЦ
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	$РегистрОстаткиОбороты.РезервыТМЦ(:НачПериода,:КонПериода,День ДОПОЛНЕНИЕ,,((Номенклатура <> :Серт) и (Склад = :БазовыйСклад)),,,) КАК РезервыТМЦ
	|	ПО ОстаткиТМЦ.Фирма = РезервыТМЦ.Фирма И  ОстаткиТМЦ.Склад = РезервыТМЦ.Склад И ОстаткиТМЦ.Номенклатура = РезервыТМЦ.Номенклатура
	|";
 

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



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #163 - 12. Мая 2011 :: 02:55
Печать  
ziflex, добавь группировку по номенклатуре:

Код
Выбрать все
GROUP BY ОстаткиТМЦ.Номенклатура 



числовые показатели запихай под суммирование:

Код
Выбрать все
SUM(ОстаткиТМЦ.КоличествоКонечныйОстаток) КАК Остаток 

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #164 - 12. Мая 2011 :: 03:15
Печать  
viddik писал(а) 12. Мая 2011 :: 02:55:
ziflex, добавь группировку по номенклатуре:

Код
Выбрать все
GROUP BY ОстаткиТМЦ.Номенклатура 



числовые показатели запихай под суммирование:

Код
Выбрать все
SUM(ОстаткиТМЦ.КоличествоКонечныйОстаток) КАК Остаток 



мне не нужно сворачивать строки этапе запроса . я это делаю после выгрузки в индексированную таблицу, для дальнейшей выборки по группам через тзПотомки.

Ключевое слово "РАЗЛИЧНЫЕ" почти приводит к идентичному результату за исключением итогов на последнюю дату (это если группировать ИТЗ по дням ). Но это если тестировать за эти периоды. Неизвестно как он будет себя вести в других. Да и вообще мне кажется без него должно работать все правильно.

P.s. уточню еще раз - если делать запрос только по ОстаткиТМЦ, то результат правильный...
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Я в подробности не вдавался, но почему нельзя сделать запросы без соединения а через объединение? Или я не в тему?
  

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



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #166 - 12. Мая 2011 :: 16:10
Печать  
vandalsvq писал(а) 12. Мая 2011 :: 12:13:
но почему нельзя сделать запросы без соединения а через объединение?

Вот у меня тот же вопрос возник

ziflex писал(а) 12. Мая 2011 :: 03:15:
P.s. уточню еще раз - если делать запрос только по ОстаткиТМЦ, то результат правильный...

Это потому, что виртуальная таблица делает группировку по выбранным измерениям и правильно суммирует числовые показатели. Для добавления резервов нужно делать объединение запросов (UNION ALL или ОБЪЕДИНИТЬ) и группировку по всем нужным полям (Номенклатура, НачалоПериода и тд)
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #167 - 13. Мая 2011 :: 02:27
Печать  
Если использовать объединение, то как мне в запросе создать пустое поле для разделения поля КонечныйОстаток на Остаток и Резерв ? Насколько помню из запросов в 8ке, там подставлялся 0. Здесь чтото так не получается.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #168 - 13. Мая 2011 :: 02:37
Печать  
А так разве нельзя?
Код
Выбрать все
ВЫБРАТЬ
    ОстаткиТМЦ.СуммаКонечныйОстаток КАК СуммаКонОстатокОстаткиТМЦ,
    0 КАК СуммаКонОстатокРезервТМЦ
ИЗ ОстаткиТМЦ
ОБЪЕДИНИТЬ
ВЫБРАТЬ
    0,
    РезервТМЦ.СуммаКонечныйОстаток
ИЗ РезервТМЦ 

  

Отхожу от дел. Долго и мучительно.
Наверх