Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 243513 )
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,
    РезервТМЦ.СуммаКонечныйОстаток
ИЗ РезервТМЦ 

  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #169 - 13. Мая 2011 :: 04:52
Печать  
с синтаксисом была трабла Улыбка
о. почти получилось. только все равно по количеству строк различается (до группировки) после группировки соответственно суммы не сходятся .

Вот такой запрос пытаюсь произвести:

Код
Выбрать все
"//{{ЗАПРОС(ПоОстаткам)
	|Период с ДатаНачалаОтчета по ДатаКонцаОтчета;
	|Склад			= Регистр.ОстаткиТМЦ.Склад,								Регистр.РезервыТМЦ.Склад;
	|Артикул        = Регистр.ОстаткиТМЦ.Номенклатура.Артикул.Контрагент, 	Регистр.РезервыТМЦ.Номенклатура.Артикул.Контрагент;
	|Классификатор  = Регистр.ОстаткиТМЦ.Номенклатура.КлассификаторТоваров, Регистр.РезервыТМЦ.Номенклатура.КлассификаторТоваров;
	|Номенклатура	= Регистр.ОстаткиТМЦ.Номенклатура, 						Регистр.РезервыТМЦ.Номенклатура;
	|НоменклатураКод= Регистр.ОстаткиТМЦ.Номенклатура.Код, 					Регистр.РезервыТМЦ.Номенклатура.Код;
	|КолОст			= Регистр.ОстаткиТМЦ.Количество;
	|КолРез			= Регистр.РезервыТМЦ.Количество;
	|Функция КолПрих = Приход(КолОст);
	|Функция КолКонОст    = КонОст(КолОст);
	|Функция КолКонОстРез = КонОст(КолРез);
	|Группировка Склад без групп;
	|Группировка Артикул 	   упорядочить по Артикул.Наименование 		 без групп;
	|Группировка Классификатор упорядочить по Классификатор.Наименование без групп;
	|Группировка Номенклатура  упорядочить по Номенклатура.Наименование  без групп;
	|Группировка День Все;

	|Условие(Число(НоменклатураКод)<>0000);
	|Условие(Склад в ВыбСклад); 



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


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


P.s. так что же получается, виртуальные таблицы нужно объединять а не соединять?

P.p.s. както странно работает "УПОРЯДОЧИТЬ" О_о
  
Наверх
 
IP записан
 
Uncle
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #170 - 13. Мая 2011 :: 05:18
Печать  
А можно ли с помощью класса сделать что-то типа такого:
Код
Выбрать все
UPDATE Справочник.Номенклатура AS Ном SET $Ном.Артикул="" 

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


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

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

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #172 - 13. Мая 2011 :: 09:55
Печать  
Uncle писал(а) 13. Мая 2011 :: 05:18:
А можно ли с помощью класса сделать что-то типа такого:
Код
Выбрать все
UPDATE Справочник.Номенклатура AS Ном SET $Ном.Артикул="" 



В принципе можно. Другое дело что лучше использовать просто объект ODBCRecordset. А для DBF все равно через класс работать не будет. Да и вообще запись лучше делать средствами 1С Улыбка
  

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



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


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

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

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


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

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

Выпустил тут потенциально никому-не-нужное-кроме-меня обновление.
1.7.24 от 10.06.11 г.
- Добавлен новый метод «УстановитьАвтозамену». Метод предназначен для поиска и замены в конструкциях выражений вида «{ТекстПоиска}». Может быть использован для подстановки того или иного значения поля в зависимости от вида формата БД (SQL, DBF).
  

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


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #176 - 09. Июня 2011 :: 19:07
Печать  
vandalsvq писал(а) 19. Мая 2011 :: 16:38:
В связи с тем что я наврядли уже допиши когда либо этот труд, как и мой тов. leshik  Подмигивание решил выложить его в том виде что счас...
И так "Использование языка запросов класса ПрямойЗапрос"


лист 21 , 22

Цитата:
Следующий запрос выполнится без ошибки:
ВЫБРАТЬ
     $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура]
     ,СУММА($ДокСтроки.Количество) КАК [Количество $Число]
ИЗ
     ДокументСтроки.ПриходнаяНакладная КАК ДокСтроки $nolock
СГРУППИРОВАТЬ
     $ДокСтроки.Товар
А попытка выполнить данный запрос приведет к ошибке:
ВЫБРАТЬ
     $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура]
     ,$ДокСтроки.ЕдиницаИзмерения КАК [ЕдИзм $Справочник.ЕдиницыИзмерений]
     ,СУММА($ДокСтроки.Количество) КАК [Количество $Число]
ИЗ
     ДокументСтроки.ПриходнаяНакладная КАК ДокСтроки $nolock
СГРУППИРОВАТЬ
     $ДокСтроки.Товар
При указании группировки псевдоним поля указывать нельзя.


имхается мне что либо последня фраза не к этому примеру запроса или пример не к последней фразе
  
Наверх
wwwICQ  
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

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

Снова столкнулся с небольшой проблемой в формировании запроса, прошу помочь Улыбка

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


Код
Выбрать все
	"
	|ВЫБРАТЬ
	|	Журнал.IDDOC КАК [Документ $Документ]
	|,	Журнал.IDDOCDEF КАК [Документ_вид $ВидДокумента]
	|,  Журнал.$ОбщийРеквизит.Агент КАК [Аген$Справочник.Агенты]
	|ИЗ
	|	ЖурналДокументов КАК Журнал $nolock
	|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|	Документ.ПКО КАК ПКО $nolock
	|ПО
	|	Журнал.IDDOC = ПКО.IDDOC
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	Документ.СтрокаВыпискиПриход КАК СтрокаВыпискиПриход $nolock
	|ПО
	|	Журнал.IDDOC = СтрокаВыпискиПриход.IDDOC
	|И
	|	ПКО.ДокОснование = СтрокаВыпискиПриход.ДокОснование
	|ГДЕ
	|	(Журнал.DATE МЕЖДУ :НачДата И :КонДата)
	|	И ((Журнал.CLOSED & 1) = 1)
	|	И (Журнал.$ОбщийРеквизит.Агент В (ВЫБРАТЬ val ИЗ #сзАгенты))
	|";
	 



Заранее благодарен.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #178 - 14. Июня 2011 :: 12:32
Печать  
А почему бы не сделать 2 подзапроса? В одном выбираем ПКО и его документ-основание, во втором - СтрокаВыпискаПриход и его документ-основание. А условие соединения 2-х подзапросов и будет одинаковость документа-основания!
Типа такого:
Код
Выбрать все
|ВЫБРАТЬ
|	Ордер.Документ
|,	Банк.Документ
|ИЗ
|(
|ВЫБРАТЬ
|	$Ж.ТекущийДокумент КАК [Документ $Документ]
|,	$Ж.ВидДокумента КАК [Документ_вид $ВидДокумента]
|,	ПКО.ДокОснование КАК ДокументОснование
|,          Ж.$ОбщийРеквизит.Агент КАК [Аген$Справочник.Агенты]
|ИЗ
|	ЖурналДокументов КАК Ж $NOLOCK
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|	Документ.ПКО КАК ПКО $NOLOCK ПО $Ж.ТекущийДокумент = $ПКО.ТекущийДокумент
|ГДЕ
|	$Ж.ДатаДокумента BETWEEN :НачДата И :КонДата~ AND $Ж.Проведен = 1 AND Ж.$ОбщийРеквизит.Агент В (ВЫБРАТЬ val ИЗ #сзАгенты)
|) КАК Ордер
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|(
|ВЫБРАТЬ
|	$Ж.ТекущийДокумент КАК [Документ $Документ]
|,	$Ж.ВидДокумента КАК [Документ_вид $ВидДокумента]
|,	Банк.ДокОснование КАК ДокументОснование
|,          Ж.$ОбщийРеквизит.Агент КАК [Аген$Справочник.Агенты]
|ИЗ
|	ЖурналДокументов КАК Ж $NOLOCK
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|	Документ.СтрокаВыпискиПриход КАК Банк $NOLOCK ПО $Ж.ТекущийДокумент = $Банк.ТекущийДокумент
|ГДЕ
|	$Ж.ДатаДокумента BETWEEN :НачДата И :КонДата~ AND $Ж.Проведен = 1 AND Ж.$ОбщийРеквизит.Агент В (ВЫБРАТЬ val ИЗ #сзАгенты)
|) КАК Банк ПО Ордер.ДокументОснование = Банк.ДокументОснование
|";
 


Ну примерно так. Работоспособность текущего примера не проверял. Просто нацарапал мысль...  Улыбка
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #179 - 20. Июня 2011 :: 08:34
Печать  
Вопрос: в регистре занесена сумма 135.170
Запрос:
Код
Выбрать все
|SELECT
|	$Ж.ТекущийДокумент as [ТекДок $Документ.РКО]
|,	Подотчет.Контрагент as [Контрагент $Справочник.Контрагенты]
|,	Подотчет.Статья as [Статья $Справочник.Статьи]
|,	Подотчет.КредДокумент as [КредДокумент $Документ]
|,	Подотчет.СуммаПриход as СуммаПриход
|,	Подотчет.СуммаРасход as СуммаРасход
|FROM
|	,(Контрагент,Статья,КредДокумент),(Сумма)) AS Подотчет
|INNER JOIN
|	ЖурналДокументов as Ж $NOLOCK ON Ж.IDDOC = Подотчет.ТекущийДокумент
 


возвращает: 135.169999999999999....
Почему?
  

Bug.png ( 66 KB | Загрузки )
Bug.png
Наверх
 
IP записан
 
sashas09
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 148
Местоположение: Киев
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #180 - 20. Июня 2011 :: 13:30
Печать  
читаем начиная где-то отсюда

orefkov писал(а) 24. Июня 2008 :: 12:26:
А если
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3]
 


как выдает?
Вообще в double'ах неточность бывает в 16ом-17ом знаках, что на вычислениях практически не сказывается, но влияет на сравнения.
То бишь если все математические операции производить без округления, а округлять только результат (посредством типизации колонки), особых проблем быть не должно.
просто
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3]
 


и
Код
Выбрать все
select round(ЧисловоеПоле, 3)
 


совершенно разные вещи.
В первом случае SQLite возвращает double, которое присваивается значению 1С, и оно округляется уже самой 1Сой (с заданной точностью).
А во втором варианте число округляет SQLite, получает в результате снова double (которое может быть снова неточным), этот double моя ВК получает от SQLite и присваивает значению 1С как есть, без округления.

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #181 - 20. Июня 2011 :: 13:38
Печать  
sashas09 писал(а) 20. Июня 2011 :: 13:30:
читаем начиная где-то отсюда

orefkov писал(а) 24. Июня 2008 :: 12:26:
А если
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3]
 


как выдает?
Вообще в double'ах неточность бывает в 16ом-17ом знаках, что на вычислениях практически не сказывается, но влияет на сравнения.
То бишь если все математические операции производить без округления, а округлять только результат (посредством типизации колонки), особых проблем быть не должно.
просто
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3]
 


и
Код
Выбрать все
select round(ЧисловоеПоле, 3)
 


совершенно разные вещи.
В первом случае SQLite возвращает double, которое присваивается значению 1С, и оно округляется уже самой 1Сой (с заданной точностью).
А во втором варианте число округляет SQLite, получает в результате снова double (которое может быть снова неточным), этот double моя ВК получает от SQLite и присваивает значению 1С как есть, без округления.



Спасибо огромное. Вариант:
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3] 


очень помог!  Очень довольный

А вариант ROUND(Колонка,ЗнаковПослеТочки) катит, если второй параметр равен 0, иначе никак не хочет округлять!
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #182 - 20. Июня 2011 :: 20:45
Печать  
vandalsvq писал(а) 19. Мая 2011 :: 16:38:
В связи с тем что я наврядли уже допиши когда либо этот труд, как и мой тов. leshik  Подмигивание решил выложить его в том виде что счас...
И так "Использование языка запросов класса ПрямойЗапрос"


Огромный респектище за труд и за класс. Мне как новичку очень полезная инфа Улыбка)
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #183 - 27. Июня 2011 :: 21:39
Печать  
Доброго времени суток, уважаемые коллеги!
Я продолжаю изучать этот замечательный класс и снова столкнулся с проблемой, которую не могу решить, судя по всему, без посторонней помощи.
Необходимо получить все значения периодического реквизита, но запрос упорно выдает только последнее значение, не смотря на то что стоит флаг развертывания периодов. (хотя и появляются доп. реквизиты типа "Дата", "Документ" и т.д.)

Код
Выбрать все
|ВЫБРАТЬ
|,     Цены.Дата КАК [Дата $Дата]
|,     Цены.Документ КАК [Документ $Документ]
|,     Цены.Цена КАК Цена
|ИЗ
|     $СрезПоследних.Цены(:ДатаДок~,,(($спроЦены.PARENTEXT В (ВЫБРАТЬ val ИЗ #сзНоменклатура)) И ($спрЦены.ТипЦен = :Закупочная) И (спрЦены.ПометкаУдаления=0)), ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Цены КАК спрЦены $nolock ПО $спрЦены.ТекущийЭлемент = ТекущийЭлемент, 1) КАК Цены
|
 

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #184 - 28. Июня 2011 :: 05:12
Печать  
ziflex писал(а) 27. Июня 2011 :: 21:39:
Доброго времени суток, уважаемые коллеги!
Я продолжаю изучать этот замечательный класс и снова столкнулся с проблемой, которую не могу решить, судя по всему, без посторонней помощи.
Необходимо получить все значения периодического реквизита, но запрос упорно выдает только последнее значение, не смотря на то что стоит флаг развертывания периодов. (хотя и появляются доп. реквизиты типа "Дата", "Документ" и т.д.)

Код
Выбрать все
|ВЫБРАТЬ
|,     Цены.Дата КАК [Дата $Дата]
|,     Цены.Документ КАК [Документ $Документ]
|,     Цены.Цена КАК Цена
|ИЗ
|     $СрезПоследних.Цены(:ДатаДок~,,(($спроЦены.PARENTEXT В (ВЫБРАТЬ val ИЗ #сзНоменклатура)) И ($спрЦены.ТипЦен = :Закупочная) И (спрЦены.ПометкаУдаления=0)), ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Цены КАК спрЦены $nolock ПО $спрЦены.ТекущийЭлемент = ТекущийЭлемент, 1) КАК Цены
|
 


Так это же СрезПоследних! Последнее значение на указанную дату!
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #185 - 28. Июня 2011 :: 10:49
Печать  
Возможно я не совсем правильно понял описание этой виртуальной таблицы... но. Как тогда понимать этот параметр?

Цитата:
Параметры:
•      Дата – параметр со значением даты или документа, на которую необходимо получить срез последних значений реквизитов. При установке параметра для типа «Дата» учитывается наличие модификатора.
•      Реквизиты – Тип: Строка. Идентификаторы реквизитов перечисленных через запятую заключенные в круглые скобки.
•      ДополнительныеУсловия – Тип: Строка. Дополнительное условие, которое добавляется к тексту запроса через И. Дополнительное условие необходимо заключить в круглые скобки. Доступные поля: ТекущийЭлемент – Строка(9).
•      Соединения – Тип: Строка. Текст запроса соединения таблиц с источником данных для виртуальной таблицы. Доступные поля: ТекущийЭлемент – Строка(9).
•      РазворачиватьПериоды – Тип: Число. При установке значения = 1 таблица будет дополнена колонками Дата, Время и Документ для получения даты, времени и документа установки значения. При этом на каждую строку элемента справочника создается столько строк, сколько установленных значений есть на периодические элементы.


P.s. если брать все значения периодического реквизита не из ВТ СрезПослдених, тогда откуда?
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #186 - 28. Июня 2011 :: 11:06
Печать  
Может быть здесь речь идет о нескольких изменениях периодического реквизита на указанную дату?! Может быть он их как раз и показывает в несколько строк?! Т.е., например, цена за день поменялась несколько раз...

Хотя, конечно, тоже странно. СрезПоследних = последнее значение на указанную дату...
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #187 - 29. Июня 2011 :: 09:45
Печать  
В общем никто не знает?  Плачущий
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #188 - 29. Июня 2011 :: 09:56
Печать  
ziflex писал(а) 28. Июня 2011 :: 10:49:
P.s. если брать все значения периодического реквизита не из ВТ СрезПослдених, тогда откуда?


руками написать запрос к 1sconst
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #189 - 29. Июня 2011 :: 10:07
Печать  
Eprst писал(а) 29. Июня 2011 :: 09:56:
ziflex писал(а) 28. Июня 2011 :: 10:49:
P.s. если брать все значения периодического реквизита не из ВТ СрезПослдених, тогда откуда?


руками написать запрос к 1sconst

Точно!
ObjID - элемент справочника "Цены"
Value - нужные тебе значения
(поправьте, если не прав!)
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #191 - 29. Июня 2011 :: 21:15
Печать  
vandalsvq, спасибо за разъяснение Улыбка значит буду ручками делать.

p.s. но новый релиз все равно нужен Улыбка)
  
Наверх
 
IP записан
 
Dmiter
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Местоположение: Киев
Зарегистрирован: 08. Января 2010
Пол: Мужской
Условие на ресурс
Ответ #192 - 04. Июля 2011 :: 07:40
Печать  
Возник вопрос можно ли в РегистрОстатки накладывать условие на ресурс. Задача: выбрать остатки указанный ресурс по которым больше 0 на момент проведения документа (т.е. по документ), чтобы потом не лопатить всю таблицу).
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие на ресурс
Ответ #193 - 04. Июля 2011 :: 08:11
Печать  
Dmiter писал(а) 04. Июля 2011 :: 07:40:
Возник вопрос можно ли в РегистрОстатки накладывать условие на ресурс. Задача: выбрать остатки указанный ресурс по которым больше 0 на момент проведения документа (т.е. по документ), чтобы потом не лопатить всю таблицу).


having воткни на результат ..
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #194 - 07. Июля 2011 :: 22:19
Печать  
ну как там с новым релизом дела обстоят?)
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

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

Снова столкнулся с проблемой. То ли я к концу дня уже не соображаю, то ли чего-то не знаю...
Для краткости приведу небольшой запрос:

Код
Выбрать все
	|ВЫБРАТЬ
	|	Номенклатура.ID КАК [Ссылка $Справочник.Номенклатура]
	|, 	Журнал.$ОбщийРеквизит.Проект КАК [Проект $Справочник.Проекты]
	|, 	Партии.ID КАК [ПартииСсылка $Справочник.Партии]
	|, 	Партии.ПриходныйДокумент		КАК [Документ $Документ]
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|	Справочник.Партии КАК Партии
	|ПО
	|	Номенклатура.ID = Партии.PARENTEXT
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	ЖурналДокументов КАК Журнал  
	|ПО
	|	Партии.ПриходныйДокумент = Журнал.IDDOC
	|ГДЕ
	|	(Номенклатура.ID В (ВЫБРАТЬ val ИЗ #сзНоменклатура))";
 



Тип реквизита "ПриходныйДокумент" - Документ.
Судя по всему из-за этого у меня не получается соединить таблицу журнала документов с таблицей "Партии" по этому реквизиту.

Вопрос : Как соединить? Мне нужно из журнала получить значение общего реквизита...
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #196 - 15. Июля 2011 :: 08:41
Печать  
right(Партии.ПриходныйДокумент,9) = Журнал.IDDOC
или
Партии.ПриходныйДокумент = $ВидДокумента36.ВидКонкретногоДокумента + Журнал.IDDOC
  
Наверх
wwwICQ  
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #197 - 15. Июля 2011 :: 11:57
Печать  
Так в том то и дело, что там значения равные разным видам документов. и мне нужны все. Печаль
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #198 - 15. Июля 2011 :: 12:52
Печать  
Значит делаешь только так:
Цитата:
right(Партии.ПриходныйДокумент,9) = Журнал.IDDOC
  
Наверх
ICQ  
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #199 - 15. Июля 2011 :: 12:56
Печать  
немного уточнений: $Партии.ПриходныйДокумент
  
Наверх
wwwICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #200 - 21. Июля 2011 :: 09:47
Печать  
Доброго дня! База данных sql
Допустим у меня есть запрос к регистру остаткиОбороты.ОстаткиТМЦ
Запрос выводит остатки номенклатуры. Но в каком то своем порядке. Как вывести родителя? и более того - как расположить результат в иерархическом порядке с несколькими уровнями вложенности? Спасибо!
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #201 - 21. Июля 2011 :: 10:37
Печать  
temrmal писал(а) 21. Июля 2011 :: 09:47:
Доброго дня! База данных sql
Допустим у меня есть запрос к регистру остаткиОбороты.ОстаткиТМЦ
Запрос выводит остатки номенклатуры. Но в каком то своем порядке. Как вывести родителя? и более того - как расположить результат в иерархическом порядке с несколькими уровнями вложенности? Спасибо!

1. Запрос выводит так, как ему выдал данные sql-сервер. Нужен твой порядок - ставь Ордер бай в запрос.
2. Для вывода Родителя - соединяешь Запрос к регистру с Номенклатурой, откуда можешь получить ParentID
3. В иерархическом порядке можешь сделать если напишешь суперзапрос, правильно соединишь все таблицы и т.д. А можешь загнать результат запроса в Индескированную ТЗ и там сгруппировать с учетом иерархии (ИТЗ.Группировать("иТовар: &Товар","Количество, Сумма", 1); особенно эффективно, если перед этим вытащить ParentID из п.2 в ИТЗ в колонку "Товар_Родитель")
  
Наверх
ICQ  
IP записан
 
diocompany
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Местоположение: Москва
Зарегистрирован: 11. Сентября 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #202 - 13. Сентября 2011 :: 05:41
Печать  
Доброго времени суток!
А могли бы вы показать пример кода, с использованием класса "ПрямойЗапрос", для запроса к регистру по Партиям, который думаю нужен нууу очень многим.

Формат данных DBF!!!

Суть запроса в следующем:
1. Остатки и обороты
2. Группировка по 1. Номенклатура 2. Документ.
3. Фильтр по номенклатуре (как опция)

В коде 1С это выглядит так:
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Номенклатура = Регистр.ПартииНаличие.Номенклатура;
    |Количество = Регистр.ПартииНаличие.Количество;
    |СуммаРуб = Регистр.ПартииНаличие.СуммаРуб;
    |Функция КоличествоНачОст = НачОст(Количество);
    |Функция КоличествоПриход = Приход(Количество);
    |Функция КоличествоРасход = Расход(Количество);
    |Функция КоличествоКонОст = КонОст(Количество);
    |Функция СуммаНачОст = НачОст(СуммаРуб);
    |Функция СуммаПриход = Приход(СуммаРуб);
    |Функция СуммаРасход = Расход(СуммаРуб);
    |Функция СуммаКонОст = КонОст(СуммаРуб);
    |Группировка Номенклатура упорядочить по Номенклатура.Наименование без групп;
    |Группировка Документ;
    |Условие(Номенклатура в ВыбНоменклатура);
    |"//}}ЗАПРОС
    ;

Если бы увидеть подобный запрос, в виде, с использованием Класса "ПрямойЗапрос", было бы ЗАМЕЧАТЕЛЬНО!
И не только для меня!  Улыбка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #203 - 13. Сентября 2011 :: 06:08
Печать  
Код
Выбрать все
ВЫБРАТЬ
РегОст.ТекущийДокумент КАК [Документ $Документ]
,РегОст.ВидДокумента КАК Документ_вид
,РегОст.Номенклатура КАК [Номенклатура $Справочник.Номенклатура]
,РегОст.КоличествоНачальныйОстаток КАК КолНачОст
,РегОст.КоличествоПриход КАК КолПриход
,РегОст.КоличествоРасход КАК КолРасход
,РегОст.КоличествоКонечныйОстаток КАК КолКонОст
,РегОст.СуммаНачальныйОстаток КАК СумНачОст
,РегОст.СуммаПриход КАК СумПриход
,РегОст.СуммаРасход КАК СумРасход
,РегОст.СуммаКонечныйОстаток КАК СумКонОст
,$СпрНоменклатура.Наименование КАК НоменклатураНаименование
ИЗ
$РегистрОстаткиОбороты.ПартииНаличие(
:НачПериода,
:КонПериода,
ДОКУМЕНТ,
,
(Номенклатура В (#МассивНоменклатуры)),
(Номенклатура),
(Количество, Сумма),) КАК РегОст
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
ПО РегОст.Номенклатура = $СпрНоменклатура.ТекущийЭлемент 



Далее получаешь результат в виде ИТЗ и ИТЗ группируешь ее стандартными методами (читай в доке 1С++), а для сортировки используешь поле "НоменклатураНаименование"

За полноту сведений не отвечаю, писал по памяти просто так чтобы вспомнить не засох ли мозг Улыбка)))), так что дока всегда под рукой внимательно сверять все Подмигивание
  

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


1C++ rocks!

Сообщений: 4
Местоположение: Москва
Зарегистрирован: 11. Сентября 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #204 - 13. Сентября 2011 :: 06:57
Печать  
vandalsvq писал(а) 13. Сентября 2011 :: 06:08:
Далее получаешь результат в виде ИТЗ и ИТЗ группируешь ее стандартными методами (читай в доке 1С++), а для сортировки используешь поле "НоменклатураНаименование"

За полноту сведений не отвечаю, писал по памяти просто так чтобы вспомнить не засох ли мозг Улыбка)))), так что дока всегда под рукой внимательно сверять все Подмигивание


ПРЕМНОГО БЛАГОДАРЕН!!!  Очень довольный
Спасибо за помощь!
Буду разбираться!!!
  
Наверх
 
IP записан
 
diocompany
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Местоположение: Москва
Зарегистрирован: 11. Сентября 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #205 - 13. Сентября 2011 :: 10:09
Печать  
vandalsvq писал(а) 13. Сентября 2011 :: 06:08:
Далее получаешь результат в виде ИТЗ и ИТЗ группируешь ее стандартными методами (читай в доке 1С++), а для сортировки используешь поле "НоменклатураНаименование"

За полноту сведений не отвечаю, писал по памяти просто так чтобы вспомнить не засох ли мозг Улыбка)))), так что дока всегда под рукой внимательно сверять все Подмигивание


Я дико извиняюсь, но есть ещё один вопрос.

(Номенклатура В (#МассивНоменклатуры)),

Если у меня выбрана группа ВыбНоменклатура, то что надо передать в вышеуказанное условие?

Пытался через
RS.УложитьСписокОбъектов(ВыбНоменклатура, МассивНоменклатуры, "Номенклатура");

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


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

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

Код
Выбрать все
ПрямойЗапрос.УложитьСписокОбъектов(ВыбГруппаНоменклатура, "#МассивНоменклатуры", "Номенклатура")  

  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #207 - 29. Сентября 2011 :: 06:34
Печать  
Хелп!
Код
Выбрать все
ТекстЗапроса = "
|ВЫБРАТЬ
|  РегВз.Контрагент КАК [Контрагент $Справочник.Контрагенты],
|  РегВз.Проект КАК [Проект $Справочник.Проекты],
|  РегВз.СуммаНачальныйОстаток КАК ВзНачОст,
|  РегВз.СуммаПриход КАК ВзПриход,
|  РегВз.СуммаРасход КАК ВзРасход,
|  РегВз.СуммаКонечныйОстаток КАК ВзКонОст
|ИЗ
|  $РегистрОстаткиОбороты.Взаиморасчеты(:зНачДата,
|						:зКонДата,
|						ПЕРИОД,
|						,
|						(Фирма=:зФирма И Контрагент В (ВЫБРАТЬ val ИЗ #ВыбКонтрагенты)),
|						(Контрагент,Проект),
|						(Сумма)) КАК РегВз";
Запрос.УстановитьТекстовыйПараметр("зНачДата", НачДата);
Запрос.УстановитьТекстовыйПараметр("зКонДата", КонДата1);
Запрос.УстановитьТекстовыйПараметр("зФирма", ВыбФирма.ТекущийЭлемент());
Запрос.УложитьСписокЗначений(ВыбКонтрагенты,"#ВыбКонтрагенты");
тзВз = Запрос.Выполнить(,ТекстЗапроса);
 



если НачДата<=НачМесяца И КонДата1<=КонМесяца
по ВзПриход,ВзРасход цепляются НЕ ВСЕ СУММЫ
(соответственно остатки тоже кривые, логику незацепления проследить не могу)

если НачДата<=НачМесяца И КонДата1>КонМесяца (т.е. ПЕРИОД больше периодичности регистра)
все Ок.... где копать? Печаль (ИБ=dbf)
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #208 - 29. Сентября 2011 :: 06:53
Печать  
Вот тут:
Код
Выбрать все
:зКонДата~ 

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #209 - 29. Сентября 2011 :: 07:10
Печать  
leshik писал(а) 29. Сентября 2011 :: 06:53:
Вот тут:
Код
Выбрать все
:зКонДата~ 



СПАСИБО ДОБРЫЙ ЧЕЛОВЕК! Очень довольный
  
Наверх
ICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #210 - 29. Сентября 2011 :: 07:23
Печать  
Доброго дня.
Запрос у таблице значений -

     ДатаНачала      = '01.01.11';
     ДатаКонца      = '01.02.11';
     ш = ДатаНачала;
     
     Пока ш<=ДатаКонца Цикл
           ВремТаб.НоваяСтрока();
           ВремТаб.ТабДата = ш;
           ш  = ш+1;
     КонецЦикла;
     
     Пз = СоздатьОбъект("ПрямойЗапрос");
     Пз.УложитьТаблицуЗначений(ВремТаб,"#ТаблЗнач");
     ТекстЗапроса = "
     |Выбрать Табл.ТабДата  Дата
     |Из #ТаблЗнач as Табл
     |";         
     вава = Пз.Выполнить(,ТекстЗапроса);
     вава.Показать();

Возвращает Таблицу с колонкой дата, но строк нету, хотя ВремТаб содержит строки. В чем проблема?
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #211 - 29. Сентября 2011 :: 07:57
Печать  
temrmal писал(а) 29. Сентября 2011 :: 07:23:
     |Выбрать Табл.ТабДата  Дата


может так ?
|Выбрать Табл.ТабДата  $Дата
  
Наверх
ICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #212 - 29. Сентября 2011 :: 08:27
Печать  
так ошибку показывает Вообще к ТЗ запрос можно делать?
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #213 - 29. Сентября 2011 :: 08:40
Печать  
ПОЛУЧИЛОСЬ)))))))
ВремТаб.НоваяКолонка("ТабДата","Строка");
............................................
     Пока ш<=ДатаКонца Цикл
           ВремТаб.НоваяСтрока();
           ВремТаб.ТабДата = Строка(Формат ш,"DYYYYMMDD"));
           ш  = ш+1;
     КонецЦикла;
     
     Пз = СоздатьОбъект("ПрямойЗапрос");
     Пз.УложитьТаблицуЗначений(ВремТаб,"#ТаблЗнач");
     ТекстЗапроса = "
     |Выбрать Табл.ТабДата [ТекДата $Дата]
     |Из #ТаблЗнач as Табл

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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #214 - 29. Сентября 2011 :: 08:40
Печать  
Спасибо за подсказку)))
  
Наверх
 
IP записан
 
Alegzander
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 1
Зарегистрирован: 17. Ноября 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #215 - 19. Ноября 2011 :: 20:23
Печать  
Помогите найти пример обхода результата запроса по группировкам с иерархией.  Заранее спасибо
  
Наверх
 
IP записан
 
myracho
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 19. Сентября 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #216 - 23. Ноября 2011 :: 07:10
Печать  
Добрый день. Подскажите, а как пользовать это прямой запрос ? Есть ли конструктор как у qryMaker ? Как его вообще запустить ? Среди примеров нашел непосредственно только код запроса.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

1.8.1 от 19.12.11 г.
- Добавлена новая вирт. таблица История. ВТ предназначеня для получения истории изменения периодических реквизитов по определенному справочнику.

Будет еще новогодний подарок. Но об этом в теме про ПоставщикДанных
  

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


1C++ rocks!

Сообщений: 2
Зарегистрирован: 15. Декабря 2011
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #218 - 22. Декабря 2011 :: 12:07
Печать  
Подскажите что я делаю не правильно
     
ТекстЗапроса = "SELECT
     | РегОст.IDDOC [Документ $Документ]
     | ,РегОст.Блюда AS [Блюда $Справочник.Блюда]
     | ,РегОст.СуммаПриход AS СумПриход
     |,РегОст.СуммаРасход AS СумРасход
     | FROM $РегистрОстаткиОбороты.ОстаткиБлюд(:ДатаНач1,:ДатаКон1,Документ,,,
    | (Подразделение = :Подр),
     | (Подразделение,Блюда),(Количество, Сумма)) AS РегОст";   
     рс.УстановитьТекстовыйПараметр("Подр", Подразделение);
     рс.УстановитьТекстовыйПараметр("ДатаНач1", ДатаНач);
     рс.УстановитьТекстовыйПараметр("ДатаКон1", ДатаКон);
     тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
     тз.ВыбратьСтроку();

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #219 - 22. Декабря 2011 :: 16:56
Печать  
В ВТ нет IDDOC. См. документацию внимательно
  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #220 - 22. Декабря 2011 :: 20:59
Печать  
Anzhey писал(а) 22. Декабря 2011 :: 12:07:
Подскажите что я делаю не правильно
     
ТекстЗапроса = "SELECT
     | РегОст.ТекущийДокумент[Документ $Документ]
     | ,РегОст.Блюда AS [Блюда $Справочник.Блюда]
     | ,РегОст.СуммаПриход AS СумПриход
     |,РегОст.СуммаРасход AS СумРасход
     | FROM $РегистрОстаткиОбороты.ОстаткиБлюд(:ДатаНач1,:ДатаКон1~,Документ,,,
   | (Подразделение = :Подр),
     | (Подразделение,Блюда),(Количество, Сумма)) AS РегОст";    
     рс.УстановитьТекстовыйПараметр("Подр", Подразделение);
     рс.УстановитьТекстовыйПараметр("ДатаНач1", ДатаНач);
     рс.УстановитьТекстовыйПараметр("ДатаКон1", ДатаКон);
     тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
     тз.ВыбратьСтроку();

Ругается на IDDOC

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #221 - 26. Декабря 2011 :: 02:53
Печать  
Хелп!Хелп!Хелп!
Код
Выбрать все
    ЗапросПодч = СоздатьОбъект("ПрямойЗапрос");
    ЗапросПодч.БухгалтерскийУчет = 0;
    ЗапросПодч.ОперативныйУчет = 0;
    ЗапросПодч.ПериодическиеЗначения = 0;
	ЗапросПодч.РежимОтладки = 1;
	ЗапросПодч.Текст="
	|ВЫБРАТЬ
	|	ПодчДок.*
	|ИЗ
	|	$ПодчиненныеДокументы.Потомки(@ДокОсн,:ДНач,:ДКон) КАК ПодчДок
	";
	ЗапросПодч.УстановитьТекстовыйПараметр("ДНач",НачДата-365);
	ЗапросПодч.УстановитьТекстовыйПараметр("ДКон",КонДата+365);
	ЗапросПодч.ОписаниеПараметра("ДокОсн","Документ.РасходнаяНакладная");
	ЗапросПодч.ПодготовитьПараметризованныйЗапрос();
 


Выдает еррор:
ПрямойЗапрос::ПодготовитьПараметризованныйЗапрос() : near "AND": syntax error
Плачущий
« Последняя редакция: 26. Декабря 2011 :: 12:13 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #222 - 26. Декабря 2011 :: 16:39
Печать  
Код
Выбрать все
ЗапросПодч.ОписаниеПараметра("ДокОсн",ДокРасходная); 


где ДокРасходная - это конкретный документ
Ты же пытаешься подставить Вид документа - так работать не будет.
Объясни полностью задачу.
  
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #223 - 26. Декабря 2011 :: 18:20
Печать  
Dolly_EV, давай "РежимОтладки" = 1, посмотрим что там творится.
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #224 - 27. Декабря 2011 :: 05:31
Печать  
leshik писал(а) 26. Декабря 2011 :: 16:39:
Код
Выбрать все
ЗапросПодч.ОписаниеПараметра("ДокОсн",ДокРасходная); 


где ДокРасходная - это конкретный документ
Ты же пытаешься подставить Вид документа - так работать не будет.
Объясни полностью задачу.


Синтаксис: ОписаниеПараметра(ИмяПараметра,ОписаниеПараметра)
Параметры:
•      ИмяПараметра – идентификатор параметра в тексте запроса
•      ОписаниеПараметра – описание типа, вида, длины и точности значения параметра. Например: «Справочник.Контрагенты»; «Строка.100»; «Число.15.2»
При чем тут конкретный документ? Конкретный документ - дальше в
Код
Выбрать все
ЗапросПодч.ПодставлятьПараметры("ДокОсн",тзДок.Док); 


а у меня валится еще на моменте
Код
Выбрать все
ЗапросПодч.ПодготовитьПараметризованныйЗапрос(); 

  
Наверх
ICQ  
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #225 - 27. Декабря 2011 :: 05:38
Печать  
Судя по описанию должно быть ЗапросПодч.ОписаниеПараметра("ДокОсн","Документ." + ДокРасходная.Вид());
  
Наверх
wwwICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #226 - 27. Декабря 2011 :: 05:44
Печать  
vandalsvq писал(а) 26. Декабря 2011 :: 18:20:
Dolly_EV, давай "РежимОтладки" = 1, посмотрим что там творится.

Дык и стоит РежимОтладки=1

Вот все, что вываливается:

Время подготовки запроса: 8 мс.
ПрямойЗапрос::ПодготовитьПараметризованныйЗапрос() : near "AND": syntax error
ЗапросSQLite.Подготовить(ПараметризированныйТекст);
{D:\BASES\ELIS\TOTALCNT\CLASSES\ПрямыеЗапросы\ПрямойЗапрос.ert(12996) }

ЗапросПодч.ПодготовитьПараметризованныйЗапрос();
{D:\BASES\_WORKINGERT\РЕЕСТРЫ\ДОКРЕЕСТР_РНК_ПОДЧИНЕННЫЕПКО.ERT(50)}: ПрямойЗапрос::ПодготовитьПараметризованныйЗапрос() : near "AND": syntax error
ЗапросSQLite.Подготовить(ПараметризированныйТекст);
{D:\BASES\ELIS\TOTALCNT\CLASSES\ПрямыеЗапросы\ПрямойЗапрос.ert(12996) }
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #227 - 27. Декабря 2011 :: 05:46
Печать  
Anatol писал(а) 27. Декабря 2011 :: 05:38:
Судя по описанию должно быть ЗапросПодч.ОписаниеПараметра("ДокОсн","Документ." + ДокРасходная.Вид());


У меня так и написано: ЗапросПодч.ОписаниеПараметра("ДокОсн","Документ.РасходнаяНакладная").
Так же пробовал: ЗапросПодч.ОписаниеПараметра("ДокОсн","Документ")
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #228 - 27. Декабря 2011 :: 10:01
Печать  
Методом тыка нашел следующее:
Если вместо "Потомки" поставить "Родители", конструкция работает. При этом в отладчике в переменной "ПараметризированныйТекст" перед "ЗапросSQLite.Подготовить(ПараметризированныйТекст);"
содержится следующее:
для "Потомки"
Код
Выбрать все
"SELECT	ПодчинДок.*FROM		(SELECT		scrdoc_vt.CHILDID AS ТекущийДокумент		,journ_vt.IDDOCDEF AS ВидДокумента		,journ_vt.DATE AS ДатаДокумента		,journ_vt.DOCNO AS НомерДокумента		,journ_vt.TIME AS ВремяДокумента	FROM __1S_CRDOC AS scrdoc_vt" 


для "Родители"
Код
Выбрать все
"SELECT	ПодчинДок.*FROM		(SELECT			journ_vt.IDDOC AS ТекущийДокумент		,journ_vt.IDDOCDEF AS ВидДокумента		,journ_vt.DATE AS ДатаДокумента		,journ_vt.DOCNO AS НомерДокумента		,journ_vt.TIME AS ВремяДокумента	FROM __1S_CRDOC AS scrdoc_vt
" 


т.е. я так понимаю - вся затыка - в нехватке Enter'а в конце строки?

в
Код
Выбрать все
Функция ПарсингВТПодчиненныеДокументы(ТекстДляОбработки) 

убрал "*" в строке № 2972
Код
Выбрать все
|	WHERE scrdoc_vt.PARENTVAL = "+Документ+"* 



ошибка пропала, но таблица пустая во всех случаях (при наличии и отсутствии потомков)
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #230 - 27. Декабря 2011 :: 10:50
Печать  
vandalsvq писал(а) 27. Декабря 2011 :: 10:39:
Вечером посмотрю, если найду исправлю.

Ок.

Вопрос по ходу дела: ПодчДок.ТекущийДокумент КАК [Док $Документ] должно возвращать тип "Документ" ? У меня пустое значение получается ((
Как типизировать, чтобы вернулся полноценный документ?? Или только как-то так?
Код
Выбрать все
нт) 



... Еще после танцев с бубном строку 2972
Код
Выбрать все
|	WHERE scrdoc_vt.PARENTVAL = "+Документ+"* 


заменил на
Код
Выбрать все
|	WHERE SUBSTR"+?(ЭтоSQL = 1,"ING","")+"(scrdoc_vt.PARENTVAL,7,9) = "+Документ+" 



взлетело, но ООООчень медленно.
« Последняя редакция: 27. Декабря 2011 :: 11:52 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

1.8.2 от 28.12.11 г.
- Исправлена проблема с ВТ «ПодчиненныеДокументы» при использовании «Потомки» в параметризированном запросе. Подробнее см. описание параметра ВТ – «Документ».

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


Для "Родители" иначе
Код
Выбрать все
ПрямойЗапрос.ОписаниеПараметра("Документ", "Документ.АвансовыйОтчет"); 


Причем вид документа не имеет значения.

А проблема конечно была интересной. Поле parentval как мы знаем хранится как полный идентификатор документа (вид, идентификатор и дата время). В итоге для удобства я параметр "Документ" для обычной ВТ подставлял с модификатором, а для параметризированного запроса идентификаторы использовать нельзя. Пришлось выкручиваться через "Неопределенный"... там напоролся еще на неприятный баг, но в итоге все исправил.

Пробуйте.
  

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


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

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

Подсказка: ТекущийДокумент КАК [Документ $Документ], ВидДокумента КАК Документ_вид
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #233 - 28. Декабря 2011 :: 11:16
Печать  
vandalsvq писал(а) 28. Декабря 2011 :: 09:58:
А про типизацию... читай правила типизации поля "Документ" с неопределенным заранее видом.

Подсказка: ТекущийДокумент КАК [Документ $Документ], ВидДокумента КАК Документ_вид


Все взлетело, разобрался с типизацией.
Но как теперь в запросе наложить ограничение на ВидДокумента ("ПриходныйОрдер") ??
Код
Выбрать все
		|ВЫБРАТЬ
		|	ПодчДок.ТекущийДокумент КАК [ДокПодч $Документ]
		|	,ПодчДок.ВидДокумента КАК ДокПодч_вид
		|ИЗ
		|	$ПодчиненныеДокументы.Потомки(@ДокОсн) КАК ПодчДок
		|ГДЕ
		|	ДокПодч_вид=""ПриходныйОрдер""
		|";
 


я понимаю, что в таком виде в "ДокПодч_вид" лежит ВидДок в виде Число(4) или Строка(4),но если написать
с типизацией
Код
Выбрать все
|	,ПодчДок.ВидДокумента КАК [ДокПодч_вид $ВидДокумента] 

, то
еррор ": no such column: ДокПодч_вид"  Плачущий
  
Наверх
ICQ  
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #234 - 28. Декабря 2011 :: 12:29
Печать  
ДокПодч_вид=$ВидДокумента.ПриходныйОрдер
  
Наверх
wwwICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #235 - 28. Декабря 2011 :: 12:37
Печать  
Anatol писал(а) 28. Декабря 2011 :: 12:29:
ДокПодч_вид=$ВидДокумента.ПриходныйОрдер

А по-подробнее?
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Код
Выбрать все
ВЫБРАТЬ ...
ИЗ Журнал
ГДЕ ВидДокумента = :ВидДокумента.АвансовыйОтчет 



И это... я люблю пользователей своих классов, но не люблю когда они не читают доку вообще... Лучше чтобы вы знали ее лучше меня.
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #237 - 28. Декабря 2011 :: 13:28
Печать  
vandalsvq писал(а) 28. Декабря 2011 :: 12:47:
Dolly_EV, см. в сторону раздела документации "Предопределенные текстовые параметры"...

И это... я люблю пользователей своих классов, но не люблю когда они не читают доку вообще... Лучше чтобы вы знали ее лучше меня.


Смущённый Да читаю я доку, читаю... но не всю подряд, а по потребности... ИСПРАВЛЮСЬ))
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #238 - 30. Декабря 2011 :: 06:34
Печать  
Выложена новая версия... всем маст хев Улыбка)) переводится как с Новым годом Улыбка))))))

1.8.3 от 30.12.11г.
- Исправлена ошибка парсинга внутри '' или "".
  

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



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #239 - 01. Января 2012 :: 06:26
Печать  
Саша, спасибо за подарки! С Новым Годом! Улыбка
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #240 - 11. Января 2012 :: 12:15
Печать  
С наступившими!
Активно пользуюсь 1cpp и AccountsRecordSet под SQL. Понадобилось использовать прямые запросы к DBF базе. попробовал ПрямойЗапрос. Пока туговато перестроиться на синтаксис и структуру.
Не могу понять, почему не работает запрос:
Код
Выбрать все
запрос = "
	|select                                            
	|	ост.КоличествоОстаток Количество,
	|	ЛЕВО(ост.Субконто1, 9) [Товар $Справочник.Номенклатура],
	|	ост.Субконто1_вид Товар_вид,
	|	ост.Субконто2 [Склад $Субконто],
	|	ост.Субконто2_вид Склад_вид
	//|	ост.Субконто3 [Партия $Субконто],
	//|	ост.Субконто3_вид Партия_вид
	|from $БИОстатки.Основной(
	|	:КонДата~,
	|	#Счет,
	|	(Субконто1, Субконто2),
	|	,
	|	(Субконто1 в (
	|		select distinct
	|			$нп.Продукт
	|		from Справочник.НаборПродуктов as нп
	|		where нп.parentext in (select val from #СписокИзделий)))
	|	and (Субконто2 = :Склад)
	|	,
	|) as ост        
	|join Справочник.Номенклатура as ном on ном.id = ЛЕВО(Субконто1, 9)
	|";
	рс = СоздатьОбъект("ПрямойЗапрос");
	рс.УстановитьТекстовыйПараметр("КонДата", ДатаДок);  
	рс.УстановитьТекстовыйПараметр("Склад", Склад);
	рс.УложитьСписокОбъектов(СчетПоКоду("41.2"), "#Счет");
	рс.УложитьСписокОбъектов(СписокИзделий, "#СписокИзделий", "Номенклатура");
	тз = рс.Выполнить("ТаблицаЗначений", запрос);
 


Типизация ост.Субконто1 [Товар $Справочник.Номенклатура] не прокатывала. Почитал - сделал ост.Субконто1 [Товар $Субконто], потом ЛЕВО(ост.Субконто1, 9) [Товар $Справочник.Номенклатура] - оба варианта работает.

Почему тогда join Справочник.Номенклатура as ном on ном.id = ЛЕВО(Субконто1, 9) выдает пустой результат?

И еще: не могу получить остатки, которые бы сходились со штатными отчетами. Как бороть? с AccuntsRecordSet проблем не возникало, поэтому думаю, что чего-то не уловил в ПрямомЗапросе. Разъясните как быть.
« Последняя редакция: 12. Января 2012 :: 06:43 - vinogradoff »  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #241 - 11. Января 2012 :: 12:19
Печать  
1) Какой тип у Субконто1
2) $нп.Продукт [Товар $Справочник.Номенклатура]
вот тут убери типизацию - она не нужна
  
Наверх
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #242 - 11. Января 2012 :: 12:21
Печать  
1) Справочник.Номенклатура
2) Убрал, после опытов осталось.
Без join запрос работает, после добавления - пусто.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #243 - 11. Января 2012 :: 12:27
Печать  
На самом деле, больше печалит тот факт, что не могу получить остатки, равные остаткам из штатных запросов. Этот join делал, чтобы получить доп. данные для решения этой проблемы, а получается наткнулся на новую.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #244 - 11. Января 2012 :: 12:29
Печать  
И, кстати, типизация $нп.Продукт [Товар $Справочник.Номенклатура] не повлияла на результат (если убрать join, то получаю какие-то данные не зависимо от того, есть типизация или нет)
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #245 - 11. Января 2012 :: 12:35
Печать  
Вопрос по остаткам снят: я тупой.  Печаль
Остался по join-у
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #246 - 11. Января 2012 :: 12:46
Печать  
select ном.*,
...
left join Справочник.Номенклатура as ном on ном.id = ЛЕВО(ост.Субконто1, 9)

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #247 - 11. Января 2012 :: 13:01
Печать  
Anatol писал(а) 11. Января 2012 :: 12:46:
select ном.*,
...
left join Справочник.Номенклатура as ном on ном.id = ЛЕВО(ост.Субконто1, 9)



Пробовал, пусто даже с left join
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #248 - 11. Января 2012 :: 13:11
Печать  
а в бдф точно ЛЕВО ?
  
Наверх
wwwICQ  
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #249 - 11. Января 2012 :: 13:16
Печать  
В мануале не нашел ограничений на использование ЛЕВО.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #250 - 11. Января 2012 :: 13:19
Печать  
СРЕД(Субконто1, 1, 9) не помогает
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #251 - 11. Января 2012 :: 13:19
Печать  
а для типизации ЛЕВО помогает
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #252 - 11. Января 2012 :: 16:49
Печать  
Из всего запроса не понравилось:
1. $нп.Продукт [Товар $Справочник.Номенклатура] - типизация тут ни к чему совсем, да и вложенный запрос я бы сначала сделал во временную таблицу, и ее бы использовал в ВТ (так лучше будет). Кстати почему выборка из одной таблицы, типизация другой?
2. join надо на left join все таки исправить, сравнение сделать в порядке таблиц (Ост = $Ном.ТекущийЭлемент)
3. В ВТ указываешь 2 субконто, в запросе все три используешь Улыбка злой ты.

Типизация субконто1 действительно именно Справочник.Номенклатура? Потому что если нет искать надо в ней.
Попробуй без типизации значения посмотри в Субконто1.

Если что сделай РежимОтладки = 1 и в ТХТ выложи. А еще лучше результат запроса без типизации приложи, тогда можно анализ получше провести.
  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #253 - 12. Января 2012 :: 05:29
Печать  
vandalsvq писал(а) 11. Января 2012 :: 16:49:
Из всего запроса не понравилось:
1. $нп.Продукт [Товар $Справочник.Номенклатура] - типизация тут ни к чему совсем
Прекрасно понимаю. Я и написал, что случайно осталось после того, как проверял запрос.

vandalsvq писал(а) 11. Января 2012 :: 16:49:
Кстати почему выборка из одной таблицы, типизация другой?
Это в каком месте?

vandalsvq писал(а) 11. Января 2012 :: 16:49:
2. join надо на left join все таки исправить
Не должно влиять. Субконто "не номенклатура" или ПустойИД меня не интересуют (если допустить, что такие могли появиться)

vandalsvq писал(а) 11. Января 2012 :: 16:49:
3. В ВТ указываешь 2 субконто, в запросе все три используешь Улыбка злой ты.
3-е закомментировано

vandalsvq писал(а) 11. Января 2012 :: 16:49:
Типизация субконто1 действительно именно Справочник.Номенклатура?
Да.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #254 - 12. Января 2012 :: 06:44
Печать  
vandalsvq писал(а) 11. Января 2012 :: 16:49:
да и вложенный запрос я бы сначала сделал во временную таблицу, и ее бы использовал в ВТ (так лучше будет)
Согласен, но на суть не влияет.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #255 - 12. Января 2012 :: 06:48
Печать  
vinogradoff, вот тут типизация одна, а выборка другая Улыбка, но это не суть, по идее внутри типизация будет игнорирована насколько я знаю.
Код
Выбрать все
	|		select distinct
	|			$нп.Продукт [Товар $Справочник.Номенклатура]
	|		from Справочник.НаборПродуктов as нп 



Приложи режим отладки + мне надо выборку (хоть несколько строк) из БИОстатки без типизации, чтобы понять в чем дело. Желательно все в архив.
  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #256 - 12. Января 2012 :: 07:58
Печать  
Цитата:
вот тут типизация одна, а выборка другая

В справочнике НаборПродуктов, подчиненный справочнику Номенклатура, реквизит Продукт имеет тип Справочник.Номенклатура.

  

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


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

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

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #258 - 12. Января 2012 :: 12:24
Печать  
с join-ом (немного подправлен)
  

_______1_001.txt ( 10 KB | Загрузки )
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #259 - 12. Января 2012 :: 12:32
Печать  
И подскажите пожалуйста, какой тип и вид на выходе имеет поле ост.Субконто3 [Партия $Субконто]. Третье субконто имеет тип Документ (как его связать с журналом)?
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #260 - 12. Января 2012 :: 13:03
Печать  
заработало  Озадачен
Код
Выбрать все
	|select    
	|	ост.КоличествоОстаток Количество,
	|	ост.Субконто1 [Товар $Субконто],
	|	ост.Субконто1_вид Товар_вид,
	|	ост.Субконто3 [Партия $Субконто],
	|	ост.Субконто3_вид Партия_вид,
	|	ост.Субконто3 Пар
	|from $БИОстатки.Основной(
	|	:КонДата~,
	|	#Счет,
	|	(Субконто1, Субконто2, Субконто3),
	|	Количество,
	|	(Субконто1 в (
	|		select distinct
	|			$нп.Продукт
	|		from Справочник.НаборПродуктов as нп
	|		where нп.parentext in (select val from #СписокИзделий)))
	|	and
	|	(Субконто2 = :Склад)
	|	,
	|) as ост
	|join Справочник.Номенклатура as ном on сред(ост.Субконто1, 1, 9) = ном.id
	|where ост.КоличествоОстаток > 0
	|	and ост.Субконто3 != :ПустойИД13 

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #261 - 12. Января 2012 :: 13:57
Печать  
Совсем всё плохо. Не понимаю почему заработал join, а теперь не понимаю почему перстаёт работать с добавлением order by
Код
Выбрать все
	|select
	|	ном.CODE,
	|	ост.КоличествоОстаток Количество,
	|	ост.Субконто1 [Товар $Субконто],
	|	ост.Субконто1_вид Товар_вид,
	|	ост.Субконто3 [Партия $Субконто],
	|	ост.Субконто3_вид Партия_вид,
	|	ост.Субконто3 Пар
	|from $БИОстатки.Основной(
	|	:КонДата~,
	|	#Счет,
	|	(Субконто1, Субконто2, Субконто3),
	|	Количество,
	|	(Субконто1 в (
	|		select distinct
	|			$нп.Продукт
	|		from Справочник.НаборПродуктов as нп
	|		where нп.parentext in (select val from #СписокИзделий)))
	|	and
	|	(Субконто2 = :Склад)
	|	,
	|) as ост
	|join Справочник.Номенклатура as ном on ЛЕВО(ост.Субконто1, 9) = ном.id
	//|join ЖурналДокументов as ж on ж.iddoc = право(ост.Субконто3, 9)
	|where ост.КоличествоОстаток > 0
	|	and ост.Субконто3 != :ПустойИД13
	|group by
	|	ном.DESCR 


в результат получаю не все позиции (в частном случае получаю ~50 строк без order by и 3 строки с ним).
Всего лишь добавив упорядочивание.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #262 - 12. Января 2012 :: 16:47
Печать  
Пиши все таки "правильно".
Если "таб1" соединяется с "таб2" тогда условие соединения "таб1.реквизит = таб2.реквизит". Более того пиши всегда представления таблиц, пиши правила соединения правильно (см. документацию какие виды соединения поддерживает прямой запрос).
Писал я ее не просто так, когда писал анализировал что "умеет" SQLite и SQL одновременно, и старался сделать.
У меня вот честно говорю никаких проблем с ним нет. Вообще. Причем писал как БУ, так и регистры и более сложные конструкции.
Да и добавил ты не упорядочивание, а группировку. Как бы group by не похоже на order by Улыбка

Я кстати сначала и подумал что проблема в условии соединения, но просто не подумал что SQLite может на это как то не так отреагировать.

И я еще думаю что писать синтаксисом языка прямого запроса не так сложно. Зато переход на 8 будет проще потом. Улыбка))))
  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #263 - 13. Января 2012 :: 05:21
Печать  
Цитата:
Да и добавил ты не упорядочивание, а группировку.

FFFFFFFFFFFFUUUUUUUUU
Прошу прощения.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #264 - 13. Января 2012 :: 06:23
Печать  
И все же, если раскомментировать упорядочивание, то получаю другой набор данных.
Ткните, пожалуйста, что не так делаю.
Код
Выбрать все
	СписокИзделий = СоздатьОбъект("СписокЗначений");
	Блюда.Выгрузить(СписокИзделий,,,"Блюдо");
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	$СпрНом.Код КАК Код,
	|	$СпрНом.Наименование КАК Наименование,
	|	Ост.КоличествоОстаток КАК Количество,
	|	Ост.Субконто1 [Товар $Субконто],
	|	Ост.Субконто1_вид Товар_вид,
	|	Ост.Субконто3 [Партия $Субконто],
	|	Ост.Субконто3_вид Партия_вид
	|ИЗ $БИОстатки.Основной(
	|	:КонДата~,
	|	#Счет,
	|	(Субконто1, Субконто2, Субконто3),
	|	Количество,
	|	(Субконто1 В (
	|		ВЫБРАТЬ РАЗЛИЧНЫЕ
	|			$нп.Продукт
	|		ИЗ Справочник.НаборПродуктов КАК нп
	|		ГДЕ нп.parentext В (ВЫБРАТЬ val ИЗ #СписокИзделий)))
	|	И
	|	(Субконто2 = :Склад)
	|	,
	|) КАК Ост
	|СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом $nolock ПО ЛЕВО(Ост.Субконто1, 9) = $СпрНом.ТекущийЭлемент
	|ГДЕ Ост.КоличествоОстаток > 0
	|	И Ост.Субконто3 != :ПустойИД13
	//|УПОРЯДОЧИТЬ
	//|	$СпрНом.Наименование
	|";
	рс = СоздатьОбъект("ПрямойЗапрос");
	рс.РежимОтладки = 1;
	рс.БухгалтерскийУчет = 1;
	рс.УстановитьТекстовыйПараметр("КонДата", ДатаДок);  
	рс.УстановитьТекстовыйПараметр("Склад", Склад);
	рс.УложитьСписокОбъектов(СчетПоКоду("41.2"), "#Счет");
	рс.УложитьСписокОбъектов(СписокИзделий, "#СписокИзделий", "Номенклатура");
	тз = рс.Выполнить("ТаблицаЗначений", ТекстЗапроса);
	тз.Выгрузить(тт);
	тт.ВидимостьКолонки("Товар_вид, Партия_вид", 0); 

  

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


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

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

Вытащи наконец вложенную выборку в отдельную временную таблицу. А то больно смотреть текст запроса в режиме отладки Печаль
  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #266 - 13. Января 2012 :: 09:39
Печать  
Соединил с Журналом - упорядочивание по дате работает. В общем, решил пока сортировать средствами 1С. Потом буду решать, что не так было. Спасибо за помощь.
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #267 - 13. Января 2012 :: 10:54
Печать  
При выгрузке в ТЗ так должно быть, что реквизит с типом Число10.5, например 1.16000, выгружается как 1.15999999999999? функция ОКРУГЛИТЬ не помогает.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #268 - 13. Января 2012 :: 13:37
Печать  
Сделай так
Код
Выбрать все
Ост.Количество КАК [Количество $Число.10.2] 



Особенности SQLite
  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #269 - 13. Января 2012 :: 13:49
Печать  
Если использовать $ПоследнееЗначение, то эффект тот же, как от УПОРЯДОЧИТЬ из постов выше, причем, абсолютно одинаковый результат (на выходе другой набор данных). Я подозреваю, что у меня что-то не так, но что именно не могу понять.
Код
Выбрать все
	рс = СоздатьОбъект("ПрямойЗапрос");

	СписокИзделий = СоздатьОбъект("СписокЗначений");
	Блюда.Выгрузить(СписокИзделий,,,"Блюдо");
	рс.ВыполнитьЗапрос("СОЗДАТЬ ТАБЛИЦА #ТаблицаПродукты(Продукт VARCHAR(9))");

	ТекстЗапроса = "
	|ВСТАВИТЬ ВНУТРЬ #ТаблицаПродукты
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	$СпрНП.Продукт КАК Продукт
	|ИЗ Справочник.НаборПродуктов КАК СпрНП $nolock
	|ГДЕ $СпрНП.Владелец В (ВЫБРАТЬ val ИЗ #СписокИзделий)
	|	И $СпрНП.ПометкаУдаления = 0
	|";
	рс.УложитьСписокОбъектов(СписокИзделий, "#СписокИзделий", "Номенклатура");
	рс.ВыполнитьЗапрос(ТекстЗапроса);


	ТекстЗапроса = "
	|ВЫБРАТЬ  
	|	Ост.Субконто1 [Товар $Субконто],
	|	Ост.Субконто1_вид Товар_вид,
	|	Ост.КоличествоОстаток КАК Количество,
	|	$Журнал.ДатаДокумента КАК [ДатаДок $Дата],
	|	$ПоследнееЗначение.Номенклатура.Масса($СпрНом.ТекущийЭлемент, :ДатаДок) КАК Фасовка
	|ИЗ $БИОстатки.Основной(
	|	:ДатаДок~,
	|	#Счет,
	|	,
	|	Количество,
	|	(Субконто1 В #ТаблицаПродукты) И (Субконто2 = :Склад),
	|) КАК Ост
	|СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом $nolock ПО ЛЕВО(Ост.Субконто1, 9) = $СпрНом.ТекущийЭлемент
	|СОЕДИНЕНИЕ ЖурналДокументов as Журнал $nolock on ПРАВО(Ост.Субконто3, 9) = Журнал.iddoc
	|ГДЕ ОКРУГЛИТЬ(Ост.КоличествоОстаток, 5) > 0
	|	И Ост.Субконто3 != :ПустойИД13
	|";
	рс.БухгалтерскийУчет = 1;
	рс.УстановитьТекстовыйПараметр("ДатаДок", ДатаДок);  
	рс.УстановитьТекстовыйПараметр("Склад", Склад);
	рс.УложитьСписокОбъектов(СчетПоКоду("41.2"), "#Счет");
	тз = рс.Выполнить("ТаблицаЗначений", ТекстЗапроса);
	тз.Сортировать("Товар, ДатаДок");

	тз.Выгрузить(тОст);  
	тОст.ВидимостьКолонки("Товар_вид", 0);  

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


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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #270 - 13. Января 2012 :: 13:53
Печать  
База ведь DBF? Выложить можешь? Скачаю все посмотрю. Ты меня прямо заинтриговал. Желательно с данными (и да...у тебя какая ОС стоит?)...
  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #271 - 13. Января 2012 :: 13:59
Печать  
Код
Выбрать все
|	$СпрНП.Количество КАК [Количество Число.10.5],

|	Ост.КоличествоОстаток КАК [Количество Число.10.5], 


не помогло

windows xp sp3
dbf (ТиИ делал)
7.70.027
1cpp 3.2.3.16
1sqlite 1023
ПрямойЗапрос 008 30/12/2011

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


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

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

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #273 - 17. Января 2012 :: 09:36
Печать  
vandalsvq, нужна помощь.
Нужно получить последнее значение. Запрос рабочий. Добавляю
Код
Выбрать все
Элемент, :ДатаДок) КАК Рекв 

, получаю ошибку. $СпрНП.ТекущийЭлемент - элемент из запроса нужного типа, ДатаДок - тип Дата через УстановитьТекстовыйПараметр. Причем, в режиме отладки идет сначала
Получить последнее значение реквизита 'имя_реквизита' объекта 'имя_объекта' не удалось., а потом, что у меня syntax error где-то near "(".
« Последняя редакция: 17. Января 2012 :: 11:05 - vinogradoff »  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #274 - 17. Января 2012 :: 21:04
Печать  
В тексте запроса заметил вот это "ПоследнееЗначение.НаборПродкутов.ФНеИсп" уж не в этом ли дело??? (Вроде спр. называется НаборПродуктов)

Вот пример моего запроса... сработал на типовой бухе (DBF)
Код
Выбрать все
	ВЫБРАТЬ
	|	Ост.Субконто1 КАК [ОС $Субконто]
	|	,Ост.Субконто1_вид КАК ОС_вид
	|	,Ост.СуммаОстаток КАК СуммаОстаток
	|	,$ПоследнееЗначение.ОсновныеСредства.Состояние($СпрОС.ТекущийЭлемент, :ДатаДок) КАК [Состояние $Перечисление.СостоянияОС]
	|ИЗ
	|	$БИОстатки.Основной(:ДатаДок, #СчетОС, (Субконто1), Сумма, , ) КАК Ост
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК СпрОС $nolock
	|	ПО ЛЕВО(Ост.Субконто1, 9) = $СпрОС.ТекущийЭлемент 


  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #275 - 18. Января 2012 :: 04:59
Печать  
vandalsvq Спасибо!

Цитата:
Виртуальные таблицы
При использовании виртуальных таблиц все предусмотренные параметры являются не обязательными.
ВНИМАНИЕ: при построении запросов с использованием временных таблиц, у которых существуют параметры, предусматривающие перечисления через запятую, рекомендуется:
•      одно значение писать без обрамления в скобки
•      два и более значения писать только в скобках.
Например: Субконто1 или (Субконто1, Субконто2).
Подмигивание
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 27. Апреля 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #277 - 10. Февраля 2012 :: 07:11
Печать  
Код
Выбрать все
ТекстЗапроса = "
	|ВЫБРАТЬ
	|Пр.ACCDTID as [СчетПоДебету $Счет.Основной],
	|Пр.DOCID
	|ИЗ Проводки КАК Пр
	|ГДЕ
	|Пр.ACCDTID collate_1C = :Сч_ДБ";

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

Подскажите, как сделать параметризацию по Пр.DOCID ?

ЗЫ: Справку читал вдоль и поперек, не помогло  Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #278 - 10. Февраля 2012 :: 08:23
Печать  
Соединение с 1sjourn сделать вестимо, из него взять iddocdef в качестве типизирующего поля.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #279 - 15. Февраля 2012 :: 10:08
Печать  
Добрый день.

Подскажите, что не так в запросе:
Код
Выбрать все
SELECT
	MAX($Журнал.НомерДокумента) КАК НомерДокумента
ИЗ
	ЖурналДокументов КАК Журнал
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	Документ.Заявка КАК Шапка ПО $Журнал.ТекущийДокумент = $Шапка.ТекущийДокумент
ГДЕ
	LEFT($Журнал.НомерДокумента,4) = '"+Префикс+"'
 



Цитата:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "(": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{E:\Bases\SystemData\Classes\ПрямыеЗапросы\Пр
ПрямойЗапрос.Выполнить().Выгрузить(ТЗ);
{E:\BASES\EXTFORMS\ЗАГРУЗКАЗАЯВКИ.ERT(278)}: ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "(": syntax error
ЗапросSQLite.Выполн


LEFT убираю - работает
  
Наверх
 
IP записан
 
ssamm
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #280 - 15. Февраля 2012 :: 12:10
Печать  
Помогите пожалуйста с запросом.
Есть рабочий запрос (тут правда я его урезал)

SELECT
     РегОст.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
     РегОст.НачалоПериода КАК [День $Дата],
     РегОст.КоличествоКонечныйОстаток КАК [Остатки],
     Рег.Период КАК [Дата $Дата],
     Рег.КоличествоОборот КАК [Продано $ЧИСЛО]
FROM
     $РегистрОстаткиОбороты.ПартииНаличие(
                                        :НачПериода,
                                        :КонПериода~,
                                        Неделя,
                                        ДвиженияИГраницыПериода,
                                        (Номенклатура В (Выбрать val ИЗ #Номенклатура)),
                                        (Номенклатура),
                                        (Количество)
                                        ) КАК РегОст
ЛЕВОЕ СОЕДИНЕНИЕ
     $РегистрОбороты.Продажи(
                            :НачПериода,
                            :КонПериода~,
                            Неделя,
                            (Номенклатура В (Выбрать val ИЗ #Номенклатура)),
                            (Номенклатура),
                            (Количество)
                            ) КАК Рег
ПО (Рег.Номенклатура = РегОст.Номенклатура) И  (Рег.Период = РегОст.НачалоПериода)

Работает, на выходе имеем таблицу следующего вида:
Номенклатура   -  День  -  Остатки  -  Продано
"Швабра синяя"  01.02.12    329          0
"Швабра синяя"  06.02.12    325          4

Тут возникла необходимость, дабавить в запрос условие по "МОЛ", т.е. остатки чтоб брал только на определенных складах
Меняю условие отбора в виртуальной таблице "РегОст" на:
(Номенклатура В (Выбрать val ИЗ #Номенклатура)) И (МОЛ В (Выбрать val ИЗ #спсМОЛ)) ну и в списке отбираемых измерений указываю (МОЛ, Номенклатура)

Но теперь в результирующей таблице у меня идет разбивка на МОЛы:
Номенклатура   -  День  -  Остатки  -  Продано
"Швабра синяя"  01.02.12    12          0  (Склад 1)
"Швабра синяя"  01.02.12    18          0  (Склад 2)
"Швабра синяя"  06.02.12    8           4  (Склад 1)

А надо, чтоб было как и раньше, т.е.
Номенклатура   -  День  -  Остатки  -  Продано
"Швабра синяя"  01.02.12    30          0
"Швабра синяя"  06.02.12    26          4
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #281 - 15. Февраля 2012 :: 21:06
Печать  
ssamm писал(а) 15. Февраля 2012 :: 12:10:
...
ну и в списке отбираемых измерений указываю (МОЛ, Номенклатура)

Убери из измерений МОЛ, оставь только Номенклатура, как раньше.
Ну а ограничение(условие) накладывай и по МОЛ.
Помоему так.
  
Наверх
 
IP записан
 
ssamm
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #282 - 16. Февраля 2012 :: 05:13
Печать  
zk96 писал(а) 15. Февраля 2012 :: 21:06:
Убери из измерений МОЛ, оставь только Номенклатура, как раньше.
Ну а ограничение(условие) накладывай и по МОЛ.
Помоему так.


Вот спасибо, ларчик то, просто открывался, думал что условие работать не будет
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #283 - 16. Февраля 2012 :: 08:31
Печать  
ReLock писал(а) 15. Февраля 2012 :: 10:08:
Добрый день.

Подскажите, что не так в запросе:
Код
Выбрать все
SELECT
	MAX($Журнал.НомерДокумента) КАК НомерДокумента
ИЗ
	ЖурналДокументов КАК Журнал
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	Документ.Заявка КАК Шапка ПО $Журнал.ТекущийДокумент = $Шапка.ТекущийДокумент
ГДЕ
	LEFT($Журнал.НомерДокумента,4) = '"+Префикс+"'
 



Цитата:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "(": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{E:\Bases\SystemData\Classes\ПрямыеЗапросы\Пр
ПрямойЗапрос.Выполнить().Выгрузить(ТЗ);
{E:\BASES\EXTFORMS\ЗАГРУЗКАЗАЯВКИ.ERT(278)}: ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "(": syntax error
ЗапросSQLite.Выполн


LEFT убираю - работает



в sqllite нет left- юзай substr
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #285 - 17. Февраля 2012 :: 09:12
Печать  
Спасибо за рекомендации!  Улыбка
  
Наверх
 
IP записан
 
Sk0rp
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 24. Февраля 2012
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #286 - 24. Февраля 2012 :: 16:01
Печать  
Натолкнулся на учень не эффективное получение периодических реквизитов. Использовал вот такой код:
Код
Выбрать все
|ВЫБРАТЬ Цены.*
|ИЗ
|	$СрезПоследних.Цены(:НаДату
|		, (Цена, Валюта, Единица)
|		, ($СпрЦен.ПометкаУдаления = 0
|			И $СпрЦен.КатегорияЦены В (:ТипЗакупа, :ТипРозница)
|			И $СпрЦен.Владелец В (SELECT val FROM #ВыбранныеТовары))
|		, ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Цены КАК СпрЦен $nolock
|			ПО $СпрЦен.ТекущийЭлемент = ТекущийЭлемент
|		,0
|	) КАК Цены
 


Он разворачивается в 7 (!!!) вложенных select и исполняется у меня более 12 секунд. (на DBF 65 секунд)
Код
Выбрать все
SELECT Цены.*
FROM
	(
	select
		vt_slicelast_SC3772.ТекущийЭлемент

		,max(vt_slicelast_SC3772.Валюта) as Валюта
		,max(vt_slicelast_SC3772.Единица) as Единица
		,max(vt_slicelast_SC3772.Цена) as Цена
	from (
		select
			slicelast_SC3772.objid ТекущийЭлемент

			,case when slicelast_SC3772.id = 3776 then LEFT(slicelast_SC3772.VALUE,9) end Валюта
			,case when slicelast_SC3772.id = 3863 then LEFT(slicelast_SC3772.VALUE,9) end Единица
			,case when slicelast_SC3772.id = 3775 then slicelast_SC3772.VALUE end Цена
		from (

			select tconst_4.objid, tconst_4.id, tconst_4.date, tconst_4.time, tconst_4.docid, tconst_4.value
			from (
				select tconst_3.objid, tconst_3.id, tconst_3.date, tconst_3.time, max(tconst_3.docid) docid
				from (
					select tconst_2.objid, tconst_2.id, tconst_2.date, max(tconst_2.time) time
					from (
						select tconst_1.objid, tconst_1.id, max(tconst_1.date) date
						from _1SCONST tconst_1 (nolock)
						LEFT JOIN SC3772 AS СпрЦен (nolock)
			ON СпрЦен.ID = tconst_1.objid
						where tconst_1.date <= '20120131'
						and tconst_1.id in (3776,3863,3775)
						and (CASE WHEN СпрЦен.ISMARK = 1 THEN 1 ELSE 0 END = 0
			AND СпрЦен.SP3787 IN ('     4   ', '     3   ')
			AND СпрЦен.PARENTEXT IN (SELECT val FROM #ВыбранныеТовары))
						group by tconst_1.id, tconst_1.objid) slicelast_SC37721
					inner join _1SCONST tconst_2 (nolock)
					on slicelast_SC37721.id = tconst_2.id
					and slicelast_SC37721.objid = tconst_2.objid
					and slicelast_SC37721.date = tconst_2.date
					group by tconst_2.id, tconst_2.objid, tconst_2.date) slicelast_SC37722
				inner join _1SCONST tconst_3 (nolock)
				on slicelast_SC37722.id = tconst_3.id
				and slicelast_SC37722.objid = tconst_3.objid
				and slicelast_SC37722.date = tconst_3.date
				and slicelast_SC37722.time = tconst_3.time
				group by tconst_3.id, tconst_3.objid, tconst_3.date, tconst_3.time) slicelast_SC37723
			inner join _1SCONST tconst_4 (nolock)
			on slicelast_SC37723.id = tconst_4.id
			and slicelast_SC37723.objid = tconst_4.objid
			and slicelast_SC37723.date = tconst_4.date
			and slicelast_SC37723.time = tconst_4.time
			and slicelast_SC37723.docid = tconst_4.docid
		) slicelast_SC3772
	) vt_slicelast_SC3772
	group by vt_slicelast_SC3772.ТекущийЭлемент


) AS Цены
 



При замене на вот такой код прямого запроса 1С++:
Код
Выбрать все
|SELECT
|	ВыбранныеТовары.val AS [Товар $Справочник.Номенклатура],
|	$СпрЦен.КатегорияЦены AS [КатегорияЦены $Справочник.КатегорииЦен],
|	$ПоследнееЗначение.Цены.Цена(СпрЦен.ID, :КонДата) AS [Цена $Число],
|	$ПоследнееЗначение.Цены.Единица(СпрЦен.ID, :КонДата) AS [Единица $Справочник.Единицы],
|	$ПоследнееЗначение.Цены.Валюта(СпрЦен.ID, :КонДата) AS [Валюта $Справочник.Валюты]
|FROM #ВыбранныеТовары AS ВыбранныеТовары
|LEFT JOIN $Справочник.Цены AS СпрЦен (nolock)
|	ON ВыбранныеТовары.val = СпрЦен.PARENTEXT
|WHERE
|	СпрЦен.ISMARK = 0
|	AND $СпрЦен.КатегорияЦены IN (:ТипЗакупа, :ТипРозница)
|ORDER BY
|	ВыбранныеТовары.val, $СпрЦен.КатегорияЦены
 



Разворачивается он в:
Код
Выбрать все
SELECT
	ВыбранныеТовары.val AS [Товар $Справочник.Номенклатура],
	СпрЦен.sp3787 AS [КатегорияЦены $Справочник.КатегорииЦен],
	(
select top 1
cast(c3775_vv.value as numeric(14, 2))
from
_1sconst as c3775_vv (nolock)
where
c3775_vv.id = 3775 and
c3775_vv.objid = СпрЦен.ID and
(c3775_vv.date <= '20120131')
order by c3775_vv.date desc, c3775_vv.time desc, c3775_vv.docid desc, c3775_vv.row_id desc
) AS [Цена $Число],
	(
select top 1
left(c3863_vv.value, 9)
from
_1sconst as c3863_vv (nolock)
where
c3863_vv.id = 3863 and
c3863_vv.objid = СпрЦен.ID and
(c3863_vv.date <= '20120131')
order by c3863_vv.date desc, c3863_vv.time desc, c3863_vv.docid desc, c3863_vv.row_id desc
) AS [Единица $Справочник.Единицы],
	(
select top 1
left(c3776_vv.value, 9)
from
_1sconst as c3776_vv (nolock)
where
c3776_vv.id = 3776 and
c3776_vv.objid = СпрЦен.ID and
(c3776_vv.date <= '20120131')
order by c3776_vv.date desc, c3776_vv.time desc, c3776_vv.docid desc, c3776_vv.row_id desc
) AS [Валюта $Справочник.Валюты]
FROM #ВыбранныеТовары AS ВыбранныеТовары
LEFT JOIN sc3772 AS СпрЦен (nolock)
	ON ВыбранныеТовары.val = СпрЦен.PARENTEXT
WHERE
	СпрЦен.ISMARK = 0
	AND СпрЦен.sp3787 IN ('     4   ', '     3   ')
ORDER BY
	ВыбранныеТовары.val, СпрЦен.sp3787
 



Запрос выдает все те же данные, (даже больше, т.к. есть явная связь со справочником цен)
Выполняется за 0.1 секунды, т.е более чем в 100 (!!!) раз быстрее.

Надо сказать, что если получать тоже самое обычным 1С-ным циклом по справочнику без запроса, то все равно выходит в 10 раз быстрее (за 1 секунду) чем через $СрезПоследних. (на DBF 1С-ный код работает с той же скоростью, что и быстрый запрос на 1С++ в SQL, т.е. менее чем 0.1 секунды)

Я чего-то не учел или $СрезПоследних на самом деле такой не быстрый?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #287 - 24. Февраля 2012 :: 20:46
Печать  
Вот попробуй этот вариант.
Для DBF эффективность среза и последнее значение у меня на тестах в среднем сопоставимы стали.
Для SQL на маленьких выборках (мало строк, мало реквизитов) срез проигрывает, на больших сопоставимо или выигрывает.
В целом все равно лучше чем было.

1.8.4 от 25.02.12 г.
- Оптимизирован сбор данных вирт. таблиц СрезПоследних и СрезПервых
« Последняя редакция: 24. Февраля 2012 :: 22:34 - vandalsvq »  

1Cv7_query_010.rar ( 234 KB | Загрузки )

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


1C++ rocks!

Сообщений: 4
Зарегистрирован: 24. Февраля 2012
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #288 - 27. Февраля 2012 :: 09:26
Печать  
vandalsvq писал(а) 24. Февраля 2012 :: 20:46:
Вот попробуй этот вариант.
Для DBF эффективность среза и последнее значение у меня на тестах в среднем сопоставимы стали.
Для SQL на маленьких выборках (мало строк, мало реквизитов) срез проигрывает, на больших сопоставимо или выигрывает.
В целом все равно лучше чем было.
1.8.4 от 25.02.12 г.
- Оптимизирован сбор данных вирт. таблиц СрезПоследних и СрезПервых

В #ВыбранныеТовары 140 позиций.
Прогонял каждый запрос по 3 раза, что бы все закешировалось.

SQL:
Код
Выбрать все
SELECT Цены.*
FROM
	(
	select
		vt_slicelast_SC3772.ТекущийЭлемент

		,max(vt_slicelast_SC3772.Валюта) as Валюта
		,max(vt_slicelast_SC3772.Единица) as Единица
		,max(vt_slicelast_SC3772.Цена) as Цена
	from (
		select
			slicelast_SC3772.objid ТекущийЭлемент

			,case when slicelast_SC3772.id = 3776 then LEFT(slicelast_SC3772.VALUE,9) end Валюта
			,case when slicelast_SC3772.id = 3863 then LEFT(slicelast_SC3772.VALUE,9) end Единица
			,case when slicelast_SC3772.id = 3775 then slicelast_SC3772.VALUE end Цена
		from (

			select tconst_4.objid, tconst_4.id, tconst_4.date, tconst_4.time, tconst_4.docid, tconst_4.value
			from (
				select tconst_3.objid, tconst_3.id, tconst_3.date, tconst_3.time, max(tconst_3.docid) docid
				from (
					select tconst_2.objid, tconst_2.id, tconst_2.date, max(tconst_2.time) time
					from (
						select tconst_1.objid, tconst_1.id, max(tconst_1.date) date
						from _1SCONST tconst_1 (nolock)
						LEFT JOIN SC3772 AS СпрЦен (nolock)
			ON СпрЦен.ID = tconst_1.objid
						where tconst_1.date <= '20120131'
						and tconst_1.id in (3776,3863,3775)
						and (CASE WHEN СпрЦен.ISMARK = 1 THEN 1 ELSE 0 END = 0
			AND СпрЦен.SP3787 IN ('     4   ', '     3   ')
			AND СпрЦен.PARENTEXT IN (SELECT val FROM #ВыбранныеТовары))
						group by tconst_1.id, tconst_1.objid) slicelast_SC37721
					inner join _1SCONST tconst_2 (nolock)
					on slicelast_SC37721.id = tconst_2.id
					and slicelast_SC37721.objid = tconst_2.objid
					and slicelast_SC37721.date = tconst_2.date
					group by tconst_2.id, tconst_2.objid, tconst_2.date) slicelast_SC37722
				inner join _1SCONST tconst_3 (nolock)
				on slicelast_SC37722.id = tconst_3.id
				and slicelast_SC37722.objid = tconst_3.objid
				and slicelast_SC37722.date = tconst_3.date
				and slicelast_SC37722.time = tconst_3.time
				group by tconst_3.id, tconst_3.objid, tconst_3.date, tconst_3.time) slicelast_SC37723
			inner join _1SCONST tconst_4 (nolock)
			on slicelast_SC37723.id = tconst_4.id
			and slicelast_SC37723.objid = tconst_4.objid
			and slicelast_SC37723.date = tconst_4.date
			and slicelast_SC37723.time = tconst_4.time
			and slicelast_SC37723.docid = tconst_4.docid
		) slicelast_SC3772
	) vt_slicelast_SC3772
	group by vt_slicelast_SC3772.ТекущийЭлемент


) AS Цены 


Время подготовки запроса: 20 мс, время выполнения запроса: 11877 мс.
(Первый прогон: 40 сек, второй 14 сек). Размер таблицы: 280 (по 2 цены на товар)
На DBF:
Код
Выбрать все
SELECT Цены.*
FROM
	(
	select
		vt_slicelast_SC3772.ТекущийЭлемент

		,max(vt_slicelast_SC3772.Валюта) as Валюта
		,max(vt_slicelast_SC3772.Единица) as Единица
		,max(vt_slicelast_SC3772.Цена) as Цена
	from (
		select
			slicelast_SC3772.objid ТекущийЭлемент

			,case when slicelast_SC3772.id = ' 2WW' then SUBSTR(slicelast_SC3772.VALUE,1,9) end Валюта
			,case when slicelast_SC3772.id = ' 2ZB' then SUBSTR(slicelast_SC3772.VALUE,1,9) end Единица
			,case when slicelast_SC3772.id = ' 2WV' then slicelast_SC3772.VALUE end Цена
		from (

			select tconst_2.objid, tconst_2.id, tconst_2.date, tconst_2.time, tconst_2.docid, tconst_2.value
			from (select tconst_1.objid, tconst_1.id, max(const_j.idx_date_time_iddoc) date_time_iddoc
				from [_1S.CONST] tconst_1
					left join [Журнал] const_j
					on tconst_1.docid = const_j.iddoc
				LEFT JOIN [Справочник.Цены] AS СпрЦен
			ON СпрЦен.ID = tconst_1.objid
				where tconst_1.date <= '20120131'
				and tconst_1.id in (' 2WW',' 2ZB',' 2WV')
				and (CASE WHEN СпрЦен.ISMARK = '*' THEN 1 ELSE 0 END = 0
			AND СпрЦен.КатегорияЦены IN ('     4   ', '     3   ')
			AND СпрЦен.PARENTEXT IN (SELECT val FROM vt_ВыбранныеТовары))
				group by tconst_1.id, tconst_1.objid) slicelast_SC37721
			left join [_1S.CONST] tconst_2
			on slicelast_SC37721.id = tconst_2.id
			and slicelast_SC37721.objid = tconst_2.objid
			and substr(slicelast_SC37721.date_time_iddoc, 1, 8) = tconst_2.date
			and substr(slicelast_SC37721.date_time_iddoc, 9, 6) = tconst_2.time
			and substr(slicelast_SC37721.date_time_iddoc, 15, 9) = tconst_2.docid
		) slicelast_SC3772
	) vt_slicelast_SC3772
	group by vt_slicelast_SC3772.ТекущийЭлемент


) AS Цены
Подбор индекса для таблицы 1SCONST:
	Ограничения: DATE<=;
	Упорядочить: ID, OBJID,
	Найдено в кэше
	Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
	Попадает в сортировку
	Стоимость: 66
Подбор индекса для таблицы 1SJOURN:
	Ограничения: IDDOC=;
	Найдено в кэше
	Выбран индекс IDDOC: IDDOC
	Стоимость: 20
Подбор индекса для таблицы SC3772:
	Ограничения: ID=;
	Найдено в кэше
	Выбран индекс IDD: ID
	Стоимость: 20
Подбор индекса для таблицы 1SCONST:
	Ограничения: DATE=; TIME=; DOCID=; OBJID=; ID=;
	Найдено в кэше
	Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
	Стоимость: 26 


Время подготовки запроса: 14 мс, время выполнения запроса: 111766 мс
(Первый прогон 200 сек, второй 111 сек). Размер таблицы 280.

SQL принципиально не поменялось, DBF замедлилось Печаль
  
Наверх
 
IP записан
 
Sk0rp
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 24. Февраля 2012
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #289 - 27. Февраля 2012 :: 10:16
Печать  
На этой-же базе.

В SQL:
Код
Выбрать все
|SELECT
|	ВыбранныеТовары.val AS [Товар $Справочник.Номенклатура],
|	$СпрЦен.КатегорияЦены AS [КатегорияЦены $Справочник.КатегорииЦен],
|	$ПоследнееЗначение.Цены.Цена(СпрЦен.ID, :НаДату) AS [Цена $Число],
|	$ПоследнееЗначение.Цены.Единица(СпрЦен.ID, :НаДату) AS [Единица $Справочник.Единицы],
|	$ПоследнееЗначение.Цены.Валюта(СпрЦен.ID, :НаДату) AS [Валюта $Справочник.Валюты]
|FROM #ВыбранныеТовары AS ВыбранныеТовары
|LEFT JOIN $Справочник.Цены AS СпрЦен (nolock)
|	ON ВыбранныеТовары.val = СпрЦен.PARENTEXT
|WHERE
|	СпрЦен.ISMARK = 0
|	AND $СпрЦен.КатегорияЦены IN (:ТипЗакупа, :ТипРозница)
|ORDER BY
|	ВыбранныеТовары.val, $СпрЦен.КатегорияЦены 

Время выполнения:    0.151


В DBF:
Код
Выбрать все
ТЗ.НоваяКолонка("Товар");
ТЗ.НоваяКолонка("КатегорияЦены");
ТЗ.НоваяКолонка("Цена");
ТЗ.НоваяКолонка("Единица");
ТЗ.НоваяКолонка("Валюта");

ТипЗакупа = Константа.ЗакупочнаяКатегорияЦен;
ТипРозница = Константа.РозничнаяКатегорияЦен;

Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(НаДату);

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

		КатегорияЦены = Цены.КатегорияЦены;
		Если (КатегорияЦены = ТипЗакупа) ИЛИ (КатегорияЦены = ТипРозница) Тогда
			ТЗ.НоваяСтрока();
			ТЗ.Товар = Цены.Владелец;
			ТЗ.КатегорияЦены = Цены.КатегорияЦены;
			ТЗ.Цена = Цены.Цена;
			ТЗ.Единица = Цены.Единица;
			ТЗ.Валюта = Цены.Валюта;
		КонецЕсли;
	КонецЦикла;
КонецЦикла; 

Время выполнения:    0.067

Результаты работы совпадают с "ПрямойЗапрос"


Размер SC3772.DBF - 40 Мб
Размер 1SCONST.DBF - 270 Мб
Размер 1sjourn.dbf - 42 Мб
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Если не поможет, давайте признаем срез неудавшимся экспериментом Улыбка
  

1Cv7_query_007.rar ( 234 KB | Загрузки )

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


1C++ rocks!

Сообщений: 4
Зарегистрирован: 24. Февраля 2012
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #291 - 27. Февраля 2012 :: 20:27
Печать  
На SQL поправилось, теперь общее время выполнения всего пакета запросов 0.830 секунды.
Здорово!
Правда я не понял зачем в запросе который добавляет данные в #const_ стоит:
     inner join _1SJOURN const_j (nolock)
           on tconst_1.docid = const_j.iddoc
Журнал нигде потом не используется.

На DBF эта версия класса дает ровно тот же запрос, что и 1.8.4. Выполняется одидаемо за те же 111 секунд Улыбка
Старая версия класса от 30.12.11 на DBF генерит запрос, который отрабатывает за 58 секунд.

Эксперимент ни в коем случае неудачным признавать не стоит. Функционал СрезПоследних намного богаче голого 1С++ и очень хотелось бы иметь его одинаково эффективным в SQL и DBF.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #292 - 11. Марта 2012 :: 19:38
Печать  
Теперь в теме про поставщика будет и информация про обновления класса "ПрямойЗапрос". Так что если что обновления брать тут
  

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


1C++ rocks!

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

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


Тогда подскажите, как при проведении документа получить остатки в регистре с учетом возможно сделанных движений документа - не на ТА, а по документ ?
Какой параметр в качестве КонецПериода нужно передать в $РегистрОстатки.<ИмяРегистра>(КонецПериода, Условие, Измерения, Ресурсы, Соединения)
Смысл в чем: проводится документ, документ сделал некоторые расходные движения в регистре.
Но после этого требуется проверить- остались ли какие-нибудь хвосты в регистре. если эти хвосты остались, то их нужно полностью списать.

Либо нужно заново делать запрос по остаткам, вычитать из него сделанные движения и затем анализировать результат ?
  
Наверх
 
IP записан
 
Jarad
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 22. Мая 2006
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #294 - 29. Марта 2012 :: 09:51
Печать  
Обнаружилась интересная особенность парсинга. Если в исходном запросе есть обращения к нескольким разным периодчиским реквизитам, то в версии 1.8.3, парсинг выдает н-этажный запрос со многими подзапросами, но работает правильно и выдает результат.
В версии 1.8.4. генерятся несколько временных таблиц, но срез данных по периодическому значению (а их несколько) каждый раз "убивает" предыдущую временную таблицу создает новую и добавляет результаты среза, т.е. на момент выполнения основного запроса во временной таблице "уже нет" данных о периодческом значении А, потому что оно "затерлось" значениями п.з. Б.
Исходные данные:
Код
Выбрать все
ТекстЗапроса = "
		|ВЫБРАТЬ  	ЦеныВДолларе.Квартира  [Квартира $Справочник],ЦеныВДолларе.КатегорияЦены  [КатегорияЦены $Справочник.КатегорииЦен],
		| 			СпрВалюты.ID [Валюта $Справочник.Валюты],
	 	| 			CASE WHEN ISNULL(ЦеныСправочникНеДоллар.Цена,0) <> 0 THEN
		|	       		ISNULL(ЦеныСправочникНеДоллар.Цена,0)
		|	  		ELSE
		|			CASE WHEN (СпрВалюты.ID <> ЦеныВДолларе.Валюта) AND (cast( СрезКурсы.КурсУправленческийПокупка  as real) <> 0)  THEN
		|	        	(cast(ЦеныВДолларе.Цена as real) *  cast(СрезКурсДоллар.КурсУправленческийПродажа as real)  /   cast( СрезКурсы.КурсУправленческийПокупка  as real) )
	 	| 		 	ELSE ЦеныВДолларе.Цена  END
	    | 			END AS Цена,
		| 			CASE WHEN   (СпрВалюты.ID = :ВалДоллар)  THEN 0
		| 	  		WHEN ISNULL(ЦеныСправочникНеДоллар.Цена,0) <> 0 THEN
		|				0
		| 			ELSE 1 END AS ФлагРасчета
		|FROM Справочник.Валюты КАК СпрВалюты $nolock
		|CROSS JOIN (
		|				ВЫБРАТЬ $СпрЦены.РеализуемыйЭлемент КАК Квартира, $СпрЦены.КатегорияЦены КАК КатегорияЦены,
		|			 			$СпрЦены.Валюта Валюта ,
		| 			 			Цена Цена
		|				ИЗ $СрезПоследних.Цены(:РабочаяДата~ ,(Цена),,) КАК СрезЦены
		|				ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Цены КАК СпрЦены $nolock ПО $СпрЦены.ТекущийЭлемент = СрезЦены.ТекущийЭлемент
		|				ГДЕ ($СпрЦены.ПометкаУдаления = 0) И ($СпрЦены.Валюта = :ВалДоллар )   И ($СпрЦены.РеализуемыйЭлемент = :Владелец~ )  
		|			) КАК ЦеныВДолларе
		|ЛЕВОЕ СОЕДИНЕНИЕ (
		|						ВЫБРАТЬ $СпрЦены.РеализуемыйЭлемент КАК Квартира,$СпрЦены.КатегорияЦены КАК КатегорияЦены,
		|					 		$СпрЦены.Валюта Валюта ,
		|		 			 		Цена Цена
		|						ИЗ $СрезПоследних.Цены(:РабочаяДата~ ,(Цена),,	) КАК СрезЦены
		|						ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Цены КАК СпрЦены $nolock ПО $СпрЦены.ТекущийЭлемент = СрезЦены.ТекущийЭлемент
		|
		|						ГДЕ ($СпрЦены.ПометкаУдаления = 0) И ($СпрЦены.Валюта <> :ВалДоллар )   И ($СпрЦены.РеализуемыйЭлемент = :Владелец~ )  
		|				  ) КАК ЦеныСправочникНеДоллар ПО
		|					(ЦеныСправочникНеДоллар.Валюта =  СпрВалюты.ID) И
		|					(ЦеныВДолларе.Квартира = ЦеныСправочникНеДоллар.Квартира) И
		|					(ЦеныВДолларе.КатегорияЦены = ЦеныСправочникНеДоллар.КатегорияЦены)
		|ЛЕВОЕ СОЕДИНЕНИЕ $СрезПоследних.Валюты(:РабочаяДата~ ,(КурсУправленческийПокупка),,) КАК СрезКурсы
		|				  ПО $СпрВалюты.ТекущийЭлемент = СрезКурсы.ТекущийЭлемент
		|ЛЕВОЕ СОЕДИНЕНИЕ $СрезПоследних.Валюты(:РабочаяДата~ ,(КурсУправленческийПродажа),,) КАК СрезКурсДоллар
		|				  ПО ЦеныВДолларе.Валюта = СрезКурсДоллар.ТекущийЭлемент"; 


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


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 22. Мая 2006
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #295 - 29. Марта 2012 :: 09:54
Печать  
Вот результаты парсинга (версия 1.8.3.):
  

pasrer183.txt ( 9 KB | Загрузки )
Наверх
 
IP записан
 
Jarad
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 22. Мая 2006
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #296 - 29. Марта 2012 :: 09:55
Печать  
Результаты парсинга (1.8.4.) - результат запроса - пустая таблица.
  

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


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

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

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #298 - 12. Апреля 2012 :: 03:58
Печать  
"УложитьСписокГрупп()"
либо я чего-то неправильно делаю, либо этот метод не работает должным образом.

Простецкий пример:
Код
Выбрать все
|ВЫБРАТЬ
	|	Контрагенты.ID КАК [Ссылка $Справочник.Контрагенты]
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты $nolock
	|ГДЕ
	|	Контрагенты.ID В (ВЫБРАТЬ val ИЗ #Контрагенты) 



выдает мне тот же элемент (группу), что и передается в метод "УложитьСписокГрупп()"
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #299 - 12. Апреля 2012 :: 05:45
Печать  
Код
Выбрать все
	|	$Контрагенты.Родитель В (ВЫБРАТЬ val ИЗ #Контрагенты) 

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #300 - 12. Апреля 2012 :: 06:27
Печать  
leshik писал(а) 12. Апреля 2012 :: 05:45:
Код
Выбрать все
	|	$Контрагенты.Родитель В (ВЫБРАТЬ val ИЗ #Контрагенты) 


Таким образом в выборку не попадут значения вложенных групп.
С таким успехом я мог бы просто использовать УложитьСписокЗначений().
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #301 - 17. Апреля 2012 :: 04:31
Печать  
Вобщем запутался я, требуется хелп  Печаль
Код
Выбрать все
// ПрямойЗапрос ВТ $ПодчиненныеДокументы
		ЗапросПодч = СоздатьОбъект("ПрямойЗапрос");
	    ЗапросПодч.БухгалтерскийУчет = 0;
	    ЗапросПодч.ОперативныйУчет = 0;
	    ЗапросПодч.ПериодическиеЗначения = 0;
		ЗапросПодч.РежимОтладки = 0;
		ЗапросПодч.Текст="
		|ВЫБРАТЬ
		|	ПодчДок.ТекущийДокумент КАК [ДокПодч $Документ]
		|	,ПодчДок.ВидДокумента КАК [ДокПодч_вид $ВидДокумента]
		|ИЗ
		|	$ПодчиненныеДокументы.Потомки(@ДокОсн) КАК ПодчДок
		|ГДЕ";
		Если глЭтоSQL=1	Тогда
			ЗапросПодч.Текст=ЗапросПодч.Текст+"
			|	ВидДокумента = @лВидДок";
			лЗначВидДок=глМетаДата.ИДДокумента("ПриходныйОрдер");
		Иначе
			ЗапросПодч.Текст=ЗапросПодч.Текст+"
			|	СОКРЛ(ВидДокумента) = @лВидДок";
			;
		КонецЕсли;

		ЗапросПодч.ОписаниеПараметра("ДокОсн","Неопределенный");
		ЗапросПодч.ОписаниеПараметра("лВидДок","ВидДокумента");
		ЗапросПодч.ПодготовитьПараметризованныйЗапрос();

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



Для СКЛя условие ГДЕ не срабатывает - выдает пустую таблицу с подчиненными  Печаль
Пните в нужном направлении?? и как-нибудь так пните, чтобы в параметр Запроса можно было просто передать "ПриходныйОрдер" и все взлетело?
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #302 - 17. Апреля 2012 :: 04:52
Печать  
Вообще то для подставления вида документа есть предопределенные параметры. Попробуй напиши
Код
Выбрать все
ВидДокумента = :ВидДокумента.ПриходныйОрдер 


Соответственно описывать его нет необходимости
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #303 - 17. Апреля 2012 :: 05:00
Печать  
vandalsvq писал(а) 17. Апреля 2012 :: 04:52:
Вообще то для подставления вида документа есть предопределенные параметры. Попробуй напиши
Код
Выбрать все
ВидДокумента = :ВидДокумента.ПриходныйОрдер 


Соответственно описывать его нет необходимости


Да это я в курсе, трабла в том, что там не только "ПриходныйОрдер" может быть, но и другие виды...это я для примера текст запроса написал, на самом деле это процедура в Глобальнике, к которой из кучи мест обращаются, и у которой в параметрах ВидДок. Т.е. нужен именно параметр @лВидДок
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Мой текст запроса приложен в файле. Смотри. Впрочем от твоего он отличается только тем что я не парюсь на счет sql или dbf.
Текст процедуры полностью покажи. Можно также в тхт

Надо будет сделать нормальный разбор параметров в параметризированном запросе, хотя бы в части ВидСправочника, ВидДокумента.
  

test_p_sql.txt ( 0 KB | Загрузки )

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #305 - 17. Апреля 2012 :: 06:27
Печать  
vandalsvq писал(а) 17. Апреля 2012 :: 06:08:
Впрочем от твоего он отличается только тем что я не парюсь на счет sql или dbf.


А ты свой проверял на DBF/SQL ?
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #306 - 17. Апреля 2012 :: 06:35
Печать  
Вот весь текст. Но это мало поможет...
Сравнил с твоим.. все тоже самое. И ранее у меня были варианты без проверки СКЛ/ДБФ... не взлетает Печаль
  

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


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

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

Код
Выбрать все
Т = "ВЫБРАТЬ $Ж.ТекущийДокумент
|ИЗ ЖурналДокументов КАК Ж $nolock
|ГДЕ $Ж.ВидДокумента = @ВидДокумента";
Запрос.ОписаниеПараметра("ВидДокумента", "ВидДокумента");
Запрос.ПодготовитьПараметризированныйЗапрос();
Запрос.ПодставлятьПараметры("ВидДокумента", глМетаДата.ИДДокумента("ПриходныйОрдер"));
ИТЗ = Запрос.ВыполнитьПараметризированныйЗапрос(); 

  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #308 - 17. Апреля 2012 :: 09:09
Печать  
Код
Выбрать все
	Запрос = СоздатьОбъект("ПрямойЗапрос");
	Запрос.Текст = "ВЫБРАТЬ $Ж.ТекущийДокумент
	|ИЗ ЖурналДокументов КАК Ж $nolock
	|ГДЕ $Ж.ВидДокумента = @ВидДокумента";
	Запрос.ОписаниеПараметра("ВидДокумента", "ВидДокумента");
	Запрос.ПодготовитьПараметризованныйЗапрос();
	Запрос.ПодставлятьПараметры("ВидДокумента", глМетаДата.ИДДокумента("ПриходныйОрдер"));
	ИТЗ = Запрос.ВыполнитьПараметризованныйЗапрос();
	лисхТЗ = ИТЗ;
	Парам = СоздатьОбъект("СписокЗначений");
	Парам.ДобавитьЗначение("лисхТЗ","ЗаголовокОбъекта_");
	Парам.ДобавитьЗначение(лисхТЗ,"Объект_");
	ОткрытьФорму("Отчет#", Парам, КаталогИБ()+"\Extforms\служб_ПросмотрСЗ_ТЗ_ИТЗ.ert");
 



На СКЛе - есть, на ДБФ - пусто.
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #309 - 17. Апреля 2012 :: 09:14
Печать  
Скажу больше)) добавил вилку:
Код
Выбрать все
        Если глЭтоSQL=1	Тогда
		Запрос.Текст=Запрос.Текст+"
		|ГДЕ $Ж.ВидДокумента = @ВидДокумента";
		лЗначВидДок=глМетаДата.ИДДокумента("ПриходныйОрдер");
	Иначе
		Запрос.Текст=Запрос.Текст+"
		|ГДЕ СОКРЛ($Ж.ВидДокумента) = @ВидДокумента";
		;
	КонецЕсли;
 



Теперь работает для обоих форматов. Так что собака все-таки зарыта где-то в парсере параметризованного запроса для ВТ $ПодчиненныеДокументы... Видимо, ждем багофикс? ))
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Теперь возьми ВТ и соедини ее с журналом документов по полю документа и отбор поставь по виду документа на соотв. поле журнала + выведи нетипизированные колонки вида документа из ВТ и журнала чтобы посмотреть не отличаются ли они.
Кстати ты уверен что надо СОКРЛ в dbf? я что то не очень Улыбка
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #311 - 17. Апреля 2012 :: 09:38
Печать  
vandalsvq писал(а) 17. Апреля 2012 :: 09:27:
Кстати ты уверен что надо СОКРЛ в dbf? я что то не очень Улыбка


В отладчике посмотрел:
глМетаДата.ЧислоВСтроку(глМетаДата.ИДДокумента("ПриходныйОрдер"),36) выдает "7O", т.е. 2 знака, а надо 4: "  7O"

по первой части - щас попробую изобразить...
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #312 - 17. Апреля 2012 :: 09:59
Печать  
Бл...ь! Я идиот Ужас Смущённый
СКЛь-ная база, на которой тестил, была с прибитой таблицей _1SCRDOC  Смущённый Смущённый

Из вопросов осталось только про СОКРЛ()  Смущённый КАЮСЬ!
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #313 - 17. Апреля 2012 :: 10:34
Печать  
Используй
Код
Выбрать все
Прав(_IdToStr(ИДОбъекта),4) 


у меня везде так подставляется и никакие СОКР-ы не используются
  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #314 - 17. Апреля 2012 :: 23:10
Печать  
А как все таки быть с http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/298#298
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #315 - 18. Апреля 2012 :: 00:01
Печать  
vandalsvq писал(а) 17. Апреля 2012 :: 10:34:
Используй
Код
Выбрать все
Прав(_IdToStr(ИДОбъекта),4) 


у меня везде так подставляется и никакие СОКР-ы не используются


Это в случае с Ссылкой, а тут - ВидДокумента (глМетаДата.ИДДокумента("ПриходныйОрдер"))

"_IdToStr()" - сама создается? или создавать надо? помню раньше в ДОКе было, что создается, щас не нашел...
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #316 - 18. Апреля 2012 :: 04:33
Печать  
Ну елки... открой текст класса, процедуру подстановки параметров, текст там...


Код
Выбрать все
			ИДОбъекта = МетаДата.ИДДокумента(ВтораяЧасть);
			Если ЭтоSQL = 1 Тогда
				ТекстПодстановки = ?(Модификатор = 1,"'"+Прав(_IdToStr(ИДОбъекта),4)+"'",ИДОбъекта);
			ИначеЕсли ЭтоSQL = 0 Тогда
				ТекстПодстановки = "'"+Прав(_IdToStr(ИДОбъекта),4)+"'";
			КонецЕсли; 


  

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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #317 - 28. Апреля 2012 :: 16:27
Печать  
Недавно заметил одну вещь. Сделал отчет по оборотам за период НачДата - КонДата. В обороты попадает все, кроме оборотов документа, стоящего на ТА. в запросе стоит ~КонДата. все равно если документ стоит на позиции ТА, т.е. последний в базе например, то его движения не попадают. Как только провести другой лубой. ТА смещается, и все ок. В чем может быть причина?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #318 - 28. Апреля 2012 :: 18:01
Печать  
:КонДата~
  
Наверх
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #319 - 02. Мая 2012 :: 16:41
Печать  
Все равно не дает

вот текст

     рс.УложитьСписокОбъектов(ВыбНоменклатура,"#ТабНом","Номенклатура");
     рс.УложитьСписокОбъектов(ВыбСклад,"#ТабСклад","Склады");

     ТекстЗапроса = "-- qryMaker:Отчет1.2011.10.24.18.26.22
     |   SELECT  Движения.Номенклатура [Номенклатура $Справочник.Номенклатура]
     |       , NullIf(Движения.МесяцПриход, '17530101') МесяцПриход
     |            ,(Движения.КолвоПриход) КолвоПриход
     |         ,(Движения.КолвоРасход) КолвоРасход
     |            , Движения.ВидДокументаП ВидДокументаПриход
     |            , Движения.ВидДокументаР ВидДокументаРасход
     |From(
     |      SELECT ОстаткиТМЦПриход.Номенклатура
     |            ,$НачалоПериода.Месяц(ОстаткиТМЦПриход.ПозицияДокумента) МесяцПриход
     |            ,(ОстаткиТМЦПриход.КоличествоПриход) КолвоПриход
     |         ,(ОстаткиТМЦРасход.КоличествоРасход) КолвоРасход
     |            , ОстаткиТМЦПриход.ВидДокумента ВидДокументаП
     |            , ОстаткиТМЦРасход.ВидДокумента ВидДокументаР
     |      FROM $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,
     |                  :КонДата~,
     |                  Документ,
     |                  ДвиженияИГраницыПериода,
     |                  (Склад IN (SELECT val FROM #ТабСклад)) AND (Номенклатура IN (SELECT val FROM #ТабНом)),
     |                  (Номенклатура, Склад),) AS ОстаткиТМЦПриход
     |            Full outer JOIN $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,
     |                  :КонДата~,
     |                  Документ,
     |                  ДвиженияИГраницыПериода,
     |                  (Склад IN (SELECT val FROM #ТабСклад)) AND (Номенклатура IN (SELECT val FROM #ТабНом)),
     |                  (Номенклатура, Склад),) AS ОстаткиТМЦРасход ON ОстаткиТМЦПриход.Номенклатура = ОстаткиТМЦРасход.Номенклатура AND ОстаткиТМЦПриход.Склад = ОстаткиТМЦРасход.Склад AND ОстаткиТМЦПриход.ПозицияДокумента = ОстаткиТМЦРасход.ПозицияДокумента ) as Движения
     |";                                                       
     
     рс.УстановитьТекстовыйПараметр("НачДата", НачДата);
     рс.УстановитьТекстовыйПараметр("КонДата", КонДата);
     тз = рс.Выполнить(,ТекстЗапроса);
     тз.ВыбратьСтроку();

Отдельно берутся таблицы т.к. мне надо из приходов и расходов определенные доки убрать, ну это не важно вообщем.
Вопрос в том что остатки и движения не берут показателей ПО ТА
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #320 - 02. Мая 2012 :: 16:57
Печать  
ziflex писал(а) 17. Апреля 2012 :: 23:10:
А как все таки быть с http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/298#298


Третий параметр какой указал?
  
Наверх
wwwICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #321 - 02. Мая 2012 :: 17:25
Печать  
temrmal писал(а) 28. Апреля 2012 :: 16:27:
Недавно заметил одну вещь. Сделал отчет по оборотам за период НачДата - КонДата. В обороты попадает все, кроме оборотов документа, стоящего на ТА. в запросе стоит ~КонДата. все равно если документ стоит на позиции ТА, т.е. последний в базе например, то его движения не попадают. Как только провести другой лубой. ТА смещается, и все ок. В чем может быть причина?


Запрос поди в дбф базе с использованием 1sqlite 26 версии ?
а увидел уже, что в скуле..
Печаль

ЗЫ: не вкурил тока, что за бредовость делать full  join к двум одинаковым виртуальным табличкам одного регистра ?

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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #322 - 03. Мая 2012 :: 09:21
Печать  
Насчет соединений - отчет попросили сделать следующий: Нач ост, Приход, расход, кон ост. Причем в расход не должны попадать перемещения, переоценка и списания, а в приход - переоценка. Поэтому беру остатки, потомберу отдельно приход, очищаю его, потом расход - очищаю и соединяю. Математика в итоге не сходится, т.е. нач ост+приход-расход<>кон ост. Сам дурел от заказа. Ну вот сделал.
Вообще-то сам запрос выглядит по другому (приход и расход беру из оборотов, ну там еще всякие условия, наложения и тд). Он очень большой и не стал сюда выкладывать.
Сама суть в ТА. Могу сделать просто нач ост приход, расход и кон ост. - то же самое получится. Даже кон ост по ТА не показывает. Вчера скачал послежнюю версию - все без изменений.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #323 - 03. Мая 2012 :: 10:27
Печать  
В том коде что есть - не видно , где ты там остатки смотришь вообще + бредовое соединение двух одинаковых виртуальных таблиц .
Покажи весь код вместе с параметрами и всеми условиями.
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #324 - 04. Мая 2012 :: 02:19
Печать  
Anatol писал(а) 02. Мая 2012 :: 16:57:
ziflex писал(а) 17. Апреля 2012 :: 23:10:
А как все таки быть с http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/298#298


Третий параметр какой указал?

И "Справочник.Контрагенты", и просто "Справочник", и вообще не указывал ничего - не работает.
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #325 - 04. Мая 2012 :: 09:25
Печать  
ziflex писал(а) 04. Мая 2012 :: 02:19:
Anatol писал(а) 02. Мая 2012 :: 16:57:
ziflex писал(а) 17. Апреля 2012 :: 23:10:
А как все таки быть с http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/298#298


Третий параметр какой указал?

И "Справочник.Контрагенты", и просто "Справочник", и вообще не указывал ничего - не работает.


а нужно "Контрагенты"
  
Наверх
wwwICQ  
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #326 - 07. Мая 2012 :: 04:22
Печать  
Anatol писал(а) 04. Мая 2012 :: 09:25:
ziflex писал(а) 04. Мая 2012 :: 02:19:
Anatol писал(а) 02. Мая 2012 :: 16:57:
ziflex писал(а) 17. Апреля 2012 :: 23:10:
А как все таки быть с http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/298#298


Третий параметр какой указал?

И "Справочник.Контрагенты", и просто "Справочник", и вообще не указывал ничего - не работает.


а нужно "Контрагенты"


Все равно ничего Печаль

(ВЫБРАТЬ id ИЗ #Контрагент) или (ВЫБРАТЬ val ИЗ #Контрагент) ?
правда ни один из вариантов не работает. :\
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #327 - 07. Мая 2012 :: 09:29
Печать  
Однозначно
Код
Выбрать все
ВЫБРАТЬ val ИЗ #Контрагент 



В тхт выложи текст инициализации и выполнения запроса (в языке 1С) + включи режим отладки = 1 и добавь туда то что сообщит 1С при выполнении.
Посмотрим.
  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #328 - 08. Мая 2012 :: 03:37
Печать  
vandalsvq писал(а) 07. Мая 2012 :: 09:29:
Однозначно
Код
Выбрать все
ВЫБРАТЬ val ИЗ #Контрагент 



В тхт выложи текст инициализации и выполнения запроса (в языке 1С) + включи режим отладки = 1 и добавь туда то что сообщит 1С при выполнении.
Посмотрим.


Вот.
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #329 - 08. Мая 2012 :: 21:07
Печать  
Почему ты используешь "УложитьСписокГрупп"??? При этом потом сравнение делаешь поля контрагент, которое почти наверняка ссылка, а в таблице у тебя уложены группы.
  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #330 - 10. Мая 2012 :: 08:13
Печать  
vandalsvq писал(а) 08. Мая 2012 :: 21:07:
Почему ты используешь "УложитьСписокГрупп"??? При этом потом сравнение делаешь поля контрагент, которое почти наверняка ссылка, а в таблице у тебя уложены группы.

Ну как я понял из описания, если передать в этот метод группу справочника, то он уложить в ВТ все подчиненные ей элементы (и элементы вложенных групп).
Разве не так?)
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Документацию распечатать, свернуть, выкурить и придет озарение Подмигивание
  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #332 - 10. Мая 2012 :: 11:07
Печать  
vandalsvq писал(а) 10. Мая 2012 :: 09:58:
Не так Улыбка)) она укладывает не подчиненные элементы, а подчиненные элементы с признаком "Это группа".

Документацию распечатать, свернуть, выкурить и придет озарение Подмигивание

Точно, невнимательно прочитал. Эх, только зря кипишь поднял.
Тогда такой вопрос - как мне собрать все подчиненные элементы? Отдельным запросом? (или просто перебором?)
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #333 - 10. Мая 2012 :: 11:13
Печать  
Код
Выбрать все
УложитьСписокОбъектов(Родитель, "#Таблица", ИмяСправочника);
ТаблицаДанных = Запрос.Выполнить(, "ВЫБРАТЬ val ИЗ #Таблица"); 


Так не подойдет?
  

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


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #334 - 11. Мая 2012 :: 00:34
Печать  
vandalsvq писал(а) 10. Мая 2012 :: 11:13:
Код
Выбрать все
УложитьСписокОбъектов(Родитель, "#Таблица", ИмяСправочника);
ТаблицаДанных = Запрос.Выполнить(, "ВЫБРАТЬ val ИЗ #Таблица"); 


Так не подойдет?

ТО что доктор прописал! Улыбка Спасибо!
В следующий раз буду читать внимательней документацию Улыбка

Цитата:
Если задана иерархия (название справочника либо плана счетов), то вместо объектов-групп выгружаются все входящие в группу элементы/счета всех нижележащих уровней. Сами группы при этом не выгружаются.
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #335 - 12. Мая 2012 :: 12:01
Печать  
Пардон, вопрос не в ту ветку...
  
Наверх
ICQ  
IP записан
 
novichek
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #336 - 15. Мая 2012 :: 11:36
Печать  
Верно ли я понимаю, что если периодический реквизит справочника может изменяться документами и вручную, то $СрезПоследних проигнорирует ручные изменения?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #338 - 22. Мая 2012 :: 06:55
Печать  
Возвращаюсь к теме остатков на ТА

вот запрос

     рс = СоздатьОбъект("ПрямойЗапрос");
     //Данный фрагмент построен конструктором.
     //При повторном использовании конструктора внесенные вручную изменения будут потеряны!!!
     ТекстЗапроса = "-- qryMaker:Тест.2012.05.09.17.52.42
           |SELECT ОстаткиТМЦОстаткиОбороты.Номенклатура [Номенклатура $Справочник.Номенклатура]
           |      , ОстаткиТМЦОстаткиОбороты.Склад [Склад $Справочник.Склады]
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоНачальныйОстаток
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоПриход
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоРасход
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток
           |FROM $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,
           |            :КонДата~,,ДвиженияИГраницыПериода,
           |            (Номенклатура IN (:ВыбНом))
           |            AND (Склад IN (:ВыбСклад)),
           |            (Номенклатура, Склад),) AS ОстаткиТМЦОстаткиОбороты
           |";
     рс.УстановитьТекстовыйПараметр("ВыбНом", ВыбНом);
     рс.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);
     рс.УстановитьТекстовыйПараметр("НачДата", НачДата);
     рс.УстановитьТекстовыйПараметр("КонДата", КонДата);
     тз =  рс.Выполнить(,ТекстЗапроса);
     тз.ВыбратьСтроку();

Не видит последний документ на ТА приход
А вот если использовать не класс прямой запрос, а через просто СоздатьОбъект("ODBCRecordset") - видит. В чем дело может быть?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #340 - 22. Мая 2012 :: 12:35
Печать  
Добрый день. Не получается получить срез последних на дату. База - DBF.

ТекстЗапроса:
Код
Выбрать все
глМетаДата = СоздатьОбъект("MetadataWork");
РеквизитЦены = Метаданные.Справочник("Номенклатура").Реквизит("ДисконтнаяЦена").Идентификатор;
ИдЦены = глМетаДата.ИДРеквизитаСправочника("Номенклатура",РеквизитЦены);
Сообщить("Идентификатор = "+ИдЦены);

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

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

ТаблицаЗначенийЦен.ВыбратьСтроку(,РеквизитЦены); 



Получаю пустую таблицу значений!

Отладка:
Цитата:
1. Формирование цен:
- ОптоваяЦена
Идентификатор = 36
SELECT
           История.ТекущийЭлемент AS [Товар $Справочник.Номенклатура]
,      История.ДисконтнаяЦена AS Цена
FROM
           (
     select
           vt_slicelast_SC33.ТекущийЭлемент
           
           ,max(vt_slicelast_SC33.ДисконтнаяЦена) as ДисконтнаяЦена
     from (
           select
                 slicelast_SC33.objid ТекущийЭлемент
                 
                 ,case when slicelast_SC33.id = '  10' then slicelast_SC33.VALUE end ДисконтнаяЦена
           from (
                 
                 select tconst_2.objid, tconst_2.id, tconst_2.date, tconst_2.time, tconst_2.docid, tconst_2.value
                 from (select tconst_1.objid, tconst_1.id, max(const_j.idx_date_time_iddoc) date_time_iddoc
                       from [_1S.CONST] tconst_1
                             left join [Журнал] const_j
                             on tconst_1.docid = const_j.iddoc
                       
                       where tconst_1.date <= '20110101'
                       and tconst_1.id = '  10'
                       
                       group by tconst_1.id, tconst_1.objid) slicelast_SC331
                 left join [_1S.CONST] tconst_2
                 on slicelast_SC331.id = tconst_2.id
                 and slicelast_SC331.objid = tconst_2.objid
                 and substr(slicelast_SC331.date_time_iddoc, 1, 8) = tconst_2.date
                 and substr(slicelast_SC331.date_time_iddoc, 9, 6) = tconst_2.time
                 and substr(slicelast_SC331.date_time_iddoc, 15, 9) = tconst_2.docid
           ) slicelast_SC33
     ) vt_slicelast_SC33
     group by vt_slicelast_SC33.ТекущийЭлемент
           

) AS История
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE<=; ID=;
     Упорядочить: ID, OBJID,
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Попадает в сортировку
     Стоимость: 40
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE<=; ID=;
     Упорядочить: ID, OBJID,
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Попадает в сортировку
     Стоимость: 40
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=;
     Найдено в кэше
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=;
     Найдено в кэше
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE=; TIME=; DOCID=; OBJID=; ID=;
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Стоимость: 24
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE=; TIME=; DOCID=; OBJID=; ID=;
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Стоимость: 24
Время подготовки запроса: 7 мс, время выполнения запроса: 3439 мс.
Формирование цен завершено. Время работы: 0/00:00:04.833

Объект MetadataWork возвращает представление периодического реквизита в БД = число 36. Разбор запроса почему-то показывает строковое представление этого идентификатора = '  10'.
Что я делаю не так?

P.S. ПрямойЗапросDBF.Версия = "1.8.4 25.02.2012"
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #341 - 22. Мая 2012 :: 16:37
Печать  
вот запрос, который получился в отладке
(тема насчет ТА)

SELECT ОстаткиТМЦОстаткиОбороты.Номенклатура [Номенклатура $Справочник.Номенклатура]
     , ОстаткиТМЦОстаткиОбороты.Склад [Склад $Справочник.Склады]
     , ОстаткиТМЦОстаткиОбороты.КоличествоНачальныйОстаток
     , ОстаткиТМЦОстаткиОбороты.КоличествоПриход
     , ОстаткиТМЦОстаткиОбороты.КоличествоРасход
     , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток
FROM (select
     vt_totalreg.Номенклатура as Номенклатура
     ,vt_totalreg.Склад as Склад
     ,sum(vt_totalreg.КоличествоОстаток) as КоличествоНачальныйОстаток
     ,sum(vt_totalreg.КоличествоПриход) as КоличествоПриход
     ,sum(vt_totalreg.КоличествоРасход) as КоличествоРасход
     ,sum(vt_totalreg.КоличествоОборот) as КоличествоОборот
     ,sum(vt_totalreg.КоличествоОстаток) + sum(vt_totalreg.КоличествоОборот) as КоличествоКонечныйОстаток
from(select
                 vt_balance.Номенклатура as Номенклатура
           ,vt_balance.Склад as Склад
                 ,vt_balance.КоличествоОстаток as КоличествоОстаток
           ,0 as КоличествоПриход
           ,0 as КоличествоРасход
           ,0 as КоличествоОборот
           from (
     SELECT
           Номенклатура
           ,Склад
           ,SUM(КоличествоОстаток) AS КоличествоОстаток
           
     FROM
           (SELECT
                 rg_405.sp408 AS Номенклатура
                 ,rg_405.sp418 AS Склад
                 ,rg_405.sp411 AS КоличествоОстаток
                 
           FROM
                 RG405 AS rg_405 (nolock)
           WHERE
                 rg_405.PERIOD = '20120501'
           AND
                 (rg_405.sp408 IN ('   398   '))
           AND (rg_405.sp418 IN ('     1   '))
           
           UNION ALL
           
           SELECT
                 ra_405.sp408
                 ,ra_405.sp418
                 ,CASE WHEN ra_405.debkred = 0 THEN -ra_405.sp411 ELSE ra_405.sp411 END
                 
           FROM
                 _1SJOURN AS docjourn (nolock)
           LEFT JOIN RA405 AS ra_405 (nolock)
           ON ra_405.IDDOC = docjourn.IDDOC
           WHERE (docjourn.DATE_TIME_IDDOC >= '20120521     0     0   ')
           AND (docjourn.DATE_TIME_IDDOC < '20120521BFW3Q8')            AND
                 (ra_405.sp408 IN ('   398   '))
           AND (ra_405.sp418 IN ('     1   '))
           ) AS vt_ra_405
     GROUP BY
           Номенклатура
           ,Склад
     HAVING (SUM(КоличествоОстаток) <> 0)
     
) as vt_balance
           
           union all
           
           select
           vt_turnover.Номенклатура
           ,vt_turnover.Склад
           ,0
           ,vt_turnover.КоличествоПриход
           ,vt_turnover.КоличествоРасход
           ,vt_turnover.КоличествоОборот
     from (
     SELECT
           Номенклатура
           ,Склад
           ,SUM(КоличествоПриход) AS КоличествоПриход
           ,SUM(КоличествоРасход) AS КоличествоРасход
           ,SUM(КоличествоОборот) AS КоличествоОборот
           
     FROM
           (SELECT
                 ra_405.sp408 AS Номенклатура
                 ,ra_405.sp418 AS Склад
                 ,CASE WHEN ra_405.debkred = 0 THEN ra_405.sp411 ELSE 0 END AS КоличествоПриход
                 ,CASE WHEN ra_405.debkred = 1 THEN ra_405.sp411 ELSE 0 END AS КоличествоРасход
                 ,CASE WHEN ra_405.debkred = 0 THEN ra_405.sp411 ELSE -ra_405.sp411 END AS КоличествоОборот
                 
           FROM
                 RA405 AS ra_405 (nolock)
           INNER JOIN _1SJOURN AS docjourn (nolock)
           ON ra_405.IDDOC = docjourn.IDDOC
           WHERE (docjourn.DATE_TIME_IDDOC >= '20120521     0     0   ')
           AND (docjourn.DATE_TIME_IDDOC < '20120521BFW3Q8')            AND
                 (ra_405.sp408 IN ('   398   '))
           AND (ra_405.sp418 IN ('     1   '))
           ) AS vt_ra_405
     GROUP BY
           Номенклатура
           ,Склад
     HAVING (SUM(КоличествоПриход) <> 0)
     OR (SUM(КоличествоРасход) <> 0)
     OR (SUM(КоличествоОборот) <> 0)
     
) as vt_turnover
       ) as vt_totalreg
group by
     vt_totalreg.Номенклатура,vt_totalreg.Склад
HAVING (sum(vt_totalreg.КоличествоОстаток) <> 0)
OR (sum(vt_totalreg.КоличествоПриход) <> 0)
OR (sum(vt_totalreg.КоличествоРасход) <> 0)
OR (sum(vt_totalreg.КоличествоОборот) <> 0)

) AS ОстаткиТМЦОстаткиОбороты

Версия класса последняя 011, да и на 007 то же самое. Разбирал функцию получения ТА и БИ в классе - вроде правильно написано.. А вот выделенное - очень смущает. Там разве равно не пропущено?
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #342 - 22. Мая 2012 :: 17:02
Печать  
ТАК, новости продолжаются -
Ситуация - ТА = 21.05.12 на документе ПоступлениеТМЦ
Если Делаю выложэенный выше отчет за период с 21.05.12 по 21.05.12, то в остатке и в начальном и в конечном количество  С УЧЕТОМ ПРИХОДА!!! (2000 штук), т.е. берет он кон остаток на ТА, но приход и расход равны 0 естественно, как будто он и начальную дату и конечную воспринимает как дату на ТА, делаю период с 01.05.12 по 21.05.12 - картина меняется, и конечный остаток 1000 штук!!! т.е. уже не видит приход последний!! Причем второй вариант возникает тогда когда беру период с даты предыдущего движения по этому товару. Надеюсь понятно описал?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #343 - 22. Мая 2012 :: 17:44
Печать  
Версия определяется как
Код
Выбрать все
ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
Сообщить("Версия: "+ПрямойЗапрос.Версия) 

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #344 - 22. Мая 2012 :: 19:04
Печать  
Скажи мне пожалуйста какая версия? (Именно прочитай из переменной Версия самого класса). Нумерация когда возможно было 011 и 007 была еще в конце 10-го года. На дворе 12-й, последняя версия 1.8.4 от 25.02.2012.
У меня такая проблема не подтверждается. А ранее была, боролся с ней где-то версиях 1.07.016, 1.7.20, после ошибки по проблеме с границей по ТА не было
  

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



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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #346 - 23. Мая 2012 :: 03:27
Печать  
А начиная с версии 1.8.5 так больше не будет.

1.8.5 от 23.05.12 г.
- Исправлена ошибка расчета даты, если в качестве даты указан документ с модификатором «~» (т.е. по документ). Таким образом это коснулось всех ВТ где в качестве границ периода можно передать документ.
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #347 - 23. Мая 2012 :: 05:06
Печать  
Доброе утро. Не получается получить срез последних на дату. База - DBF.

ТекстЗапроса:
Код
Выбрать все
глМетаДата = СоздатьОбъект("MetadataWork");
РеквизитЦены = Метаданные.Справочник("Номенклатура").Реквизит("ДисконтнаяЦена").Идентификатор;
ИдЦены = глМетаДата.ИДРеквизитаСправочника("Номенклатура",РеквизитЦены);
Сообщить("Идентификатор = "+ИдЦены);

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

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

ТаблицаЗначенийЦен.ВыбратьСтроку(,РеквизитЦены); 



Получаю пустую таблицу значений!

Отладка:
Цитата:
1. Формирование цен:
- ОптоваяЦена
Идентификатор = 36
SELECT
           История.ТекущийЭлемент AS [Товар $Справочник.Номенклатура]
,      История.ДисконтнаяЦена AS Цена
FROM
           (
     select
           vt_slicelast_SC33.ТекущийЭлемент
           
           ,max(vt_slicelast_SC33.ДисконтнаяЦена) as ДисконтнаяЦена
     from (
           select
                 slicelast_SC33.objid ТекущийЭлемент
                 
                 ,case when slicelast_SC33.id = '  10' then slicelast_SC33.VALUE end ДисконтнаяЦена
           from (
                 
                 select tconst_2.objid, tconst_2.id, tconst_2.date, tconst_2.time, tconst_2.docid, tconst_2.value
                 from (select tconst_1.objid, tconst_1.id, max(const_j.idx_date_time_iddoc) date_time_iddoc
                       from [_1S.CONST] tconst_1
                             left join [Журнал] const_j
                             on tconst_1.docid = const_j.iddoc
                       
                       where tconst_1.date <= '20110101'
                       and tconst_1.id = '  10'
                       
                       group by tconst_1.id, tconst_1.objid) slicelast_SC331
                 left join [_1S.CONST] tconst_2
                 on slicelast_SC331.id = tconst_2.id
                 and slicelast_SC331.objid = tconst_2.objid
                 and substr(slicelast_SC331.date_time_iddoc, 1, 8) = tconst_2.date
                 and substr(slicelast_SC331.date_time_iddoc, 9, 6) = tconst_2.time
                 and substr(slicelast_SC331.date_time_iddoc, 15, 9) = tconst_2.docid
           ) slicelast_SC33
     ) vt_slicelast_SC33
     group by vt_slicelast_SC33.ТекущийЭлемент
           

) AS История
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE<=; ID=;
     Упорядочить: ID, OBJID,
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Попадает в сортировку
     Стоимость: 40
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE<=; ID=;
     Упорядочить: ID, OBJID,
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Попадает в сортировку
     Стоимость: 40
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=;
     Найдено в кэше
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=;
     Найдено в кэше
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE=; TIME=; DOCID=; OBJID=; ID=;
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Стоимость: 24
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE=; TIME=; DOCID=; OBJID=; ID=;
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Стоимость: 24
Время подготовки запроса: 7 мс, время выполнения запроса: 3439 мс.
Формирование цен завершено. Время работы: 0/00:00:04.833

Объект MetadataWork возвращает представление периодического реквизита в БД = число 36. Разбор запроса почему-то показывает строковое представление этого идентификатора = '  10'.
Что я делаю не так?

P.S. ПрямойЗапросDBF.Версия = "1.8.4 25.02.2012"
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #348 - 23. Мая 2012 :: 07:35
Печать  
Отбой. Поставил последнее обновление. Заработало.  Очень довольный
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #349 - 25. Мая 2012 :: 16:25
Печать  
На счет ТА -
скачал свежую версию - то же самое
в итоге сделал отчет и с помощью класса, и просто
в итоге разница в строках

стандартный 1С++ - where ra405_vt.date_time_iddoc > '20120501' and ra405_vt.date_time_iddoc < '20120525AUX034  4B2EЦБ2

класс ПЗ - "WHERE (docjourn.DATE_TIME_IDDOC >= '20120501     0     0   ') AND (docjourn.DATE_TIME_IDDOC < '20120525AUX034')"

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #350 - 25. Мая 2012 :: 17:06
Печать  
Тестовый пример с выкладкой на rapid.ufanet.ru. По "фотографии" лечить больше не буду. Надоело.

Пы.сы. поставил ТиС (демо). Выставил ТА на документ поступление. Сделал запрос РегистрОстаткиОбороты(:КонДата, :КонДата~), где "КонДата" - документ на котором я ранее выставил ТА. Остатки обороты показали все верно. Остаток на начало периода, + приход, = остаток на конец периода. При этом запрос выполнен верно. Что я делал не так?
  

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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #351 - 20. Июня 2012 :: 18:49
Печать  
Помогите правильно УложитьТаблицуЗначений с идентификаторами видов документов, что можно было использовать в условии отбора по полю ВидДокумента таблицы ЖурналДокументов.

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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #352 - 21. Июня 2012 :: 07:28
Печать  
Есть запрос
Код
Выбрать все
"
|ВЫБРАТЬ
|	 $ж.ДатаДокумента	КАК [Дата $Дата]
|	,$ж.ТекущийДокумент	КАК [Документ $Документ]
|	,$ж.ВидДокумента	КАК	[Документ_вид ]
|	,СРЕД($Ссылки.ЗначениеОтбора,7,9)		КАК	[Автор $Справочник.Пользователи]
|ИЗ
|	ЖурналДокументов КАК ж $nolock
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|	СсылкиДокументов КАК Ссылки $nolock
|ПО
|	$Ссылки.ТекущийДокумент = $ж.ТекущийДокумент
|ГДЕ
|	$Ссылки.ГрафаОтбора = :ГрафаОтбора.жАвтор
|И
|	$ж.ВидДокумента В
|		(ВЫБРАТЬ ВидДокумента ИЗ #СписокВидовДокументов)
|";
 



Как мне правильно типизировать #СписокВидовДокументов, чтоб работал отбор по этой таблице?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #353 - 21. Июня 2012 :: 07:36
Печать  
artamir писал(а) 21. Июня 2012 :: 07:28:
Как мне правильно типизировать #СписокВидовДокументов, чтоб работал отбор по этой таблице?


в список кидай _idtostr(глМД.ИдДокумента("Реализация") )
глМД - объект метадатаворк
например..

или вот так в запросе
iddocdef in ($ВидДокумента36.Реализация,$ВидДокумента36.ПКО)
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #354 - 21. Июня 2012 :: 14:46
Печать  
Eprst писал(а) 21. Июня 2012 :: 07:36:
artamir писал(а) 21. Июня 2012 :: 07:28:
Как мне правильно типизировать #СписокВидовДокументов, чтоб работал отбор по этой таблице?


в список кидай _idtostr(глМД.ИдДокумента("Реализация") )
глМД - объект метадатаворк
например..

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


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

РежимОтладки выдает следующее:

Цитата:
SELECT
      ж.DATE      AS [Дата $Дата]
     ,ж.IDDOC      AS [Документ $Документ]
     ,ж.IDDOCDEF      AS      [Документ_вид ]
     ,SUBSTR(Ссылки.PARENTVAL,7,9)            AS      [Автор $Справочник.Пользователи]
FROM
     [Журнал] AS ж
INNER JOIN
     [_1S.CRDOC] AS Ссылки
ON
     Ссылки.CHILDID = ж.IDDOC
WHERE
     Ссылки.MDID = ' 7T2'
AND
     ж.IDDOCDEF IN
($ВидДокумента.РасхНалоговаяНакладная,$ВидДокумента.РасходнаяНакладная)
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: $ВидДокумента.РасхНалоговаяНакладная
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
1052012\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13401) }

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


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #355 - 21. Июня 2012 :: 15:27
Печать  
Код
Выбрать все
|	$ж.ВидДокумента В
|		($ВидДокумента.Реализация, $ВидДокумента.ПКО, $ВидДокумента.РКО) 

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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #356 - 21. Июня 2012 :: 16:16
Печать  
Все равно выдает ошибку Печаль

ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: $ВидДокумента.РасхНалоговаяНакладная
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
1052012\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13401) }
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #357 - 21. Июня 2012 :: 16:17
Печать  
а ВидДокумента случайно это не предопределенная текстовая переменная?
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #358 - 21. Июня 2012 :: 16:19
Печать  
УРА!!!!
Нужно было всего-лишь заменить $ на :
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #359 - 26. Июня 2012 :: 05:41
Печать  
ХЕЛП!

Код
Выбрать все
ВЫБРАТЬ
	СОКРП($Спр.Код) КАК [КодИсх $Строка],
	$Спр.ТекущийЭлемент КАК [ТоварИсх $Справочник.Номенклатура],
	$СпрАлк.ТекущийЭлемент КАК [ТоварАлк $Справочник.АлкНоменклатура],
	РегАлк.КоличествоОборот КАК Оборот,
	$РегАлк.ТекущийДокумент КАК [ТекДок $Документ],
	$РегАлк.ВидДокумента КАК [ТекДок_Вид $ВидДокумента],
	$СпрАлк.Производитель КАК [Производитель $Справочник.Контрагенты],
	$СпрАлк.Импортер КАК [Импортер $Справочник.Контрагенты]
ИЗ
	Справочник.Номенклатура КАК Спр $nolock
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	$РегистрОстаткиОбороты.ДвиженияАлкоголя(:лДатаНач,:лДатаКон~,ДОКУМЕНТ,,
								,
								(Номенклатура),
								(Количество),) КАК РегАлк
ПО
	$Спр.ТекущийЭлемент = РегАлк.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ
	Справочник.АлкНоменклатура КАК СпрАлк $nolock
ПО
	$Спр.ТекущийЭлемент = $СпрАлк.Товар
ГДЕ
	$Спр.ТекущийЭлемент В (ВЫБРАТЬ val ИЗ #СписТов)
 



Ошибка: ", Число БезПодготовки=0) : no such column: $РегАлк.ТекущийДокумент" Печаль
Что не так?
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #360 - 26. Июня 2012 :: 08:40
Печать  
Код
Выбрать все
$РегАлк.ТекущийДокумент КАК [ТекДок $Документ],
$РегАлк.ВидДокумента КАК [ТекДок_Вид $ВидДокумента], 


заменить на
Код
Выбрать все
РегАлк.ТекущийДокумент КАК [ТекДок $Документ],
РегАлк.ВидДокумента КАК [ТекДок_Вид $ВидДокумента], 

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #361 - 26. Июня 2012 :: 09:05
Печать  
И еще вопрос: Как в ПоставщикеДанных (Документ) программно управлять порядком следования колонок?
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #362 - 26. Июня 2012 :: 09:20
Печать  
leshik писал(а) 26. Июня 2012 :: 08:40:
заменить на
Код
Выбрать все
РегАлк.ТекущийДокумент КАК [ТекДок $Документ],
РегАлк.ВидДокумента КАК [ТекДок_Вид $ВидДокумента], 



Пасиб! Заработало!
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #363 - 26. Июня 2012 :: 10:01
Печать  
Dolly_EV писал(а) 26. Июня 2012 :: 09:05:
И еще вопрос: Как в ПоставщикеДанных (Документ) программно управлять порядком следования колонок?


После инициализации и обновления просто поменяй колонки местами через объект ТабличноеПоле.Колонки.
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #364 - 26. Июня 2012 :: 10:19
Печать  
vandalsvq писал(а) 26. Июня 2012 :: 10:01:
Dolly_EV писал(а) 26. Июня 2012 :: 09:05:
И еще вопрос: Как в ПоставщикеДанных (Документ) программно управлять порядком следования колонок?


После инициализации и обновления просто поменяй колонки местами через объект ТабличноеПоле.Колонки.


Угу, нашел. "Сдвинуть". Спаисбо!
  
Наверх
ICQ  
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #365 - 28. Июня 2012 :: 14:54
Печать  
Добрый день. Столкнулся с такой проблемой. Реквизит табличной части документа неопределенного вида справочника. Реквизит может принимать значения 2-х справочников (хотя это не важно). Пытаюсь запросом выудить данные:
Код
Выбрать все
|ВЫБРАТЬ
|	$ТЧ.Товар КАК [Товар $Справочник.Номенклатура]
|,	$ТЧ.СпецПредложение  КАК [СпецПредложение $Справочник]
|,	$ТЧ.СпецПредложение  КАК [СпецПредложениеСкидки $Справочник.ШтрихКодыСоСкидкой]
|,	$Ж.ДатаДокумента КАК ДатаДок
|ИЗ
|	ЖурналДокументов КАК Ж $NOLOCK
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|	ДокументСтроки.СпецПредложение КАК ТЧ $NOLOCK ПО $Ж.ТекущийДокумент = $ТЧ.ТекущийДокумент
|ГДЕ
|	$Ж.Проведен = 1
//|И $ТЧ.СпецПредложение IN (ВЫБРАТЬ $Спр.ТекущийЭлемент КАК Ссылка ИЗ Справочник.ШтрихКодыСоСкидкой КАК Спр $NOLOCK) 


Итак, в колонке "СпецПредложение" я вижу всевозможные значения. В колонке "СпецПредложениеСкидки" я вижу пустоту (а вот эта мне колонка как раз и нужна). Т.е. если я типизирую поле, что значения не получаю. Пробовал задать условие на принадлежность ссылки элементам определенного справочника (закаменченное условие) - не прокатило. Как решить?
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #366 - 28. Июня 2012 :: 16:17
Печать  
Отрежь лишнее от id13...
Код
Выбрать все
...
|,	Сред($ТЧ.СпецПредложение,5)  КАК [СпецПредложениеСкидки $Справочник.ШтрихКодыСоСкидкой]
... 


Когда Лево($ТЧ.СпецПредложение,4)=:ВидСправочника.ШтрихКодыСоСкидкой
  
Наверх
GTalkICQ  
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #367 - 28. Июня 2012 :: 16:42
Печать  
Спасибо. Заработало! Вот этого Цитата:
:ВидСправочника.ШтрихКодыСоСкидкой
мне и не хватало!
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #368 - 03. Июля 2012 :: 11:46
Печать  
Имеем вот такой громоздкий запрос выборки по Документам с кучей фильтров по реквизитам Доков

Код
Выбрать все
  	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = "//{{ЗАПРОС(ПоДокам)
	|Период с ДатаНач по ДатаКон;
	|Без итогов;
	|РУ = Документ.ПриходнаяНакладная.Фирма,
	|	Документ.ЗаказПоставщику.Фирма,
	|	Документ.РасходнаяНакладная.Фирма,
	|	Документ.РасходнаяРозница.Фирма,
	|	Документ.ПеремещениеТоваров.Фирма,
	|	Документ.ВозвратОтПокупателя.Фирма,
	|	Документ.ВозвратПоставщику.Фирма,
	|	Документ.СписаниеТоваров.Фирма,
	|	Документ.ОприходованиеТоваров.Фирма,
	|	Документ.Пересорт.Фирма;
	|Док = Документ.ПриходнаяНакладная.ТекущийДокумент,
	|	Документ.ЗаказПоставщику.ТекущийДокумент,
	|	Документ.РасходнаяНакладная.ТекущийДокумент,
	|	Документ.РасходнаяРозница.ТекущийДокумент,
	|	Документ.ПеремещениеТоваров.ТекущийДокумент,
	|	Документ.ВозвратОтПокупателя.ТекущийДокумент,
	|	Документ.ВозвратПоставщику.ТекущийДокумент,
	|	Документ.СписаниеТоваров.ТекущийДокумент,
	|	Документ.ОприходованиеТоваров.ТекущийДокумент,
	|	Документ.Пересорт.ТекущийДокумент;
	|Склад = Документ.ПриходнаяНакладная.МестоХранения,
..............................
	|Сумм = Документ.ПриходнаяНакладная.Всего,
	|	Документ.ЗаказПоставщику.Всего,
	|	Документ.РасходнаяНакладная.Всего,
	|	Документ.РасходнаяРозница.Всего,
	|	Документ.ПеремещениеТоваров.Сумма,
	|	Документ.ВозвратОтПокупателя.Всего,
	|	Документ.ВозвратПоставщику.Всего,
	|	Документ.СписаниеТоваров.Сумма,
	|	Документ.ОприходованиеТоваров.Всего,
	|	Документ.Пересорт.Сумма;
	|Функция КоличВсегоШТ = Сумма(Кол*КоэффДок) Когда (СписТиповТовара.Принадлежит(ТоварТип)=1);
	|Функция КоличУпак = Сумма(?(КоэффОснЕд>1,Цел(Запрос.КоличВсегоШТ/КоэффОснЕд),0)) Когда (СписТиповТовара.Принадлежит(ТоварТип)=1);
.................................
	|Группировка Док;
	|Группировка СтрокаДокумента;
	|Условие(СписДокПометка.Принадлежит(Док.Вид())=1);";
	|Условие((ВыбСкладОткуда.Принадлежит(Склад)=1) ИЛИ (ВыбСкладКуда.Принадлежит(СкладКуда)=1));";

	ОбъектМФ.СформироватьУсловияЗапроса(ТекстЗапроса,Запрос,глЭтоSQL);

и т.д. ..................................
 



Пните - хотя бы в виде "каркаса" - как это описать прямым запросом, и чтобы было быстро?

З.Ы. Запрос именно по Документам (т.к. сверяется с отчетом по регистру на предмет расхождений м/у реквизитами дока и ресурсами регистра)
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #369 - 03. Июля 2012 :: 13:06
Печать  
куча селектов к табличкам DH/DT документов + union all между ними.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #370 - 03. Июля 2012 :: 19:38
Печать  
Доброго времени суток.
Столкнулся с проблемкой:
Код
Выбрать все
оПЗ = СоздатьОбъект("ПрямойЗапрос");
	оПЗ.РежимОтладки = РежимОтладки;

	//{--- Текст запроса
	лТЗ = "
	|ВЫБРАТЬ
	|	ОстаткиОборотыОсновной.Субконто1		КАК [Агент			$Субконто	]
	|,	ОстаткиОборотыОсновной.Субконто1_вид	КАК [Агент_вид		$ВидСубконто]
	|,	ОстаткиОборотыОсновной.Субконто2		КАК [ТаксаХХ		$Субконто	]
	|,	ОстаткиОборотыОсновной.Субконто2_вид	КАК [ТаксаХХ_вид	$ВидСубконто]
	|,	ОстаткиОборотыОсновной.НачалоПериода	КАК [НачалоПериода	$Дата		]

	|,	ОстаткиОборотыОсновной.СуммаНачальныйОстаток	КАК [СН_Сумма		$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаНачальныйОстаток	КАК [СН_СумКорп		$Число	]
	|,	ОстаткиОборотыОсновной.СуммаОборот				КАК [Оборот_Сумма	$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаОборот				КАК [Оборот_СумКорп	$Число	]
	|,	ОстаткиОборотыОсновной.СуммаКонечныйОстаток		КАК [СК_Сумма		$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаКонечныйОстаток	КАК [СК_СумКорп		$Число	]
	|
	|
	|ИЗ
	|	$БИОстаткиОбороты.Основной(:ДатаНач
	|,	:ДатаКон
	|,	МЕСЯЦ ДОПОЛНЕНИЕ
	|,
	|,	#СчетаТКС
	|,	(Сотрудники, ТаксыХХ)
	|,	(Сумма, Валюта)
	|,
	|) КАК ОстаткиОборотыОсновной";
	//}

	оПЗ.Текст = лТЗ;
	оПЗ.УстановитьТекстовыйПараметр("ДатаНач", ДатаНач);
	оПЗ.УстановитьТекстовыйПараметр("ДатаКон", ДатаКон);

	спСчетовТКС = СоздатьОбъект("СписокЗначений");
	спСчетовТКС.ДобавитьЗначение(СчетПоКоду("ТКС.ХХ"));
	оПЗ.УложитьСписокЗначений(спСчетовТКС, "#СчетаТКС", "Основной");

	лИТЗ = оПЗ.Выполнить("ИндексированнаяТаблица");

 



Такой запрос закрывает 1С без каких либо предупреждений если я выбераю период больше 3-х месяцев. Если меньше или равно 3-м месяцам, то нормально.
Может кто сталкивался и подскажет куда копать.

1С++ : 3.2.3.12
1sqlite: 1.0.2.3
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #371 - 04. Июля 2012 :: 03:47
Печать  
Eprst писал(а) 03. Июля 2012 :: 13:06:
куча селектов к табличкам DH/DT документов + union all между ними.

И без вариантов? Печаль
Ладно, тогда поделитель, кто/как фильтрует поля запроса для класса "ПрямойЗапрос", всмысле универсальности. Как например в классе МножественныйФильтр для запроса 1C++ (ОбъектМФ.СформироватьУсловияЗапроса(ТекстЗапроса,Запрос,глЭтоSQL)) ?
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #372 - 12. Июля 2012 :: 11:53
Печать  
Код
Выбрать все
ВЫБРАТЬ $ТекДок.ТекущийДокумент КАК [Док $Документ.ВозвратОтПокупателя]
ИЗ
	Документ.ВозвратОтПокупателя КАК ТекДок $nolock
ОБЪЕДИНИТЬ
ВЫБРАТЬ $ТекДок.ТекущийДокумент КАК [Док $Документ.ВозвратПоставщику]
ИЗ
	Документ.ВозвратПоставщику КАК ТекДок $nolock
ОБЪЕДИНИТЬ
ВЫБРАТЬ $ТекДок.ТекущийДокумент КАК [Док $Документ.ОприходованиеТоваров]
ИЗ
	Документ.ОприходованиеТоваров КАК ТекДок $nolock
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	ЖурналДокументов КАК Жур $nolock
ПО
	$ТекДок.ТекущийДокумент = $Жур.ТекущийДокумент
ГДЕ
	$Жур.ДатаДокумента >=:лДатаНач И $Жур.ДатаДокумента<=:лДатаКон~ И $Жур.Проведен = 1";
ПЗ.УстановитьТекстовыйПараметр("лДатаНач", ДатаНач);
ПЗ.УстановитьТекстовыйПараметр("лДатаКон", ДатаКон); 


Почему выдаются ВСЕ доки: без фильтра по ДатаНач/ДатаКон и проведенные/непроведенные ??  Плачущий
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #373 - 12. Июля 2012 :: 12:55
Печать  
Потому, что бред написан в части описания алиясов.
Либо все селекты для табличек документов оборачивать в подзапрос и потом уже иннер джоин с табличкой журнала + условия, либо к каждому запросу джойнить журнальчик (а не к последнему, как у тебя)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #374 - 12. Июля 2012 :: 15:04
Печать  
Код
Выбрать все
ВЫБРАТЬ $ТекДок.ВидДокумента+$ТекДок.ТекущийДокумент КАК [Док $Документ]
ИЗ
	Документ.ВозвратОтПокупателя КАК ТекДок $nolock
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	ЖурналДокументов КАК Жур $nolock
ПО
	$ТекДок.ТекущийДокумент = $Жур.ТекущийДокумент
И
	$Жур.ДатаДокумента МЕЖДУ :лДатаНач И $Жур.ДатаДокумента<=:лДатаКон~ И $Жур.Проведен = 1

ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ $ТекДок.ВидДокумента+$ТекДок.ТекущийДокумент
ИЗ
	Документ.ВозвратПоставщику КАК ТекДок $nolock
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	ЖурналДокументов КАК Жур $nolock
ПО
	$ТекДок.ТекущийДокумент = $Жур.ТекущийДокумент
И
	$Жур.ДатаДокумента МЕЖДУ :лДатаНач И $Жур.ДатаДокумента<=:лДатаКон~ И $Жур.Проведен = 1

ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ $ТекДок.ВидДокумента+$ТекДок.ТекущийДокумент
ИЗ
	Документ.ОприходованиеТоваров КАК ТекДок $nolock
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	ЖурналДокументов КАК Жур $nolock
ПО
	$ТекДок.ТекущийДокумент = $Жур.ТекущийДокумент
И
	$Жур.ДатаДокумента МЕЖДУ :лДатаНач И $Жур.ДатаДокумента<=:лДатаКон~ И $Жур.Проведен = 1 



в синтаксисе не уверен, ибо этим классом не пользуюсь
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #375 - 13. Июля 2012 :: 04:07
Печать  
Eprst писал(а) 12. Июля 2012 :: 15:04:
в синтаксисе не уверен, ибо этим классом не пользуюсь


Пасиб! Уже сам к тому же пришел)
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #377 - 13. Июля 2012 :: 10:45
Печать  
Код
Выбрать все
ВЫБРАТЬ
	$ТекДок.ТекущийДокумент КАК [Док $Документ.ВозвратОтПокупателя],
	$ТекДокТЧ.Товар КАК [Товар $Справочник.Номенклатура],
	$Жур.Фирма КАК [Фирма $Справочник.Фирмы],
	$ТекДок.Контрагент КАК [Контрагент $Справочник.Контрагенты],
	$ТекДок.МестоХранения КАК [Склад $Справочник.МестаХранения]
ИЗ
	Документ.ВозвратОтПокупателя КАК ТекДок $nolock
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	ЖурналДокументов КАК Жур $nolock
ПО
	$ТекДок.ТекущийДокумент = $Жур.ТекущийДокумент
И
	($Жур.ДатаДокумента МЕЖДУ :лДатаНач И :лДатаКон~) И ($Жур.Проведен = 1)
ЛЕВОЕ СОЕДИНЕНИЕ
	ДокументСтроки.ВозвратОтПокупателя КАК ТекДокТЧ $nolock
ПО
	$ТекДокТЧ.ТекущийДокумент = $ТекДок.ТекущийДокумент
ГДЕ
	(Фирма В (ВЫБРАТЬ val ИЗ #глУсловие1) И Контрагент В (ВЫБРАТЬ val ИЗ #глУсловие3)) 



Все Ок, но как только в условие добавляю Склад:
Код
Выбрать все
ГДЕ
	(Фирма В (ВЫБРАТЬ val ИЗ #глУсловие1) И Контрагент В (ВЫБРАТЬ val ИЗ #глУсловие3) И Склад В (ВЫБРАТЬ val ИЗ #глУсловие4)) 


ругается "no such column: Склад"
До этого точно так же бился с "Фирма". Изначально было
Код
Выбрать все
	$Жур.Фирма КАК [РУ $Справочник.Фирмы], 


Так вот, пока псевдоним не поменял на "Фирма", так же ругалось на отсутствие колонки при фильтрации.
Где засада?

И еще вопрос: при UNION ALL как избежать ругательства "SELECTs to the left and right of UNION ALL do not have the same number of result columns". Т.е. например есть документ "ВозвратОтПокупателя" и "Оприходование". В "Оприходовании" нет поля "Контрагент". Что и как подсунуть в описании запроса для "Оприходование" вместо "Контрагент"?
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #378 - 13. Июля 2012 :: 10:47
Печать  
vandalsvq писал(а) 13. Июля 2012 :: 10:41:
А не проще один запрос к журналу,

С фильтрами победю, буду дальше в этом направлении копать ))
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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

  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #380 - 13. Июля 2012 :: 11:30
Печать  
vandalsvq писал(а) 13. Июля 2012 :: 10:41:
А не проще один запрос к журналу, с соединениями с табличками документов (журнал с документами) и условиям по виду документа, периоду, проведению... мне кажется эффективнее будет. Или сначала выбрать из журнала в ВТ потом с ней соединяться из документов. В общем обращение к физической таблице свести к минимуму.


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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #381 - 13. Июля 2012 :: 11:33
Печать  
ОК, ну тогда выборку из журнала можно изначально в ВТ засунуть индексы нужные повесить (на поля соединений) и  тогда мне кажется эффективнее будет.
Опять таки в SQL и в SQLite одинаковые запросы могут с разной эффективностью отрабатывать.
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #382 - 13. Июля 2012 :: 11:37
Печать  
всё равно медленнее
Улыбка

Юнион обгонит. Можешь в 1sqa проверить на 2 -х видах документов, выбрав Клиентоса например из них, за период.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Код
Выбрать все
ВНУТРЬ #ВТ_Журнал
ВЫБРАТЬ ТекущийДокумент, Проведен ...
ИЗ ЖурналДокументов КАК Жур
ГДЕ ВидДокумента В (ОдинВид, ВторойВид, ТретийВид)
И Проведен = 1 И ДатаДокумента МЕЖДУ :Начало И : Конец

// создаем индекс по виду и документу

ВЫБРАТЬ ...
ИЗ Документ.ОдинВид КАК ОдинВид
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ВТ_Журнал КАК Жур
ПО Жур.ВидДокумента = :ОДинВид И ОдинВид.ТекущийДокумент = Жур.ТекущийДокумент
ОБЪЕДИНИТЬ ВСЕ
..... 

  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #384 - 13. Июля 2012 :: 12:23
Печать  
Это не принципиально, имхо
При "множественном" соединении с табличкой журнала в юнионе нужно смотреть план запроса, там будет "аналог" того что и ты предложил - т.е 1 проход по _1sjourn с фильтром.. Скуль же "умный"
Улыбка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #386 - 30. Июля 2012 :: 15:11
Печать  
Подскажите, пожалуйста, как мне проделать такую штуку:
1) есть виртуальная таблица "Ревизия" с полем "ШтрихКод".
2) есть справочник.Номенклатуры с реквизитами: "ШтрихКод1", "ШтрихКод2".

Вопрос: Как мне сделать ЛЕВОЕ СОЕДИНЕНИЕ этих таблиц, если возможна ситуация, когда (Ревизия.ШтрихКод = спрНоменклатура.ШтрихКод1) ИЛИ (Ревизия.ШтрихКод = спрНоменклатура.ШтрихКод2)?

т.е. нужно, чтоб если не найдено соответствие в правой таблице по Поле1, искалось соответствие в правой таблице по Поле2
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #387 - 30. Июля 2012 :: 19:17
Печать  
artamir писал(а) 30. Июля 2012 :: 15:11:
Как мне сделать ЛЕВОЕ СОЕДИНЕНИЕ этих таблиц, если возможна ситуация, когда (Ревизия.ШтрихКод = спрНоменклатура.ШтрихКод1) ИЛИ (Ревизия.ШтрихКод = спрНоменклатура.ШтрихКод2)?

Так соединяй 2 раза. Сначала по ШК1, потом по ШК2. В итоге выбирай непустую номенклатуру
Код
Выбрать все
coalesce(Ном1.id,Ном2.id) 

  
Наверх
GTalkICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #388 - 31. Июля 2012 :: 05:16
Печать  
Не надо ничего 2 раза соединять, достаточно OR в условии присоединения и усё.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #389 - 31. Июля 2012 :: 06:54
Печать  
Eprst писал(а) 31. Июля 2012 :: 05:16:
Не надо ничего 2 раза соединять, достаточно OR в условии присоединения и усё.


Я правильно себе представляю?

Код
Выбрать все
|ВЫБРАТЬ *
|  ИЗ
|     #VT_Revizii КАК Ревизии
|ЛЕВОЕ СОЕДИНЕНИЕ
|   Справочник.Номенклатура КАК спрНом $nolock
|ПО
|   (Ревизии.ШтрихКод = спрНом.ШтрихКод1)
|   ИЛИ
|   (Ревизии.ШтрихКод = спрНом.ШтрихКод2)
 


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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #390 - 31. Июля 2012 :: 07:00
Печать  
Kalen писал(а) 30. Июля 2012 :: 19:17:
Так соединяй 2 раза. Сначала по ШК1, потом по ШК2. В итоге выбирай непустую номенклатуру
Код
Выбрать все
coalesce(Ном1.id,Ном2.id) 



Соединяю два раза и пишет OUT OF MEMORY Печаль
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #391 - 31. Июля 2012 :: 07:21
Печать  
Все, разобрался!
Всем спасибо.

Использовал вариант с OR.

а было всего-то ШтрихКоды - строки. По этому в соединении использовал LIKE  и все взлетело Улыбка
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #392 - 31. Июля 2012 :: 07:48
Печать  
Возник новый вопрос. А можно ли на лету добавлять свои индексы к таблицам 1С?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #393 - 31. Июля 2012 :: 08:04
Печать  
Зависит от формата БД, в скуле можно, в дбф - проблематично.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #394 - 31. Июля 2012 :: 08:37
Печать  
Eprst писал(а) 31. Июля 2012 :: 08:04:
Зависит от формата БД, в скуле можно, в дбф - проблематично.


База дбф.

а жаль Печаль
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #395 - 31. Июля 2012 :: 09:34
Печать  
artamir писал(а) 31. Июля 2012 :: 07:48:
А можно ли на лету добавлять свои индексы к таблицам 1С?

Что есть "на лету"? Можно сначала выбрать во временную таблицу и на нее повесить индексы, как на прошлой странице уже писал vandalsvq
Подозреваю, что захотелось ускорить соединение по ШК. Тогда просто включи галку "Сортировка" для этих реквизитов. Будут индексы...
  
Наверх
GTalkICQ  
IP записан
 
big_ooo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 08. Сентября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #396 - 07. Августа 2012 :: 14:08
Печать  
Подскажите пож. как получить владельца в запросе по срезу последних. Ситуация такая что справочник с периодическими реквизитами подчинен спр ТМЦ надо для ТМЦ выбрать период реквизиты пробую вот так соединить ничего не получается(база дбф):
Код
Выбрать все
	|ВЫБРАТЬ $СрезМинМаксОстатки.ТекущийЭлемент AS [минмакс $Справочник.МинМаксОстатки],
	|СрезМинМаксОстатки.МинОст,СрезМинМаксОстатки.МаксОст
	|ИЗ $СрезПоследних.МинМаксОстатки(
	|, (МинОст,МаксОст)
	|,
	|,
	|,0) КАК СрезМинМаксОстатки ЛЕВОЕ СОЕДИНЕНИЕ $Справочник.МинМаксОстатки По ТекущийЭлемент=$Справочник.МинМаксОстатки.ТекущийЭлемент
	|";

 

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


Кулинария

Сообщений: 2
Местоположение: россия
Зарегистрирован: 31. Января 2012
Пол: Женский
Кулинария
Ответ #397 - 07. Августа 2012 :: 16:40
Печать  
Спасибо за простоту и четкость. Отличные обьяснения.
« Последняя редакция: 20. Августа 2012 :: 16:14 - Ника »  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #398 - 08. Августа 2012 :: 05:10
Печать  
big_ooo писал(а) 07. Августа 2012 :: 14:08:
Подскажите пож. как получить владельца в запросе по срезу последних.


не видно связи с .Владелец в месте присоединения или где либо в твоём запросе
  
Наверх
 
IP записан
 
big_ooo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 08. Сентября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #399 - 08. Августа 2012 :: 06:24
Печать  
Eprst писал(а) 08. Августа 2012 :: 05:10:
big_ooo писал(а) 07. Августа 2012 :: 14:08:
Подскажите пож. как получить владельца в запросе по срезу последних.


не видно связи с .Владелец в месте присоединения или где либо в твоём запросе

мне надо связать спр тмц (справочник владелец) с подчиненным и из подчиненного получить значения периодические. Я в срезе последних не пойму как обратиться к владельцу справочника у меня все время ошибка.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #400 - 08. Августа 2012 :: 07:06
Печать  
Не в курсе, как там срезпоследних реализован в классе,
что касается владельца, то это поле parentext в табличке справочника (это id элемента, являющегося владельцем)

Вот с этим полем и должна быть связь, например, в left join
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #401 - 08. Августа 2012 :: 08:53
Печать  
big_ooo писал(а) 08. Августа 2012 :: 06:24:
мне надо связать спр тмц (справочник владелец) с подчиненным и из подчиненного получить значения периодические. Я в срезе последних не пойму как обратиться к владельцу справочника у меня все время ошибка.

Покажи где и как пытаешься связать со справочником ТМЦ (в твоем примере нету ТМЦ). Попробую телепатировать
Код
Выбрать все
ВЫБРАТЬ $СрезМинМаксОстатки.ТекущийЭлемент AS [минмакс $Справочник.МинМаксОстатки],
СрезМинМаксОстатки.МинОст,СрезМинМаксОстатки.МаксОст
ИЗ $СрезПоследних.МинМаксОстатки(
	, (МинОст,МаксОст), , ,0) КАК СрезМинМаксОстатки
ЛЕВОЕ СОЕДИНЕНИЕ $Справочник.МинМаксОстатки как МинМакс По ТекущийЭлемент=$МинМакс.ТекущийЭлемент
ЛЕВОЕ СОЕДИНЕНИЕ $Справочник.ТМЦ как ТМЦ По $ТМЦ.ТекущийЭлемент=$МинМакс.Владелец
 


Эти соединения можно включить внутрь ВТ параметром чтобы использовать в условиях для оптимизации самого среза.
  
Наверх
GTalkICQ  
IP записан
 
big_ooo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 08. Сентября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #402 - 08. Августа 2012 :: 09:56
Печать  
вот пробую вот такой запрос в дбф базе
Код
Выбрать все
	ТестЗапроса="
	|		SELECT $МинМаксОстатки.Владелец as [Владелец $Справочник.ТМЦ],
	|			   $ПоследнееЗначение.МинМаксОстатки.МинОст($МинМаксОстатки.ТекущийЭлемент, :ВыбДата) as МинОст,
	|			   $ПоследнееЗначение.МинМаксОстатки.МаксОст($МинМаксОстатки.ТекущийЭлементD, :ВыбДата) as МаксОст
	|		FROM $Справочник.МинМаксОстатки КАК МинМаксОстатки $nolock
	|		WHERE ($МинМаксОстатки.Владелец = :выбТовар)
	|";

	ПрямойЗапрос2=СоздатьОбъект("ПрямойЗапрос");
	ПрямойЗапрос2.Текст=ТестЗапроса;
	ПрямойЗапрос2.УстановитьТекстовыйПараметр("выбТовар",ВыбТМЦ);
	ПрямойЗапрос2.УстановитьТекстовыйПараметр("ВыбДата",ТекущаяДата());
	ПрямойЗапрос2.РежимОтладки=1;
	ТаблицаДанных = ПрямойЗапрос2.Выполнить();  

 



выписывает такую ошибку:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "AS": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);

подскажите что я не так делаю
  
Наверх
 
IP записан
 
big_ooo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 08. Сентября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #403 - 08. Августа 2012 :: 10:00
Печать  
Kalen писал(а) 08. Августа 2012 :: 08:53:
big_ooo писал(а) 08. Августа 2012 :: 06:24:
мне надо связать спр тмц (справочник владелец) с подчиненным и из подчиненного получить значения периодические. Я в срезе последних не пойму как обратиться к владельцу справочника у меня все время ошибка.

Покажи где и как пытаешься связать со справочником ТМЦ (в твоем примере нету ТМЦ). Попробую телепатировать
Код
Выбрать все
ВЫБРАТЬ $СрезМинМаксОстатки.ТекущийЭлемент AS [минмакс $Справочник.МинМаксОстатки],
СрезМинМаксОстатки.МинОст,СрезМинМаксОстатки.МаксОст
ИЗ $СрезПоследних.МинМаксОстатки(
	, (МинОст,МаксОст), , ,0) КАК СрезМинМаксОстатки
ЛЕВОЕ СОЕДИНЕНИЕ $Справочник.МинМаксОстатки как МинМакс По ТекущийЭлемент=$МинМакс.ТекущийЭлемент
ЛЕВОЕ СОЕДИНЕНИЕ $Справочник.ТМЦ как ТМЦ По $ТМЦ.ТекущийЭлемент=$МинМакс.Владелец
 


Эти соединения можно включить внутрь ВТ параметром чтобы использовать в условиях для оптимизации самого среза.


у меня используется поставщик данных справочника тмц и я к нему присоединяю остатки , чтобы вывести в табличное поле и спр. с периодическими реквизитами . с остатками все норм а вот с этими периодическими ничего не получается.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #404 - 08. Августа 2012 :: 10:00
Печать  
big_ooo писал(а) 08. Августа 2012 :: 09:56:
вот пробую вот такой запрос
...
выписывает такую ошибку:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "AS": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);

подскажите что я не так делаю

Обычно это связано с неправильным использованием знака "Доллар"
  
Наверх
ICQ  
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #405 - 08. Августа 2012 :: 10:08
Печать  
big_ooo писал(а) 08. Августа 2012 :: 09:56:
вот пробую вот такой запрос в дбф базе
Код
Выбрать все
...
FROM $Справочник.МинМаксОстатки КАК МинМаксОстатки
... 



$ убери
  
Наверх
GTalkICQ  
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #406 - 08. Августа 2012 :: 10:15
Печать  
big_ooo писал(а) 08. Августа 2012 :: 10:00:
у меня используется поставщик данных справочника тмц и я к нему присоединяю остатки , чтобы вывести в табличное поле и спр. с периодическими реквизитами . с остатками все норм а вот с этими периодическими ничего не получается.

Ну остаток, допустим, ты сводный выводишь для товара. Но периодические-то у тебя у подчиненного справочника. Для какого из подчиненных элементов данного владельца ты собираешься выводить периодические значения? Или как ты собираешься вывести все "минмаксы" в 1-ну строку товара?
  
Наверх
GTalkICQ  
IP записан
 
big_ooo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 08. Сентября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #407 - 08. Августа 2012 :: 10:25
Печать  
Kalen писал(а) 08. Августа 2012 :: 10:15:
big_ooo писал(а) 08. Августа 2012 :: 10:00:
у меня используется поставщик данных справочника тмц и я к нему присоединяю остатки , чтобы вывести в табличное поле и спр. с периодическими реквизитами . с остатками все норм а вот с этими периодическими ничего не получается.

Ну остаток, допустим, ты сводный выводишь для товара. Но периодические-то у тебя у подчиненного справочника. Для какого из подчиненных элементов данного владельца ты собираешься выводить периодические значения? Или как ты собираешься вывести все "минмаксы" в 1-ну строку товара?


у подчиненного спр есть реквизит (склад) по которому можно однозначно отфильтровать одно значение, но у меня не получается соединить эти 2 выборки Печаль
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #408 - 08. Августа 2012 :: 11:02
Печать  
big_ooo писал(а) 08. Августа 2012 :: 10:25:
у подчиненного спр есть реквизит (склад) по которому можно однозначно отфильтровать одно значение, но у меня не получается соединить эти 2 выборки

При инициализации Поставщика делай так:
1.Добавляй соединение с подчиненным справочником по владельцу и Складу.
2.Добавляй колонку(и) периодических реквизитов через ПоследнееЗначение

СрезПоследних тут использовать не советую - будет тормозить.
И если при соединении подчиненного таки получится соотношение 1:многим - будут глюки в ТП.

По Поставщику есть отдельная ветка.
  
Наверх
GTalkICQ  
IP записан
 
big_ooo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 08. Сентября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #409 - 08. Августа 2012 :: 12:02
Печать  
Kalen писал(а) 08. Августа 2012 :: 11:02:
big_ooo писал(а) 08. Августа 2012 :: 10:25:
у подчиненного спр есть реквизит (склад) по которому можно однозначно отфильтровать одно значение, но у меня не получается соединить эти 2 выборки

При инициализации Поставщика делай так:
1.Добавляй соединение с подчиненным справочником по владельцу и Складу.
2.Добавляй колонку(и) периодических реквизитов через ПоследнееЗначение

СрезПоследних тут использовать не советую - будет тормозить.
И если при соединении подчиненного таки получится соотношение 1:многим - будут глюки в ТП.

По Поставщику есть отдельная ветка.


о БЛАГОДАРЮ НАКОНЕЦ ПОЛУЧИЛОСЬ!
  
Наверх
 
IP записан
 
big_ooo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 08. Сентября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #410 - 09. Августа 2012 :: 10:16
Печать  
Делаю вот такой запрос в ДБФ базе:
Код
Выбрать все
ПрямойЗапросЗаказыТМЦ.Текст="
|ВЫБРАТЬ ЗаказыТМЦ.*
|ИЗ $РегистрОстаткиОбороты.ЗаказыТМЦ(:НачПериода,:КонПериода~,Документ,,(Товар = :ВыбТовар),(Товар),(КвоВПути)) КАК ЗаказыТМЦ
|";
ПрямойЗапросЗаказыТМЦ.УстановитьТекстовыйПараметр("НачПериода",НачДата);
ПрямойЗапросЗаказыТМЦ.УстановитьТекстовыйПараметр("КонПериода",КонДата);
 



при этом когда конпериода = дате ТА не выбираются движения последнего документа, как такое можно поправить??
Подскажите пожалуйста
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #411 - 13. Августа 2012 :: 05:24
Печать  
big_ooo писал(а) 09. Августа 2012 :: 10:16:
Делаю вот такой запрос в ДБФ базе:
как такое можно поправить??


Использовать 1sqlite не последней версии, а например, 24
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #412 - 13. Августа 2012 :: 10:09
Печать  
Это офтоп, конечно, но всё же:  пока 1sqlite не стоит переводить на новые версии, выше 1.0.2.4? Так какие-то подводные камни ещё?
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
big_ooo
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 08. Сентября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #413 - 13. Августа 2012 :: 10:54
Печать  
а где можно взять 24 на http://snegopat.ru/downloads/1sqlite/ только      Версия 1.0.2.3 и      Версия 1.0.2.6
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #414 - 13. Августа 2012 :: 11:06
Печать  
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #415 - 28. Августа 2012 :: 09:59
Печать  
Подскажите по запросу
Код:
"
|ВЫБРАТЬ
|  Покупатели.СуммаРубНачальныйОстаток КАК [НачОст :Число.15.2],
|  Покупатели.СуммаРубПриход КАК [Приход :Число.15.2],
|  Покупатели.СуммаРубРасход КАК [Расход :Число.15.2],
|  Покупатели.СуммаРубКонечныйОстаток КАК [КонОст :Число.15.2],
|  Покупатели.ТекущийДокумент КАК [Документ :Документ],
|  Покупатели.ВидДокумента КАК [Документ_Вид :ВидДокумента]
|
|ИЗ
|  $РегистрОстаткиОбороты.Покупатели(:НачДата, :КонДата, Документ,,, (Договор), (СуммаРуб)) КАК Покупатели
|";

отладка показывает: Время подготовки запроса: 502 мс, время выполнения запроса: 42 мс.
Но когда добавляю измерение "КредДокумент",
Код:
"
|ВЫБРАТЬ
|  Покупатели.СуммаРубНачальныйОстаток КАК [НачОст :Число.15.2],
|  Покупатели.СуммаРубПриход КАК [Приход :Число.15.2],
|  Покупатели.СуммаРубРасход КАК [Расход :Число.15.2],
|  Покупатели.СуммаРубКонечныйОстаток КАК [КонОст :Число.15.2],
|  Покупатели.ТекущийДокумент КАК [Документ :Документ],
|  Покупатели.ВидДокумента КАК [Документ_Вид :ВидДокумента]
|
|ИЗ
|  $РегистрОстаткиОбороты.Покупатели(:НачДата, :КонДата, Документ,,, (Договор, КредДокумент), (СуммаРуб)) КАК Покупатели
|";

то отладка показывает: Время подготовки запроса: 2279 мс, время выполнения запроса: 201 мс.
Почему такое замедление? эт нормально?
Если добавлю к договору, другое измерение, например "Фирма", то все в пределах нормы: Время подготовки запроса: 619 мс, время выполнения запроса: 41 мс., но как только добавляю КредДокумент, то все замедляется.
Мож я что-то не так делаю?
ТиС, DBF, 1sqlite, Версия = "1.8.5 23.05.2012";
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #416 - 28. Августа 2012 :: 10:45
Печать  
Смотреть надо текст запроса из отладки - там будет ответ.
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #417 - 28. Августа 2012 :: 11:02
Печать  
Asakra писал(а) 28. Августа 2012 :: 09:59:
..Но когда добавляю измерение "КредДокумент",
..то отладка показывает: Время подготовки запроса: 2279 мс, время выполнения запроса: 201 мс.

Так и размер ВТ в разрезе документов наверняка на порядки больше. Попробуй поиграть с галками "Отбор движений/итогов" по измерению регистра. Если оно того стоит конечно.
  
Наверх
GTalkICQ  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #418 - 28. Августа 2012 :: 14:23
Печать  
Kalen писал(а) 28. Августа 2012 :: 11:02:
Asakra писал(а) 28. Августа 2012 :: 09:59:
..Но когда добавляю измерение "КредДокумент",
..то отладка показывает: Время подготовки запроса: 2279 мс, время выполнения запроса: 201 мс.

Так и размер ВТ в разрезе документов наверняка на порядки больше. Попробуй поиграть с галками "Отбор движений/итогов" по измерению регистра. Если оно того стоит конечно.


Спасибо. Действительно так оно и есть. Без КредДокумент в выборке 5500 строк, а с КредДокумент 37000. Клиент через Ж... учет ведет... бум разбираться. Пасибо!
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #419 - 03. Октября 2012 :: 11:34
Печать  
ХЕЛП!

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



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


1C++ rocks!

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



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

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

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


1C++ rocks!

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

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


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

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

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



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

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

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


1C++ rocks!

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

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



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



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


1C++ rocks!

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



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

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


1C++ rocks!

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


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

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


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

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

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


1C++ rocks!

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


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

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

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

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


1C++ rocks!

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


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


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

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


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

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


1C++ rocks!

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



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


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

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

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

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



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

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #435 - 18. Октября 2012 :: 11:28
Печать  
Все, ясно!) где-то так и думал. В рабочем коде я все взял из регистра (без ВТ), этот - просто чтобы прояснить себе.
Саша, спасибо!
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #436 - 21. Октября 2012 :: 23:55
Печать  
Вот такой код:
Код
Выбрать все
	лПЗЦен.Текст="
	|Select $ПоследнееЗначение.Цены.Цена($СпрЦены.ТекущийЭлемент,:лГраницаРасчета~) as Цена
	|from
	|	Справочник.Цены as СпрЦены $nolock
	|where $СпрЦены.Владелец = @лТекНоменклатура И $СпрЦены.ТипЦен=:лТипЦен И $СпрЦены.ПометкаУдаления = 0";
	лПЗЦен.УстановитьТекстовыйПараметр("лТипЦен", ТипЦен);
	лПЗЦен.УстановитьТекстовыйПараметр("лГраницаРасчета", ГраницаРасчетаОстатков);
	лПЗЦен.ОписаниеПараметра("лТекНоменклатура","Справочник.Номенклатура");
	лПЗЦен.ПодготовитьПараметризованныйЗапрос();
 



на dbf все Ок, на sql - ошибка:

спЦен=лПЗЦен.ВыполнитьПараметризованныйЗапрос("СписокЗначений");
{Справочник.Номенклатура.ФормаСписка.Основная.Модуль(179)}: ПрямойЗапрос::ВыполнитьПараметризованныйЗапрос(Строка ТипОбъекта=СписокЗначений) : Meta name parser error: не указан параметр ":лТипЦен"
ЗапросODBC.ВыполнитьИнструкцию(,ПолучательЗапроса);
{C:\BASES\TotalCNT\CLASSES\ПрямыеЗапросы\ПрямойЗапрос.ert(13578) }

Из описания: "ПоследнееЗначение      Все параметры должны быть установлены до подготовки запроса.
.... В совокупности с параметризированным запросом разрешается использование только методов «ОписаниеПараметра», «ПодставлятьПараметры» и «ВыполнитьПараметризированныйЗапрос»."

т.е. в ПараметризованномЗапросе НЕЛЬЗЯ использовать текстовые параметры? Тогда фраза "Все параметры должны быть установлены до подготовки запроса" к чему относится?

В итоге извратился так:
Код
Выбрать все
	ТекстЗапросаЦен="
	|Select $ПоследнееЗначение.Цены.Цена($СпрЦены.ТекущийЭлемент,:лГраницаРасчета~) as Цена
	|From
	|	Справочник.Цены as СпрЦены $nolock
	|Where $СпрЦены.Владелец = @лТекНоменклатура И $СпрЦены.ТипЦен=:лТипЦен И $СпрЦены.ПометкаУдаления = 0";

	лТипЦен=глМетаДата.ЗначениеВСтрокуБД(ТипЦен);
	ТекстЗапросаЦен=СтрЗаменить(ТекстЗапросаЦен,":лТипЦен","'"+лТипЦен+"'");
	цаРасчетаОстатков,"ДГГГГММДД")+"'");
	лПЗЦен.Текст=ТекстЗапросаЦен;
	лПЗЦен.ОписаниеПараметра("лТекНоменклатура","Справочник.Номенклатура");
	лПЗЦен.ПодготовитьПараметризованныйЗапрос();
 



Ну еще вдогонку:
Код
Выбрать все
		|ВЫБРАТЬ
		|	СпрАлк.ВидПродукции КАК [ВидАП $Справочник.алкВидыПродукции]
		|	,$РегАлк.Склад КАК [Склад $Справочник.МестаХранения]
		|	,$РегАлк.Номенклатура КАК [Номенклатура $Справочник.Номенклатура]
		|	,МАКСИМУМ(СпрАлк.ПроизвИмп) КАК [ПроизвИмп $Справочник.Контрагенты]
		|	,СУММА(ВЫБОР КОГДА $РегАлк.ВидДвижения=0 ТОГДА $РегАлк.Количество*СпрАлк.Емкость/10 ИНАЧЕ 0 КОНЕЦ) КАК [П13 $Число.15.5]
		|	,СУММА(ВЫБОР КОГДА $РегАлк.ВидДвижения=1 ТОГДА $РегАлк.Количество*СпрАлк.Емкость/10 ИНАЧЕ 0 КОНЕЦ) КАК [П21 $Число.15.5]
		|ИЗ
		|	Регистр.ДвиженияАлкоголя КАК РегАлк $nolock
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	(ВЫБРАТЬ
		|		$СправАлк.ВидПродукции КАК ВидПродукции
		|		,$СправАлк.Товар КАК Товар
		|		,МАКСИМУМ(ВЫБОР КОГДА($СправАлк.Производитель<>:ПустойИД) ТОГДА $СправАлк.Производитель ИНАЧЕ $СправАлк.Импортер КОНЕЦ) КАК ПроизвИмп
		|		,МАКСИМУМ($СправАлк.Емкость) КАК Емкость
		|		ИЗ
		|			Справочник.АлкНоменклатура КАК СправАлк $nolock
		|	СГРУППИРОВАТЬ
		|		$СправАлк.ВидПродукции,$СправАлк.Товар) КАК СпрАлк
		|ПО
		|	$РегАлк.Номенклатура=СпрАлк.Товар И ($РегАлк.Дата МЕЖДУ :лНачДата И :лКонДата)
		|ГДЕ
		|	($РегАлк.Фирма=:лФирма И 1=1 И 4=4 И $РегАлк.ВидДокумента=:ВидДокумента.ПеремещениеТоваров И 2=2 И 5=5)
		|СГРУППИРОВАТЬ
		|	СпрАлк.ВидПродукции,$РегАлк.Склад,$РегАлк.Номенклатура
		|УПОРЯДОЧИТЬ
		|	СпрАлк.ВидПродукции,$РегАлк.Склад,$РегАлк.Номенклатура";
 


Почему такая конструкция на SQL моментально отрабатывает, а на SQLite - жутко тормозит? игрался с условиями всяко-разно, результат нулевой Озадачен (РегАлк - "Быстрый отбор движений" стоит)
в файле: Запрос.РежимОтладки = 1
« Последняя редакция: 22. Октября 2012 :: 03:56 - Dolly_EV »  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #437 - 22. Октября 2012 :: 09:21
Печать  
Счас уже мало что помню, что я там наделал. Улыбка на первой то вроде все нормально кажется.
А вот по поводу запроса, попробуй убрать из запроса вложенный запрос в соединении. Сделай из него временную таблицу. В общем справочник - вот узкое место. Смотри его. Может быть отбор (признак) поставь на реквизитах которые группируются.
  

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


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #438 - 22. Октября 2012 :: 11:40
Печать  
Dolly_EV писал(а) 21. Октября 2012 :: 23:55:
Код
Выбрать все
ПО ... И ($РегАлк.Дата МЕЖДУ :лНачДата И :лКонДата)
 

Имхо, проблема в неоптимальном соединении. Попробуй вынести это условие из точки соединения в ГДЕ. 1sqlite бывает ошибается в подборе индекса в этом месте.
Судя по
Цитата:
Подбор индекса для таблицы SC48386:
     Ограничения:
     Упорядочить: SP48440[ВидПродукции], SP48437[Товар],
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9984
Подбор индекса для таблицы RA48458:
     Ограничения: SP48459[Фирма]=; IDDOCDEF=; DATE>=; DATE<=;
     Найдено в кэше
     Выбран индекс DATETIME: DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
     Стоимость: 100
..не удивительно, что Цитата:
время выполнения запроса: 12895 мс.
конечно, что тут должно быть на самом деле сказать трудно без знания конфы. Возможно, что для регистра есть индекс по "Номенклатура", и sql соединяет по ней.
Вообще, неэффективность 1sqlite в групповых операциях общеизвестна, т.ч. он по-любому скуль не догонит.
К слову, на всякий случай добавлю к Сашиным словам, что он имел в виду, конечно, временную таблицу с индексом.
А еще с $ ты, мне кажется, несколько перестарался Улыбка
  
Наверх
GTalkICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #439 - 22. Октября 2012 :: 12:33
Печать  
Kalen писал(а) 22. Октября 2012 :: 11:40:
Попробуй вынести это условие из точки соединения в ГДЕ.

Не, это пробовал, не помогает. Да, действительно проблема в справочнике - если его не группировать - все Ок.
При этом весь огород на самом деле городился для наложения условия в верхнем запросе "ПроизвИмп<>:ПустойИД", т.к. в любых других вариантах при исполнении на СКЛь ругается, что "Column 'ПроизИмп' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.  Злой (SQLite при этом пропускает!)

Т.е. остается отдельный запрос для СпрАлк и инсерт в тз с индексом  Печаль

Цитата:
А еще с $ ты, мне кажется, несколько перестарался Улыбка

Где? )) вроде всё по Доке...
Зае...л меня этот $, честно говоря, но в последние дни вроде прояснение наступило, где надо-где не надо))
  
Наверх
ICQ  
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #440 - 22. Октября 2012 :: 14:33
Печать  
Dolly_EV писал(а) 22. Октября 2012 :: 12:33:
Да, действительно проблема в справочнике - если его не группировать - все Ок.

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #441 - 23. Октября 2012 :: 01:31
Печать  
Kalen писал(а) 22. Октября 2012 :: 14:33:
Сколько в отдельности выполняется сам подзапрос?

Сам подзапрос к справочнику - быстро (и с груп и без груп), как только джойн с регистром - все колом(именно когда СпрАлк Групбай). При этом джойн с ВТОбороты регистра - все летает... проверил - по всем группируемым реквизитам - стоит "Отбор" (и в т.ч. на реквизитах СпрАлк)... короче запишем в "непонятое" пока Улыбка
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #442 - 24. Октября 2012 :: 11:18
Печать  
А если Запрос без Группировки оформить подзапросом, к которому потом применить группировку?
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #443 - 24. Октября 2012 :: 11:37
Печать  
Весьма забавный подзапрос..
Точнее бредовая структура хранения данных:

У вас в алкашном справочнике может быть несколько элементов с одним товаром, но с разным производителем/импортером и , что о ужас! - с разным видом алкогольной продукции?!

Если да, то даже гроупбай там не поможет - вы однозначно по связке в соединении "ссылка на Товар" поимеете грабли в виде удвоении/затроении..  (=количеству элементов с одинаковым товаром но с разным кодом продукции).

Если даже код один для каждого товара, но производитель/импортеры разные - то при функции максимум имеете кота в мешке - т.е первого попавшегося (у кого ид побольше,т.е более позднего созданного елемента справочника клиентосов) - что не верно с точки зрения учета в разрезе производители/импортеры.


Так что, тут структуру данных нужно менять, а не запрос, который радугу показывает оптимизировать

ЗЫ: ежели в этом справочнике однозначное соответствие
товар - вид продукции - импортер/производитель, то он вовсе не нужен , все эти реквизиты можно хранить в номенклатуре, если уж сделали так, то выкинуть гроупбай тогда.

Ежели всё же там могут быть одинаковые товары но с разными производителями/импортерами, то это нужно учитывать хотя бы в Партии товаров, чтоб потом с регистра тащить производителя/импортера, которого выбрали в документе и в приходе организовать выбор их же.


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


1C++ rocks!

Сообщений: 2
Зарегистрирован: 24. Октября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #444 - 24. Октября 2012 :: 12:11
Печать  
Код
Выбрать все
	  списокСчетов = СоздатьОбъект("СписокЗначений");
	списокСчетов.ДобавитьЗначение(СчетПоКоду("41.1"));

        ТекстЗапроса = "ВЫБРАТЬ
					|	БухИтоги.КоличествоНачальныйОстаток КАК НачОст41,
					|	БухИтоги.СуммаОборотДт КАК ОборотыДт41,
					|	БухИтоги.Субконто1 КАК [Автомобиль $Субконто],
					|	БухИтоги.Субконто1_вид КАК Автомобиль_вид
					|ИЗ
					|	, Сумма),(Субконто1  В (ВЫБРАТЬ Val ИЗ #спАвто))) КАК БухИтоги
					|";
	Запрос.УложитьСписокЗначений(списокСчетов, "#спСчетов");                  
	Запрос.УложитьСписокЗначений(спАвто, "#спАвто");
	Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);              
	Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата); 



Уже все перепробовал  не знаю в чем беда. спАвто - список с элементами из справочника "Номенклатура", в результате запроса получается только 1 строка. 2 Странности:
1.Не попадают остальные строки(хотя я формировал осв по счету 41.1 для элементов и она не пустая)
2. Остается пустое поле оборотов(для элемента по которому запрос сработал), хотя обороты в данном периоде были.
Скажите, пожалуйста, что не так Улыбка
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #445 - 24. Октября 2012 :: 12:21
Печать  
Модификаторы на дату не нужно втыкать ?
(ЗЫ: реализацию этого класса не видел)
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #446 - 24. Октября 2012 :: 12:28
Печать  
Salimbek писал(а) 24. Октября 2012 :: 11:18:
А если Запрос без Группировки оформить подзапросом, к которому потом применить группировку?

Это как? у меня Группировка одна по верхнему запросу, этот (к справочнику) и так подзапрос...
Ладно, это уже не важно, тут много всяких факторов: и регистр не оптимизирован (отбора нет по нужным полям + измерения в неправильном порядке), и логика построения реквизитов "не правильная"... просто этот регистр - далекое наследство от конфиги КТ-2000, но был всегда как-бы вспомогательным, а тут потребовался... вобщем все переделывать надо )))

Выводы, которы для себя сделал:
1. SQL дюже умный всмысле построения запросов, и даже при неправильной структуре и связях таблиц очень хорошо изворачивается Подмигивание но при этом очень строг к синтаксису когда имеются агрегатные функции, Груп бай и условия в ГДЕ
2. SQLite туповат при выборе индексов, но можно вольнее себя чувствовать в плане синтаксиса (уловия и ордер бай)
Поправьте, если неправильные выводы сделал?
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #447 - 24. Октября 2012 :: 12:37
Печать  
Там вообще не нужен этот регистр, если что.
Всё и так есть в ПартииНаличие: и даллы тоже можно вычислить и не
алкоголь отсеить.
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #448 - 24. Октября 2012 :: 12:42
Печать  
Eprst писал(а) 24. Октября 2012 :: 11:37:
Весьма забавный подзапрос..
Точнее бредовая структура хранения данных:

Это да))) читай выше ответ - давнее наследие КТ-200
Цитата:
У вас в алкашном справочнике может быть несколько элементов с одним товаром, но с разным производителем/импортером и , что о ужас! - с разным видом алкогольной продукции?!

Неее, Номенклатура.Алкоголь <=> АлкНоменклатура.Товар один-к-одному, т.е. косяки конечно случаются, но все отлавливается и при формировании деклы имеем "один-к-одному". Измерение в АлкРегистре - Номенклатура (не алкоголь)
Цитата:
Если даже код один для каждого товара, но производитель/импортеры разные - то при функции максимум имеете кота в мешке - т.е первого попавшегося (у кого ид побольше,т.е более позднего созданного елемента справочника клиентосов) - что не верно с точки зрения учета в разрезе производители/импортеры.

Группирую все по "Номенлатура" в том числе, так что МАКСИМУМ однозначно выдаст или одно значение или Пусто
Цитата:
Так что, тут структуру данных нужно менять, а не запрос, который радугу показывает оптимизировать

Однозначно согласен, но я же только еще подошел к этому))) Так сказать с полным пониманием теперь смотрю)))
Цитата:
ЗЫ: ежели в этом справочнике однозначное соответствие
товар - вид продукции - импортер/производитель, то он вовсе не нужен , все эти реквизиты можно хранить в номенклатуре, если уж сделали так, то выкинуть гроупбай тогда.

Далее Производителя/Импортера буду выносить в свойства партии и организовывать парт учет.... это как со складскими площадями на след. год полегче станет, чтобы стоповать было возможно, ну а так АлкНоменклатура - нужен только как "контейнер" для алк реквизитов, т.к. конфига используется не только на алкоголе, чтобы не "засорять" Спр.Номенклатура, и хрен его знает, что там дальше придумается))) может опять акциз платить станем

Eprst, у тебя кстати эта конфига есть, если не выкинул))..когда разбирались с классом "Аля Восьмерка"
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #449 - 24. Октября 2012 :: 12:46
Печать  
У меня много таких конф от кт-ников есть.
Там всё через ж.. сделано было изначально - они так и тянут это всё из релиза в релиз - "жертва" универсальности с типовыми конфигами.

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

Если несколько - то твой запрос априори неверен.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #450 - 24. Октября 2012 :: 12:47
Печать  
+
ВЫБОР КОГДА($СправАлк.Производитель<>:ПустойИД) ТОГДА $СправАлк.Производитель ИНАЧЕ $СправАлк.Импортер КОНЕЦ

вот это идеологически не верно:

нужно наеборот проверять, если нет импортёра - то пихаем производителя.

Ибо на импортный товар есть И производитель И импортер.
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #451 - 24. Октября 2012 :: 12:52
Печать  
dontcrypls писал(а) 24. Октября 2012 :: 12:11:
[code]
1.Не попадают остальные строки(хотя я формировал осв по счету 41.1 для элементов и она не пустая)
2. Остается пустое поле оборотов(для элемента по которому запрос сработал), хотя обороты в данном периоде были.
Скажите, пожалуйста, что не так Улыбка

1. :КонДата~ // может все обороты нужные как раз в последней дате?
2. Запрос.УложитьСписокЗначений(спАвто, "#спАвто","Автомобиль") // в фильтре групп нет?, если есть - то без типизации - группы не разворачиваются

правда с БухИтогами пока не занимался в отношении данного класса
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #452 - 24. Октября 2012 :: 12:55
Печать  
Eprst писал(а) 24. Октября 2012 :: 12:47:
+
ВЫБОР КОГДА($СправАлк.Производитель<>:ПустойИД) ТОГДА $СправАлк.Производитель ИНАЧЕ $СправАлк.Импортер КОНЕЦ

вот это идеологически не верно:

нужно наеборот проверять, если нет импортёра - то пихаем производителя.

Ибо на импортный товар есть И производитель И импортер.


Согласен)) но на текущий момент ФСРАРу по-барабану, кто есть ПроизводительИмпортер - тот или другой)))... Ну а практически: в АлкНоменклатуре уже были реквизиты Производитель и Импортер... сделал только проверку на НЕ выбирать обоих одновременно для пользователей... отсюда и вилка. Т.е. логика у меня сейчас такая: если есть Производитель - начит это наше, родное, если есть Импортер - то это из-за границы и Производитель нам не интересен, т.к. импортированием НЕ занимаемся, и вообще - главное чтоб был НЕ пустой и с ИНН и КПП ))))))
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #453 - 24. Октября 2012 :: 13:00
Печать  
Eprst писал(а) 24. Октября 2012 :: 12:46:
У меня много таких конф от кт-ников есть.
Просто если у тебя в этом справочнике только одно значение с товаром, то выкини гроупбай из подзапроса насовсем.


Однозначное: Товар / Производитель ИЛИ Импортер / Емкость. ВидПродукции - много, так что ГроупБай надо, + если использую МАКСИМУМ (из-за вилки ПроивзИЛИИмпортер) без ГроупБай - СКЛь ругается... короче кругом засада и выход один - только переделать регистр и справочник))) но сейчас выкрутился
  
Наверх
ICQ  
IP записан
 
dontcrypls
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 24. Октября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #454 - 24. Октября 2012 :: 13:16
Печать  
Dolly_EV писал(а) 24. Октября 2012 :: 12:52:
1. :КонДата~ // может все обороты нужные как раз в последней дате?
2. Запрос.УложитьСписокЗначений(спАвто, "#спАвто","Автомобиль") // в фильтре групп нет?, если есть - то без типизации - группы не разворачиваются

правда с БухИтогами пока не занимался в отношении данного класса

Точно не в дате косяк. Я убирал условие по субконто вообще и всё работало. Т.е. получалась таблица, и там в столбце "Автомобиль" были элементы из спАвто. Что то тут с условием. В фильтре групп нет Улыбка
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #455 - 24. Октября 2012 :: 13:26
Печать  
Dolly_EV писал(а) 24. Октября 2012 :: 13:00:
Однозначное: Товар / Производитель ИЛИ Импортер / Емкость.

ВидПродукции - много, так что ГроупБай надо


Гы..
Если Для одного Товара у тебя в этом справочнике куча елементов с этим товаром но с разными ВидамиПродукции, то в своём запросе ты же имеешь полный ПЭ -
увеличиваешь строки из запроса на эти виды продукции.

Это же.. даже слов нет.


ЗЫ: грубо говоря, у тебя в регистре есть запись:

Вино Васюки приход 100 дал... а в твоём справочнике


460 Вино Васюки Импортер Вася
412 Вино Васюки ИмпортерФедя

то на выходе в запросе в результате левого соединения ты будешь иметь 2 строки (гроуп бай товар,видПродукции,максимум(произв/импорт):

460 Вино Васюки Импортер Вася приход 100 дал
412 Вино Васюки Импортер Вася п приход 100 дал

а не одну ...

Ну и дальше, нет слов
Нерешительный
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #456 - 24. Октября 2012 :: 13:32
Печать  
Eprst писал(а) 24. Октября 2012 :: 13:26:
Dolly_EV писал(а) 24. Октября 2012 :: 13:00:
Однозначное: Товар / Производитель ИЛИ Импортер / Емкость.

ВидПродукции - много, так что ГроупБай надо

Гы..
Если Для одного Товара у тебя в этом справочнике куча елементов с этим товаром но с разными ВидамиПродукции,


не, это я не правильно выразился. Для одного Товара - один АлкТовар, в котором один ВидПродукции, один Произв ИЛИ Импортер...вот в этом ИЛИ вся собака и порылась.....
Короче прихожу к выводу, что групбай здесь только из-за того, что МАКСИМУМ в СКЛь не канает БЕЗ ГрупБай ))))...
а в отчете треба наложить иногда фильтр на ПроизводительИмпортер.... как-то так
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #457 - 24. Октября 2012 :: 13:41
Печать  
Если он у тебя один, то ни гроупбай ни максимум там не нужен вовсе - выкини его из текста запроса.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #458 - 24. Октября 2012 :: 13:47
Печать  
Код
Выбрать все
СУММА(ВЫБОР КОГДА $РегАлк.ВидДвижения=0 ТОГДА $РегАлк.Количество*СпрАлк.Емкость/10 ИНАЧЕ 0 КОНЕЦ) 



вот это тоже не верно, не втыкай case где попало, достаточно так:

Код
Выбрать все
СУММА((1-$РегАлк.ВидДвижения)* $РегАлк.Количество*СпрАлк.Емкость/10) 

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #459 - 24. Октября 2012 :: 14:07
Печать  
Eprst писал(а) 24. Октября 2012 :: 13:47:
вот это тоже не верно, не втыкай case где попало, достаточно так:
Код
Выбрать все
СУММА((1-$РегАлк.ВидДвижения)* $РегАлк.Количество*СпрАлк.Емкость/10) 



ага, пасиб за посказку про (1-дебкред)!

И да, убрал групбай из подзапроса с СпрАлк - все ок, вобщем сам себя заморочил....

  
Наверх
ICQ  
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #460 - 01. Ноября 2012 :: 14:18
Печать  
Всем привет.

Имеется база dbf, на основе бухии.

Имеется запрос, для проверки общей суммы отгрузки по договору

Код
Выбрать все
	ВыбКонтрагент = Конт.Контрагент;
	ВыбДоговор = Конт.Договор;

	СуммаКонтроля = ВыбДоговор.СуммаДог;

	Если СуммаКонтроля = 0 Тогда
		Возврат 1;
	КонецЕсли;


	Рез = "";
	ТекстЗапроса = "

     |ВЫБРАТЬ
     |СУММА(БухИт.СуммаОборот) КАК СуммаОборот
     |ИЗ
     | $БИОбороты.Основной(     :НачПериода
     |				   ,:ГраницаКонтроля
     |				   ,Период
     |				   ,#СзСчетов62
     |				   ,БЕЗСУБКОНТО
     |				   ,
     |				   ,БЕЗСУБКОНТО
     |				   ,(Сумма)
     |				   ,(СубконтоДт1 = :ВыбКонтрагент) И (СубконтоДт2 = :ВыбДоговор)
     |				   ,
     |			   ) КАК БухИт
     |";

	трагент);
	р);
	онт.ДатаДок));
	нт.Выбран()=1,Конт.ТекущийДокумент(),Конт.ДатаДок));

	СзСчетов = СоздатьОбъект("СписокЗначений");
	СзСчетов.ДобавитьЗначение(СчетПоКоду("58.1"));
	СзСчетов.ДобавитьЗначение(СчетПоКоду("58.2"));
	СзСчетов.ДобавитьЗначение(СчетПоКоду("58.3"));
	СзСчетов.ДобавитьЗначение(СчетПоКоду("62.1"));
	СзСчетов.ДобавитьЗначение(СчетПоКоду("62.2"));
	СзСчетов.ДобавитьЗначение(СчетПоКоду("62.3"));
	СзСчетов.ДобавитьЗначение(СчетПоКоду("62.11"));

	глЗапросКонтрольСуммыДоговора.УложитьСписокЗначений(СзСчетов,"#СзСчетов62");
	глЗапросКонтрольСуммыДоговора.Текст = ТекстЗапроса;
	глЗапросКонтрольСуммыДоговора.РежимОтладки=1;
	ИтТз = глЗапросКонтрольСуммыДоговора.Выполнить("ИндексированнаяТаблица");

 



Вопрос почему не используется таблица отборов проводок по субконто.

Флаг отбор стоит везде и в субконто и в проводках.
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #461 - 01. Ноября 2012 :: 14:18
Печать  
Вот разбор

Код
Выбрать все
SELECT
SUM(БухИт.СуммаОборот) AS СуммаОборот
FROM
 (
	SELECT
		Валюта
		,Счет
		,КорСчет
		,SUM(СуммаОборот) СуммаОборот
		,SUM(СуммаОборотДт) СуммаОборотДт
		,SUM(СуммаОборотКт) СуммаОборотКт


	FROM
		(SELECT
			Валюта
			,СчетДт Счет
			,СчетКт КорСчет
			,СуммаОборот СуммаОборот
			,СуммаОборот СуммаОборотДт
			,0 СуммаОборотКт


		FROM (
	SELECT
		Валюта
		,СчетДт
		,СчетКт


		,SUM(СуммаОборот) СуммаОборот

	FROM (SELECT
			entry_vt.CURRID Валюта
			,entry_vt.ACCDTID СчетДт
			,entry_vt.ACCKTID СчетКт


			,entry_vt.SUM СуммаОборот

		FROM __1S_ENTRY entry_vt
		WHERE (entry_vt.ACCDTID IN (SELECT val FROM vt_СзСчетов62))
		AND (entry_vt.idx_DATE_TIME_DOCID_NUMBER_CORNO >= '20120101     0     0   ')
		AND (entry_vt.idx_DATE_TIME_DOCID_NUMBER_CORNO < '201210308XSSGW  8TI7   ')
		AND (entry_vt.ACTIVE = ' ')
		AND ((entry_vt.DTSC0 = '   13V   ') AND (entry_vt.DTSC1 = '   5QZ   '))

		AND ((entry_vt.PROVKIND = ' ') OR (entry_vt.CORNO > 0))
		) entryturnover
	GROUP BY СчетДт

		,СчетКт

		,Валюта

	HAVING
		(SUM(СуммаОборот) <> 0)
) AS sq_vt_1

		UNION ALL

		SELECT
			Валюта
			,СчетКт
			,СчетДт
			,-СуммаОборот
			,0
			,СуммаОборот


		FROM (
	SELECT
		Валюта
		,СчетДт
		,СчетКт


		,SUM(СуммаОборот) СуммаОборот

	FROM (SELECT
			entry_vt.CURRID Валюта
			,entry_vt.ACCDTID СчетДт
			,entry_vt.ACCKTID СчетКт


			,entry_vt.SUM СуммаОборот

		FROM __1S_ENTRY entry_vt
		WHERE (entry_vt.ACCKTID IN (SELECT val FROM vt_СзСчетов62))
		AND (entry_vt.idx_DATE_TIME_DOCID_NUMBER_CORNO >= '20120101     0     0   ')
		AND (entry_vt.idx_DATE_TIME_DOCID_NUMBER_CORNO < '201210308XSSGW  8TI7   ')
		AND (entry_vt.ACTIVE = ' ')
		AND ((entry_vt.DTSC0 = '   13V   ') AND (entry_vt.DTSC1 = '   5QZ   '))

		AND ((entry_vt.PROVKIND = ' ') OR (entry_vt.CORNO > 0))
		) entryturnover
	GROUP BY СчетДт

		,СчетКт

		,Валюта

	HAVING
		(SUM(СуммаОборот) <> 0)
) AS sq_vt_2
		) AS accturnover
	GROUP BY
		Валюта
		,Счет
		,КорСчет


) AS БухИт
create table x(
 [DOCID] char(9) collate _1C
,[NUMBER] numeric(5, 0)
,[CORNO] numeric(5, 0)
,[DATE] char(8)
,[TIME] char(6) collate _1C
,[ACCDTID] char(9) collate _1C
,[ACCKTID] char(9) collate _1C
,[SUM] numeric(14, 2)
,[CURRID] char(9) collate _1C
,[CURSUM] numeric(14, 2)
,[AMOUNT] numeric(14, 3)
,[PROVKIND] char(1) collate _1C
,[ACTIVE] char(1) collate _1C
,[DTFLAGS] numeric(1, 0)
,[KTFLAGS] numeric(1, 0)
,[DOCLINENO] numeric(4, 0)
,[SP547] char(50) collate _1C
,[SP548] char(2) collate _1C
,[SP25345] char(25) collate _1C
,[VDTSC0] char(4) collate _1C
,[DTSC0] char(9) collate _1C
,[ODTSC0] numeric(1, 0)
,[VDTSC1] char(4) collate _1C
,[DTSC1] char(9) collate _1C
,[ODTSC1] numeric(1, 0)
,[VDTSC2] char(4) collate _1C
,[DTSC2] char(9) collate _1C
,[ODTSC2] numeric(1, 0)
,[VDTSC3] char(4) collate _1C
,[DTSC3] char(9) collate _1C
,[ODTSC3] numeric(1, 0)
,[VDTSC4] char(4) collate _1C
,[DTSC4] char(9) collate _1C
,[ODTSC4] numeric(1, 0)
,[VKTSC0] char(4) collate _1C
,[KTSC0] char(9) collate _1C
,[OKTSC0] numeric(1, 0)
,[VKTSC1] char(4) collate _1C
,[KTSC1] char(9) collate _1C
,[OKTSC1] numeric(1, 0)
,[VKTSC2] char(4) collate _1C
,[KTSC2] char(9) collate _1C
,[OKTSC2] numeric(1, 0)
,[VKTSC3] char(4) collate _1C
,[KTSC3] char(9) collate _1C
,[OKTSC3] numeric(1, 0)
,[VKTSC4] char(4) collate _1C
,[KTSC4] char(9) collate _1C
,[OKTSC4] numeric(1, 0)
, idx_DOCID_NUMBER_CORNO char(19) collate _1C
, idx_DATE_TIME_DOCID_NUMBER_CORNO char(33) collate _1C
, idx_SUM_DATE_TIME_DOCID_NUMBER_CORNO char(47) collate _1C
, idx_SP548_DATE_TIME_DOCID_NUMBER_CORNO char(35) collate _1C
)

 

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #462 - 02. Ноября 2012 :: 06:31
Печать  
Сравни с SQL, если там используется значит в DBF отключено поскольку не показало своей эффективности.
Можно ковырнуть немного и сделать для сравнения, а управление через флаг какой нибудь сделать. Но пока не хочу возиться, слишком много интересов стало у меня.
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #463 - 02. Ноября 2012 :: 06:42
Печать  
Где-то же было обсуждение, что табличка отбора по счетам не даст существенного ускорения.. поищи тут
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #464 - 02. Ноября 2012 :: 08:34
Печать  
Понятно, печально..

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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #465 - 02. Ноября 2012 :: 09:42
Печать  
Только собрался перевести 1С из дбф на MSSQL, как натолкнулся на грабли Печаль

Версия ПрямогоЗапроса = 1.8.5 23.05.2012

ТекстЗапроса = "
                 |ВЫБРАТЬ
                 |            $ж_Билет.ТекущийДокумент      КАК [Документ            $Документ.Билет                        ]
                 |      ,      $д_Билет.Агент                        КАК [Агент                  $Справочник.Сотрудники            ]
                 |      ,      $д_Билет.АгентБронь                  КАК      [АгентБронь            $Справочник.Сотрудники            ]
                 |      ,      $д_Билет.Компания                  КАК      [Авиакомпания      $Справочник.Контрагенты            ]
                 |      ,      $д_Билет.Покупатель                  КАК      [Пасажир            $Справочник.Контрагенты            ]
                 |      ,      $д_Билет.Авиакасса                  КАК      [Покупатель            $Справочник.Контрагенты            ]
                 |      ,      $д_Билет.Статус                        КАК      [Статус                  $Перечисление.СтатусБилета      ]
                       
                 |      ,      $д_Билет.БазовыйТарифСум            КАК      [БазовыйТариф_Сум      $Число]
                 |      ,      $д_Билет.БазовыйТарифСумВал            КАК      [БазовыйТариф_Вал      $Число]
                 |      ,      $д_Билет.Таксы_ИтогЛей                  КАК      [Таксы_Сум                  $Число]
                 |      ,      $д_Билет.Таксы_ИтогВал                  КАК      [Таксы_Вал                  $Число]
                 |      ,      $д_Билет.ПеняЛей                        КАК      [Пеня_Сум                  $Число]
                 |      ,      $д_Билет.ПеняВал                        КАК      [Пеня_Вал                  $Число]

                 |      ,      $д_Билет.СумКомЛей                        КАК      [КомБрутто_Сум            $Число]
                 |      ,      $д_Билет.СумКомВал                        КАК      [КомБрутто_Вал            $Число]
                 |      ,      $д_Билет.СумКомЛейСубагентов      КАК      [КомСкидки_Сум            $Число]
                 |      ,      $д_Билет.СумКомВалСубагентов      КАК      [КомСкидки_Вал            $Число]
                 
                 |      ,      $д_Билет.СервисФи                        КАК      [СерФиБрутто_Сум      $Число]
                 |      ,      $д_Билет.СервисФиВал                  КАК      [СерФиБрутто_Вал      $Число]
                 |      ,      $д_Билет.СкидкаСервисФи                  КАК      [СерФиСкидки_Сум      $Число]
                 |      ,      $д_Билет.СкидкаСервисФиВал            КАК      [СерФиСкидки_Вал      $Число]
                 
                 |      ,      $д_Билет.ТаксаХХ                        КАК      [ТаксыХХ_Сум            $Число]
                 |      ,      $д_Билет.ТаксаХХВал                        КАК      [ТаксыХХ_Вал            $Число]
                 
                 |ИЗ
                 |      ЖурналДокументов      КАК ж_Билет $nolock
                 
                 |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
                 |      Документ.Билет      КАК      д_Билет $nolock
                 |ПО
                 |      $д_Билет.ТекущийДокумент = $ж_Билет.ТекущийДокумент      
                 
                 |ГДЕ
                 |      $ж_Билет.Проведен = 1
                 |И
                 |";

ПрямойЗапрос ругается на выделенную строку Печаль

ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : Ошибка типизации поля Документ            $Документ.Билет                        .
ЗапросODBC.ВыполнитьИнструкцию(ТекстЗапроса,ПолучательЗапроса,1);
{D:\1s_file\1SSQL\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13484) }


Причем в ДБФ версии все нормально
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #466 - 02. Ноября 2012 :: 09:46
Печать  
табуляцию выкини из текста запроса
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #467 - 02. Ноября 2012 :: 09:47
Печать  
Без табуляции некрасиво Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #468 - 02. Ноября 2012 :: 09:48
Печать  
есть пробелы
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #469 - 02. Ноября 2012 :: 10:06
Печать  
Пробелы - это не совсем то Печаль

Не очень красиво, зато РАБОТАЕТ  Очень довольный

СПАСИБО!
  
Наверх
 
IP записан
 
Igor YN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #470 - 04. Ноября 2012 :: 15:34
Печать  
Опять в ОстаткиОбороты выдает
ПрямойЗапрос::ПолучитьТипКолонки(Метаданные МетаРеквизит=, Строка Тип=, Строка Вид=, Число Длина=-1, Число Точность=-1) : Поле агрегатного объекта не обнаружено
Тип = МетаРеквизит.Тип;
{D:\Тест планы Август\Classes\ПрямойЗапрос.ert(265) }
Что делать? Релиз прследний.
Если кто в теме - выдам текст запроса...
  
Наверх
 
IP записан
 
Igor YN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #471 - 04. Ноября 2012 :: 18:14
Печать  
Предыдущую ошибку исправил (ответ нашел на форуме)
Зато появилась ещё одна:
     ТекстЗапроса = "
     |ВЫБРАТЬ
     |ОЗ.Менеджер        КАК [Менеджер     $Справочник.Сотрудники],
     |ОЗ.Покупатель      КАК [Покупатель   $Справочник.Покупатели],
     |ОЗ.Заказ           КАК [Заказ        $Документ],
     |ОЗ.Номенклатура    КАК [Номенклатура $Справочник.Номенклатура],
     |ОЗ.Номер           КАК [Номер        $Строка],
     |ОЗ.Нахождение      КАК [Нахождение   $Справочник.Сотрудники],
     |ОЗ.НомерЭл         КАК [НомерЭл      $Число],
     |ОЗ.ТекущийДокумент КАК [ТекущийДокумент $Документ],
     |ОЗ.ВидДокумента    КАК [ТекущийДокумент_вид КАК $ВидДокумента],
     |СУММА(ОЗ.КоличествоНачальныйОстаток)  КАК [КоличествоНачальныйОстаток $Число],
     |СУММА(ОЗ.КоличествоПриход)           КАК [КоличествоПриход $Число],
     |СУММА(ОЗ.КоличествоРасход)           КАК [КоличествоРасход $Число],
     |СУММА(ОЗ.КоличествоКонечныйОстаток)  КАК [КоличествоКонечныйОстаток $Число],
     |СУММА(ОЗ.СебестРемИзд)               КАК [СебестРемИзд $Число]
     |ИЗ(
     |ВЫБРАТЬ
     |Ремонт.Менеджер        КАК Менеджер,
     |Ремонт.Покупатель      КАК Покупатель,
     |Ремонт.Заказ           КАК Заказ,
     |Ремонт.Номенклатура    КАК Номенклатура,
     |Ремонт.Номер           КАК Номер,
     |Ремонт.Нахождение      КАК Нахождение,
     |Ремонт.НомерЭл         КАК НомерЭл,
     |Ремонт.ТекущийДокумент КАК ТекущийДокумент,
     |Ремонт.ВидДокумента    КАК ТекущийДокумент_вид,
     |Ремонт.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
     |Ремонт.КоличествоПриход           КАК КоличествоПриход,
     |Ремонт.КоличествоРасход           КАК КоличествоРасход,
     |Ремонт.КоличествоКонечныйОстаток  КАК КоличествоКонечныйОстаток,
     |0                                 КАК СебестРемИзд
     |ИЗ
     |$РегистрОстаткиОбороты.Ремонт(:ВыбНачПериода,:ВыбКонПериода~, ДОКУМЕНТ,,,(Менеджер, Покупатель,Заказ, Номенклатура, Номер, Нахождение, НомерЭл)) КАК Ремонт
     |ОБЪЕДИНИТЬ
     |ВЫБРАТЬ
     |$Ремонт.Менеджер,
     |$Ремонт.Покупатель,
     |$Ремонт.Заказ,
     |$Ремонт.Номенклатура,
     |$Ремонт.Номер,
     |$Ремонт.Нахождение,
     |$Ремонт.НомерЭл,
     |$Ремонт.ТекущийДокумент,
     |$Ремонт.ВидДокумента,
     |0,
     |0,
     |0,
     |0,
     |$Ремонт.СебестРемИзд
     |ИЗ
     |Регистр.Ремонт КАК Ремонт $nolock
     |) КАК ОЗ
     |СГРУППИРОВАТЬ ОЗ.Менеджер, ОЗ.Покупатель, ОЗ.Заказ, ОЗ.Номенклатура, ОЗ.Номер, ОЗ.Нахождение, ОЗ.НомерЭл, ОЗ.ТекущийДокумент
     |ИМЕЮЩИЕ
     |СУММА(ОЗ.КоличествоНачальныйОстаток) <> 0 ИЛИ СУММА(ОЗ.КоличествоПриход) <> 0 ИЛИ СУММА(ОЗ.КоличествоРасход) <> 0 ИЛИ СУММА(ОЗ.КоличествоКонечныйОстаток) <> 0
     |";
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'ВидДокумента'.
ЗапросODBC.ВыполнитьИнструкцию(ТекстЗапроса,ПолучательЗапроса,1);
{D:\Тест планы Август\Classes\ПрямойЗапрос.ert(13484) }
Что не так, подскажите плз.
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #472 - 05. Ноября 2012 :: 06:57
Печать  
МАКСИМУМ(ОЗ.ВидДокумента) КАК [ТекущийДокумент_вид $ВидДокумента],
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #473 - 06. Ноября 2012 :: 05:00
Печать  
Код
Выбрать все
 //  |ОЗ.ВидДокумента    КАК [ТекущийДокумент_вид КАК $ВидДокумента],

   |максимум(ОЗ.ТекущийДокумент_вид )  КАК [ТекущийДокумент_вид КАК $ВидДокумента], 



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


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #474 - 06. Ноября 2012 :: 08:48
Печать  
Спасибо! Самому догадаться наверное невозможно...
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #475 - 11. Ноября 2012 :: 09:29
Печать  
А кто подскажет как реализовать полное соединение? Пишу полное соединение - он его не понимает. Может по англ. написать?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #476 - 12. Ноября 2012 :: 04:51
Печать  
temrmal писал(а) 11. Ноября 2012 :: 09:29:
А кто подскажет как реализовать полное соединение? Пишу полное соединение - он его не понимает. Может по англ. написать?

лучше уж union all использовать, чем full join
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #477 - 12. Ноября 2012 :: 07:59
Печать  
temrmal писал(а) 11. Ноября 2012 :: 09:29:
..Пишу полное соединение - он его не понимает. Может по англ. написать?

База ДБФ?
  
Наверх
GTalkICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #478 - 12. Ноября 2012 :: 15:16
Печать  
Нет, sql.
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #479 - 13. Ноября 2012 :: 08:00
Печать  
Тогда английский может и работает. На ДБФ (1sqlite) работать не будет. Как уже сказал Ёпрст, можно вместо полного использовать объединение и группировку.
  
Наверх
GTalkICQ  
IP записан
 
andrmit
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 23. Августа 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #480 - 26. Ноября 2012 :: 07:27
Печать  
Никак не могу начать... нужен вот такой запрос...
БухИтоги.ИспользоватьСубконто(ВидыСубконто.Бланк,Дк,1);
БухИтоги.ИспользоватьСубконто(ВидыСубконто.Бронь);

если БухИтоги.ВыполнитьЗапрос(РабочаяДата(),РабочаяДата(),БПК,БЛТ,,,,"К")> 0 тогда
БухИтоги.ВыбратьСубконто();
Пока БухИтоги.ПолучитьСубконто()=1 Цикл
ВЗВ=БухИтоги.Субконто(2);
Если (ВЗВ.Вид()="Бронь") Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #481 - 26. Ноября 2012 :: 08:07
Печать  
andrmit писал(а) 26. Ноября 2012 :: 07:27:
Никак не могу начать... нужен вот такой запрос...

База скульная?
  
Наверх
 
IP записан
 
andrmit
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 23. Августа 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #482 - 26. Ноября 2012 :: 10:28
Печать  
DBF
  
Наверх
 
IP записан
 
Igor YN
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 13. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #483 - 27. Ноября 2012 :: 06:44
Печать  
У меня с правочнике есть "Поиск элемента", там простенький ПрямойЗапрос. Но хочется, чтобы поиск был по вхождению в произвольную ГРУППУ.
Как оптимальнее сделать? Несколько ЛевыхСоединений По Родитель (Родитель.Родитель и т.д)? Или как-то красивше можно?
  
Наверх
 
IP записан
 
andrmit
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 23. Августа 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #484 - 29. Ноября 2012 :: 04:45
Печать  
Работа встала... необходим вышеуказанный запрос...
« Последняя редакция: 07. Декабря 2012 :: 05:27 - andrmit »  
Наверх
 
IP записан
 
andrmit
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 23. Августа 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #485 - 09. Декабря 2012 :: 20:07
Печать  
Не попадаю в индекс...  Печаль
     ТекстЗапроса = "
     |ВЫБРАТЬ

     | $Пров.СчетДт КАК [СчетДт $Счет.Основной],
     | $Пров.ТекущийДокумент КАК [ТекущийДокумент $Документ],
     |$Пров.Дата КАК [ДатаДвижения $Дата],
     |$Пров.СчетКт КАК [СчетКт $Счет.Основной],
     |$Пров.Сумма КАК СуммаПроводки,
     |$Пров.Количество КАК Количество,
     |$Пров.СубконтоДт1 КАК [СубконтоДт1 $Субконто],
     |$Пров.ВидСубконтоДт1 КАК СубконтоДт1_вид,
     |$Пров.СубконтоДт2 КАК [СубконтоДт2 $Субконто],
     |$Пров.ВидСубконтоДт2 КАК СубконтоДт2_вид,
     |$Пров.СубконтоКт1 КАК [СубконтоКт1 $Субконто],
     |$Пров.ВидСубконтоКт1 КАК СубконтоКт1_вид,
     |$Пров.СубконтоКт2 КАК [СубконтоКт2 $Субконто],
     |$Пров.ВидСубконтоКт2 КАК СубконтоКт2_вид,
     |$Пров.ПозицияДокумента КАК ПозицияДокумента


     |

     |ИЗ Проводки КАК Пров
     |LEFT JOIN Журнал ON $Пров.ТекущийДокумент = Журнал.IDDOC 
     |
     |
     |ГДЕ
     | ($Пров.СчетДт=:Сч_ДБ) И ($Пров.СубконтоДт1=:К) И ($Пров.СубконтоДт2=:П)
     | ";
  
Наверх
 
IP записан
 
viddik
Junior Member
**
Отсутствует



Сообщений: 37
Зарегистрирован: 22. Октября 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #486 - 28. Декабря 2012 :: 11:02
Печать  
vandalsvq, по поводу твоего новогоднего подарка нам, юзерам твоих классов - спасибо заранее!  Очень довольный И тебя тоже с наступающим 2013-м!

Из недавно замеченного в последнем (и предыдущем) ПрямомЗапросе - для таблиц Регистр.<ИмяРегистра> нет полей $ТекущийДокумент, $ВидДвижения, ну и, вероятно, остальных с $. Приходится писать соответственно IDDOC, DEBKRED. А если это не баг, а фича, то надо доку подправить.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #487 - 02. Января 2013 :: 12:27
Печать  
С НОВЫМ ГОДОМ!!!

Нужна помощь в реализации запроса.
Имеется:
Документ.Билет
У этого документа есть табличная часть с реквизитами
ПункОтбытия (Тип: Строка)
ПунктПрибытия (Тип: Строка)

Задача: На выходе получить Индексированную таблицу Вида:
|Билет|РезультирующаяСтрока

Где: РезультирующаяСтрока вычисляется по алгоритму:

Код
Выбрать все
РезультирующаяСтрока = "";
докБилет.ВыбратьСтроки();
Пока докБилет.ПолучитьСтроку() =  1 Цикл
   РезультирующаяСтрока = РезультирующаяСтрока+ПунктОтбытия+ПунктПрибытия;
КонецЦикла; 



Ткните пожалуйста в какую сторону копать

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #488 - 03. Января 2013 :: 02:39
Печать  
artamir писал(а) 02. Января 2013 :: 12:27:
У этого документа есть табличная часть с реквизитами
ПункОтбытия (Тип: Строка)
ПунктПрибытия (Тип: Строка)


Строка неограниченной длины?
Если ограниченной - то вот так примерно
Код
Выбрать все
	ПЗ=СоздатьОбъект("ПрямойЗапрос");
	ПЗ.БухгалтерскийУчет = 0;
	ПЗ.ПериодическиеЗначения = 0;
	ПЗ.РежимОтладки = 1;
	ТекстЗапроса="
	|ВЫБРАТЬ
	|	$ДокБилетСтроки.ТекущийДокумент КАК [Билет $Документ.Билет]
	|	,СОКРП($ДокБилетСтроки.ПункОтбытия)||СОКРП($ДокБилетСтроки.ПункПрибытия) КАК [РезультирующаяСтрока $Строка]
	|ИЗ
	|	ДокументСтроки.Билет КАК ДокБилетСтроки $nolock
	|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|	ЖурналДокументов КАК Жур $nolock
	|ПО $Жур.ТекущийДокумент = $ДокБилетСтроки.ТекущийДокумент
	|	И $Жур.ДатаДокумента МЕЖДУ :лНачДата И :лКонДата~";
	ПЗ.УстановитьТекстовыйПараметр("лНачДата", ДатаНач);
	ПЗ.УстановитьТекстовыйПараметр("лКонДата", ДатаКон);
	тзРез = ПЗ.Выполнить(,ТекстЗапроса);
 


З.Ы. С Новым Годом! Подмигивание
« Последняя редакция: 03. Января 2013 :: 07:26 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #489 - 03. Января 2013 :: 08:45
Печать  
Dolly_EV писал(а) 03. Января 2013 :: 02:39:
artamir писал(а) 02. Января 2013 :: 12:27:
У этого документа есть табличная часть с реквизитами
ПункОтбытия (Тип: Строка)
ПунктПрибытия (Тип: Строка)


Строка неограниченной длины?
Если ограниченной - то вот так примерно
Код
Выбрать все
	ПЗ=СоздатьОбъект("ПрямойЗапрос");
	ПЗ.БухгалтерскийУчет = 0;
	ПЗ.ПериодическиеЗначения = 0;
	ПЗ.РежимОтладки = 1;
	ТекстЗапроса="
	|ВЫБРАТЬ
	|	$ДокБилетСтроки.ТекущийДокумент КАК [Билет $Документ.Билет]
	|	,СОКРП($ДокБилетСтроки.ПункОтбытия)||СОКРП($ДокБилетСтроки.ПункПрибытия) КАК [РезультирующаяСтрока $Строка]
	|ИЗ
	|	ДокументСтроки.Билет КАК ДокБилетСтроки $nolock
	|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|	ЖурналДокументов КАК Жур $nolock
	|ПО $Жур.ТекущийДокумент = $ДокБилетСтроки.ТекущийДокумент
	|	И $Жур.ДатаДокумента МЕЖДУ :лНачДата И :лКонДата~";
	ПЗ.УстановитьТекстовыйПараметр("лНачДата", ДатаНач);
	ПЗ.УстановитьТекстовыйПараметр("лКонДата", ДатаКон);
	тзРез = ПЗ.Выполнить(,ТекстЗапроса);
 


З.Ы. С Новым Годом! Подмигивание


Если у меня в документе 5 строк в табличной части, то и в результирующей таблице я получаю 5 строк.

Вопрос в том: как из всех строк табличной получить одну результирующую строку
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #490 - 03. Января 2013 :: 09:07
Печать  
У SQLite есть функция конкатенации строк, у SQL ее нет. - некорректно выразился
Универсальный метод - перебор результата запроса т.е. почти как у тебя счас.
  

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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #491 - 03. Января 2013 :: 09:10
Печать  
vandalsvq писал(а) 03. Января 2013 :: 09:07:
У SQLite есть функция конкатенации строк, у SQL ее нет.
Универсальный метод - перебор результата запроса т.е. почти как у тебя счас.


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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #492 - 03. Января 2013 :: 09:18
Печать  
Для DBF можно использовать group_concat.
Приблизительно это выглядит так:
Код
Выбрать все
select
    t.ТекущийДокумент as doc,
    group_concat(t.ПункОтбытия, t.ПунктПрибытия) as str
from
    ДокументСтроки.ТвойДокумент as t
group by
    t.ТекущийДокумент 

  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #493 - 04. Января 2013 :: 04:54
Печать  
а есть русский хелп по sqlite? именно по функциям? где-то здесь было в топике - но там ссылка дохлая. Погуглил - сходу ничего не нашел
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #494 - 04. Января 2013 :: 05:06
Печать  
vandalsvq писал(а) 03. Января 2013 :: 09:18:
Для DBF можно использовать group_concat.

Блин, какая четкая функция!!!
вот аналог для sql: http://www.cyberforum.ru/sql-server/thread160915.html
но сточки зрения универсальности - проще уж действительно потом итз перебрать и соединить в строку
  
Наверх
ICQ  
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #495 - 30. Января 2013 :: 13:23
Печать  
Помогите побороть запрос к БИОстатки

В результате выдает пустую итз Печаль

Код
Выбрать все
оПЗ = СоздатьОбъект("ПрямойЗапрос");

	сТЗ =	"ВЫБРАТЬ
			|	БИОст228.*
			|ИЗ
			|	$БИОстатки.Основной(:КонДата
			|	,	#Сч228
			|	,	(Субконто1,Субконто4)
			|	,	(Сумма)
			|	,	(Субконто1 В (ВЫБРАТЬ val ИЗ #ЗнСубконтоКонтр))
			|	,	) КАК БИОст228";

	оПЗ.Текст = сТЗ;

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

	зн = "";
	спЗнСубконтоКонтр.ВыбратьЗначение(зн);
	оПЗ.УложитьСписокЗначений(спЗнСубконтоКонтр, "#ЗнСубконтоКонтр", );

	спСч228 = СоздатьОбъект("СписокЗначений");
	спСч228.ДобавитьЗначение(СчетПоКоду("228.1"));

	оПЗ.УложитьСписокЗначений(спСч228, "#Сч228", "Основной");
	оПЗ.РежимОтладки = 1;

	итзОст = оПЗ.Выполнить();
	итзОст.Показать();
 



Сам счет активный, валютный, количествоСубконто() = 4.
проверял по оборотке по контрагентам, которые попадают в запрос остатки есть в разрезе Контрагент, Билет (Субконто1, Субконто4)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #496 - 30. Января 2013 :: 14:18
Печать  
убери фильтр по клиентосам, для начала

И с чего увереннось, что во второй параметр ВТ надо передатть временную табличку со  списком счетов ?
Там точно так оно и надо ?

Или всё же так:
Счет = :ВыбГруппаСчетов
или так
Счет in (select val from #ВрТабличкаСчетов)
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #497 - 30. Января 2013 :: 14:23
Печать  
Eprst писал(а) 30. Января 2013 :: 14:18:
убери фильтр по клиентосам, для начала

И с чего увереннось, что во второй параметр ВТ надо передатть временную табличку со  списком счетов ?
Там точно так оно и надо ?


точно нужно передавать табличку со списком счетов
без фильтра по клиентам итз заполняется.

из документации Цитата:
$БИОстатки.<ИмяПланаСчетов>(КонецПериода, Счет, Субконто, Ресурсы, Условие, Соединения)


а в примере:
Код
Выбрать все
ВЫБРАТЬ ОстаткиОсновной.*
ИЗ $БИОстатки.Основной(:КонПериода
,#Счета60
,(Контрагент,Договор)
,(Сумма)
,(РазделительУчета = :НашаФирма)) КАК ОстаткиОсновной

 



Вопрос: есть ли у параметров $БИОстатки фильтр по субконто?

Версия ПЗ = 1.8.5
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #498 - 31. Января 2013 :: 03:48
Печать  
Если тип значения субконто1 - Справочник.Контрагенты
То попробуй так

Код
Выбрать все
(СРЕД(Субконто1, 1, 9) В (ВЫБРАТЬ val ИЗ #ЗнСубконтоКонтр) 

  

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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #499 - 31. Января 2013 :: 08:34
Печать  
vandalsvq писал(а) 31. Января 2013 :: 03:48:
Если тип значения субконто1 - Справочник.Контрагенты
То попробуй так

Код
Выбрать все
(СРЕД(Субконто1, 1, 9) В (ВЫБРАТЬ val ИЗ #ЗнСубконтоКонтр) 



УРА Очень довольный Очень довольный Очень довольный
Все получилось
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #500 - 08. Февраля 2013 :: 10:29
Печать  
Подскажите, а как получить нулевые остатки? Например из РегистрОстатки.
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #501 - 08. Февраля 2013 :: 10:35
Печать  
Asakra писал(а) 08. Февраля 2013 :: 10:29:
нулевые остатки? Например из РегистрОстатки.

Это как? ))) Или имеется ввиду Ресурс1=0 при Ресурс2...N<>0 ?
Код
Выбрать все
ВЫБРАТЬ * ИЗ РегистрИтоги.РегистрОстатки КАК РегОстатки $nolock
ГДЕ $РегОстатки.Ресурс1=0 

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #502 - 08. Февраля 2013 :: 10:41
Печать  
Dolly_EV писал(а) 08. Февраля 2013 :: 10:35:
Asakra писал(а) 08. Февраля 2013 :: 10:29:
нулевые остатки? Например из РегистрОстатки.

Это как? ))) Или имеется ввиду Ресурс1=0 при Ресурс2...N<>0 ?
Код
Выбрать все
ВЫБРАТЬ * ИЗ РегистрИтоги.РегистрОстатки КАК РегОстатки $nolock
ГДЕ $РегОстатки.Ресурс1=0 



да. когда ресурс = 0
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #503 - 08. Февраля 2013 :: 10:43
Печать  
Asakra писал(а) 08. Февраля 2013 :: 10:29:
из РегистрОстатки.


имелось ввиду из ВТ РегистрОстатки
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #504 - 09. Февраля 2013 :: 06:19
Печать  
Asakra писал(а) 08. Февраля 2013 :: 10:43:
имелось ввиду из ВТ РегистрОстатки


Код
Выбрать все
ТекстЗапроса="
|ВЫБРАТЬ
|	РегОст.Измерение1
|	,РегОст.Измерение2
|	,....
|	,РегОст.Ресурс2
|ИЗ
|	$РегистрОстатки.<ИмяРегистра>(:КонПериода,
|							(Ресурс1=0),
|							(Измерение1,Измерение2...),
|							(Ресурс1,Ресурс2),
|							) КАК РегОст";
ПрямойЗапрос.УстановитьТекстовыйПараметр(":КонПериода",КонДата);
 

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #505 - 09. Февраля 2013 :: 07:06
Печать  
Dolly_EV писал(а) 09. Февраля 2013 :: 06:19:
Asakra писал(а) 08. Февраля 2013 :: 10:43:
имелось ввиду из ВТ РегистрОстатки


Код
Выбрать все
ТекстЗапроса="
|ВЫБРАТЬ
|	РегОст.Измерение1
|	,РегОст.Измерение2
|	,....
|	,РегОст.Ресурс2
|ИЗ
|	$РегистрОстатки.<ИмяРегистра>(:КонПериода,
|							(Ресурс1=0),
|							(Измерение1,Измерение2...),
|							(Ресурс1,Ресурс2),
|							) КАК РегОст";
ПрямойЗапрос.УстановитьТекстовыйПараметр(":КонПериода",КонДата);
 



в том то и дело, что так не прокатывает. я как понимаю в ВТ стоит HAVING (SUM(Ресурс1) <> 0)... мож есть параметр, который дает это обойти. в документации ничего про это не написано. сделал через union, хотя наверно так и правильней, ведь не всегда же есть движения в регистре (например, по всей номенклатуре, по какой-нить жешь и нет вовсе движений), ну а с другой стороны смотря какая задача стоит, может нужно вывести те записи, что ушли в ноль, а те что в регистр не попадали и не нужны, в таком случае даже не знаю как извратиться Улыбка
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #506 - 09. Февраля 2013 :: 07:44
Печать  
Asakra писал(а) 09. Февраля 2013 :: 07:06:
в том то и дело, что так не прокатывает. я как понимаю в ВТ стоит HAVING (SUM(Ресурс1) <> 0)... мож есть параметр, который дает это обойти. в документации ничего про это не написано. сделал через union, хотя наверно так и правильней, ведь не всегда же есть движения в регистре (например, по всей номенклатуре, по какой-нить жешь и нет вовсе движений), ну а с другой стороны смотря какая задача стоит, может нужно вывести те записи, что ушли в ноль, а те что в регистр не попадали и не нужны, в таком случае даже не знаю как извратиться Улыбка

Специально проверил, вот запрос:
Код
Выбрать все
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	РегПарт.Товар КАК [Товар $Справочник.Номенклатура]
	|	,РегПарт.КоличествоОстаток КАК ОстКол
	|	,РегПарт.СуммаОстаток КАК [ОстСумма $Число.19.5]
	|	,РегПарт.НДСОстаток КАК [ОстНДС $Число.19.5]
	|ИЗ
	|	$РегистрОстатки.ПартииТоваров(:лДатаОст~,
	|								(1=1 И 2=2 И 3=3 И 4=4),
	|								(Товар,Склад),
	|								(Количество,Сумма,НДС)) КАК РегПарт
	|ГДЕ РегПарт.КоличествоОстаток=0";

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

	тзОст = ПЗ.Выполнить(,ТекстЗапроса);
 


, который на рабочей базе выдал 1500 строк с "повисшими" сумма по регистру "ПартииТоваров", где Количество=0, так что все работает
  
Наверх
ICQ  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #507 - 09. Февраля 2013 :: 07:58
Печать  
Dolly_EV писал(а) 09. Февраля 2013 :: 07:44:
[quote author=Asakra link=1285352210/495#505 date=1360393575]
, который на рабочей базе выдал 1500 строк с "повисшими" сумма по регистру "ПартииТоваров", где Количество=0, так что все работает

а остаток по сумме и ндс тоже = 0?
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #508 - 09. Февраля 2013 :: 08:01
Печать  
я думаю, что в ВТ стоит HAVING (SUM(Количество) <> 0) И HAVING (SUM(Сумма) <> 0) И HAVING (SUM(НДС) <> 0)
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #509 - 09. Февраля 2013 :: 08:02
Печать  
тобишь по всем ресурсам
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #510 - 09. Февраля 2013 :: 08:07
Печать  
Asakra писал(а) 09. Февраля 2013 :: 08:01:
я думаю, что в ВТ стоит HAVING (SUM(Количество) <> 0) И HAVING (SUM(Сумма) <> 0) И HAVING (SUM(НДС) <> 0)

точнее не И, а ИЛИ... тогда получается если все = 0, то такая запись не попадет в выборку
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #511 - 09. Февраля 2013 :: 08:14
Печать  
Проверять думаю проще с помощью РегистрОстаткиОбороты, взяв 1 ресурс. И если НачОст, Приход, Расход и КонОст = 0, то запись в выборку не попадет
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #512 - 09. Февраля 2013 :: 08:59
Печать  
кстати оно еще и неверно работает. если НачОст = 0.0000009, оборотов нет и КонОст, соответственно,  = 0.0000009, то запись попадает в выборку, но после типизации Число.15.2, она естественно = 0 и получается в выборке строка с нулевыми ресурсами (это наверно уже нюансы 1SQLite). Т.е. если логика ВТ такова, что в выборку не попадают строки по всем ресурсам = 0, то ВТ не может правильно работать!?

хотя такое, наверно, ни чем не залечиться... ведь там не 0  Улыбка
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #513 - 09. Февраля 2013 :: 09:31
Печать  
а ни кто не поделиться как с условиями по проще работать, допустим сравнение справочника. пользователь может выбрать 1 элемент, или группу, или вообще ничего не выбрать, а если условий несколько... а то какая-то шляпа с этим делом Улыбка
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #514 - 10. Февраля 2013 :: 23:49
Печать  
Asakra писал(а) 09. Февраля 2013 :: 09:31:
а ни кто не поделиться как с условиями по проще работать, допустим сравнение справочника. пользователь может выбрать 1 элемент, или группу, или вообще ничего не выбрать, а если условий несколько... а то какая-то шляпа с этим делом Улыбка


У меня - класс МножественныйФильтр. В нем сделал примитивный парсер на замену в тексте запроса: замена "1=1" на условие. +уложение СпискаЗначений.

в тексте модуля выглядит примерно так:
Код
Выбрать все
,,1,1);
ОбъектМФ.СформироватьУсловиеЗапроса(ТекстЗапросаОстатки,ПЗапрос,"Виды алк. продукции","СпрАлк.ВидПродукции",,2,1);
Номенклатура",,4,1);
мпортеры","СпрАлк.ПроизвИмп",,5,1);
"$СпрПодр.ТекущийЭлемент",,6,1);
 


в тексте запроса соответственно условия в нужных местах выглядят как "1=1 И 2=2...." и т.д.

Во вложении - сам класс.

Пы Сы.
Я кстати сам года 1,5 назад здесь вопрошал, как лучше с условиями работать - никто не ответил Злой
« Последняя редакция: 11. Февраля 2013 :: 03:28 - Dolly_EV »  

____________________001.ert ( 244 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #515 - 10. Февраля 2013 :: 23:52
Печать  
Asakra писал(а) 09. Февраля 2013 :: 08:59:
кстати оно еще и неверно работает. если НачОст = 0.0000009, оборотов нет и КонОст, соответственно,  = 0.0000009, то запись попадает в выборку, но после типизации Число.15.2, она естественно = 0 и получается в выборке строка с нулевыми ресурсами (это наверно уже нюансы 1SQLite). Т.е. если логика ВТ такова, что в выборку не попадают строки по всем ресурсам = 0, то ВТ не может правильно работать!?

хотя такое, наверно, ни чем не залечиться... ведь там не 0  Улыбка


Бред написал. Ты же сам типизируешь 15.2! Как ты при этом из 0.00000009 хочешь получить не 0?? что мешает вообще не типизировать в запросе числовые значения? - тогда на выходе будет не 0
  
Наверх
ICQ  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #516 - 11. Февраля 2013 :: 05:11
Печать  
Dolly_EV писал(а) 10. Февраля 2013 :: 23:49:
Во вложении - сам класс.

Пасиб!
я уже в класс так добавил, вроде работает:

Код
Выбрать все
Процедура УстановитьПараметр(ИмяПоля, Значение, ИмяУсловия = "") Экспорт

	Если ТипЗначенияСтр(Значение) = "Справочник" Тогда

		Если ПустоеЗначение(Значение) = 1 Тогда
			Текст = СтрЗаменить(Текст, ИмяУсловия, "");

		ИначеЕсли Значение.ЭтоГруппа() = 1 Тогда

			Список = СоздатьОбъект("СписокЗначений");

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

			Текст = СтрЗаменить(Текст, ИмяУсловия, ИмяПоля + " В (ВЫБРАТЬ val ИЗ #Список" + НомерУсловия + ")");
			УложитьСписокЗначений(Список, "#Список" + НомерУсловия);

		Иначе
			Текст = СтрЗаменить(Текст, ИмяУсловия, ИмяПоля + " = :ВыбЗначение" + НомерУсловия);
			УстановитьТекстовыйПараметр("ВыбЗначение" + НомерУсловия, Значение);

		КонецЕсли;

	ИначеЕсли ТипЗначенияСтр(Значение) = "СписокЗначений" Тогда
		Текст = СтрЗаменить(Текст, ИмяУсловия, ИмяПоля + " В (ВЫБРАТЬ val ИЗ #Список" + НомерУсловия + ")");
		УложитьСписокЗначений(Значение, "#Список" + НомерУсловия);

	Иначе
		УстановитьТекстовыйПараметр(ИмяПоля, Значение);

	КонецЕсли;

	НомерУсловия = НомерУсловия + 1;

КонецПроцедуры // УстановитьПараметр()
 



Странно, что разработчик ни че такого не делал  Озадачен
А с группами только так нужно поступать или есть более гуманные способы?
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #517 - 11. Февраля 2013 :: 05:28
Печать  
Asakra писал(а) 11. Февраля 2013 :: 05:11:
Dolly_EV писал(а) 10. Февраля 2013 :: 23:49:
Во вложении - сам класс.

Пасиб!
я уже в класс так добавил, вроде работает:
...
Странно, что разработчик ни че такого не делал  Озадачен
А с группами только так нужно поступать или есть более гуманные способы?


Разработчик ни чего такого не делал, т.к. сделал намного более емкое и полезное - кучу прикладных объектов интерфейса ("ПоставщикДанных") и кроссплатформенный язык запросов. А уж фильтры, условия и т.д. - дело рук пользователей поделки.
Заметь, в самом 1cpp тоже "почему-то" нет условий и методов работы с ними.
Про группы - посмотри внимательно описание метода УложитьСписокЗначений
, параметр "ВидОбъекта"

и, ИМХО, МФ намного удобнее
  
Наверх
ICQ  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #518 - 11. Февраля 2013 :: 06:00
Печать  
Dolly_EV писал(а) 11. Февраля 2013 :: 05:28:
Про группы - посмотри внимательно описание метода УложитьСписокЗначений
, параметр "ВидОбъекта"


Нашел, спасибо, работает.... буду дальше разбираться Улыбка
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #519 - 20. Марта 2013 :: 23:22
Печать  
vandalsvq
ПрямойЗапрос версия 1.8.5 23.05.2012

Класс эксплуатируется все больше и все шире.. Вещь хорошая и полезная. Спасибо. )

Есть запрос, в котором нужно получить остатки товара с ценами реализации. В запросе используются ВТ $БИОстатки и $ПоследнееЗначение

Код
Выбрать все
ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");

...

ТекстЗапроса = "
|ВЫБРАТЬ
...
|, $ПоследнееЗначение.Серии.ЦенаОпт(Субконто3, :ДатаПериодических~) КАК [ЦенаОпт $Число.15.2]
...
|ИЗ $БИОстатки.Основной(:КонДата~,,(МОЛ,Номенклатура,Серии), (Количество, Сумма), (Счет В (:ЗапросСчет)),) КАК Би
...
 



Понадобилось (чтыбы не сказать "приспичило") дополнительно получить здесь же дату установки периодического значения ЦенаОпт. Руки интуитивно потянулись к ВТ $ПоследнееЗначение, чтобы в ней получить дату установки значения, но исследования ВТ показали, что кроме собственно периодического значения она ничего другого не возвращает. Возможным решением выглядит разворачивание ВТ $ПоследнееЗначение в запросе таким образом:

Код
Выбрать все
ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");

...
ких+1);

мдв = СоздатьОбъект("MetaDataWork");
Серии_ЦенаОпт_ИдРеквизита = мдв.ИДРеквизитаСправочника("Серии", "ЦенаОпт");
пт_ИдРеквизита);


ТекстЗапроса = "
|ВЫБРАТЬ
...
|, $ПоследнееЗначение.Серии.ЦенаОпт(Субконто3, :ДатаПериодических~) КАК [ЦенаОпт $Число.15.2]

|,	(SELECT TOP 1 const_vt.DATE
|	FROM _1SCONST const_vt  (nolock)
|	WHERE const_vt.ID = :Серии_ЦенаОпт_ИдРеквизита
|	AND const_vt.OBJID = Субконто3
|	AND const_vt.DATE < :ДатаПериодических_Служ
|	ORDER BY const_vt.DATE DESC,const_vt.TIME DESC,const_vt.DOCID DESC,const_vt.ROW_ID DESC) AS [ЦенаОптДатаУстановки $Дата]

...
|ИЗ $БИОстатки.Основной(:КонДата~,,(МОЛ,Номенклатура,Серии), (Количество, Сумма), (Счет В (:ЗапросСчет)),) КАК Би
...

 


Результат дает нужный, но решение выглядит непривлекательно.. Чуя, что это мне нужно будет не в одном месте, решил попробовать заставить ВТ $ПоследнееЗначение возвращать не только пер. значение, но и прочие данные из таблицы констант. Сделал временно мод функции ПарсингВТПоследнееЗначение в классе: добавил третий параметр, в котором указывается возвращаемое значение из таблицы констант (VALUE при опущенном параметре):
Код
Выбрать все
Функция ПарсингВТПоследнееЗначение(ТекстДляОбработки)
	...
 	//[+]sv 180313
	спВозвращаемоеЗначение = СоздатьОбъект("СписокЗначений");
	спВозвращаемоеЗначение.Установить("ТЕКУЩИЙОБЪЕКТ", 		"OBJID"); 	//9 (0-const)
	спВозвращаемоеЗначение.Установить("ТЕКУЩИЙРЕКВИЗИТ", 	"ID"); 		//4
	спВозвращаемоеЗначение.Установить("ДАТАЗНАЧ", 			"DATE"); 	//8
	спВозвращаемоеЗначение.Установить("ЗНАЧЕНИЕ", 			"VALUE"); 	//DBF: 23 SQL: 255
	спВозвращаемоеЗначение.Установить("ТЕКУЩИЙДОКУМЕНТ", 	"DOCID"); 	//9 (При ручной установке значений равен «     0   »)
	спВозвращаемоеЗначение.Установить("ВРЕМЯ", 				"TIME"); 	//DBF: string 6 SQL: int 4
	спВозвращаемоеЗначение.Установить("НОМЕРДВИЖЕНИЯ",		"ACTNO"); 	//DBF: numeric 6 SQL: int 4 (номер движения документа по изменению периодического реквизита, который сделал запись.)
	спВозвращаемоеЗначение.Установить("ТИПЗНАЧЕНИЯ",		"TVALUE"); 	//3 (Заполняется в случае, если периодический реквизит неопределенного типа. В нем хранится ID типа значения из поля VALUE)
	Если ЭтоSQL = 1 Тогда
		//спВозвращаемоеЗначение.Установить("СЧЕТЧИК",	 	"ROW_ID");	//4 (Автоинкрементное поле типа INT. Служит для поддержки уникальности)
		спВозвращаемоеЗначение.Установить("НОМЕРСТРОКИ",	"LINENO_");	//2
	Иначе
		//спВозвращаемоеЗначение.Установить("НОМЕРЧАСТИ",		"PARTNO"); 	//3 (номер части порезанного значения длиннее 23)
		спВозвращаемоеЗначение.Установить("НОМЕРСТРОКИ", 	"LINENO");	//4
	КонецЕсли;

//	Параметры = ПолучитьСтрокуПараметров(2); //[-]sv 180313
	Параметры = ПолучитьСтрокуПараметров(3); //[+]sv 180313
	...
	Для НомерЗначения = 0 По Вектор.Количество()-1 Цикл
		...
		ВозвращаемоеЗначение = Врег(ПодготовитьПараметр(ВекторВыражения.Подвыражения.Получить(4))); //[+]sv 180313
		...
//		ИдентификаторКолонки = ПреобразоватьЗначение(МетаРеквизит,"const_vt"); //[-]sv 180313

 		//[+]sv 180313
		Если (ВозвращаемоеЗначение = "ЗНАЧЕНИЕ") или (ВозвращаемоеЗначение = "VALUE") или (ПустаяСтрока(ВозвращаемоеЗначение) = 1) Тогда
			ИдентификаторКолонки = ПреобразоватьЗначение(МетаРеквизит,"const_vt");
		Иначе
			ИдентификаторКолонки = спВозвращаемоеЗначение.Получить(ВозвращаемоеЗначение);
			Если ПустаяСтрока(ИдентификаторКолонки) = 0 Тогда
				ИдентификаторКолонки = "const_vt."+ИдентификаторКолонки;
			Иначе
				ИдентификаторКолонки = "const_vt."+ВозвращаемоеЗначение;
			КонецЕсли;
		КонецЕсли;
		...
	КонецЦикла;
	...
КонецФункции
 


Использование:
Код
Выбрать все
|ВЫБРАТЬ
...
|, $ПоследнееЗначение.Серии.ЦенаОпт(Субконто3, :ДатаПериодических~) КАК [ЦенаОпт $Число.15.2]
|, $ПоследнееЗначение.Серии.ЦенаОпт(Субконто3, :ДатаПериодических~, ДатаЗнач) КАК [ЦенаОптДатаУстановки $Дата]
...
 


Так, используя $ПоследнееЗначение можно получить и пер.значение, и дату установки, и документ...

Вопрос: Есть ли надежда, что нечто подобное будет реализовано в официальном классе? Если да, то то же хотелось бы и в $СрезПервых, $СрезПоследних при РазворачиватьПериоды = 0
« Последняя редакция: 21. Марта 2013 :: 14:26 - BlueWind »  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #520 - 22. Марта 2013 :: 05:43
Печать  
ПоследнееЗначение - это не ВТ. Это виртуальное значение. В принципе изначально не предусматривалось для получения кроме значения ничего больше. Другой логики я бы не хотел придерживаться. Для получения информации о дате, документе необходимо использовать ВТ "СрезПоследних". Она должна возвращать вроде бы, если не ошибаюсь.
  

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


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #521 - 15. Апреля 2013 :: 23:16
Печать  
Подскажите как написать.
Есть регистр взаиморасчетов содержит след измерения:
контрагент-ВидДолга-ДокументОтгрузки.
до недавнего времени документ отгрузки всегда был одного вида "РасходнаяНакладная", но сейчас политика поменялась и теперь в документе отгрузки три вида документов. Из документа отгрузки мне нужно получить дополнительную информацию в виде Агента, и Торговой точки (тТочка) оба реквизита присутствуют во вновь добавляемых документах. До этого использовал вот такой запрос.
[code]
     "ВЫБРАТЬ
     |      Доходы.ДокументОтгрузки      КАК [ДокументОтгрузки $Документ],
     |      Доходы.ВидДолга            КАК СтатусДолга,
     |      Доходы.СуммаОстаток [Доходы.СуммаОстаток :Число.15.2]
     |,      Жур.IDDOC
     |,      $Жур.ДатаДокумента            КАК [ДокДата $Дата]
     |,      $ДокРеал.ТТочка                  КАК [ТТочка $Справочник.ТорговыеTочки]
     |,      $ДокРеал.Агент                  КАК [Агент $Справочник.Сотрудники]
     | ИЗ $РегистрОстатки.Взаиморасчеты(:КонПериода,
     |                  (
     |                  Контрагент = :Покупатель и
     |                  ВидДолга = :ВидДолга
     |                  ),
     |                  (Контрагент,ВидДолга,ДокументОтгрузки),(Сумма)) КАК Доходы
     |внутреннее соединение ЖурналДокументов КАК Жур
     | ПО Жур.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9) и Жур.Направление = :Направление
     |Внутреннее соединение Документ.РасходнаяНакладная КАК ДокРеал
     |      ПО ДокРеал.IDDOC = Жур.IDDOC
     |ГДЕ
     |      Доходы.СуммаОстаток<>0
     |Упорядочить
     |      $Жур.ДатаДокумента
     |";[/code]
Помогите, незнаю как написать такой запрос, что бы обработать несколько видов документов или вообще без привязки к виду документа.
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #522 - 16. Апреля 2013 :: 01:26
Печать  
[quote author=undo link=1285352210/510#521 date=1366067810]Подскажите как написать.
Помогите, незнаю как написать такой запрос, что бы обработать несколько видов документов или вообще без привязки к виду документа.[/quote]

[code]"ВЫБРАТЬ
     |      Доходы.ДокументОтгрузки      КАК [ДокументОтгрузки $Документ]
     |      ,Доходы.ВидДолга            КАК СтатусДолга
     |      ,Доходы.СуммаОстаток      КАК [Доходы.СуммаОстаток :Число.15.2]
     |      ,Жур.IDDOC
     |      ,$Жур.ДатаДокумента      КАК [ДокДата $Дата]
     |      ,ДокРеал.ТТочка            КАК [ТТочка $Справочник.ТорговыеTочки]
     |      ,ДокРеал.Агент                  КАК [Агент $Справочник.Сотрудники]
     |ИЗ      $РегистрОстатки.Взаиморасчеты(:КонПериода,
     |                  (
     |                  Контрагент = :Покупатель и
     |                  ВидДолга = :ВидДолга
     |                  ),
     |                  (Контрагент,ВидДолга,ДокументОтгрузки),(Сумма)) КАК Доходы
     |ВНУТРЕННЕЕ СОЕДИНЕНИЕ      ЖурналДокументов КАК Жур $nolock
     |ПО Жур.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9) и $Жур.Направление = :Направление
     |ЛЕВОЕ СОЕДИНЕНИЕ
     |      (ВЫБРАТЬ ДокРеал.IDDOC КАК ТекДок
     |                  ,$ДокРеал.ТТочка КАК ТТочка
     |                  ,$ДокРеал.Агент КАК Агент
     |      ИЗ
     |            Документ.РасходнаяНакладная КАК ДокРеал $nolock
     |      ОБЪЕДИНИТЬ
     |      ВЫБРАТЬ ДокРеал1.IDDOC КАК ТекДок
     |                  ,$ДокРеал1.ТТочка КАК ТТочка
     |                  ,$ДокРеал1.Агент КАК Агент
     |      ИЗ
     |            Документ.РасходнаяНакладная1 КАК ДокРеал1 $nolock
     |      ОБЪЕДИНИТЬ
     |      ВЫБРАТЬ ДокРеал2.IDDOC КАК ТекДок
     |                  ,$ДокРеал2.ТТочка КАК ТТочка
     |                  ,$ДокРеал2.Агент КАК Агент
     |      ИЗ
     |            Документ.РасходнаяНакладная2 КАК ДокРеал2 $nolock) КАК ДокРеал
     |      ПО ДокРеал.ТекДок = Жур.IDDOC
     |ГДЕ
     |      Доходы.СуммаОстаток<>0
     |Упорядочить
     |      $Жур.ДатаДокумента
     |";
[/code]

И в старом запросе не надо было ВНУТРЕННЕЕ СОЕДИНЕНИЕ к ДокРеал, достаточно ЛЕВОЕ
И, имхо, реквизит типа АГЕНТ - проще все же иметь общим. Но это имхо ))
  
Наверх
ICQ  
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #523 - 16. Апреля 2013 :: 08:06
Печать  
Спасибо за ответ, а есть варианты ускорить данный запрос, а то время выполнения выросло в 4 раза :(
Это данные моего запроса по одному виду.
[code]Подбор индекса для таблицы RG18857:
     Ограничения: PERIOD=; SP18858[Контрагент]=; SP18976[ВидДолга]=;
     В кэше не найдено
     Выбран индекс PROP: DTOS(PERIOD)+SP18858+STR(SP18976,2)+SP18977
     Стоимость: 24
Подбор индекса для таблицы RA18857:
     Ограничения: DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]>=; DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]<; SP18858[Контрагент]=; SP18976[ВидДолга]=;
     В кэше не найдено
     Выбран индекс DATETIME: DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
     Стоимость: 18
Подбор индекса для таблицы 1SJOURN:
     Ограничения:
     Упорядочить: DATE,
     В кэше не найдено
     Выбран индекс ACDATETIM: DTOS(DATE)+TIME+IDDOC
     Попадает в сортировку
     Стоимость: 60
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=;
     В кэше не найдено
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы DH16004:
     Ограничения: IDDOC=;
     В кэше не найдено
     Выбран индекс ID: IDDOC
     Стоимость: 18
Время подготовки запроса: 28 мс, время выполнения запроса: 266 мс.[/code]

а это по новой схеме запроса, для сравнения оставил тот же вид документа
[code]Подбор индекса для таблицы RG18857:
     Ограничения: PERIOD=; SP18858[Контрагент]=; SP18976[ВидДолга]=;
     В кэше не найдено
     Выбран индекс PROP: DTOS(PERIOD)+SP18858+STR(SP18976,2)+SP18977
     Стоимость: 24
Подбор индекса для таблицы RA18857:
     Ограничения: DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]>=; DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]<; SP18858[Контрагент]=; SP18976[ВидДолга]=;
     В кэше не найдено
     Выбран индекс DATETIME: DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
     Стоимость: 18
Подбор индекса для таблицы DH16004:
     Ограничения:
     В кэше не найдено
     Индекс не выбран.
     Стоимость: 9982
Подбор индекса для таблицы 1SJOURN:
     Ограничения:
     Упорядочить: DATE,
     В кэше не найдено
     Выбран индекс ACDATETIM: DTOS(DATE)+TIME+IDDOC
     Попадает в сортировку
     Стоимость: 60
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=;
     В кэше не найдено
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Время подготовки запроса: 32 мс, время выполнения запроса: 1083 мс.[/code]
Понимаю что правомерно выросло время получения данных, но как его снизить, т.к. борьба идет за каждую мс, и за объем базы то же :)
  
Наверх
ICQ  
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #524 - 16. Апреля 2013 :: 09:08
Печать  
Подошел к вопросу немного по другому:
[code]            "ВЫБРАТЬ
           |      Доходы.ДокументОтгрузки      КАК [ДокументОтгрузки $Документ],
           |      Доходы.ВидДолга            КАК СтатусДолга,
           |      Доходы.СуммаОстаток [Доходы.СуммаОстаток :Число.15.2]
           |,      Жур.IDDOC
           |,      $Жур.ДатаДокумента            КАК [ДокДата $Дата]
           |,      ВЫБОР КОГДА ($ДокРеал.IDDOC<>:ПустойИД) ТОГДА $ДокРеал.ТТочка ИНАЧЕ $ДокКорр.ТТочка КОНЕЦ      КАК [ТТочка $Справочник.ТорговыеTочки]
           |,      ВЫБОР КОГДА ($ДокРеал.IDDOC<>:ПустойИД) ТОГДА $ДокРеал.Агент ИНАЧЕ $ДокКорр.Агент КОНЕЦ            КАК [Агент $Справочник.Сотрудники]
           | ИЗ $РегистрОстатки.Взаиморасчеты(:КонПериода,
           |                  (
           |                  Контрагент = :Покупатель и
           |                  ВидДолга = :ВидДолга
           |                  ),
           |                  (Контрагент,ВидДолга,ДокументОтгрузки),(Сумма)) КАК Доходы
           |Внутреннее соединение ЖурналДокументов КАК Жур
           | ПО Жур.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9) "+?(СпПараметры.Получить("Клиент").РасчетКредиторки=0," и Жур.Направление = :Направление","")+"
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК ДокРеал
           |      ПО ДокРеал.IDDOC = Жур.IDDOC
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВводДолжников КАК ДокКорр
           |      ПО ДокКорр.IDDOC = Жур.IDDOC
           |ГДЕ
           |      Доходы.СуммаОстаток<>0
           |Упорядочить
           |      $Жур.ДатаДокумента
           |";
[/code]
Использовал метод ВЫБОР
Старый запрос по одному документу
[code]Подбор индекса для таблицы RG18857:
     Ограничения: PERIOD=; SP18858[Контрагент]=; SP18976[ВидДолга]=;
     В кэше не найдено
     Выбран индекс PROP: DTOS(PERIOD)+SP18858+STR(SP18976,2)+SP18977
     Стоимость: 24
Подбор индекса для таблицы RA18857:
     Ограничения: DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]>=; DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]<; SP18858[Контрагент]=; SP18976[ВидДолга]=;
     В кэше не найдено
     Выбран индекс DATETIME: DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
     Стоимость: 18
Подбор индекса для таблицы 1SJOURN:
     Ограничения: SP16165[Направление]=;
     Упорядочить: DATE,
     В кэше не найдено
     Выбран индекс VIA16165: SP16165+DTOS(DATE)+TIME+IDDOC
     Попадает в сортировку
     Стоимость: 26
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=; SP16165[Направление]=;
     В кэше не найдено
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы DH16004:
     Ограничения: IDDOC=;
     В кэше не найдено
     Выбран индекс ID: IDDOC
     Стоимость: 18
Время подготовки запроса: 30 мс, время выполнения запроса: 107 мс.[/code]
а вот новый по времени вырос, но уже не так значительно
[code]
Подбор индекса для таблицы RG18857:
     Ограничения: PERIOD=; SP18858[Контрагент]=; SP18976[ВидДолга]=;
     В кэше не найдено
     Выбран индекс PROP: DTOS(PERIOD)+SP18858+STR(SP18976,2)+SP18977
     Стоимость: 24
Подбор индекса для таблицы RA18857:
     Ограничения: DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]>=; DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]<; SP18858[Контрагент]=; SP18976[ВидДолга]=;
     В кэше не найдено
     Выбран индекс DATETIME: DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
     Стоимость: 18
Подбор индекса для таблицы 1SJOURN:
     Ограничения: SP16165[Направление]=;
     Упорядочить: DATE,
     В кэше не найдено
     Выбран индекс VIA16165: SP16165+DTOS(DATE)+TIME+IDDOC
     Попадает в сортировку
     Стоимость: 26
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=; SP16165[Направление]=;
     В кэше не найдено
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы DH16004:
     Ограничения: IDDOC=;
     В кэше не найдено
     Выбран индекс ID: IDDOC
     Стоимость: 18
Подбор индекса для таблицы DH15857:
     Ограничения: IDDOC=;
     В кэше не найдено
     Выбран индекс ID: IDDOC
     Стоимость: 8
Время подготовки запроса: 47 мс, время выполнения запроса: 204 мс.[/code]
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #525 - 16. Апреля 2013 :: 14:09
Печать  
замени case на isnull или coalesce
+ воткни в соединение с журналом and iddocdef in ($ВидДокумента.НужныйВид1,$ВидДокумента.НужныйВид2)

+ выкини Контрагент из строки с измерениями ВТ - ты его нигде не используешь потом.
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #526 - 16. Апреля 2013 :: 17:26
Печать  
Спасибо за помощь в результате получилось вот так
[code]            "ВЫБРАТЬ
           |      Доходы.ДокументОтгрузки      КАК [ДокументОтгрузки $Документ]
           |,      Доходы.СуммаОстаток [Доходы.СуммаОстаток :Число.15.2]
           |,      $Жур.ДатаДокумента            КАК [ДокДата $Дата]
           |,      COALESCE($ДокРеал.ТТочка,$ДокКорр.ТТочка) КАК [ТТочка $Справочник.ТорговыеTочки]
           |,      COALESCE($ДокРеал.Агент,$ДокКорр.Агент) КАК [Агент $Справочник.Сотрудники]
           | ИЗ $РегистрОстатки.Взаиморасчеты(:КонПериода,
           |                  (
           |                  Контрагент = :Покупатель и
           |                  ВидДолга = :ВидДолга
           |                  ),
           |                  (ДокументОтгрузки),(Сумма)) КАК Доходы
           |Внутреннее соединение ЖурналДокументов КАК Жур
           | ПО Жур.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9) "+?(СпПараметры.Получить("Клиент").РасчетКредиторки=0," и Жур.Направление = :Направление","")+" и $Жур.ВидДокумента в (:ВидДокумента.РасходнаяНакладная,:ВидДокумента.ВводДолжников)
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК ДокРеал
           |      ПО ДокРеал.IDDOC = Жур.IDDOC
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВводДолжников КАК ДокКорр
           |      ПО ДокКорр.IDDOC = Жур.IDDOC
           |ГДЕ
           |      Доходы.СуммаОстаток<>0
           |Упорядочить
           |      $Жур.ДатаДокумента
           |";
[/code] Изменений в скорости сильно не заметил, но универсальность выросла в разы.
  
Наверх
ICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #527 - 17. Апреля 2013 :: 06:15
Печать  
Есть запрос

     |ВЫБРАТЬ
     |   РегДолги.КредДокумент Докум
     |      ,РегДолги.СуммаУпрОстаток Просрочка
     |      ,$Журнал.Договор Договор
     |      ,$Журнал.ТекущийДокумент ТекДок
     |      ,$Журнал.ДатаДокумента ДатаЛок
     |      ,$Журнал.НомерДокумента Номер
     |      ИЗ
     |      $РегистрОстатки.Покупатели(:ДатаОстатков,(ТП = :ТП),(КредДокумент),,) КАК РегДолги
     |      ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал
     |      ПО Журнал.IDDOC = Право(РегДолги.КредДокумент,9)

КредДокумент = это может быть и реализация, и выписка, и ПКО и многое другое, но всегда есть реквизит Договор. ТиС 9.2 вобщем.

1.Как в этом запросе получить дополнительно значение реквизита "договор" из "кредДокумент"?
2.      |      ПО Журнал.IDDOC = Право(РегДолги.КредДокумент,9) - вот это условие сам наваял, почему-то РегДолги.КредДокумент возвращает ID документа но слева добавляет 13 с пробелом? 



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


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #528 - 17. Апреля 2013 :: 07:59
Печать  
В примере выше я как раз и присоединяю через Левое соединение документы что бы оттуда получить значение реквизита торговая точка и агент, но все равно придется туда описывать все типы документов которые у тебя там могут быть., а разве с Тис в регистре покупатели нет реквизита договор?
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #529 - 17. Апреля 2013 :: 09:17
Печать  
undo писал(а) 17. Апреля 2013 :: 07:59:
В примере выше я как раз и присоединяю через Левое соединение документы что бы оттуда получить значение реквизита торговая точка и агент, но все равно придется туда описывать все типы документов которые у тебя там могут быть., а разве с Тис в регистре покупатели нет реквизита договор?

В стандартной ТиС нет регистра "Долги", так что, видимо, это "что-то свое"
  
Наверх
ICQ  
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #530 - 17. Апреля 2013 :: 11:36
Печать  
Salimbek писал(а) 17. Апреля 2013 :: 09:17:
undo писал(а) 17. Апреля 2013 :: 07:59:
В примере выше я как раз и присоединяю через Левое соединение документы что бы оттуда получить значение реквизита торговая точка и агент, но все равно придется туда описывать все типы документов которые у тебя там могут быть., а разве с Тис в регистре покупатели нет реквизита договор?

В стандартной ТиС нет регистра "Долги", так что, видимо, это "что-то свое"

Так я не про регистр Долги, а про схему получения данных.
  
Наверх
ICQ  
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #531 - 17. Апреля 2013 :: 12:14
Печать  
Ребята! Вы чего! Какой регистр Долги? Там же запрос к регистру "Покупатели".
На счет договора в регистре это ты верно подметил, но это пример я привел, контрагента нет в регистре, хочу контрагента вытянуть из документа. Сам принцип интересует!
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #532 - 17. Апреля 2013 :: 12:41
Печать  
[code]      СпВидов = СоздатьОбъект("СписокЗначений");
     СпВидов.ДобавитьЗначение("Вид1");
     СпВидов.ДобавитьЗначение("Вид2");
     СпВидов.ДобавитьЗначение("Вид3");
     СпВидов.ДобавитьЗначение("Вид4");
     
     СтрДоговора = "";
     СтрСоединения = "";
     
     Для сч из СпВидов.РазмерСписка() цикл
           СтрДоговора = СтрДоговора+?(СтрДоговора="","",",")+"$Док"+Сч+".Договор";
           
           СтрСоединения = СтрСоединения+"
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ."+СпВидов.ПолучитьЗначение(сч)+" КАК Док"+СЧ+"
           |      ПО Док"+СЧ+".IDDOC = Жур.IDDOC";
     КонецЦикла;
     
     
     |ВЫБРАТЬ
     |   РегДолги.КредДокумент Докум
     |      ,РегДолги.СуммаУпрОстаток Просрочка
     |      ,$Журнал.Договор Договор
     |      ,$Журнал.ТекущийДокумент ТекДок
     |      ,$Журнал.ДатаДокумента ДатаЛок
     |      ,$Журнал.НомерДокумента Номер
     |,      COALESCE("+СтрДоговора+") КАК [Договор $Справочник.Договора]
     |      ИЗ
     |      $РегистрОстатки.Покупатели(:ДатаОстатков,(ТП = :ТП),(КредДокумент),,) КАК РегДолги
     |      ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал
     |      ПО Журнал.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9)
     |"+СтрСоединения+"
     |;
     
[/code]

Конечно не проверял но примерно выглядит вот так.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #533 - 17. Апреля 2013 :: 13:23
Печать  
temrmal писал(а) 17. Апреля 2013 :: 12:14:
Ребята! Вы чего! Какой регистр Долги? Там же запрос к регистру "Покупатели".
На счет договора в регистре это ты верно подметил, но это пример я привел, контрагента нет в регистре, хочу контрагента вытянуть из документа. Сам принцип интересует!


Договор откуда ? С КредДока ?
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #534 - 17. Апреля 2013 :: 18:12
Печать  
Ну да! Вообщем кредДок = это измерение регистра типа "Документ". Как получить доступ к реквизитам документа. Хотя бы общим для всех документов данного регистра (Контрагент, договор и тд.)
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #535 - 17. Апреля 2013 :: 18:20
Печать  
[quote author=undo link=1285352210/525#532 date=1366202495][code]      СпВидов = СоздатьОбъект("СписокЗначений");
     СпВидов.ДобавитьЗначение("Вид1");
     СпВидов.ДобавитьЗначение("Вид2");
     СпВидов.ДобавитьЗначение("Вид3");
     СпВидов.ДобавитьЗначение("Вид4");
     
     СтрДоговора = "";
     СтрСоединения = "";
     
     Для сч из СпВидов.РазмерСписка() цикл
           СтрДоговора = СтрДоговора+?(СтрДоговора="","",",")+"$Док"+Сч+".Договор";
           
           СтрСоединения = СтрСоединения+"
           |ЛЕВОЕ СОЕДИНЕНИЕ Документ."+СпВидов.ПолучитьЗначение(сч)+" КАК Док"+СЧ+"
           |      ПО Док"+СЧ+".IDDOC = Жур.IDDOC";
     КонецЦикла;
     
     
     |ВЫБРАТЬ
     |   РегДолги.КредДокумент Докум
     |      ,РегДолги.СуммаУпрОстаток Просрочка
     |      ,$Журнал.Договор Договор
     |      ,$Журнал.ТекущийДокумент ТекДок
     |      ,$Журнал.ДатаДокумента ДатаЛок
     |      ,$Журнал.НомерДокумента Номер
     |,      COALESCE("+СтрДоговора+") КАК [Договор $Справочник.Договора]
     |      ИЗ
     |      $РегистрОстатки.Покупатели(:ДатаОстатков,(ТП = :ТП),(КредДокумент),,) КАК РегДолги
     |      ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал
     |      ПО Журнал.IDDOC = Сред(Доходы.ДокументОтгрузки,5,9)
     |"+СтрСоединения+"
     |;
     
[/code]

Конечно не проверял но примерно выглядит вот так.[/quote]
Специально для тебя повторяю. Это для тебя написано!!!!!!!!!!!!!
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #536 - 17. Апреля 2013 :: 18:20
Печать  
temrmal писал(а) 17. Апреля 2013 :: 12:14:
Ребята! Вы чего! Какой регистр Долги? Там же запрос к регистру "Покупатели".
На счет договора в регистре это ты верно подметил, но это пример я привел, контрагента нет в регистре, хочу контрагента вытянуть из документа. Сам принцип интересует!


Угу, сорри, не очень тщательно посмотрел.

Сам принцип можно разделить на 2 части:
1. Прицип "Вообще" - надо понимать, что у тебя есть где-то поле, хранящее ссылку куда-то в другое место. Соотвественно, если хочется полуить поле из этого "другого" места, надо эти две таблички соединить.
2. Теперь "в частности", если хочется получить Контрагента, то более эффективный способ - это из таблицы оборотов Регистра получить Договора, а по ним уже получить Владельца (это и будет искомый Контрагент). Это много проще, чем строить кучу соединений с документами разных видов, и получать затем оттуда Контрагентов.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #537 - 17. Апреля 2013 :: 18:53
Печать  
temrmal писал(а) 17. Апреля 2013 :: 06:15:
, почему-то РегДолги.КредДокумент возвращает ID документа но слева добавляет 13 с пробелом?  


КредДокумент - измерение стипом <Документ> без вида, хранится как строка 13: вид документа(iddocdef) 4 символа + iddoc (9 символов)


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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #538 - 23. Апреля 2013 :: 05:12
Печать  
Подскажите, а как из ВТ по оборотам получить реквизиты регистра? Мне нужно по ним условие поставить.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #539 - 23. Апреля 2013 :: 05:15
Печать  
Asakra писал(а) 23. Апреля 2013 :: 05:12:
Подскажите, а как из ВТ по оборотам получить реквизиты регистра? Мне нужно по ним условие поставить.

Никак.
Только соединением с самой табличкой движения регистра, либо писать запрос руктями к табличке движений регистра, без ВТ
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #540 - 23. Апреля 2013 :: 05:26
Печать  
Eprst писал(а) 23. Апреля 2013 :: 05:15:
Никак.
Только соединением с самой табличкой движения регистра, либо писать запрос руктями к табличке движений регистра, без ВТ


ага. понел. сенкс.
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #541 - 23. Апреля 2013 :: 18:59
Печать  
Как сделать условие на разность дат, к примеру по каждому документу что то типа: если Текущая дата минус N-ое количество дней тогда значение1, иначе значение 2?
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #542 - 23. Апреля 2013 :: 20:53
Печать  
разобрался
DATEADD
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #543 - 06. Мая 2013 :: 11:31
Печать  
Подскажите, а как в ВТ по остаткам поставить условие по измерению с типом "Документ"? И как поставить условие по этому же реквизиту, но по виду документа? Только джойнить Журнал документов и Виды документов? или как? может пример у кого есть. база DBF.
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #544 - 07. Мая 2013 :: 01:10
Печать  
Asakra писал(а) 06. Мая 2013 :: 11:31:
Подскажите, а как в ВТ по остаткам поставить условие по измерению с типом "Документ"? И как поставить условие по этому же реквизиту, но по виду документа? Только джойнить Журнал документов и Виды документов? или как? может пример у кого есть. база DBF.


Код
Выбрать все
ГДЕ СРЕД(РегПроектОО.КредДокумент,6) = $Жур.ТекущийДокумент
ГДЕ СРЕД(РегПроектОО.КредДокумент,6) В (ВЫБРАТЬ val FROM #СписДок)
ГДЕ ЛЕВО(РегПроектОО.КредДокумент,4) = :ВидДокумента.ТвойВидДока
ГДЕ ЛЕВО(РегПроектОО.КредДокумент,4) В окаN) 

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #545 - 07. Мая 2013 :: 01:26
Печать  
Dolly_EV писал(а) 07. Мая 2013 :: 01:10:
Код
Выбрать все
ГДЕ СРЕД(РегПроектОО.КредДокумент,6) = $Жур.ТекущийДокумент
ГДЕ СРЕД(РегПроектОО.КредДокумент,6) В (ВЫБРАТЬ val FROM #СписДок)
ГДЕ ЛЕВО(РегПроектОО.КредДокумент,4) = :ВидДокумента.ТвойВидДока
ГДЕ ЛЕВО(РегПроектОО.КредДокумент,4) В окаN) 



СПАСИБО!
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #546 - 14. Мая 2013 :: 05:52
Печать  
Я в панике! Вчера целый день убил. Не работает, хоть тресни:

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

ГДЕ $СпрТ.спрПроизводитель = :ВыбПроизводитель and (РегОст.ресСуммаБазНачальныйОстаток <> 0 ИЛИ РегОст.ресКоличествоНачальныйОстаток<>0 ИЛИ РегОст.ресСуммаБазКонечныйОстаток <> 0 ИЛИ РегОст.ресКоличествоКонечныйОстаток<>0)
) КАК РегОбщ

СГРУППИРОВАТЬ РегОбщ.Период,РегОбщ.Товар,РегОбщ.Производитель
 




ПрямойЗапрос::ПолучитьТипКолонки(Метаданные МетаРеквизит=, Строка Тип=, Строка Вид=, Число Длина=-1, Число Точность=-1) : Поле агрегатного объекта не обнаружено
Тип = МетаРеквизит.Тип;


Вроде все версии всего последние ... ХЕЛП!!!!!
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #547 - 14. Мая 2013 :: 06:42
Печать  
Цитата:
Я в панике! Вчера целый день убил. Не работает, хоть тресни:

РегОст.НачалоПериода КАК Период,РегОст.измТовар КАК Товар,$СпрТ.спрПроизводитель КАК Производитель,
РегОст.ресСуммаБазПродКонечныйОстаток СуммаПродСтК
ИЗ $РегистрОстаткиОбороты.Товары(:ДатаНач, :ДатаКон~, Месяц ДОПОЛНЕНИЕ, ДвиженияИГраницыПериода, ВНУТРЕННЕЕ СОЕДИНЕНИЕ $Справочник.Товары КАК СпрТ $nolock ПО СпрТ.id = измТовар, $СпрТ.спрПроизводитель = :ВыбПроизводитель, (измТовар),(ресКоличество,ресСуммаБаз,ресСуммаБазПрод)) РегОст


Синтаксис: $РегистрОстаткиОбороты.<ИмяРегистра>(НачалоПериода, КонецПериода, Периодичность, МетодДополнения, Условие, Измерения, Ресурсы, Соединения)

В общем, если я правильно понял задачу - должно быть так:
Код
Выбрать все
	|ВЫБРАТЬ
	|	РегОбщ.Период КАК [Период $Дата]
	|	,РегОбщ.Товар КАК [Товар $Справочник.Товары]
	|	,РегОбщ.Производитель КАК [Производитель $Справочник.Производитель]
	|	,Максимум(РегОбщ.СуммаПродСтК) КАК [СуммаПродСтК $число]
	|ИЗ (ВЫБРАТЬ
	|		РегОст.НачалоПериода КАК Период
	|		,РегОст.измТовар КАК Товар
	|		,$СпрТ.спрПроизводитель КАК Производитель
	|		,РегОст.ресСуммаБазПродКонечныйОстаток СуммаПродСтК
	|	ИЗ $РегистрОстаткиОбороты.Товары(:ДатаНач, :ДатаКон~, Месяц ДОПОЛНЕНИЕ, ДвиженияИГраницыПериода
	|									,()
	|									,(измТовар)
	|									,(ресКоличество,ресСуммаБаз,ресСуммаБазПрод),) КАК РегОст
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ $Справочник.Товары КАК СпрТ $nolock
	|	ПО СпрТ.id = РегОст.измТовар И $СпрТ.спрПроизводитель = :ВыбПроизводитель
	|	ГДЕ РегОст.ресСуммаБазНачальныйОстаток <> 0
	|	ИЛИ РегОст.ресКоличествоНачальныйОстаток<>0
	|	ИЛИ РегОст.ресСуммаБазКонечныйОстаток <> 0
	|	ИЛИ РегОст.ресКоличествоКонечныйОстаток<>0) КАК РегОбщ
	|СГРУППИРОВАТЬ РегОбщ.Период,РегОбщ.Товар,РегОбщ.Производитель
 



и еще "ресКоличество,ресСуммаБаз," из ресурсов выкинуть, если они нигде не используются.
и еще: у тебя в коде этот запрос также выглядит? как ты в нем что-то понимаешь?)) записал бы уж вообще в одну строку))
...
и еще: и подзапрос тут не нужен и "Сгруппировать" не нужно - достаточно иннер джоин ВТОстаткиОбороты с Спр.Товары
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #548 - 14. Мая 2013 :: 07:07
Печать  
Т.е. как-то так:
Код
Выбрать все
	|ВЫБРАТЬ
	|	РегОст.НачалоПериода КАК [Период $Дата]
	|	,РегОст.Товар КАК [Товар $Справочник.Товары]
	|	,$СпрТ.спрПроизводитель КАК [Производитель $Справочник.Производитель]
	|	,РегОст.ресСуммаБазПродКонечныйОстаток КАК [СуммаПродСтК $число]
	|ИЗ $РегистрОстаткиОбороты.Товары(:ДатаНач, :ДатаКон~, Месяц ДОПОЛНЕНИЕ, ДвиженияИГраницыПериода
	|								,()
	|								,(измТовар)
	|								,(ресКоличество,ресСуммаБаз,ресСуммаБазПрод),) КАК РегОст
	|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	|	$Справочник.Товары КАК СпрТ $nolock
	|ПО СпрТ.id = РегОст.измТовар И $СпрТ.спрПроизводитель = :ВыбПроизводитель
	|ГДЕ РегОст.ресСуммаБазНачальныйОстаток <> 0
	|	ИЛИ РегОст.ресКоличествоНачальныйОстаток<>0
	|	ИЛИ РегОст.ресСуммаБазКонечныйОстаток <> 0
	|	ИЛИ РегОст.ресКоличествоКонечныйОстаток<>0 

  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #549 - 14. Мая 2013 :: 07:18
Печать  
Спасибо! Почти угадал, только это просто кусок нужного мне запроса.
Мне вообще-то нужно

     |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ $Справочник.Товары КАК СпрТ $nolock
     |      ПО СпрТ.id = РегОст.измТовар И $СпрТ.спрПроизводитель = :ВыбПроизводитель

Засунуть внутрь ВТ. Как это сделать? Ругается непотребно.
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #550 - 14. Мая 2013 :: 07:28
Печать  
"Соединение" внутри ВТ еще не пробовал нигде, но может проблема в том, что "Доступные поля: только измерения регистра."?
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #551 - 14. Мая 2013 :: 08:08
Печать  
А какие проблемы?
ВНУТРЕННЕЕ СОЕДИНЕНИЕ $Справочник.Товары КАК СпрТ $nolock
          ПО СпрТ.id = измТовар

На это ругается что не знает имя таблицы $Справочник.Товары
Я по форуму искал, никто не использует это что-ли внутри ВТ??? Нерешительный
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #552 - 14. Мая 2013 :: 10:37
Печать  
Dolly_EV писал(а) 14. Мая 2013 :: 07:28:
"Соединение" внутри ВТ еще не пробовал нигде, но может проблема в том, что "Доступные поля: только измерения регистра."?


Вот что выдает:

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

ГДЕ $СпрТ.спрПроизводитель = :ВыбПроизводитель  
) КАК РегОбщ

СГРУППИРОВАТЬ РегОбщ.Период,РегОбщ.Товар,РегОбщ.Производитель

ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : Meta name parser error: неизвестное метаимя или алиас "$СпрТ"
ЗапросODBC.ВыполнитьИнструкцию(ТекстЗапроса,ПолучательЗапроса,1);
{E:\Mine\Otladka\mdwork\classes\ПрямойЗапрос.ert(13484) }
 

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #553 - 15. Мая 2013 :: 03:33
Печать  
Цитата:
Dolly_EV писал(а) 14. Мая 2013 :: 07:28:
"Соединение" внутри ВТ еще не пробовал нигде, но может проблема в том, что "Доступные поля: только измерения регистра."?


Вот что выдает:

Код
Выбрать все
ВНУТРЕННЕЕ СОЕДИНЕНИЕ $Справочник.Товары КАК СпрТ $nolock ПО СпрТ.id = РегОст.измТовар
ГДЕ $СпрТ.спрПроизводитель = :ВыбПроизводитель  
) КАК РегОбщ
 


НЕ надо здесь $, а около СпрТ.id = РегОст.измТовар - надо!
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #554 - 15. Мая 2013 :: 05:39
Печать  
Dolly_EV писал(а) 15. Мая 2013 :: 03:33:
Цитата:
Dolly_EV писал(а) 14. Мая 2013 :: 07:28:
"Соединение" внутри ВТ еще не пробовал нигде, но может проблема в том, что "Доступные поля: только измерения регистра."?


Вот что выдает:

Код
Выбрать все
ВНУТРЕННЕЕ СОЕДИНЕНИЕ $Справочник.Товары КАК СпрТ $nolock ПО СпрТ.id = РегОст.измТовар
ГДЕ $СпрТ.спрПроизводитель = :ВыбПроизводитель  
) КАК РегОбщ
 


НЕ надо здесь $, а около СпрТ.id = РегОст.измТовар - надо!



Нее, заработало так:

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

ГДЕ $СпрТ.спрПроизводитель = :ВыбПроизводитель
) КАК РегОбщ

СГРУППИРОВАТЬ РегОбщ.Период,РегОбщ.Товар,РегОбщ.Производитель
 



Это ж убиться веником ....  Ужас
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #555 - 15. Мая 2013 :: 06:00
Печать  
Ну да, перед СпрТ.id не надо $
  
Наверх
ICQ  
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #556 - 15. Мая 2013 :: 06:01
Печать  
Но все-таки внутрь ВТ не получается соединение внести.

Может кто в курсе? Народ!! АЛЕ!!!!
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #557 - 18. Мая 2013 :: 17:22
Печать  
Цитата:
А какие проблемы?
ВНУТРЕННЕЕ СОЕДИНЕНИЕ $Справочник.Товары КАК СпрТ $nolock
          ПО СпрТ.id = измТовар

На это ругается что не знает имя таблицы $Справочник.Товары
Я по форуму искал, никто не использует это что-ли внутри ВТ??? Нерешительный


такут попробуй
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК СпрТ $nolock
          ПО $СпрТ.ТекущийЭлемент = измТовар И $СпрТ.спрПроизводитель = :ВыбПроизводитель
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #558 - 20. Мая 2013 :: 06:34
Печать  
Не работает. На измТовар ругается.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #559 - 20. Мая 2013 :: 09:53
Печать  
В секции "ИЗ" алиас применяется только для виртуальных таблиц, все остальные пишутся без него.
Т.е.
Код
Выбрать все
ВЫБРАТЬ *
ИЗ Справочник.Контрагенты КАК СпрКонтр $nolock 



Остальное читал невнимательно.
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #560 - 20. Мая 2013 :: 09:59
Печать  
Еще режим отладки включи (=1) и приложи в прикрепленный файл. Посмотрю что там получается.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #561 - 20. Мая 2013 :: 10:32
Печать  
vandalsvq писал(а) 20. Мая 2013 :: 09:59:
Еще режим отладки включи (=1) и приложи в прикрепленный файл. Посмотрю что там получается.


Вот.
  

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


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

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

Код
Выбрать все
SELECT
			rg_99.sp101 AS измТовар
			,rg_99.sp102 AS ресКоличествоОстаток
			,rg_99.sp163 AS ресСуммаБазОстаток
			,rg_99.sp1111 AS ресСуммаБазПродОстаток

		FROM
			RG99 AS rg_99 (nolock)
		INNER JOIN SC33 AS СпрТ (nolock) ON СпрТ.ID = измТовар
		WHERE
			rg_99.PERIOD = '20110201'
		AND
			СпрТ.SP1212 = '    12   ' 



Я вечером попробую поправить и возможно выложу исправленную сборку.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #563 - 21. Мая 2013 :: 08:52
Печать  
Отлично! Заранее спасибо!
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Брать в теме в голове репозитария

1.8.6 от 22.05.13 г.
- Исправлена ошибка парсинга условий и соединений в виртуальных таблицах РегистрОстатки,  РегистрОбороты,  РегистрОстаткиОбороты если значение измерения стояло после значения условия или соединения.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #565 - 23. Мая 2013 :: 05:57
Печать  
Ура!!!! Заработало!!!!!!!  Очень довольный
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #566 - 23. Мая 2013 :: 10:48
Печать  
Приветствую. Спасибо за замечательный класс. Осваиваю вовсю. Очень пригождается документация.
Собственно вопрос в этом. У меня документация в формате ворда.
Нет ли версии в формате файл-справки или синтаксис-помощника?
Искал по сайту и просто в инете, нашел много чего только не это.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
U_zer
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #568 - 24. Мая 2013 :: 07:33
Печать  
Че-то непонял, РежимОтладки работает или нет?
Ставлю РежимОтладки = 0 все равно выводит время вып. запроса ..
Как сделать, чтоб ничего не выводил?
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #569 - 24. Мая 2013 :: 13:16
Печать  
vandalsvq писал(а) 23. Мая 2013 :: 17:58:
Нет. Нету, некому сделать, а сам я пас.

Печально. Ладно попробую сам.
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #570 - 24. Мая 2013 :: 14:27
Печать  
Перерыл кучу прог по переводу doc в chm. Нашел сайтец занятный http://www.aitishnik.ru/windows/prog02.html. По советам данного сайта у меня получилось вот что. По мне так намного лучше doc варианта, буду еще наверно дорабатывать.
  

Pryamie_Zaprosi_Help.zip ( 116 KB | Загрузки )
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #571 - 25. Мая 2013 :: 04:40
Печать  
classic писал(а) 18. Января 2010 :: 08:51:
Убил час на отладку запроса из пяти строк. Оказалось, что функция "УложитьТаблицуЗначений" строковые колонки укладывает или в колонки с типом "Текст", или Char(100). При этом убирает лидирующие пробелы. Ппц, а у меня в строковой колонке иды объектов были.
Предлагаю переписать функцию в таком виде:


vandalsvq писал(а) 18. Января 2010 :: 09:12:
classic писал(а) 18. Января 2010 :: 08:51:
Предлагаю переписать функцию

Перепишемс Подмигивание


Так и не переписал Улыбка. Я тоже полчаса убил на отладку 5 строк, где в УложитьТаблицуЗначений укладывал ИД-ы, и потерялись лидирующие пробелы
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #572 - 25. Мая 2013 :: 04:52
Печать  
OrkuShaman писал(а) 24. Мая 2013 :: 14:27:
Перерыл кучу прог по переводу doc в chm. Нашел сайтец занятный http://www.aitishnik.ru/windows/prog02.html. По советам данного сайта у меня получилось вот что. По мне так намного лучше doc варианта, буду еще наверно дорабатывать.


Не, не гуд. Поиска нет
  
Наверх
ICQ  
IP записан
 
Igor Nikolaenko
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 47
Зарегистрирован: 01. Апреля 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #573 - 12. Июня 2013 :: 09:29
Печать  
Исправлении ошибки в Классе "ПрямойЗапрос" и "ПоставщикДанных.ПрямойЗапрос"
Функция ПарсингВТПоследнееЗначение(ТекстДляОбработки):

//*Николаенко И.Н., 2013-04-25, добавил скобки в условия
//Если (ЭтоSQL = 0) и (ГраницаЗначенияЭтоПараметр = 2) Тогда
//      СтрУсловия = "(const_vt.DATE < substr(" + ГраницаЗначения + ",1,8)
//      |      OR const_vt.DATE = substr(" + ГраницаЗначения + ",1,8) AND const_vt.TIME < substr(" + ГраницаЗначения + ",9,6)
//      |      OR const_vt.DATE = substr(" + ГраницаЗначения + ",1,8) AND const_vt.TIME = substr(" + ГраницаЗначения + ",9,6) AND const_vt.DOCID <= substr(" + ГраницаЗначения + ",14,9))";
//Иначе
//      СтрУсловия = "(const_vt.DATE < " + ГраницаОкончРасчетов + "
//      |      OR const_vt.DATE = " + ГраницаОкончРасчетов + " AND const_vt.TIME < " + ВремяОкончРасчетов + "
//      |      OR const_vt.DATE = " + ГраницаОкончРасчетов + " AND const_vt.TIME = " + ВремяОкончРасчетов + " AND const_vt.DOCID <= " + ИДДокОкончРасчетов + ")";
//КонецЕсли;
// -------------
Если (ЭтоSQL = 0) и (ГраницаЗначенияЭтоПараметр = 2) Тогда
     СтрУсловия = "(const_vt.DATE < substr(" + ГраницаЗначения + ",1,8)
     |      OR (const_vt.DATE = substr(" + ГраницаЗначения + ",1,8) AND const_vt.TIME < substr(" + ГраницаЗначения + ",9,6))
     |      OR (const_vt.DATE = substr(" + ГраницаЗначения + ",1,8) AND const_vt.TIME = substr(" + ГраницаЗначения + ",9,6) AND const_vt.DOCID <= substr(" + ГраницаЗначения + ",14,9)))";
Иначе
     СтрУсловия = "(const_vt.DATE < " + ГраницаОкончРасчетов + "
     |      OR (const_vt.DATE = " + ГраницаОкончРасчетов + " AND const_vt.TIME < " + ВремяОкончРасчетов + ")
     |      OR (const_vt.DATE = " + ГраницаОкончРасчетов + " AND const_vt.TIME = " + ВремяОкончРасчетов + " AND const_vt.DOCID <= " + ИДДокОкончРасчетов + "))";
КонецЕсли;
//*_

Если, это возможно, прошу внести изменение в классы.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #574 - 19. Июня 2013 :: 12:14
Печать  
Помогите придумать фильтрацию запроса по Полю "ТекущийДокумент" таблицы "ЖурналДокументов".

У меня есть список значений, содержащий Строка(СокрЛП(ID)) документов, которые мне нужно исключить из результата запроса.

  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #575 - 19. Июня 2013 :: 12:32
Печать  
Так покажи текст запроса?
  
Наверх
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #576 - 19. Июня 2013 :: 12:43
Печать  
Код
Выбрать все
	  спИск = СоздатьОбъект("СписокЗначений");
	спИск.ДобавитьЗначение(Строка("CNWI"));

	оПЗ = СоздатьОбъект("ПрямойЗапрос");
	сТЗ = "
	|ВЫБРАТЬ
	|	СРЕД($дДП.ТекущийДокумент,3,4) КАК ТД,
	|	$ж.ДатаДокумента
	|ИЗ
	|	Документ.ДП_Авиа КАК дДП $nolock
	|	ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК ж $nolock
	|	ПО $ж.ТекущийДокумент = $дДП.ТекущийДокумент
	|ГДЕ
	|	СРЕД($дДП.ТекущийДокумент,3,4) НЕ В (ВЫБРАТЬ СОКРЛ(СОКРП(#сп.val)) ИЗ #сп)
	|	И
	|	$ж.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон~";

	оПЗ.Текст = сТЗ;
	оПЗ.УложитьСписокЗначений(спИск,"#сп");
	оПЗ.УстановитьТекстовыйПараметр("ДатаНач", НачДата);
	оПЗ.УстановитьТекстовыйПараметр("ДатаКон", КонДата);
	оПЗ.РежимОтладки = 1;
	итз = оПЗ.Выполнить();
	итз.Показать();
 



Это один из вариантов с которыми я экспериментировал.
В результат запроса попадают все документы заданного вида за период Печаль

Вопрос в том, чтоб правильно работало условие:
Код
Выбрать все
СРЕД($дДП.ТекущийДокумент,3,4) НЕ В (ВЫБРАТЬ СОКРЛ(СОКРП(#сп.val)) ИЗ #сп)
 

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #577 - 20. Июня 2013 :: 02:44
Печать  
Что-то мне говорит что:
СРЕД($дДП.ТекущийДокумент,3,4) НЕ В (ВЫБРАТЬ СОКРЛ(СОКРП(#сп.val)) ИЗ #сп)

надо написать вот так:

НЕ (СРЕД($дДП.ТекущийДокумент,3,4) В (ВЫБРАТЬ СОКРЛ(СОКРП(#сп.val)) ИЗ #сп))
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #578 - 21. Июня 2013 :: 09:52
Печать  
к сожалению тоже не хочет работать Печаль
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #579 - 23. Июня 2013 :: 04:32
Печать  
Ну во-первых. Зачем укладывать строковые списки - они не уложатся.
Если бы ты добавил агрегатный объект "документ" в список то УложитьСписокЗначений уложил бы их идентификаторы. Если у тебя нет агрегатного объекта а есть только идентификатор - то он у тебя не верный. Идентификатор должен быть длиной 9 знаков у тебя же 4 знака (нет пробелов).
Соответственно если идентификатор все таки строковый то надо
просто в тексте запроса написать:
Код
Выбрать все
ГДЕ $дДП.ТекущийДокумент= '"+ТвойСтроковыИдентификатор+"' 


Обрати внимание на апострофы.
Если же найдешь все таки агрегатный объект и его уложишь в список то вот так:
Код
Выбрать все
ГДЕ $дДП.ТекущийДокумент В (ВЫБРАТЬ val ИЗ #сп) 

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #580 - 26. Июня 2013 :: 06:00
Печать  
Подскажите по условию по видам документов. Если условие по видам стоит, выборка пустая, если убрать то работает, но в выборку попадают лишние документы:
"ВЫБРАТЬ
|      Партии.Партия КАК [Партия :Справочник.Партии]
|ИЗ
|      Журнал КАК ЖурналДокументов
|
|      ЛЕВОЕ СОЕДИНЕНИЕ
|            Регистр.ПаритииНаличие КАК Партии
|      ПО
|            ЖурналДокументов.IDDoc = Партии.IDDoc
|ГДЕ
|      ЖурналДокументов.DATE <= :КонПериода
|       И ЛЕВО(ЖурналДокументов.IDDoc, 4) = :ВидДокумента.Реализация";

Отладка говорит, что :ВидДокумента.Реализация = ' 18R', а ЛЕВО(ЖурналДокументов.IDDoc, 4) = '  97' (у реализации). как правильно сделать?
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #581 - 26. Июня 2013 :: 06:22
Печать  
все дошло... такут надо было: "И ЖурналДокументов.IDDOCDEF = :ВидДокумента.Реализация"
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #582 - 12. Июля 2013 :: 06:38
Печать  
Добрый день господа. Подскажите что не так делаю. Есть такой текст запроса :
ТекстПрямогоЗапроса="
     |ВЫБРАТЬ
     |      $СПрАвто.Модель КАК [Модель $Справочник.МоделиАвт]
     |      ,$СпРАвто.Код КАК [Вин $Строка]
     |      ,$Справто.ГодВыпуска КАК [ГодВып $Число]
//      |      ,$СпрАвто.Пробег КАК [Пробег $Число]
     |      ,$ДокЗаказНаряд3.ВидРемонта КАК [ВидРем $Справочник.ВидРемонта]
     |      ,$ДокЗаказНаряд3.СуммаРабот КАК [СумРаб $Число]
     |      ,$ДокЗаказНаряд3.СумМат КАК [СумЗЧ $Число]
     |      ,$Жур.ТекущийДокумент КАК [ТекущийЗН $Документ.ЗаказНаряд3]
     |      ,$Жур.ВидДокумента КАК [ТекущийЗН_вид $ВидДокумента]
     |      ,$Жур.ДатаДокумента КАК [ДокДата $Дата]
//      |      ,$СпрАВто.VIN2 КАК [Вин2 $Строка]
     |      ,$Жур.Фирма КАК [Фирма $Справочник.Фирмы]
     |      ,$ДокЗаказНаряд3.УчитыватьНДС КАК [УчНДС $Число]
     |      ,$СпрАвТо.Марка КАК [Марка $Справочник.Марка]
//      |      ,$ДокЗаказНаряд3.Количество КАК [Количество $Число]
//      |      ,$ДокЗаказНаряд3.Коэффициент КАК [Коэффициент $Число]
     |      ,$ДокЗаказНаряд3.СостояниеЗН КАК [Закрыт $Перечисление.СостояниеЗаказНаряда]
     |ИЗ
     |      ЖурналДокументов КАК Жур
     |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказНаряд3 КАК ДокЗаказНаряд3
     |            ПО $ДокЗаказНаряд3.ТекущийДокумент = $Жур.ТекущийДокумент
     |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Автомобили КАК СпрАвтО
     |            ПО $СПРАвто.ТекущийЭлемент = $ДокЗаказНаряд3.Автомобиль
     |ГДЕ 
     |      $Жур.ДатаДокумента МЕЖДУ :НачДата И :КонДата
//      |      И  $Жур.Фирма=:ВыбРазделитель1
     |      И  $Жур.Проведен = 1
     |      И  $ДокЗаказНаряд3.СостояниеЗН=:Закрыт
     |      И  ($СпРАвто.Код в (ВЫБРАТЬ val ИЗ #ВыбСЗВин))
//      |      И  $СпРАвто.Код=:ВыбВин
     |";

Не работает условие "И  ($СпРАвто.Код в (ВЫБРАТЬ val ИЗ #ВыбСЗВин))". Список значений это конкретные строки с винами типа "RJHYMJTYSJ16541651". $СпРАвто.Код это код в справочнике строкового типа. Если брать текстовый параметр по условию "$СпРАвто.Код=:ВыбВин", то работает. Но мне нужно их много проверять.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #583 - 12. Июля 2013 :: 09:22
Печать  
OrkuShaman писал(а) 12. Июля 2013 :: 06:38:
Добрый день господа. Подскажите что не так делаю.
...Список значений это конкретные строки с винами типа "RJHYMJTYSJ16541651".


Уверен на счет этого предложения? Попробуй, для начала:
тестТЗ = СоздатьОбъект("ТаблицаЗначений");
РС(или чего там у тебя).ВыполнитьИнструкцию("SELECT val FROM #ВыбСЗВин",тестТЗ,1);
тестТЗ.ВыбратьСтроку();
и посмотри, что же реально у тебя во времянке лежит
  
Наверх
ICQ  
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #584 - 12. Июля 2013 :: 09:24
Печать  
Дык я сам эту времянку вручную создавал.

СЗВины=СоздатьОбъект("СписокЗначений");
СЗВины.ДобавитьЗначение("XW8CJ41Z4CK273888");
СЗВины.ДобавитьЗначение("XWB4B11CDAA033412");
СЗВины.ДобавитьЗначение("Y6DTF698P90226411");
СЗВины.ДобавитьЗначение("XTA21213021620778");
СЗВины.ДобавитьЗначение("XWFPE6DJ9C3037712");
СЗВины.ДобавитьЗначение("XW8BD61Z98K151131");
СЗВины.ДобавитьЗначение("XWB3K32CDBA274228");
СЗВины.ДобавитьЗначение("XWF0AHL69C0018981");
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #585 - 12. Июля 2013 :: 10:23
Печать  
Цитата:
Уверен на счет этого предложения? Попробуй, для начала:
тестТЗ = СоздатьОбъект("ТаблицаЗначений");
РС(или чего там у тебя).ВыполнитьИнструкцию("SELECT val FROM #ВыбСЗВин",тестТЗ,1);
тестТЗ.ВыбратьСтроку();
и посмотри, что же реально у тебя во времянке лежит


кстати попробовал. ТЗ пустая(((. А в чем дело?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #586 - 12. Июля 2013 :: 11:23
Печать  
Дело в том, что "УложитьСписок" укладывает ТОЛЬКО объекты 1С, т.е., например, Справочник, Документ и т.д. А если строковые параметры, то надо как-то подругому. Я пользуюсь кодом Уважаемого Трад-а http://www.1cpp.ru/forum/YaBB.pl?num=1170322440/7#7
  
Наверх
ICQ  
IP записан
 
Cobranet
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 23. Марта 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #587 - 25. Июля 2013 :: 07:35
Печать  
Народ прошу помощи. База DBF
В общем в списке справочника номенклатура пытаюсь добавить колонку Цена, но 1С ругается.
Вот мой код:
Код
Выбрать все
ПоставщикДанныхМногострочнаяЧасть = СоздатьОбъект("ПоставщикДанных");
ПоставщикДанныхМногострочнаяЧасть.ТипЗначений = "Справочник.Номенклатура";
ПоставщикДанныхМногострочнаяЧасть.КонтейнерТабличногоПоля = "ТабличноеПолеМногострочнойЧасти";
ПоставщикДанныхМногострочнаяЧасть.КонтейнерКоманднойПанели = "КоманднаяПанельМногострочнойЧасти";

ДанныеСправочник = ПоставщикДанныхМногострочнаяЧасть.Данные;
ДанныеСправочник.КнопкаПросмотр = 1;
ДанныеСправочник.РежимОтладки = 1;
ДанныеСправочник.СоздатьКнопкиПоУмолчанию();

ТабличноеПоле = ДанныеСправочник.ТабличноеПоле;
ТабличноеПоле.СтильЗаголовков = 1;
ТабличноеПоле.СтильРамки = 1;

ДанныеСправочник.НоваяКолонка("Код");
ДанныеСправочник.НоваяКолонка("Наименование");

Запрос=ДанныеСправочник.ПрямойЗапрос;

ТекстСоединенияЦена = "left join
	|$СрезПоследних.Цены(:ВыбДата
	|                    ,(Цена,Валюта,ТипЦен)
	|                    ,($СпрЦены.ПометкаУдаления=0 and $спрЦены.ТипЦен = :ТипЦены and $спрЦены.Владелец = $ТекущийОбъект.ТекущийЭлемент)
	|                    ,left join Справочник.Цены as СпрЦены $nolock on $СпрЦены.ТекущийЭлемент = ТекущийЭлемент
	|                   ) as srezcen
	|";
	ДанныеСправочник.ДобавитьСоединениеДанных("ЦенаТовара",ТекстСоединенияЦена);
СпрТипыЦен = СоздатьОбъект("Справочник.ТипыЦен");
СпрТипыЦен.НайтиПоКоду("00002");
Запрос.УстановитьТекстовыйПараметр("ТипЦены", СпрТипыЦен.ТекущийЭлемент());
Запрос.УстановитьТекстовыйПараметр("ВыбДата",  ТекущаяДата());
ДанныеСправочник.ДобавитьКолонкуДанных("Цены","Цена оптовая","srezcen.Цена","Число",10,2,1);
ДанныеСправочник.НоваяКолонка("Цены"); 



А 1С вот на что ругается:
ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc84.ID
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
) }

ПоставщикДанных.ТабличноеПоле::Обновить() : ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc84.ID
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
) }

вирт().Обновить();
670) }

ПоставщикДанных::Обновить() : ПоставщикДанных.ТабличноеПоле::Обновить() : ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc84.ID
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
) }

вирт().Обновить();
670) }

ПоставщикДанных.ТабличноеПоле.Обновить();
{C:\1C\ТиС\SystemData\Classes\ПоставщикДанных\ПоставщикДанных.ert(220) }

ПоставщикДанныхМногострочнаяЧасть.Обновить();
{C:\1C\ТиС\СПРАВОЧНИК НОМЕНКЛАТУРА.ERT(172)}: ПоставщикДанных::Обновить() : ПоставщикДанных.ТабличноеПоле::Обновить() : ПоставщикДанных.Справочник::УстановитьПоставщикаДанных() : no such column: sc84.ID
ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]");
) }

вирт().Обновить();
670) }

ПоставщикДанных.ТабличноеПоле.Обновить();
{C:\1C\ТиС\SystemData\Classes\ПоставщикДанных\ПоставщикДанных.ert(220) }
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #588 - 08. Августа 2013 :: 06:14
Печать  
Я не особо спец, но то что бросилось в глаза  Нерешительный
" left join ...
     |                   ) as srezcen " - ? где условие этого соединения?
  
Наверх
 
IP записан
 
Cobranet
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 23. Марта 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #589 - 08. Августа 2013 :: 06:22
Печать  
OrkuShaman писал(а) 08. Августа 2013 :: 06:14:
Я не особо спец, но то что бросилось в глаза  Нерешительный
" left join ...
     |                   ) as srezcen " - ? где условие этого соединения?


and $спрЦены.Владелец = $ТекущийОбъект.ТекущийЭлемент по идее вот соединение этого справочника цен по реквизиту владелец с текущей номенклатурой.
Но вопрос можно считать закрытым. Выкрутился через $ПоследнееЗначение
  
Наверх
 
IP записан
 
OrkuShaman
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Местоположение: Воронеж
Зарегистрирован: 23. Мая 2013
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #590 - 08. Августа 2013 :: 06:35
Печать  
Ну выкрутился хорошо, вот если бы разобрался было бы лучше))) Часто выходит что задача повторяется, но времени на ее решение может уже не быть столько много, чтобы сидеть и думать.  Подмигивание
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #591 - 25. Сентября 2013 :: 07:12
Печать  
делаю временную таблицу:

Код
Выбрать все
create table #тзОбороты(

    Подр char(9)
    ,Склад char(9)
    ,ВидАП char(9)
    ,КодАП char(3)
    ,Номенклатура char(9)
    ,ПроизвИмп char(9)
    ,ИННПроизвИмп char(20)
    ,ЭтоИмпорт numeric(1,0)
    ,ТекДок char(9)
    ,ТекДок_вид int
    ,ТекДок_ном char(20)
    ,ТекДок_дата varchar(10)
 

... и т.д.


в ТекДок_дата данные попадают так:
Код
Выбрать все
	  |    ,МАКСИМУМ(ВЫБОР
	  |    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ПриходнаяНакладная
	  |    ТОГДА $ПНК.ДатаДокВходящий
	  |    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ЗаказПоставщику
	  |    ТОГДА $ЗаказПост.ДатаДокВходящий
	  |    ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ) КАК ТекДок_дата
 


пробовал и так:  "КАК [ТекДок_дата $Дата]"

в итоге во всех вариантах для DBF (1SQlite) все ок - на выходе запросом из тзОбороты - в поле ТекДок_дата - дата, на SQL - пусто ("  .  .  ")

ТекДок_дата пробовал char(8), сhar(10), varchar(10) - ничего не помогает

Что Я Делаю Не Так ??
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #592 - 25. Сентября 2013 :: 09:51
Печать  
а как записываешь данные в таблицу?
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #593 - 25. Сентября 2013 :: 23:37
Печать  
Salimbek писал(а) 25. Сентября 2013 :: 09:51:
а как записываешь данные в таблицу?

Код
Выбрать все
ТекстЗапросаОбороты="
|ВСТАВИТЬ ВНУТРЬ #тзОбороты
|"+ТекстЗапросаОбороты;
ПЗапрос.ВыполнитьЗапрос(ТекстЗапросаОбороты,0);
 



ну и в ТекстЗапросаОбороты - кусок кода выше про "ТекДок_дата"
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #594 - 26. Сентября 2013 :: 00:08
Печать  
Новый факт:
Вот так все ок:
Код
Выбрать все
|	,МАКСИМУМ($Жур.ДатаДокумента) КАК ТекДок_дата 


Вот так - пусто:
Код
Выбрать все
|	,МАКСИМУМ(ВЫБОР
|	КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ПриходнаяНакладная
|	ТОГДА $ПНК.ДатаДокВходящий
|	КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ЗаказПоставщику
|	ТОГДА $ЗаказПост.ДатаДокВходящий
|	ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ) КАК ТекДок_дата
 


причем пусто и для документов в случае "ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ"
Поля "ДатаДокВходящий" - тип "Дата"
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #595 - 26. Сентября 2013 :: 02:16
Печать  
В общем, проблема понятна (преобразование типов)
$Жур.ДатаДокумента возвращает строку 'ГГГГММДД'
$ПНК.ДатаДокВходящий возращает дату 'ДД.ММ.ГГГГ'

Как красиво решить?
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #596 - 26. Сентября 2013 :: 05:15
Печать  
Dolly_EV писал(а) 26. Сентября 2013 :: 02:16:
В общем, проблема понятна (преобразование типов)
$Жур.ДатаДокумента возвращает строку 'ГГГГММДД'
$ПНК.ДатаДокВходящий возращает дату 'ДД.ММ.ГГГГ'

Как красиво решить?

Код
Выбрать все
CAST($Жур.ДатаДокумента as DateTime) 

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #597 - 26. Сентября 2013 :: 07:43
Печать  
leshik писал(а) 26. Сентября 2013 :: 05:15:
Код
Выбрать все
CAST($Жур.ДатаДокумента as DateTime) 



State 22007, native 241, message [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting datetime from character string.

Нет, ошибки нет (не туда воткнул сначала). Но и результат не изменился - во временной таблице - пусто((

УРА!! Победил! CAST() надо делать не перед пиханием во временную ТЗ, а перед извлечением в дальнейшем из нее
Но так и не понял, почему CAST перед "INSERT INTO" не помог?
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #598 - 26. Сентября 2013 :: 08:11
Печать  
Можно было бы попробовать заКАСТовать все три поля, чтобы они гарантированно приводились к одному типу. Следующим шагом, я бы делал просто "Выбрать * из (твоя_временная_таблица)" в Таблицу значений и далее ТЗ.ВыбратьСтроку(), чтобы тупо посмотреть, что же реально лежит там в полях.
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #599 - 26. Сентября 2013 :: 10:19
Печать  
Salimbek писал(а) 26. Сентября 2013 :: 08:11:
Можно было бы попробовать заКАСТовать все три поля, чтобы они гарантированно приводились к одному типу. Следующим шагом, я бы делал просто "Выбрать * из (твоя_временная_таблица)" в Таблицу значений и далее ТЗ.ВыбратьСтроку(), чтобы тупо посмотреть, что же реально лежит там в полях.


Угу, уже.
В общем, что с КАСТ, что без КАСТ ПЕРЕД INSERT INTO,
в СКЛе на выходе из временной таблицы БЕЗ типизации лежат даты вида "Jul 24 2013 12:00AM", одинаковые не зависимо от источника (ПНК.ДатаДокВходящий или Жур.ДатаДокумента)
При этом С ТИПИЗАЦИЕЙ без КАСТ() - получаем пустые даты, с КАСТ() - все Ок.
В итоге правильный ответ: ,МАКСИМУМ(CAST(ТекДок_дата AS DateTime)) КАК [ТекДок_дата $Дата]
при выборе из временной таблицы

Не, не правильный ответ.
Теперь обратная проблема:
при МАКСИМУМ(CAST(ТекДок_дата AS DateTime)) КАК [ТекДок_дата $Дата]" на DBF - пустая дата....
CAST(ТекДок_дата AS DateTime выдает строку 'ГГГГММДД', которая типизацией не приводится к Дате
В общем, вилку придется ставить Скль/НеСкль Печаль
P.S. А еще лучше добавить в класс тип DateTime для временных таблиц (или Date)
« Последняя редакция: 27. Сентября 2013 :: 01:48 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #600 - 23. Октября 2013 :: 06:37
Печать  
подскажите, пж. есть такой запрос:
          "ВЫБРАТЬ
           |      ЗП.Контрагент      КАК [Контрагент      :Справочник.Контрагенты],
           |      ЗП.Сотрудник      КАК [Сотрудник            :Справочник.ФизЛица],
           |      ЗП.ВидСтавкиЗП      КАК [ВидСтавкиЗП      :Перечисление._ВидыСтавокЗПОтПродаж],
           |      ЗП.ТОПМенеджер      КАК [ТОПМенеджер      :Справочник.ФизЛица],
           |
           |      ВЫБОР
           |            КОГДА ЗП.ТОПМенеджер = :ПустойИД
           |                  ТОГДА 0
           |            ИНАЧЕ 1
           |      КОНЕЦ                  КАК ЭтоТОПМенеджер,
           |
           |      ЗП.СуммаПродажиОстаток            КАК [СуммаПродажи :Число.15.2],
           |      ЗП.СуммаЗПОтПродажиОстаток      КАК [СуммаЗП :Число.15.2]
           |
           |ИЗ
           |      $РегистрОстатки.ЗарплатаОтПродаж(:Документ,
           |                  Контрагент В (ВЫБРАТЬ val ИЗ #СписокКонтрагентов),
           |                  (Контрагент,Сотрудник,ВидСтавкиЗП,ТОПМенеджер), (СуммаПродажи,СуммаЗПОтПродажи)) КАК ЗП
           |
           |ГДЕ
           |      ВЫРАЗИТЬ(ЗП.СуммаПродажиОстаток КАК NUMERIC(15,2)) <> 0
           |";

хочется откинуть СуммаПродажиОстаток = 0. если использую ROUND, то все гуд, а если CAST, то условие не отрабатывает. я как понимаю ROUND округляет, а типизация [Сумма :Число.15.2] просто откидывает лишнее (опасаюсь, что при условии с ROUND в результате Сумма будет = 0, т.к. при проверке округлится до 0.01). или я не прав и можно смело использовать ROUND? или как правильно написать условие с CAST? совсем уж не хочется при обходе результата проверять на равенство нулю Улыбка
База: DBF
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #601 - 02. Ноября 2013 :: 11:15
Печать  
вдруг кому надо будет. пока решил так:
ГДЕ
ЗП.СуммаПродажиОстаток <= -0.01 ИЛИ ЗП.СуммаПродажиОстаток >= 0.01
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #602 - 12. Ноября 2013 :: 15:43
Печать  
Помогите побороть Параметризованные запросы

Есть процедура, в которой создается запрос и выполняется ПодготовитьПараметризованныйЗапрос.
Код
Выбрать все
оПЗ = СоздатьОбъект("ПрямойЗапрос");
	оПЗ.РежимОтладки=1;
	оПЗ.Текст="ВЫБРАТЬ
	|	ООО.НачалоПериода КАК [НачДата $Дата]
	|,	ООО.Счет КАК [Счет $Счет.Основной]
	|,	ООО.Субконто1 КАК [Товары $Субконто]
	|,	ООО.Субконто1_вид КАК Товары_вид
	|,	ООО.Субконто2 КАК [Склады $Субконто]
	|,	ООО.Субконто2_вид КАК Склады_вид
	|,	ООО.СуммаКонечныйОстатокДт
	|,	ООО.КоличествоКонечныйОстатокДт
	|ИЗ
	|	$БИОстаткиОбороты.Основной(:НачПериода,:КонПериода,ДЕНЬ ДОПОЛНЕНИЕ,,#Счет217,(Субконто1,Субконто2),(Сумма,Количество),((Субконто1 =@Товар) И (Субконто2 =:Склад))) КАК ООО
	|	";

	оПЗ.УстановитьТекстовыйПараметр("НачПериода",НачДата);
	оПЗ.УстановитьТекстовыйПараметр("КонПериода",КонДата);
	спСчет217=СоздатьОбъект("СписокЗначений");
	спСчет217.ДобавитьЗначение(СчетПоКоду("217.1"));
	оПЗ.УложитьСписокЗначений(спСчет217,"#Счет217");
	оПЗ.УстановитьТекстовыйПараметр("Склад",ВернутьПоКоду("Склады","1"));

	оПЗ.ОписаниеПараметра("Товар","Справочник.Товары");
	оПЗ.ПодготовитьПараметризованныйЗапрос();
 



Далее в цикле должна вызываться функция, где запрос выполняется с последующей обработкой результата.
Код
Выбрать все
оПЗ.ПодставлятьПараметры("Товар",ТМЦ);

	итзРезультат = оПЗ.ВыполнитьПараметризованныйЗапрос();
	итзРезультат.Показать();
 



но в результате получаю ошибку
Время подготовки запроса: 310 мс.
ПрямойЗапрос::ВыполнитьПараметризованныйЗапрос(Строка ТипОбъекта=ИндексированнаяТаблица) : Неверный номер параметра
метра.Модификатор);
\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13486) }

итзРезультат = оПЗ.ВыполнитьПараметризованныйЗапрос();
{D:\ARTEM\1C\V7\BASES\ERT\ПОДБОРТОВАРАВДОКУМЕНТ_ПРЯМОЙЗАПРОС.ERT(64)}: ПрямойЗапрос::ВыполнитьПараметризованныйЗапрос(Строка ТипОбъекта=ИндексированнаяТаблица) : Неверный номер параметра
метра.Модификатор);
\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13486) }
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #603 - 13. Ноября 2013 :: 13:18
Печать  
Почему
Код
Выбрать все
нто2),(Сумма,Количество),((Субконто1 =:Товар) И (Субконто2 =:Склад))) КАК ООО";
 


Выдает только одну строчку со значениями равными остаткам на начало периода? ОСВ по счету показывает, что за заданный период были и обороты и остатки на конец периода совсем другие?

Содержимое режима отладки прилагается

Версия класса: 1.8.6
  

_____________005.txt ( 12 KB | Загрузки )
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #604 - 14. Ноября 2013 :: 09:45
Печать  
C предыдущими вопросами разобрался. Было не правильное количество запятых в $БИОстаткиОбороты Улыбка

Но нужна ваша помощь в решении задачи.
Нужно чтоб в результирующую таблицу попали строки для которых количество остатка товара на конец периода (КоличествоКонечныйОстатокДт) был бы минимальным. Мне нужно узнать дату, на которую остаток товара был минимальным.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #605 - 21. Ноября 2013 :: 10:41
Печать  
и все таки меня мучает вопрос по работе с виртуальными таблицами бух. итогов.

Код
Выбрать все
оПЗ.Текст="ВЫБРАТЬ
	//|	ООО.НачалоПериода КАК [НачДата $Дата]
	|	ООО.ТекущийДокумент КАК [Док $Документ]
	|,	ООО.ВидДокумента КАК Док_вид
	|,	ООО.Счет КАК [Счет $Счет.Основной]
	|,	ООО.Субконто1 КАК [Товары $Субконто]
	|,	ООО.Субконто1_вид КАК Товары_вид
	|,	ООО.Субконто2 КАК [Склады $Субконто]
	|,	ООО.Субконто2_вид КАК Склады_вид
	|,	(ООО.КоличествоКонечныйОстатокДт) КАК [МинКолОст $Число]
	|,	(ООО.КоличествоКонечныйОстатокДт)
	|,	(ООО.КоличествоНачальныйОстатокДт) КАК [МинКолНач $Число]
	|,	(ООО.СуммаКонечныйОстатокДт)
	|
	|ИЗ
	|	1,Субконто2),(Сумма,Количество),(СРЕД(Субконто1,3,6) В (ВЫБРАТЬ СРЕД(val,3,6) ИЗ #Товары) И (СРЕД(Субконто2,3,6)=СРЕД(:Склад,3,6))),) КАК ООО";
 



Возвращает совсем неожиданный результат.
Сначала идут расходные документы (причем за весь период) а затем приходные Печаль

можно ли как-то это исправить?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #606 - 21. Ноября 2013 :: 11:47
Печать  
ну посортируй результат по позиции дока в запросе.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #607 - 21. Ноября 2013 :: 12:46
Печать  
А по умолчанию как запрос сортируется? И как сортировка повлияет на значения ресурсов?
  
Наверх
 
IP записан
 
AntiBuh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #608 - 28. Ноября 2013 :: 05:14
Печать  
Имею запрос:

     |Выбрать
     |      $СпрСкл.КассаМаг                        как [Касса $Справочник.Кассы]
     |,      Сумма(0       )                        как Приход
     |,      Сумма($ПКО.Сумма)                  как Расход
     |,      $ПКО.ТекущийДокумент      как [Док $Документ.ПКО]
     |Из
     |      Документ.ПКО как ПКО $nolock
     |Внутреннее Соединение
     |      ЖурналДокументов как Ж  по $ПКО.ТекущийДокумент = $Ж.ТекущийДокумент
     |Левое Соединение
     |      Справочник.Склады Как СпрСкл $nolock
     |      ПО $СпрСкл.ТекущийЭлемент = $ПКО.Субконто1
     |Где
     |      ($Ж.ДатаДокумента Между :НачДата и :КонДата~) и ($Ж.Проведен = 1) и ($ПКО.Субконто1 = :тСклад*)


где ПКО.Субконто1 - неопределенный реквизит, может принимать значение типа Справочник.Склад,
Справочник.Склад имеет реквизит Справочник.Кассы

Пытаюсь получить доки с конкретным значением Субконто1
Значения колонки Касса получается пустым
получится ли заполнить ее исходя из таких данных?
если да, поскажите как правильно сделать
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #609 - 28. Ноября 2013 :: 07:17
Печать  
Если субконто неопределенного типа/вида, то нужно от него взять часть с id + желательно с видом справочника и потом уже эту часть соединять со справочником.
  
Наверх
 
IP записан
 
AntiBuh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #610 - 28. Ноября 2013 :: 09:34
Печать  
Eprst писал(а) 28. Ноября 2013 :: 07:17:
Если субконто неопределенного типа/вида, то нужно от него взять часть с id + желательно с видом справочника и потом уже эту часть соединять со справочником.

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



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

on 'B1' + $ВидСправочника36.Склад+СпрСкл.ID =  $ПКО.Субконто1
или так
on СпрСкл.ID  = SUBSTRING($ПКО.Субконто1,7,9)



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


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #612 - 28. Ноября 2013 :: 11:48
Печать  
Спасибо! Всё получилось!
вариант 2
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #613 - 30. Ноября 2013 :: 02:01
Печать  
Класс ПрямойЗапрос Версия 1.8.6 22.05.2013

При выполнении УложитьТаблицуЗначений() объект MetaDataWork возвращает ошибку "Неправильный формат времени.", когда колонка таблицы значений типа Дата содержит пустые значения.

Строку 13250:

                 ИначеЕсли ВРЕГ(Тип) = "ДАТА" Тогда
                       Значение = "'" + МетаДата.ПолучитьСтрИзДаты(ЗначениеКолонки) + "'";

Просьба в будущем релизе поправить. В своей копии пока написал так (по аналогии с :ПустаяДата):

                 ИначеЕсли ВРЕГ(Тип) = "ДАТА" Тогда
                       Если ЗначениеКолонки = '' Тогда
                             Значение = ?(ЭтоSQL = 1,"'"+СокрЛП(МетаДата.ПолучитьСтрИзДаты(Дата(1753,1,1)))+"'","'        '");
                       Иначе
                             Значение = "'" + МетаДата.ПолучитьСтрИзДаты(ЗначениеКолонки) + "'";
                       КонецЕсли;

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


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #614 - 02. Декабря 2013 :: 23:35
Печать  
Класс ПрямойЗапрос Версия 1.8.6 22.05.2013 Исправление соединений в ВТ $БиОстатки

Добавление в запрос соединений расположено преждевременно. Получается
...FROM
LEFT JOIN...
_1SBKTTL bkttl_vt

Функция БИОстатки_SQL(ВекторВыражения)

Блок в стр. 7186

     Если ПустоеЗначение(Соединения) = 0 Тогда
           ТекстЗапроса = ТекстЗапроса + СтрСоединенияОстатки + "
           |            ";
     КонецЕсли;

Опустить на блок ниже, перед WHERE



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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #615 - 03. Декабря 2013 :: 12:42
Печать  
Подскажите как работать с временными таблицами? Может пример у кого есть. Например, хочу загнать табличную часть документа во временную таблицу и использовать в виртуальных таблицах.
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #616 - 03. Декабря 2013 :: 13:06
Печать  
как создать разобрался.
остался вопрос про удаление. после запроса "УДАЛИТЬ ИЗ МояТаблица" моя таблица остается, но пустая. Это правильно? А то может я что не так делаю...
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #617 - 03. Декабря 2013 :: 17:47
Печать  
однако правильно СброситьТаблицу...
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #618 - 04. Декабря 2013 :: 13:31
Печать  
Asakra писал(а) 03. Декабря 2013 :: 12:42:
Подскажите как работать с временными таблицами? Может пример у кого есть. Например, хочу загнать табличную часть документа во временную таблицу и использовать в виртуальных таблицах.


Если использовать обсуждаемый класс ПрямойЗапрос, то можно использовать его метод УложитьТаблицуЗначений()

     Если КонтекстДокумента.КоличествоСтрок() <> 0 Тогда
           тч = СоздатьОбъект("ТаблицаЗначений");
           КонтекстДокумента.ВыгрузитьТабличнуюЧасть(тч);

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

           ТекстЗапроса = "
           |ВЫБРАТЬ *
           |
           |ИЗ #тч
           |";

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


УложитьТаблицуЗначений
Синтаксис: УложитьТаблицуЗначений(ТаблицаЗначений,ИмяТаблицы)
Параметры:
•      ТаблицаЗначений – тип: ТаблицаЗначений. Таблица, загружаемая в базу данных.
•      ИмяТаблицы – идентификатор таблицы создаваемой на сервере. Имя таблицы должно содержать префикс «#» перед идентификатором. Например: #Контрагенты.
Возвращаемое значение: отсутствует
Описание: Загружает таблицу значений в базу данных, как таблицу базы данных.

Если таблица с указанным именем уже существует, она удаляется. Состав полей созданной таблицы соответствует составу колонок ТЗ. Имена полей созданной таблицы соответствуют идентификаторам колонок ТЗ. В качестве указания типов и видов для загрузки используется типизация колонок ТЗ. Так же для загрузки значений с учетом модификаторов используется заголовок. Если в качестве заголовка написать «mod=1» тогда значения будут загружены с учетом модификатора = 1. Подробнее см. Преобразование значений 1С в значения БД.
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #619 - 09. Декабря 2013 :: 03:42
Печать  
Класс ПрямойЗапрос Версия 1.8.6 22.05.2013 Исправление условия по колонке ВидДокумента в ВТ БИОбороты

При добавлении в ВТ БиОбороты условия по виду документа

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

парсер съедает слово "ВидДокумента", и в подготовленном тексте запроса условие выглядит как:

     AND (( (0=0)
     AND ( IN (7761) )
     ))

Исправление: Функция ПодготовитьУсловиеПоБухИтогам
В блок ИначеЕсли в стр. 820
           ИначеЕсли ВрегКлючевоеСлово = "ВИДДОКУМЕНТА" Тогда
                 УсловиеЖурналДокументов = УсловиеЖурналДокументов + "journ.IDDOCDEF";

Добавить строку:
                 УсловиеПроводки = УсловиеПроводки + "docjourn.IDDOCDEF"; //[+]sv 091213

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


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #620 - 24. Декабря 2013 :: 09:58
Печать  
Здравствуйте.Пробую осилить класс ПрямойЗапрос.Хочеться сделать запрос к проводкам (для акта сверки), но пока успехов мало.Вот текст запроса:

Код
Выбрать все
	оПЗ = СоздатьОбъект("ПрямойЗапрос");
	оПЗ.РежимОтладки=3;
	оПЗ.Текст="ВЫБРАТЬ
	|	$Пров.ТекущийДокумент КАК [ТекущийДокумент $Документ]
	|,	$Пров.СчетДт КАК [СчетДт $Счет.Основной]
	|,	$Пров.Сумма КАК СуммаПроводки
	|,	$Пров.Количество КАК Количество
	|,  $Пров.Дата КАК [ДатаДвижения $Дата]
	|ИЗ
	|	Проводки КАК Пров $nolock;
	|Где
    |      ($Пров.Дата Между :НачПериода и :КонПериода~)
	|И     ГДЕ $Пров.СчетДт В (ВЫБРАТЬ val ИЗ #сп)
	|	";
	оПЗ.УстановитьТекстовыйПараметр("НачПериода",НачДата);
	оПЗ.УстановитьТекстовыйПараметр("КонПериода",КонДата);
	СпСчетов = СоздатьОбъект("СписокЗначений");
	СпСчетов.ДобавитьЗначение(СчетПоКоду("3611"));
	оПЗ.УложитьСписокЗначений(СпСчетов,"#сп");
	итзОст = оПЗ.Выполнить();
	итзОст.Показать(); 



После исполнения 1С падает Смущённый.Думаю проблема с условиями.Прошу помощи знающих людей.Спасибо.
  
Наверх
 
IP записан
 
BlueWind
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 13
Местоположение: Тирасполь
Зарегистрирован: 28. Ноября 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #621 - 24. Декабря 2013 :: 12:44
Печать  
Alexx_S писал(а) 24. Декабря 2013 :: 09:58:
Здравствуйте.Пробую осилить класс ПрямойЗапрос.Хочеться сделать запрос к проводкам (для акта сверки), но пока успехов мало.Вот текст запроса:

Код
Выбрать все
	оПЗ = СоздатьОбъект("ПрямойЗапрос");
	оПЗ.РежимОтладки=3;
	оПЗ.Текст="ВЫБРАТЬ
	|	$Пров.ТекущийДокумент КАК [ТекущийДокумент $Документ]
	|,	$Пров.СчетДт КАК [СчетДт $Счет.Основной]
	|,	$Пров.Сумма КАК СуммаПроводки
	|,	$Пров.Количество КАК Количество
	|,  $Пров.Дата КАК [ДатаДвижения $Дата]
	|ИЗ
	|	Проводки КАК Пров $nolock;
	|Где
    |      ($Пров.Дата Между :НачПериода и :КонПериода~)
	|И     ГДЕ $Пров.СчетДт В (ВЫБРАТЬ val ИЗ #сп)
	|	";
	оПЗ.УстановитьТекстовыйПараметр("НачПериода",НачДата);
	оПЗ.УстановитьТекстовыйПараметр("КонПериода",КонДата);
	СпСчетов = СоздатьОбъект("СписокЗначений");
	СпСчетов.ДобавитьЗначение(СчетПоКоду("3611"));
	оПЗ.УложитьСписокЗначений(СпСчетов,"#сп");
	итзОст = оПЗ.Выполнить();
	итзОст.Показать(); 



После исполнения 1С падает Смущённый.Думаю проблема с условиями.Прошу помощи знающих людей.Спасибо.



В условии ошибка. Должно быть так:
|Где
|      ($Пров.Дата Между :НачПериода и :КонПериода~)
|И    ($Пров.СчетДт В (ВЫБРАТЬ val ИЗ #сп) )

Убрать точку с запятой в конце строки
|      Проводки КАК Пров $nolock;


Но 1с при ошибке в тексте запроса падать не должна. Должно появиться сообщение об ошибке в окне сообщений. Если 1с падает, то, возможно, не стыкуются версии внешних компонент. Другие запросы выполняются? Попробуй протестить работоспособность 1с++ на элементарном запросе - выбрать элементы какого-нибудь справочника, например..
« Последняя редакция: 24. Декабря 2013 :: 15:14 - BlueWind »  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #622 - 24. Декабря 2013 :: 12:56
Печать  
Спасибо за ответ. Убрал ; после nolock и взлетело.Падение было навернека из за нехватки памяти.В диспетчере смотрел что потребление памяти очень бысто растет до 1,5 Гб и т.д. , а потом падение платформы.
  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #623 - 24. Декабря 2013 :: 13:24
Печать  
Еще вопросик. Как правильно сделать типизацию субконто.Мне нужно задать что первое субконто - контрагенты.

Запрос :
Код
Выбрать все
	оПЗ = СоздатьОбъект("ПрямойЗапрос");
	оПЗ.РежимОтладки=1;
	оПЗ.Текст="ВЫБРАТЬ
	|	$Пров.ТекущийДокумент КАК [ТекущийДокумент $Документ]
	|,	$Пров.СчетДт КАК [СчетДт $Счет.Основной]
	|,	$Пров.СчетКт КАК [СчетКт $Счет.Основной]
	|,	$Пров.Сумма КАК СуммаПроводки
	|,	$Пров.Количество КАК Количество
	|,  $Пров.Дата КАК [ДатаДвижения $Дата]
	|,	$Пров.СубконтоДт1 КАК [СубконтоДт1  $Справочник.Контрагенты]
	|ИЗ
	|	Проводки КАК Пров $nolock
	|ГДЕ
	|		($Пров.СчетДт=:Сч_ДБ)
        |И       ($Пров.Дата Между :НачПериода и :КонПериода~)
	|И	     $Пров.СчетДт В (ВЫБРАТЬ val ИЗ #сп)
	|	";
	оПЗ.УстановитьТекстовыйПараметр("НачПериода",НачДата);	оПЗ.УстановитьТекстовыйПараметр("КонПериода",КонДата);	  оПЗ.УстановитьТекстовыйПараметр("Сч_ДБ",СчетПоКоду("3611"));
	СпСчетов = СоздатьОбъект("СписокЗначений");
	СпСчетов.ДобавитьЗначение(СчетПоКоду("3611"));
	оПЗ.УложитьСписокЗначений(СпСчетов,"#сп");
	итзОст = оПЗ.Выполнить();
	итзОст.Показать(); 



Запрос отрабатывает но колонка субконтоДт1 пустая, а нужно увидеть там контрагентов.

Отладка пишет :
SELECT
     Пров.DOCID AS [ТекущийДокумент $Документ]
,      Пров.ACCDTID AS [СчетДт $Счет.Основной]
,      Пров.ACCKTID AS [СчетКт $Счет.Основной]
,      Пров.SUM AS СуммаПроводки
,      Пров.AMOUNT AS Количество
,  Пров.DATE AS [ДатаДвижения $Дата]
,      Пров.DTSC0 AS [СубконтоДт1 $Справочник.Контрагенты]
FROM
     [_1S.ENTRY] AS Пров
WHERE
           (Пров.ACCDTID='    4A   ')
AND       (Пров.DATE BETWEEN '20131224' AND '20131224Я')
AND           Пров.ACCDTID IN (SELECT val FROM vt_сп)
Подбор индекса для таблицы 1SENTRY:
     Ограничения: ACCDTID=; DATE>=; DATE<=;
     Найдено в кэше
     Выбран индекс DATETIME: DTOS(DATE)+TIME+DOCID+STR(NUMBER,5)+STR(CORNO,5)
     Стоимость: 100
Время подготовки запроса: 11 мс, время выполнения запроса: 13 мс.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #624 - 24. Декабря 2013 :: 13:53
Печать  
типизируй как $Справочник
или отрезай вид и типизируй как Справочник.Клиентосы
  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #625 - 24. Декабря 2013 :: 15:16
Печать  
Eprst писал(а) 24. Декабря 2013 :: 13:53:
типизируй как $Справочник
или отрезай вид и типизируй как Справочник.Клиентосы


Сработало так :
Код
Выбрать все
 СРЕД($Пров.СубконтоДт1,3,9) КАК [СубкДт1 $Справочник.Контрагенты] 


А где можно почитать про представление идентификаторов объектов 1С в классе ПрямойЗапрос. Тоесть хочу четко понимать что использовать :СРЕД($Пров.СубконтоДт1,3,9) или СРЕД($Пров.СубконтоДт1,3,6)  и т.д.
Извините за такие детские вопросы, но есть желание освоить данный КОП.
P.S. Документацию уже курю  Улыбка
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #626 - 24. Декабря 2013 :: 16:52
Печать  
А блин, субконто то поди.. можно было типизировать еще как
$Неопределенный

ЗЫ: на счет почитать, тут
http://www.script-coding.com/v77tables.html
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #627 - 26. Февраля 2014 :: 22:02
Печать  
Версия = "1.8.6 22.05.2013";

чтобы избежать ошибок вроде этой (для периодичностей ВТ "Документ/Период") :

ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0)
: [color=#0000ff]Meta name parser error: недопустимое значение параметра "$НачалоПериода.Период" (2)
ЗапросODBC.ВыполнитьИнструкцию(ТекстЗапроса,ПолучательЗапроса,1);


предлагаю в класс "ПрямойЗапрос" внести следющие правки:


(1) метод ПарсингФункцийНачалоКонецПериода()

условие

Код
Выбрать все
...
	Иначе
		ТекстПодстановки = "$НачалоПериода."+Периодичность+"("+ЗначениеДата+")";
	КонецЕсли;
... 



в классе нужно заменить на

Код
Выбрать все
...
	//Иначе //http://1cpp.ru/docum/icpp/html/ODBC.html#id39
	ИначеЕсли (Врег(Периодичность)<>"ПЕРИОД") и (Врег(Периодичность) <> "ДОКУМЕНТ") Тогда
		ТекстПодстановки = "$НачалоПериода."+Периодичность+"("+ЗначениеДата+")";
	КонецЕсли;
... 



(2)
метод ПарсингФункцийНачалоКонецПериода()
метод Обороты_РегистрОстатки_SQL()
метод Обороты_РегистрОбороты_SQL()
метод БИОборотыДтКт_SQL()
метод ПолучитьВТОбороты_SQL()
+(наверное,не проверял) для парных DBF-версий.

в начале каждого метода конструкция Врег(Подготовить...) РЕГИСТР строки не меняет
(и как следствие - дальнейшая проверка "Если ... Тогда" не работает)

               В отладчике: "Период"<>"ПЕРИОД" и "Документ"<>"ДОКУМЕНТ"

Код
Выбрать все
....
Периодичность = Врег(ПодготовитьПараметр(ВекторВыражения.Подвыражения.Получить(2.../...3)));
.... 



Регистр ОСТАЕТСЯ БЕЗ ИЗМЕНЕНИЙ (ВРЕГ() не отрабатывает !!!)

Предлагаю: объявить переменную "Периодичность" ЯВНО как локальную переменную
в каждом из этих методов (тогда работает - проверено):

Код
Выбрать все
...
перем Периодичность;
....
Периодичность = Врег(ПодготовитьПараметр(ВекторВыражения.Подвыражения.Получить(2.../...3)));
... 



(3) метод БИОборотыДтКт_SQL

та часть которая отвечает за период в проводках...
условие для "ПЕРИОД" есть. Похоже отсутствует "парное" условие для "ДОКУМЕНТ" ....

Код
Выбрать все
   ...
   Если Периодичность = "ПЕРИОД" Тогда
      СтрПериодПроводки = "";
      СтрПериодПроводкиВложенный = "";
   //вместо просто "Иначе" : по аналогии с DBF-версией: ДОКУМЕНТ - не используется
   //http://1cpp.ru/docum/icpp/html/ODBC.html#id39
   ИначеЕсли Врег(Периодичность) <> "ДОКУМЕНТ" Тогда
      СтрПериодПроводки = ",$НачалоПериода."+Периодичность+"(LEFT(entry_vt.DATE_TIME_DOCID,8)) Период";
      СтрПериодПроводкиВложенный = ",$НачалоПериода."+Периодичность+"(LEFT(entry_vt.DATE_TIME_DOCID,8))";
   КонецЕсли;
.... 





(4) ну и напоследок

Всем известная ошибка "Парсер ODBC не любит табуляторы"
Давайте раз и навсегда решим эту проблемку
(а то запарился с форматированием запросов, судя по форуму - не я один.).

Предлагаю перед самым вызовом "нативного 1С++ ODBC"
заменять табуляторы на одиночный пробел:

в методе ПодготовитьПараметризованныйЗапрос()

Код
Выбрать все
   ЗапросПодготовленУспешно = ЗапросODBC.Подготовить(СтрЗаменить(ПараметризированныйТекст,СимволТабуляции," ")); 



в методе Выполнить()

Код
Выбрать все
   ЗапросODBC.ВыполнитьИнструкцию(СтрЗаменить(ТекстЗапроса,СимволТабуляции," "),ПолучательЗапроса,1); 



в методе ВыполнитьЗапрос()

Код
Выбрать все
   ляции," ")); 





как-то так.

Думаю все эти пожелания достаточно:
- скромны
- разумны
- выполнимы

Спасибо.
Ждем новую версию   Круглые глаза
« Последняя редакция: 27. Февраля 2014 :: 00:53 - kos »  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #628 - 03. Марта 2014 :: 09:26
Печать  
kos писал(а) 26. Февраля 2014 :: 22:02:
...skip...

(2)
метод ПарсингФункцийНачалоКонецПериода()
метод Обороты_РегистрОстатки_SQL()
метод Обороты_РегистрОбороты_SQL()
метод БИОборотыДтКт_SQL()
метод ПолучитьВТОбороты_SQL()
+(наверное,не проверял) для парных DBF-версий.

в начале каждого метода конструкция Врег(Подготовить...) РЕГИСТР строки не меняет
(и как следствие - дальнейшая проверка "Если ... Тогда" не работает)

               В отладчике: "Период"<>"ПЕРИОД" и "Документ"<>"ДОКУМЕНТ"

.... skip ....


По поводу п.2 предыдущего поста:
Выяснил откуда такое странное поведение

Глючит сам 1С++ (версия 3.2.4.1) - неверная область видимости публичных атрибутов !!  Ужас

Суть в следующем:
у меня есть наследник от класса "ПрямойЗапрос"
в котором есть 2 публичных атрибута
- Периодичность
- МетодДополнения
(имена пересекаются с локальными переменными в указанных методах базов.класса "ПрямойЗапрос")

В базовом классе "ПрямойЗапрос" методы я(),вирт(),Сам(Контекст) и т.д.
не используются
(и если не вносить правки из п.2, что постом выше)
и поэтому 1С++ "думает"
что переменные в указанных выше методах - это публичные атрибуты наследника..... а не локальные переменные метода!!!  Ужас

Я до сих пор понимал так (согласно ООП от 1С++)
= вирт().Х - это обращение к публичным атрибутам/методам "крайнего" наследника из базы (того объекта, который реально создан)
= я().ХХХ - это обращение к собственным публичным атрибутам/методам текущего класса
= ХХХ - это обращение приватным методам/переменным (общим в модуле/локальным в методе)

Если взять "чистый" класс "ПрямойЗапрос" - глюков не наблюдается
(естественно - наследников-то нет !).

Это проблема 1С++.

Почему "Периодичность" и "МетодДополнения" так себя ведут - не понятно.
Может кто-нить сказать что-нить?

Код
Выбрать все
кто хочет может проверить:

1) сделайте класс-наследник от "ПрямойЗапрос"
    с публичными атрибутами "Периодичность" и "МетодДополнения"

2) присвойте им значения (написание значений должно быть НЕ В ВЕРХНЕМ регистре!)
    оКОП.Периодичность = "Период";
    оКОП.МетодДополнения = "Движения";

3) из обработки сделайте запрос:

    оКОП.Текст = "
    | select * from $РегистрОстаткиОбороты.ОстаткиПартий(:НачДата,:КонДата~,Период,Движения
    | ,,,,) как Рег
    |";

и получите ошибку что постом выше
(парсер базового класса не сможет привести к верхнему регистру переменные в указанных методах).
 


Думаю очень родственный (известный) глюк
для метода "Информатор.ПолучитьТаблицуСвойств()"
который возвращает как публичные атрибуты, так и приватные
для любого КОП-а
но при этом парный метод "Информатор.ПолучитьТаблицуМетодов()"
работает без такой ошибки (только публичные методы, без приватных)

В общем-то п.2 из предыдущего поста наверное никому не мешает, кроме меня.


Но "очепятки" описанные в п.1,3 - явно ошибки класса.
И очень сильная "хотелка" - п.4 из предыдущего поста.

Спасибо.

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


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #629 - 24. Марта 2014 :: 13:23
Печать  
Помогите с оптимизацией: Есть прямой запрос с ВТ СрезПоследних. Что можно сделать для ускорение запроса? Без СрезПоследних - летает, а хотелось бы собрать сразу все цены по товарам.Конфа ДБФ самописная.
Вот текст :
Код
Выбрать все
		оПЗ = СоздатьОбъект("ПрямойЗапрос");
		оПЗ.РежимОтладки = 1;
	оПЗ.Текст="
	|ВЫБРАТЬ
	|  ОстаткиТМЦ.Счет КАК [Счет $Счет]
	|, ОстаткиТМЦ.Склад КАК [Склад $Справочник.МестаХранения]
	|, ОстаткиТМЦ.ТМЦ КАК [ТМЦ $Справочник.ТМЦ]
	|, ОстаткиТМЦ.ППартия КАК [ПартияОст $Справочник.ППартии]
	|, СУММА(ОстаткиТМЦ.КвоОст) КАК [КвоОст :Число.15.3]
	|, СУММА(ОстаткиТМЦ.КвоРез) КАК [КвоРез :Число.15.3]
	|, СУММА(ОстаткиТМЦ.КвоРоз) КАК [КвоРоз :Число.15.3]
	|, СрезТМЦ.Цена11 КАК [ЦенаЗаТонну]
	|, СрезТМЦ.Цена12 КАК [ЦенаЗаШтангу]
	|, СрезТМЦ.Цена4  КАК [ЦенаОпт]
	|FROM (
	|
	|ВЫБРАТЬ
	|  ОстаткиОстатки.Счет
	|, ОстаткиОстатки.Склад  
	|, ОстаткиОстатки.ТМЦ  
	|, ОстаткиОстатки.ППартия
	|, ОстаткиОстатки.КвоОстаток КАК КвоОст
	|, 0 КАК КвоРез
	|, 0 КАК КвоРоз
	|FROM $РегистрОстатки.Остатки(:ДатаОстатков,((Счет = :ВыбСчет~) И (Склад В (ВЫБРАТЬ val ИЗ #СписокСкладов))),
	|	(Счет, Склад, ТМЦ,ППартия),
	|	(Кво)) AS ОстаткиОстатки
	|
	|UNION ALL
	|
	|ВЫБРАТЬ
	|  РезервОстатки.Счет
	|, РезервОстатки.Склад
	|, РезервОстатки.ТМЦ
	|, РезервОстатки.Партия КАК ППартия
	|, 0 КАК КвоОст
	|, РезервОстатки.КвоОстаток КАК КвоРез
	|, 0 КАК КвоРоз
	|FROM $РегистрОстатки.Резерв(:ДатаОстатков,((Счет = :ВыбСчет~) И (Склад В (ВЫБРАТЬ val ИЗ #СписокСкладов))),
	|	(Счет, Склад, ТМЦ,Партия),
	|	(Кво)) AS РезервОстатки
	|
	|
	|UNION ALL
	|
	|ВЫБРАТЬ
	|  РозницаОстатки.Счет
	|, РозницаОстатки.Склад
	|, РозницаОстатки.ТМЦ
	|, РозницаОстатки.ППартия
	|, 0 КАК КвоОст
	|, 0 КАК КвоРез
	|, РозницаОстатки.КвоОстаток КАК КвоРоз
	|FROM $РегистрОстатки.ОстаткиРозница(:ДатаОстатков,((Счет = :ВыбСчет~) И (Склад В (ВЫБРАТЬ val ИЗ #СписокСкладов))),
	|	(Счет, Склад, ТМЦ,ППартия),
	|	(Кво)) AS РозницаОстатки
	|
	| ) AS ОстаткиТМЦ
	|
	|LEFT JOIN $СрезПоследних.ТМЦ(:ДатаОстатков,(Цена11,Цена12,Цена4),,,) КАК СрезТМЦ  
	|ПО (ОстаткиТМЦ.ТМЦ = СрезТМЦ.ТекущийЭлемент)
	|
	|
	|СГРУППИРОВАТЬ ОстаткиТМЦ.Склад,ОстаткиТМЦ.ТМЦ,ОстаткиТМЦ.ППартия
	|";
	ОпределитьСклады(НаДату);
	оПЗ.УстановитьТекстовыйПараметр("ДатаОстатков",ТекущаяДата());
	оПЗ.УстановитьТекстовыйПараметр("ВыбСчет",СчетПоКоду("281"));
	оПЗ.УложитьСписокЗначений(глСписокТоргСкладов,"#СписокСкладов");
итзОст = оПЗ.Выполнить(); 



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


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #630 - 24. Марта 2014 :: 13:25
Печать  
В отладке смущает строка :

Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE<=;
     Упорядочить: OBJID, ID,
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9980

Незнаю куда копать Печаль
  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #631 - 24. Марта 2014 :: 14:00
Печать  
Вопрос снят. Решил через $ПоследнееЗначение
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #632 - 30. Марта 2014 :: 12:37
Печать  
А это фишка такая да?
перемучался пока не понял в ВТ ОстаткиОбороты параметр :Начало работает, а вот :Конец падает на ошибки не найдено as что то типа такого, а выясняется, что парсер этот параметр меняет на END Улыбка
Заменил на НачалоПериода и КонецПериода стало работать, но не айс Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #633 - 30. Апреля 2014 :: 09:28
Печать  
1C ДБФ падает если задать период больше 3 месяцев.
Если устанавливать период квартал, то все нормально.

лТЗ = "
     |ВЫБРАТЬ
     |      ОстаткиОборотыОсновной.Субконто1            КАК [Агент                  $Субконто      ]
     |,      ОстаткиОборотыОсновной.Субконто1_вид      КАК [Агент_вид            $ВидСубконто]
     |,      ОстаткиОборотыОсновной.Субконто2            КАК [ТаксаХХ            $Субконто      ]
     |,      ОстаткиОборотыОсновной.Субконто2_вид      КАК [ТаксаХХ_вид      $ВидСубконто]
     |,      ОстаткиОборотыОсновной.НачалоПериода      КАК [НачалоПериода      $Дата            ]
     
     |,      ОстаткиОборотыОсновной.СуммаНачальныйОстаток      КАК [СН_Сумма            $Число      ]
     |,      ОстаткиОборотыОсновной.ВалютаНачальныйОстаток      КАК [СН_СумКорп            $Число      ]
     |,      ОстаткиОборотыОсновной.СуммаОборот                        КАК [Оборот_Сумма      $Число      ]
     |,      ОстаткиОборотыОсновной.ВалютаОборот                        КАК [Оборот_СумКорп      $Число      ]
     |,      ОстаткиОборотыОсновной.СуммаКонечныйОстаток            КАК [СК_Сумма            $Число      ]
     |,      ОстаткиОборотыОсновной.ВалютаКонечныйОстаток      КАК [СК_СумКорп            $Число      ]
     |
     |
     |ИЗ
     |      $БИОстаткиОбороты.Основной(            :ДатаНач~
                                                     |,      :ДатаКон~
                                                     |,      МЕСЯЦ ДОПОЛНЕНИЕ
                                                     |,      
                                                     |,      #СчетаТКС
                                                     |,      (Сотрудники, ТаксыХХ)
                                                     |,      (Сумма, Валюта)
                                                     |,
                                                     |) КАК ОстаткиОборотыОсновной";
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #634 - 19. Мая 2014 :: 08:24
Печать  
Обнаружилась видимо ошибка класса.
Вот тема http://www.1cpp.ru/forum/YaBB.pl?num=1400237399/6#6

Попробовал снять галку отбор, результат не изменился.
Причем косяк возникает только на dbf версии.
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #635 - 26. Мая 2014 :: 08:20
Печать  
Хелп!
Надо
Код
Выбрать все
$ПоследнееЗначение.Цены.Цена($СпрЦеныВыб.ТекущийЭлемент,$Жур.ПозицияДокумента) 


на дбф взлетает, на СКЛь падает (Conversion failed when converting datetime from character string.)
Залез в доку и сам класс. Нашел неутешительное:
"...Если подставляется текстовый параметр то значением параметра может выступать документ или дата. Значением реквизита может выступать только дата."
В классе вижу, что в случае внутреннего реквизита запроса значение не парсится и предполагается только "Дата". Как быстро сделать, чтобы парсилась ПозицияДокумента?

З.Ы.
На самом деле довольно критичная хотелка: строим отчет по продажам в нужном типе цен. При этом цена меняется создана переоценкой, допустим в 14:45, документ - в 15:10. В итоге по документу = 0 по этому типу цены  Печаль
« Последняя редакция: 26. Мая 2014 :: 09:47 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

1. Считал данные, документы все во временную таблицу уложил
2. Считал все данные по ценам с позиция документа, цена
3. Сделал соединение таблицы документов и таблицы цен с условием ПозицияДокумента < ПозицияДокументаЦены
4. Результат сгруппировал по "ПозицияДокумента" и вычислил максимум(позицияДокументаЦены)
5. Итоговый сбор
- таблица данных
- таблица максимальных позиций (по позиции документа)
- таблица цен (по позиции документа цены)
Примерный набросок запросов

Код
Выбрать все
insert into #t
select t.iddoc
from ЖурналДокументов;

insert into #t1
select t.iddoc, t.price
from ИсторияЗначений;

insert into #t2
select t.iddoc, max(t1.iddoc) as iddoc_p
from #t as t
left join #t1 as t1
on t.iddoc < t1.iddoc
group by t.iddoc;

select t.iddoc, t1.price
from #t as t
left join #t2
on t.iddoc = t2.iddoc
left join #t1 as t1
on t2.iddoc_p = t1.iddoc; 

  

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


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

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

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #638 - 27. Мая 2014 :: 00:31
Печать  
vandalsvq писал(а) 26. Мая 2014 :: 16:39:
2 Dolly_EV.
Не уверен что надо менять класс, во-первых запросы будут не оптимальными если снимать по позиции

Ну хотя бы возможность модификатора, чтобы считалось на конец даты?

vandalsvq писал(а) 26. Мая 2014 :: 16:39:
, во-вторых и без него решение существует.

Это очень длинный обходной путь в моем случае, т.к. отчет - универсальный, и показатель "По типу цен" там один из многих, и ради этого огород городить с временными тз не хочется. Тем более, что отчет уже полностью рабочий и остался только этот момент.
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #639 - 27. Мая 2014 :: 02:37
Печать  
2 Dolly_EV
Есть проблема что в ближайшее время (неделя, две) я вообще не планировал садиться за 7-ку, даже просто ради развлечения. У меня 3-4 незаконченных проекта. Так что боюсь я пока плохой помощник.

Так что прости, но пока решай вопрос самостоятельно.
  

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


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #640 - 02. Июня 2014 :: 21:15
Печать  
Dolly_EV писал(а) 26. Мая 2014 :: 08:20:
Хелп!
Надо
Код
Выбрать все
$ПоследнееЗначение.Цены.Цена($СпрЦеныВыб.ТекущийЭлемент,$Жур.ПозицияДокумента) 


на дбф взлетает, на СКЛь падает....

...При этом цена меняется создана переоценкой, допустим в 14:45, документ - в 15:10. ... (


а почему бы не

Код
Выбрать все
та,8)) 



Из документации:
•      Дата – Тип: Строка. Текстовый параметр или реквизит запроса

Должно взлететь на конец дня (не пробовал, но должно).
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #641 - 06. Июня 2014 :: 23:20
Печать  
Намучался я с модификаторами параметров. Набил шишек.
Хочу поделится.

Коротко:

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

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

Согласно описаний в документациях
- поведение модификаторов ODBCRecordSet и ПрямойЗапрос
у обоих объектов должны совпадать, но не совпадают.

Более подробно:
- с различиями "в цвете" так сказать
- плюс с внешним отчетом (UnitTest расхождений)

вот в этой теме
http://www.1cpp.ru/forum/YaBB.pl?num=1402096437

Создал отдельную тему,
- чтобы бросалось в глаза как "напоминалка для всех"
- имеет отношение к объекту ODBC, а не только к ПрямойЗапрос.

Прошу прощения за дубль.

PS. (2014-06-09) нашел решение. Описано по ссылке, что выше.

Уважаемый vandalsvq

Можно ли ждать такое исправление в классе (как в предложенном по ссылке решении)?
Ведь делов-то: добавить одну строчку кода.
Зато - сразу 2 "плюса": корректность + скорость ?
« Последняя редакция: 09. Июня 2014 :: 10:14 - kos »  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #642 - 08. Июня 2014 :: 19:30
Печать  
Еще одну ошибку нашел. И ее причину.

Хочется иметь такую возможность:

Код
Выбрать все
Запрос.Текст = "Некоторый запрос";
Запрос.ОписаниеПараметра(аа)
Запрос.УстановитьТекстовыйПараметр(бб)
Запрос.ОписаниеПараметра(вв)
Запрос.УложитьСписокОбъектов(Список,ВремТб)
Запрос.УстановитьТекстовыйПараметр(гг)
Запрос.ПодготовитьПараметризованныйЗапрос() 



НО! Метод ПодготовитьПараметризованныйЗапрос()
вываливает ошибку
Meta name parser error: параметр <:ИмяПараметра> не определен
на параметры, установленные ранее при помощи
метода УстановитьТекстовыйПараметр()

Причина - между строками (моего, который "хочу") кода:

Код
Выбрать все
Запрос.Текст = "Некоторый запрос";
... далее: при каждом последующем вызове мотодов класса
... ВНУТРИ класса
... происходят промежуточные маленькие запросы
.... (СоздатьIdToStr, РежимRPC, ...)
... от имени того же самого объекта "ЗапросODBC"
... что приводит к сбрасыванию параметров,
... установленных ранее методом "УстановитьТекстовыйПараметр"
... Как результат - вызов "ЗапросODBC.Подготовить()"
... не работает и вываливает ошибку
... (ошибка Meta name parser error: параметр <:ИмяПараметра> не определен)
Запрос.ПодготовитьПараметризованныйЗапрос() 



Решение: ПРЕДЛАГАЮ ТАКОЕ ИСПРАВЛЕНИЕ (ПРОШУ АВТОРА ВНЕСТИ В КЛАСС)
в методе "ПодготовитьПараметризованныйЗапрос"

вместо одной строки
Код
Выбрать все
ЗапросПодготовленУспешно = ЗапросODBC.Подготовить(ПараметризированныйТекст); 



написать такой код:

Код
Выбрать все
Для к=1 По ПараметрыЗапроса.РазмерСписка() Цикл
     //восстановим ранее сброшенные параметры
     Переменная="";Значение = ПараметрыЗапроса.ПолучитьЗначение(к,Переменная);
     ЗапросODBC.УстановитьТекстовыйПараметр(Переменная,Значение);
КонецЦикла;
ЗапросПодготовленУспешно = ЗапросODBC.Подготовить(ПараметризированныйТекст);
Если ЗапросПодготовленУспешно<>1  Тогда
     ОбработкаОшибки(ЗапросODBC.ПолучитьОписаниеОшибки(),"!!!")
КонецЕсли;
 



ИЛИ (еще лучше) сделать отдельную приватную процедуру
которая будет выполнять установку текстовых параметров
НЕПОСРЕДСТВЕННО перед отправкой запроса в объект "ЗапросODBC"
по списку "ПараметрыЗапроса"
(после автоподстановок, парсинга и т.д.)
для всех случаев:
- Выполнить()
- ВыполнитьЗапрос()
- ПодготовитьПараметризованныйЗапрос/ВыполнитьПараметризованныйЗапрос()
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #643 - 17. Июня 2014 :: 08:23
Печать  
вот такой запрос
Код
Выбрать все
		ТекстЗапроса="
		|ВЫБРАТЬ
		|	РегПартОО.НачалоПериода КАК [День $Дата]
		|	,РегПартОО.Склад КАК [Склад $Справочник.МестаХранения]
		|	,РегПартОО.Товар КАК [Товар $Справочник.Номенклатура]
		|	,РегПартОО.КоличествоКонечныйОстаток КАК Кво
		|ИЗ
		|	$РегистрОстаткиОбороты.ПартииТоваров(:лНачДата, :лКонДата~, День ДОПОЛНЕНИЕ,,
		|												(1=1 И 2=2 И Фирма=:лФирма),
		|												(Товар,Склад),
		|												(Количество),) КАК РегПартОО
		|ГДЕ
		|	РегПартОО.КоличествоКонечныйОстаток<>0
		|УПОРЯДОЧИТЬ
		|	РегПартОО.НачалоПериода, Склад, Товар";
 


При отсутствии модификатора у КонДата выдает не верный остаток для последнего дня в периоде (на начало), при наличии модификатора - для последнего дня выдает правильно, НО добавляет строки с днем, следующим за последним Печаль
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #644 - 17. Июня 2014 :: 08:35
Печать  
kos писал(а) 02. Июня 2014 :: 21:15:
а почему бы не

Код
Выбрать все
та,8)) 



Из документации:
•      Дата – Тип: Строка. Текстовый параметр или реквизит запроса

Должно взлететь на конец дня (не пробовал, но должно).


Не, не взлетает.
Там (в классе) в случае с внутренним параметром просто идет сравнение на < с датой, которая никак не модифицируется
  
Наверх
ICQ  
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #645 - 19. Июня 2014 :: 13:32
Печать  
Код
Выбрать все
кумента,8) as date))

или

.... as datetime))

 



явно приводим к типу "дата"
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #646 - 22. Июля 2014 :: 18:48
Печать  
интересный момент, решил набросать через этот класс простой запрос, что бы не юзать типовой, скорость желательна, и тут нарвался на проблему. Остатки выдает пустые, не смотря на то, что товар в сз есть и он реально ввиде ссылок. Почему про нее говорю, если убрать условие на товар, то товар ловит весь и там есть этот товар из списка с остатками.
Избился уже не могу понять, вроде все просто, кто нить сталкивался?

Код
Выбрать все
		сзТовар = СоздатьОбъект("СписокЗначений");
		ВыгрузитьТабличнуюЧасть(сзТовар, "Товар");

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

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #647 - 23. Июля 2014 :: 07:42
Печать  
Больше похоже, что длина реквизита не совпадает, т.е. в #ВыбТовар ИД-шники длиной 9, а в Бух. итогах -, вероятно, с учетом ИД-шника.
Попробуй:
Код
Выбрать все
Right(Субконто1,9) В (ВЫБРАТЬ val ИЗ #ВыбТовар) 


Хотя при этом - может вывести данные по объектам из другого справочника с таким же ID, но для начала пойдет,  а там дальше уже разбираться можно, достраивать ли вид справочника к временной таблице, или условие по виду на БИ задавать...
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #648 - 23. Июля 2014 :: 14:34
Печать  
Так как у субконто есть еще вид, я четко знаю что субконто это ИД9, но сделал как ты предложил, эффект предсказуем, тот же Подмигивание

Вот отладку выложил.
  

______________001.txt ( 6 KB | Загрузки )

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #649 - 25. Июля 2014 :: 04:50
Печать  
Выполни запрос без типизации, данные выложи в строку вида 'значение'.  Тогда точно сможешь посчитать длину значения.
У тебя наверняка не все субконто указаны с типом и видом, а значит длина самого поля SQL (DBF) 13 или 23 символа. А значение хранится скорее всего с 1-го по 9-й. Или с 5 по 13 если вдруг все таки с видом зачесалось.
Просто ради интереса выполни, посмотришь - поймешь.

Кстати сразу в лоб модифицируй запрос на
Код
Выбрать все
СРЕД(Субконто1, 1, 9) В (ВЫБРАТЬ val ИЗ #СписокЗначений) 

« Последняя редакция: 28. Июля 2014 :: 13:15 - vandalsvq »  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #650 - 26. Июля 2014 :: 17:23
Печать  
То конкретное субконто которое я выбираю, оно с типом и видом Справочник.Номенклатура
Так же Сред не понял, ведь даже если там было бы 13 (что странно), то было бы 4+9, а причем здесь 14 и почему Сред выбирает первые 9 символов?
Кстати еще раз пересмотрел возвращает 13 таки символов.
Тоесть видимо я не совсем осведомлен о формате бух. учета в базе, ведь с регистрами и остальными объектами такого вроде нет, а тут 13 символов причем основной объект это не 9 справа, а 9 слева Улыбка
Тогда остальные 4 видимо ид самого объекта ВидСубконто. Не понятно почему наоборот Улыбка мозг вынесло Улыбка
Если сделать в sql запрос без классов к таблице _1sentry то ид в скажем sc0 будет 9, почему так тут, я чего то не в курю. Просто понять хочется Улыбка
  

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


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

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

pavlo писал(а) 26. Июля 2014 :: 17:23:
Кстати еще раз пересмотрел возвращает 13 таки символов.
То есть видимо я не совсем осведомлен о формате бух. учета в базе, ведь с регистрами и остальными объектами такого вроде нет, а тут 13 символов причем основной объект это не 9 справа, а 9 слева Улыбка
Тогда остальные 4 видимо ид самого объекта ВидСубконто. Не понятно почему наоборот Улыбка мозг вынесло Улыбка
Если сделать в sql запрос без классов к таблице _1sentry то ид в скажем sc0 будет 9, почему так тут, я чего то не в курю. Просто понять хочется Улыбка


У тебя все субконто с указанием вида справочника (перечисления)? Если хотя бы одно без вида, то поля субконто длиной будут 13 символов, а если вдруг хотя бы одно не типизировано то получишь 24 или сколько там он будет хранить я точно не помню.
А почему хранится только 9 и слева, а не справа, то тут все понятно. Поле типизировано с указанием вида, необходимости хранить вид нет, значит храним 9 символов, а чтобы не париться сколько там длина поля в физической таблице пишем в левые 9, а следующие просто пустые оставляем. Так что нет там никакого вида.
В общем бух. подсистема просто чуток позамороченнее

  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #652 - 28. Июля 2014 :: 14:10
Печать  
у меня 3 субконто и 3 всегда пустое на 41 и 43 счетах.
Вообще раньше много раз прямые писал для скуля и проблем не возникало и если честно только узнал что  ID9 (объекта) идет первым, это точно так или просто для удобства класс переворачивает? Улыбка
  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #653 - 29. Июля 2014 :: 11:23
Печать  
pavlo писал(а) 28. Июля 2014 :: 14:10:
у меня 3 субконто и 3 всегда пустое на 41 и 43 счетах.
Вообще раньше много раз прямые писал для скуля и проблем не возникало и если честно только узнал что  ID9 (объекта) идет первым, это точно так или просто для удобства класс переворачивает? Улыбка


Ты не понял. Не важно что у тебя на конкретном счете с субконто происходит, намного важнее что в целом происходит с видами субконто на всю конфигурацию.
И про Идентификатор ты не прав. Только у бухгалтерского учета такая петрушка. А с регистрами, документами, справочниками все в порядке.
Объясняю на пальцах.

Допустим у тебя всего 3 вида субконто
Контрагенты - Справочник.Контрагенты
Договоры - Справочник.Договоры
Документы - Справочник (без указания вида)

Для Контрагентов и договоров надо хранить только 9 символов, поскольку все прекрасно понятно, где его искать, а вот для документов надо хранить 13 символов.

Далее. Например, у тебя всего 2 счета:
60 - Контрагенты, Договоры, Документы
76 - Контрагенты, Документы, Договоры

Обрати внимание что для Субконто1 (sc0) длины поля хватит и 9 символов, поскольку во всех счетах это справочник с указанием вида, а вот для Субконто2 и 3 надо хранить или 9 или 13, естественно что длина поля будет 13 символов. Но для счета 60 хранится будут заполняться только первые 9, а для счета 76 все 13. Вот и все.
*** Вот только я точно не могу сказать не будет ли длина поля Субконто1 13 символов для унификации.
  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #654 - 30. Июля 2014 :: 17:16
Печать  
Видимо у меня в субконто1 во всех счетах в той базе где скуль везде есть вид Улыбка
спасибо, понял.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #655 - 21. Августа 2014 :: 06:36
Печать  
Код
Выбрать все
ТекстЗапросаИННКонтр = "
				|ВЫБРАТЬ
				|	$СпрКонтр.ТекущийЭлемент КАК [ТекЭл $Справочник.Контрагенты]
				|	,$СпрКонтр.ИНН КАК ИНН
				|	,$СпрКонтр.Наименование КАК Наименование
				|ИЗ
				|	Справочник.Контрагенты КАК СпрКонтр $nolock
				|ГДЕ
				|	$СпрКонтр.ПометкаУдаления=0 И $СпрКонтр.ИНН ПОДОБНО '@ИННКраткий%'";
ПЗКонтры=СоздатьОбъект("ПрямойЗапрос");
ПЗКонтры.РежимОтладки = 0;ПЗКонтры.БухгалтерскийУчет = 0;ПЗКонтры.ПериодическиеЗначения = 0;ПЗКонтры.Текст = ТекстЗапросаИННКонтр;
ПЗКонтры.ОписаниеПараметра("ИННКраткий","Строка");
ПЗКонтры.ПодготовитьПараметризованныйЗапрос();
 



Далее
Код
Выбрать все
		ПЗКонтры.ПодставлятьПараметры("ИННКраткий",СокрП(ИННКраткий));
		тзРез = ПЗКонтры.ВыполнитьПараметризованныйЗапрос();
 


На СКЛь - все ОК, на ДБФ - ошибка:
ПрямойЗапрос::ВыполнитьПараметризованныйЗапрос(Строка ТипОбъекта=ИндексированнаяТаблица) : Неверный номер параметра
метра.Модификатор);
{D:\BASES\ELIS\TOTALCNT\CLASSES\ПрямыеЗапросы\ПрямойЗапрос.ert(13736) }

ЧЯДНТ?
П.С.
Остановил отладчиком на "ЗапросSQLite.УстановитьПараметр"
в ВекторПараметра.  и в ЗначениеПараметра -  - все Ок, все то, что должно быть.
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #656 - 21. Августа 2014 :: 09:52
Печать  
имха, неправильно ты это делаешь. У тебя в запросе '@ИННКраткий%' - это не параметр а готовая строка. Укажи ее без апострофов, а процент добавляй при установке параметра.
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #657 - 21. Августа 2014 :: 10:07
Печать  
Salimbek писал(а) 21. Августа 2014 :: 09:52:
имха, неправильно ты это делаешь. У тебя в запросе '@ИННКраткий%' - это не параметр а готовая строка. Укажи ее без апострофов, а процент добавляй при установке параметра.

Код
Выбрать все
|ГДЕ
	|	$СпрКонтр.ПометкаУдаления=0 И $СпрКонтр.ИНН ПОДОБНО СОКРП(@ИННКраткий)";

ПЗКонтры.ПодставлятьПараметры("ИННКраткий",СокрП(ИННКраткий)+"%");
 


Ессс! Взлетело! Спасибо! Очень довольный
« Последняя редакция: 22. Августа 2014 :: 01:28 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #658 - 01. Сентября 2014 :: 08:03
Печать  
очепятка в документации

для ВТ-запроса $РегистрОстаткиОбороты

неверный идентификатор <ИдентификаторРесурса>ОборотЫ

должно быть <ИдентификаторРесурса>Оборот (в самом классе именно так - без завершающего "Ы")
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #659 - 23. Октября 2014 :: 13:42
Печать  
В БИОстаткиОбороты пропали остатки и обороты за 3-й квартал.

Делаю запрос за 2-й квартал - остатки  и обороты есть и за 4-й тоже есть остатки и обороты. А в 3-м нет. Печаль

Смотрю ОСВ по счету - все нормально. Есть и остатки и обороты.

Текст запроса:
Код
Выбрать все
"
	|ВЫБРАТЬ
	|	ОстаткиОборотыОсновной.Субконто1		КАК [Агент			$Субконто	]
	|,	ОстаткиОборотыОсновной.Субконто1_вид	КАК [Агент_вид		$ВидСубконто]
	|,	ОстаткиОборотыОсновной.Субконто2		КАК [ТаксаХХ		$Субконто	]
	|,	ОстаткиОборотыОсновной.Субконто2_вид	КАК [ТаксаХХ_вид	$ВидСубконто]
	|,	ОстаткиОборотыОсновной.НачалоПериода	КАК [НачалоПериода	$Дата		]

	|,	ОстаткиОборотыОсновной.СуммаНачальныйОстаток	КАК [СН_Сумма		$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаНачальныйОстаток	КАК [СН_СумКорп		$Число	]
	|,	ОстаткиОборотыОсновной.СуммаОборот				КАК [Оборот_Сумма	$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаОборот				КАК [Оборот_СумКорп	$Число	]
	|,	ОстаткиОборотыОсновной.СуммаКонечныйОстаток		КАК [СК_Сумма		$Число	]
	|,	ОстаткиОборотыОсновной.ВалютаКонечныйОстаток	КАК [СК_СумКорп		$Число	]
	|
	|
	|ИЗ
	|	$БИОстаткиОбороты.Основной(		:ДатаНач~
									|,	:ДатаКон~
									|,	МЕСЯЦ ДОПОЛНЕНИЕ
									|,
									|,	#СчетаТКС
									|,	(Сотрудники, ТаксыХХ)
									|,	(Сумма, Валюта)
									|,
									|) КАК ОстаткиОборотыОсновной"
 



  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #660 - 24. Октября 2014 :: 09:18
Печать  
В
Код
Выбрать все
:ДатаНач~ 


убери
Код
Выбрать все
~ 

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


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #661 - 24. Октября 2014 :: 09:37
Печать  
Спасибо за совет.
Проблема решилась переиндексацией.

Как показывает практика, вт БИ "более" чувствительна к индексам, чем объект БухгалтерскиеИтоги.

Хотя может я не умею ее готовить?
  
Наверх
 
IP записан
 
Fisco
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 26. Июня 2014
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #662 - 01. Ноября 2014 :: 13:25
Печать  
Делаю выборку остатков, количество это измерение регистра, а вот цену хочу вытащить из соответствующей строки документа. Вроде и ошибок не выдает, но и цены тоже нет... В чем подвох?

     ТекстЗапроса = "
     |ВЫБРАТЬ
     |      ОстаткиПоставщикам.Клиент КАК [Поставщик $Справочник.Клиенты]
     |      ,ОстаткиПоставщикам.Товар КАК [Товар $Справочник.Товары]
     |      ,ОстаткиПоставщикам.Заказ КАК [Заказ $Справочник.Заказы]
     |      ,ОстаткиПоставщикам.ЗаказПоставщику  КАК [Документ $Документ]
     |      ,ЗаказТЧ.Цена КАК [Цена :Число.10.3]
     |      ,ОстаткиПоставщикам.КоличествоОстаток КАК [Остаток :Число.10.3]
     |ИЗ
     |      ство)) AS ОстаткиПоставщикам
     |
     |ЛЕВОЕ СОЕДИНЕНИЕ
     |      ДокументСтроки.ЗаказПоставщику КАК ЗаказТЧ $NOLOCK
     |      ПО (ОстаткиПоставщикам.ЗаказПоставщику = $ЗаказТЧ.ТекущийДокумент)
     |      И (ОстаткиПоставщикам.Заказ = $ЗаказТЧ.Заказ)
     |
     |СГРУППИРОВАТЬ
     |      ОстаткиПоставщикам.Клиент,ОстаткиПоставщикам.ЗаказПоставщику, ОстаткиПоставщикам.Товар,ОстаткиПоставщикам.Заказ
     |";
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #663 - 18. Декабря 2014 :: 01:59
Печать  
предложение по внесению доработок в метод виртуального значения

было:    $ПоследнееЗначение.<ВидОбъекта>.<Идентификатор>(Элемент,Дата)

теперь:  $ПоследнееЗначение.<ВидОбъекта>.<Идентификатор>(Элемент,Дата[,ВозвращаемоеЗначение])

пример:

Код
Выбрать все
select ....
, иция,ЗначениеПоПозиции),:ПустойИД) как СледующиеНормы
....
 


Что реализовано (во вложении) + причины:

1. для случая когда в качестве параметра "Дата" передается выражение SQL
   есть ограничения:
   - только тип "Дата" (это не удобно)
   - значение всегда возвращается на начало дня (считаю это ошибкой!)

   Стандартное поведение 1С77
   всегда возвращает ПОСЛЕДНЕЕ значение
   на КОНЕЦ дня (или на позицию документа):

Код
Выбрать все
Рез = СпрЭлемент.Реквизит.Получить(ПеременнаяТипаДатаИлиДок); 



   По этому поводу уже задавался (много раз) вопрос
   "Как получить значение на конец дня ?"
   
   Как пример, здесь http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/635#635

2. Метод не позволяет получить ничего, кроме "Значение" на позицию или дату

   Хочу иметь аналогию

Код
Выбрать все
    Пер = СоздатьОбъект(Периодический);
    ...
    Пер.ДатаЗнач
    Пер.Значение
    Пер.ТекущийДокумент()
    Пер.ТекущийРеквизит()
    ....и т.д
 


   уже было предложено решение этой задачи
   здесь http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/519#519
   но оно не попало в стандартный класс

3. Хочу в качестве параметра "Дата" передавать
   не только параметр ":ВыбДатаХХХ" или "ВыражениеSQL"
   но также и литерал типа 'Дата' или 'ПозицияДокументаБД23'



РЕАЛИЗОВАЛ ЭТИ ХОТЕЛКИ. ТЕПЕРЬ МЕТОД ВЫГЛЯДИТ ТАК:

Код
Выбрать все
$ПоследнееЗначение.<ВидОбъекта>.<Идентификатор>(Элемент,Дата[,ВозвращаемоеЗначение])

где:

'Дата' 	= (стандартно) параметр вида ':ВыбДата[Модиф]'
	= (стандартно) выражение SQL типа 'Дата'
	= (дополнение) выражение SQL типа 'ПозицияДокументаБД23'
	= (дополнение) литерал вида 'ГГГГММДД' или 'ПозицияДокументаБД23'

'ВозвращаемоеЗначение' = одно из

	'<пусто>|Значение' = стандартное поведение
	+ для случая литерал вида 'ГГГГММДД' или 'ПозицияДокументаБД23'

	'ЗначениеПоПозиции' = когда передается выражение SQL типа 'ПозицияДокументаБД23'

	дополнительно (по аналогии с объектом "Периодический")
	начения'

	По-умолчанию = <пусто>, что соотвествует значению 'Значение'

 




Чтобы это работало, нужно заменить в классе соответствующую функцию

Код
Выбрать все
Функция ПарсингВТПоследнееЗначение(ТекстДляОбработки)
... 



текст функции - во вложении
« Последняя редакция: 18. Декабря 2014 :: 07:44 - kos »  

_________________.7z ( 3 KB | Загрузки )
Наверх
 
IP записан
 
AntiBuh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #664 - 07. Апреля 2015 :: 07:08
Печать  
Подскажите как построить запрос
Есть два справочника А и Б
у справочника А есть реквизит Неопределенный справочник, может принимать значения из справочника Б
Требуется получить табличку значение А и реквизиты из Б
Вроде просится Соединение, но никак не соображу как
получается что типы не совпадают, а как уравнять не знаю
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #665 - 07. Апреля 2015 :: 08:19
Печать  
Код
Выбрать все
select
   $Б.Реквизит
from $Справочник.А А
left join $Справочник.Б Б on А.Реквизит = $ВидСправочника.Б+Б.id 

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


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #666 - 07. Апреля 2015 :: 09:52
Печать  
Спасибо, всё получилось
  
Наверх
 
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #667 - 18. Апреля 2015 :: 05:33
Печать  
вспоможите плиз. в чем косяк понять не могу...

Код
Выбрать все
ТекстЗапроса="
 	|ВЫБРАТЬ
    |   $ДокНакладная.ТекущийДокумент КАК [Документ $Документ.РасходнаяНакладная],
    |   $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура]
    |ИЗ
    |   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|   Документ.РасходнаяНакладная КАК Документ
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |   ЖурналДокументов КАК Жур $nolock
    |ПО
    |   Стр.Документ = $Жур.ТекущийДокумент
    |ГДЕ
    |   $Жур.Проведен = 1
    //|   И $ДокСтроки.Номенклатура = :ВыбНоменклатура~~
    |   И ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
    |УПОРЯДОЧИТЬ
    |   Стр.Документ";

	ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"1cpp.dll");
	Запрос = СоздатьОбъект("ПрямойЗапрос");

	Запрос.Текст = ТекстЗапроса;
	Запрос.УстановитьТекстовыйПараметр("ДатаНач",Дата1);
	Запрос.УстановитьТекстовыйПараметр("ДатаКон",Дата2);
	Запрос.РежимОтладки = 1;

	ИТЗ = Запрос.Выполнить();
	ИТЗ.ВыбратьСтроку();  



получаю ошибку:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : Meta name parser error: неизвестное метаимя или алиас "$ДокНакладная"
ЗапросODBC.ВыполнитьИнструкцию(ТекстЗапроса,ПолучательЗапроса,1);

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


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #668 - 18. Апреля 2015 :: 08:58
Печать  
rom35 писал(а) 18. Апреля 2015 :: 05:33:
вспоможите плиз. в чем косяк понять не могу...


Ну дык таблицы ДокНакладная нет, есть ДокСтроки, Документ и Жур
  
Наверх
 
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #669 - 19. Апреля 2015 :: 06:07
Печать  
Спасибо огромное. переделал. с этим разобрался.
Код
Выбрать все
ВЫБРАТЬ
    |   $Документ.ТекущийДокумент КАК [Документ $Документ.РасходнаяНакладная],
    |   $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура],
	|   $ДокСтроки.Всего КАК [Всего $Число],
	|   $ДокСтроки.Количество КАК [Кол $Число]
    |ИЗ
    |   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|   Документ.РасходнаяНакладная КАК Документ
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |   ЖурналДокументов КАК Жур $nolock
    |ПО
    |   Стр.Документ = $Жур.ТекущийДокумент
    |ГДЕ
    |   $Жур.Проведен = 1,
    |   И $ДокСтроки.Товар = :ВыбНоменклатура,
    |   И ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
    |УПОРЯДОЧИТЬ
    |   Стр.Документ"; 



теперь вываливает:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'WHERE'.

режим отладки показывает:
Код
Выбрать все
SELECT
   Документ.IDDOC AS [Документ $Документ.РасходнаяНакладная],
   ДокСтроки.SP2993 AS [Товар $Справочник.Номенклатура],
   ДокСтроки.SP2996 AS [Всего $Число],
   ДокСтроки.SP2994 AS [Кол $Число]
FROM
   DT2988 AS ДокСтроки (nolock)
LEFT JOIN
   DH2988 AS Документ
LEFT JOIN
   _1SJOURN AS Жур (nolock)
ON
   Стр.Документ = Жур.IDDOC
WHERE
   Жур.CLOSED&1 = 1,
   AND ДокСтроки.SP2993 = '   373В  ',
   AND (LEFT(Жур.DATE_TIME_IDDOC,8) BETWEEN '20150419' AND '20150419')
ORDER BY
   Стр.Документ 



я так понимаю чтото с условиями... пробовал тупо оставлять по одному условию, ошибка таже. совсем без WHERE тоже не работает, ругается: Incorrect syntax near the keyword 'ORDER'.
если и его убрать вываливает: Incorrect syntax near 'IDDOC'.
короче ступор....
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #670 - 19. Апреля 2015 :: 06:29
Печать  
rom35 писал(а) 19. Апреля 2015 :: 06:07:
Код
Выбрать все
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|   Документ.РасходнаяНакладная КАК Документ
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |   ЖурналДокументов КАК Жур $nolock
    |ПО
    |   Стр.Документ = $Жур.ТекущийДокумент 



А у первого соединения куда ПО дел?
  
Наверх
ICQ  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #671 - 19. Апреля 2015 :: 07:01
Печать  
вроде и логика простая но както тяжко дается сей предмет Улыбка
Код
Выбрать все
ТекстЗапроса="
 	|ВЫБРАТЬ
    |   $Документ.ТекущийДокумент КАК [Документ $Документ.РасходнаяНакладная],
    |   $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура],
	|   $ДокСтроки.Всего КАК [Всего $Число],
	|   $ДокСтроки.Количество КАК [Кол $Число]
    |ИЗ
	|   ЖурналДокументов КАК Жур $nolock
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|   Документ.РасходнаяНакладная КАК Документ $nolock ПО Документ = $Жур.ТекущийДокумент
	|ЛЕВОЕ СОЕДИНЕНИЕ
    |   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock ПО ДокСтроки = $Жур.ТекущийДокумент
    |ГДЕ
    |   $Жур.Проведен = 1
    |   И $ДокСтроки.Товар = :ВыбНоменклатура
    |   И ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
    |УПОРЯДОЧИТЬ
    |   Документ"; 



State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Документ'.

засада какая то... честно прочел все 150 страниц мануала, но логику начинаю понимать только сейчас, и то пока только в общих чертах  Нерешительный
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #672 - 19. Апреля 2015 :: 10:21
Печать  
[quote author=rom35 link=1285352210/660#671 date=1429426888]
Код
Выбрать все
    |ИЗ
	|   ЖурналДокументов КАК Жур $nolock
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|   Документ.РасходнаяНакладная КАК Документ $nolock ПО Документ = $Жур.ТекущийДокумент
	|ЛЕВОЕ СОЕДИНЕНИЕ
    |   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock ПО ДокСтроки = $Жур.ТекущийДокумент
 



Видимо должно быть вот так:

Код
Выбрать все
    |ИЗ
	|   ЖурналДокументов КАК Жур $nolock
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|   Документ.РасходнаяНакладная КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Жур.ТекущийДокумент
	|ЛЕВОЕ СОЕДИНЕНИЕ
    |   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock ПО $ДокСтроки.ТекущийДокумент = $Жур.ТекущийДокумент
 



Так как Просто Документ и ДокСтроки это как бы таблички вообще а $Документ.ТекущийДокумент это конкретны поля с ИД документа в данном случае.
  
Наверх
 
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #673 - 28. Апреля 2015 :: 16:24
Печать  
Никто не пробовал? теоретически возможно сделать отбор по ссылке с двойным вложением?

т.е. есть в документа реквизит табл. части ТорговыйАгент у него в свою очередь есть реквизит Супервайзер.

вытаюсь сделать чтото подобное:

Код
Выбрать все
|ВЫБРАТЬ";
|$Документ.ТоргТочка КАК [ТТ $Справочник.ТорговыеТочки],
|$ДокСтроки.ТорговыйАгент.Супервайзер КАК [СВ $Справочник.Сотрудники] 



ругается: The column prefix 'ДокСтроки.SP15585' does not match with a table name or alias name used in the query.

где SP15585 - это какразтаки "ТорговыйАгент"
есть конечно вариант выгрузить все это как:
Код
Выбрать все
|ВЫБРАТЬ";
|$Документ.ТоргТочка КАК [ТТ $Справочник.ТорговыеТочки],
|$ДокСтроки.ТорговыйАгент КАК [СВ $Справочник.Сотрудники] 



а потом перебрать всю ТЗ и заменить реквизит СВ на СВ.Супервайзер. если по другому никак придется так и делать...

p.s. чует мое сердце надо чтото с левыми соединениями мутить....
вот весь запрос
Код
Выбрать все
ВЫБРАТЬ
   $Документ.ТоргТочка КАК [ТТ $Справочник.ТорговыеТочки],
   $ДокСтроки.ТорговыйАгент.Супервайзер КАК [СВ $Справочник.Сотрудники],
   $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура],
   $ДокСтроки.Количество КАК [Кол $Число]
ИЗ
   ЖурналДокументов КАК Жур $nolock
ЛЕВОЕ СОЕДИНЕНИЕ
   Документ.РасходнаяНакладная КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Жур.ТекущийДокумент
ЛЕВОЕ СОЕДИНЕНИЕ
   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock ПО $ДокСтроки.ТекущийДокумент = $Жур.ТекущийДокумент
ГДЕ
   $Жур.Проведен = 1
   И $Документ.ДокОбмен = :ПустойИД13
   И $ДокСтроки.Товар IN (SELECT Val FROM #СписТовара)
   И $Документ.МестоХранения IN (SELECT Val FROM #ВыбМХы)
   И ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
УПОРЯДОЧИТЬ
   $ДокСтроки.Товар,
   $Документ.ТоргТочка
 

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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #674 - 28. Апреля 2015 :: 17:14
Печать  
Именно соединениями.
Левое - если может быть ситуация, что поле будет пустое или незаполненое. Если поле гарантированно заполнено, то лучше использовать Внутреннее соединение.
Что касается твоего вопроса - то надо представлять - как устроено хранение данных в таблицах 1С-ки.
Для этого лучше всего использовать тестовый запрос вида
Код
Выбрать все
ВЫБРАТЬ ПЕРВЫЕ 1 $ДокСтроки.ТорговыйАгент from ДокументСтроки.РасходнаяНакладная 


Так ты увидишь содержимое базы без всяких прикрас и поймешь, что красивое "$ДокСтроки.ТорговыйАгент" всего лишь поле типа spXXX в котором находится ИД-шник вида "    1A ".
А сам Торговый агент находится в таблице "$Справочник.Сотрудники", т.е. чтобы получить реквизит Супервайзер надо присоединить к строке документа справочник "Сотрудники" и уже у этой присоединенной таблицы взять поле. (Если оно не периодическое, конечно).
  
Наверх
ICQ  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #675 - 28. Апреля 2015 :: 17:31
Печать  
Спасибо! буду рыть. направление понял.
  
Наверх
 
IP записан
 
kenzzzooo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Местоположение: Минеральные Воды
Зарегистрирован: 06. Января 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #676 - 04. Мая 2015 :: 19:01
Печать  
rom35 писал(а) 28. Апреля 2015 :: 16:24:
вот весь запрос
Код
Выбрать все
ВЫБРАТЬ
   $Документ.ТоргТочка КАК [ТТ $Справочник.ТорговыеТочки],
   $ДокСтроки.ТорговыйАгент.Супервайзер КАК [СВ $Справочник.Сотрудники],
   $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура],
   $ДокСтроки.Количество КАК [Кол $Число]
ИЗ
   ЖурналДокументов КАК Жур $nolock
ЛЕВОЕ СОЕДИНЕНИЕ
   Документ.РасходнаяНакладная КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Жур.ТекущийДокумент
ЛЕВОЕ СОЕДИНЕНИЕ
   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock ПО $ДокСтроки.ТекущийДокумент = $Жур.ТекущийДокумент
ГДЕ
   $Жур.Проведен = 1
   И $Документ.ДокОбмен = :ПустойИД13
   И $ДокСтроки.Товар IN (SELECT Val FROM #СписТовара)
   И $Документ.МестоХранения IN (SELECT Val FROM #ВыбМХы)
   И ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
УПОРЯДОЧИТЬ
   $ДокСтроки.Товар,
   $Документ.ТоргТочка
 



А так:

Код
Выбрать все
ВЫБРАТЬ
   $Документ.ТоргТочка КАК [ТТ $Справочник.ТорговыеТочки],
   ISNULL($Сотр.Супервайзер,:ПустойИД)  КАК [СВ $Справочник.Сотрудники],
   $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура],
   $ДокСтроки.Количество КАК [Кол $Число]
ИЗ
   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock
   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотр $nolock ПО $ДокСтроки.ТорговыйАгент = $Сотр.ТекущийЭлемент
   СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК Документ $nolock ПО $ДокСтроки.ТекущийДокумент = $Документ.ТекущийДокумент
   СОЕДИНЕНИЕ ЖурналДокументов КАК Жур $nolock ПО $Документ.ТекущийДокумент = $Жур.ТекущийДокумент
ГДЕ
   $Жур.Проведен = 1 И ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
   И $Документ.ДокОбмен = :ПустойИД13
   И $ДокСтроки.Товар IN (SELECT Val FROM #СписТовара)
   И $Документ.МестоХранения IN (SELECT Val FROM #ВыбМХы)
УПОРЯДОЧИТЬ
   $ДокСтроки.Товар,
   $Документ.ТоргТочка 


не пробовали?
  
Наверх
 
IP записан
 
AntiBuh
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Зарегистрирован: 28. Июля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #677 - 07. Мая 2015 :: 04:22
Печать  
А можно-ли в запросе вида

ВЫБРАТЬ ОстаткиОсновной.Субконто1
            ,ОстаткиОсновной.Субконто1_вид
ИЗ $БИОстатки.Основной(:КонПериода
,#Счета
,(Субконто1,...)
,(Сумма)
,(РазделительУчета = :НашаФирма)) КАК ОстаткиОсновной

отфильтровать оборотное/не оборотное Субконто1?
если можно - как это сделать правильно?
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #678 - 11. Мая 2015 :: 16:55
Печать  
помогите разобраться почему не корректно работаю БИОстатки
Код
Выбрать все
"ВЫБРАТЬ
|	ЛЕВО(БухИтоги.Субконто1, 9)	КАК [ТМЦ		:Справочник.Номенклатура],
|	БухИтоги.КоличествоОстаток	КАК [Количество	:Число.15.3],
|	БухИтоги.СуммаОстаток		КАК [Сумма		:Число.15.2]
|ИЗ
|	$БИОстатки.Основной(:Дата~, #Счет41_1, (Субконто1,Субконто2), (Количество,Сумма), Субконто2 = :Склад) КАК БухИтоги" 



Возвращает остатки на начала месяца не учитывая оборотов.
В моем случае, есть остаток по дебиту 41.1 на 01.01.15, на эту же дату бухгалтер сделал ручную операцию скорректировав сальдо до нуля. Открываем карточку счета по 41.1 видим, что конечное сальдо на 02.01.15 равно нулю, а прямой запрос считает, что сальдо нулю не равно, а точнее равно сальду по дебиту на 01.01.15 . Если перенести операцию на 31.12.14 или выполнить запрос на 01.02.15, то запрос возвращает все правильно.
Если поставить отбор по конкретному товару, то получаем остаток в виде последнего движения по кредиту, естественно со знаком минус.
Вообщем ересь какая-то...
  
Наверх
 
IP записан
 
kenzzzooo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 26
Местоположение: Минеральные Воды
Зарегистрирован: 06. Января 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #679 - 11. Мая 2015 :: 19:40
Печать  
Asakra писал(а) 11. Мая 2015 :: 16:55:
Код
Выбрать все
"ВЫБРАТЬ
|	ЛЕВО(БухИтоги.Субконто1, 9)	КАК [ТМЦ		:Справочник.Номенклатура]" 



...Вообщем ересь какая-то...


Отладку у запроса не пробовали включать? Мне помогает. А! Точно

Код
Выбрать все
ЛЕВО(БухИтоги.Субконто1, 9)	КАК [ТМЦ :Справочник.Номенклатура] 



а не

Код
Выбрать все
СРЕД(БухИтоги.Субконто1, 5, 9) КАК [ТМЦ :Справочник.Номенклатура] 

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


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #680 - 11. Мая 2015 :: 23:38
Печать  
зачем мне отладка? ошибок ни каких не возникает - те цифры, которые возвращает запрос не правильные.
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #681 - 12. Мая 2015 :: 02:20
Печать  
мать перемать... наколбасил с ВТ Счет_41_1
я в класс добавил метод, что бы постоянно не писать создания ВТ и вот там не правильно приводился счет в строку БД, но результат вышел весьма непредсказуемый. Улыбка)
  
Наверх
 
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #682 - 13. Мая 2015 :: 13:56
Печать  
чегойто никак немогу постич логику "group by" как только уже непробовал фантазия иссякла. может кто подскажет в куда рыть.
Код
Выбрать все
ВЫБРАТЬ
   $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура],
   $ДокСтроки.Количество КАК [Кол $Число]
ИЗ
   ЖурналДокументов КАК Жур $nolock
ЛЕВОЕ СОЕДИНЕНИЕ
   Документ.РасходнаяНакладная КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Жур.ТекущийДокумент
ЛЕВОЕ СОЕДИНЕНИЕ
   ДокументСтроки.РасходнаяНакладная КАК ДокСтроки $nolock ПО $ДокСтроки.ТекущийДокумент = $Жур.ТекущийДокумент
ЛЕВОЕ СОЕДИНЕНИЕ
   Справочник.Номенклатура КАК Справочник $nolock ПО $Справочник.ТекущийЭлемент = $ДокСтроки.Товар
ГДЕ
   $Жур.Проведен = 1
   И $Документ.ДокОбмен = :ПустойИД13
   И $Справочник.Запрет = 0
   И $ДокСтроки.Товар IN (SELECT Val FROM #СписТовара)
   И $Документ.МестоХранения IN (SELECT Val FROM #ВыбМХы)
   И ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
СГРУППИРОВАТЬ
   $ДокСтроки.Товар 



вываливает ошибку: Column 'ДокСтроки.SP2994' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

группировка по Справочник.Номенклатура также не прокатывает...

ДокСтроки.SP2994' это какраз товар табличная часть документа расх.накладная

Еще мучает вопрос возможно ли через один запрос на пример за 1 месяц, сделать несколько функций с интервалом например в 10 дней, в обычном 1Сном запросе выглядит както так:
Код
Выбрать все
Функция Кол1 = Сумма(Кол) когда ((Док.ДатаДок>=ДатаНач1) и (Док.ДатаДок<=ДатаКон1));
Функция Кол2 = Сумма(Кол) когда ((Док.ДатаДок>=ДатаНач2) и (Док.ДатаДок<=ДатаКон2)); 



можно конечно сделать несколько запросов за эти интервалы. но это сильно проигрывает по скорости..
  
Наверх
 
IP записан
 
Igor Nikolaenko
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 47
Зарегистрирован: 01. Апреля 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #683 - 13. Мая 2015 :: 19:57
Печать  
Добавьте агрегатную функцию:
ВЫБРАТЬ
  $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура],
  СУММА($ДокСтроки.Количество) КАК [Кол $Число]
ИЗ
  ...

а для попадания в индекс вместо $Жур.ДатаДокумента используйте $Жур.ПозицияДокумента, только для правой границы добавьте символ "~"
  
Наверх
 
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #684 - 14. Мая 2015 :: 08:30
Печать  
1. Спасибо с группировкой все заработало.
единственно не понял зачем:
Igor Nikolaenko писал(а) 13. Мая 2015 :: 19:57:
а для попадания в индекс вместо $Жур.ДатаДокумента используйте $Жур.ПозицияДокумента, только для правой границы добавьте символ "~"

у меня:
Код
Выбрать все
|   И ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон) 


и так вроде работатет нормально?

2. по второй части
я немножко о другом писал в предыдущем сообщении....
Код
Выбрать все
ВЫБРАТЬ
   $ДокСтроки.Товар КАК [Товар $Справочник.Номенклатура],
   $ДокСтроки.Количество КАК [Кол $Число] 


я хотел добавить условие для $ДокСтроки.Количество КАК [Кол $Число]
т.е. чтото типа
Код
Выбрать все
Сумма($ДокСтроки.Количество) КАК [Кол1 $Число] ИМЕЮЩИЕ $Жур.ДатаДокумента МЕЖДУ :ДатаНач1 И :ДатаКон1 


вываливает ошибку Incorrect syntax near the keyword 'FROM'.

но это походу невозможно Печаль
или я ошибаюсь
выписка из инструкции
Условия на значения агрегатных функций
Предложение ИМЕЮЩИЕ <Условие отбора> позволяет накладывать условия на значения агрегатных функций. В других конструкциях языка запросов, например в предложении ГДЕ, указывать в условиях агрегатные функции нельзя.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #685 - 14. Мая 2015 :: 13:24
Печать  
Рекомендую посмотреть в таблицах SQL-я - как лежат данные. Потом подумать - как из них получить то, что хочется, и уж затем, обладая знаниями, действовать.
Например, на таблице _1sjourn есть Индекс date_time_iddoc - что есть "позиция" документа + ИД-шник документа, и фильтр с использованием этого поля будет быстрее, чем вытаскивать для каждого документа Дату (из того же date_time, только потом еще и отрезать) и проверять ее на вхождение в интервал.
То же самое про втыкание "имеющие" в список полей, не делается так, оно только для наложения условий на сгруппированные элементы.
В вашем же случае можно посмотреть в сторону:
Код
Выбрать все
СУММА(Выбор Когда $Жур.ПозицияДокумента МЕЖДУ :ДатаНач1 И :ДатаКон1~ Тогда $ДокСтроки.Количество
Иначе 0
Конец) Как [Кол1 $Число] 


Хотя я бы делал объединением (через ОБЪЕДИНИТЬ ВСЕ) нескольких простых запросов, но это тестить надо разные варианты по скорости...
  
Наверх
ICQ  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #686 - 15. Мая 2015 :: 09:15
Печать  
СПАСИБО!!!!
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #687 - 31. Августа 2015 :: 05:12
Печать  
почему-то в классе не работает RegExp
ТекстЗапроса = "INNER JOIN vt_ПараметрыРасчетовAS ПараметрыРасчетов ON ПараметрыРасчетов.Операция = :Операция AND ПараметрыРасчетов.ВидДолга = ВидДолга"
Паттерн = "'[^']*'|"[^"]*"|(?:^|\s|[^\wа-яё\.]+)(Фирма|Договор|ВидДолга|КредДокумент)[^\wа-яё'"]+"

после того как RegExp выловит измерения регистра из строки, ТекстЗапроса должен приобразоваться в "INNER JOIN vt_ПараметрыРасчетовAS ПараметрыРасчетов ON ПараметрыРасчетов.Операция = :Операция AND ПараметрыРасчетов.ВидДолга = totalreg.ВидДолга".

по факту текст остается не изменным и падает в ошибку. приходиться менять "ПараметрыРасчетов.ВидДолга", например, на "ПараметрыРасчетов.ВидДолгаОстатки". по истечению времени опять наступаешь на теже грабли, но про баг уже не помнишь и опять тратится время на выеснение проблемы.

может кто подскажет, каким должен быть паттерн, что бы избавиться от этого бага. такое ощущение, что не обрабатывается ":", т.к. если убрать "ПараметрыРасчетов.Операция = :Операция AND", то все отрабатывает на ура.
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #688 - 31. Августа 2015 :: 05:35
Печать  
Asakra писал(а) 31. Августа 2015 :: 05:12:
почему-то в классе не работает RegExp
ТекстЗапроса = "INNER JOIN vt_ПараметрыРасчетовAS ПараметрыРасчетов ON ПараметрыРасчетов.Операция = :Операция AND ПараметрыРасчетов.ВидДолга = ВидДолга"
Паттерн = "'[^']*'|"[^"]*"|(?:^|\s|[^\wа-яё\.]+)(Фирма|Договор|ВидДолга|КредДокумент)[^\wа-яё'"]+"

после того как RegExp выловит измерения регистра из строки, ТекстЗапроса должен приобразоваться в "INNER JOIN vt_ПараметрыРасчетовAS ПараметрыРасчетов ON ПараметрыРасчетов.Операция = :Операция AND ПараметрыРасчетов.ВидДолга = totalreg.ВидДолга".

по факту текст остается не изменным и падает в ошибку. приходиться менять "ПараметрыРасчетов.ВидДолга", например, на "ПараметрыРасчетов.ВидДолгаОстатки". по истечению времени опять наступаешь на теже грабли, но про баг уже не помнишь и опять тратится время на выеснение проблемы.

может кто подскажет, каким должен быть паттерн, что бы избавиться от этого бага. такое ощущение, что не обрабатывается ":", т.к. если убрать "ПараметрыРасчетов.Операция = :Операция AND", то все отрабатывает на ура.


если строку сделать "(ПараметрыРасчетов.Операция = :Операция AND ПараметрыРасчетов.ВидДолга = ВидДолга)", то все работает, хотя в справке про скобочки в соединении не написано (есть рекомендации только про измерения, ресурсыи условия)...
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #689 - 10. Сентября 2015 :: 16:30
Печать  
Интересную проблему замечаю в классе и четко отловить не могу из-за чего, НО в $БИОстаткиОбороты при комбинации каких то параметров, запрос запускается (скорее парсинг классом начинается), никаких ошибок нет, но в итоге 1С ломается в корень. В статусе стоит выполняется обработка, мышкой ничего не жмется, но если нажать ESC то отчет закрывается, тоесть он уже не работает, но и пользоваться 1С уже нельзя. Приходится ее рубить.
В итоге и ошибки нет и результата нет и 1С помирает Улыбка
P.S. без "МЕСЯЦ ДОПОЛНЕНИЕ" все отлично работает, но нужно мне именно с ними
P.P.S. Если ДЕНЬ поставить то работает Печаль
P.P.P.S. Такое ощущение, что у DBF версии есть ограниченя на количество вложенных запросов, она его разваливает на кучу вложенных и если из 3 по остаткам (по разным субконто, зачем то) собрать один то пашет, но смущает в последнем такой же запрос как и первые два по остаткам, но дата одна, а не 2 как у выше. А так перестает слетать Печаль

Код
Выбрать все
	ТекстЗапроса = "
	|ВЫБРАТЬ БИ.НачалоПериода КАК Период,
	|	СУММА(БИ.КоличествоНачальныйОстаток) КАК ОстатокН,
	|	СУММА(БИ.КоличествоКонечныйОстаток) КАК ОстатокК
	|ИЗ $БИОстаткиОбороты.Основной(:ДатаНачала, :ДатаКонца~, МЕСЯЦ ДОПОЛНЕНИЕ,, ,, , Счет = :Счет43) КАК БИ
	  |СГРУППИРОВАТЬ БИ.НачалоПериода
	|";
	рс.УстановитьТекстовыйПараметр("ДатаНачала", ДатаНачала);
	рс.УстановитьТекстовыйПараметр("ДатаКонца", ДатаКонца);
	рс.УстановитьТекстовыйПараметр("Счет43", СчетПоКоду("43"));
	тз2 = рс.Выполнить(,ТекстЗапроса);

 

« Последняя редакция: 11. Сентября 2015 :: 19:48 - pavlo »  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #690 - 02. Октября 2015 :: 11:33
Печать  
Приветстую!

может кто в курсе?  при ошибке Incorrect syntax near the keyword 'WHERE'.
что в переводе: Неправильный синтаксис около ключевого слова "где"
кто знает? это ошибка до команды ГДЕ, в ней или после нее?

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



в отладчике так:
Код
Выбрать все
SELECT
LEFT(Жур.DATE_TIME_IDDOC,8) AS Дата
СсылкиДок.SP25491 AS [Дока $Документ],
FROM
_1SJOURN AS Жур (nolock)
LEFT JOIN
SC25489 AS СсылкиДок (nolock)
WHERE
СсылкиДок.SP25491 = Жур.IDDOC 



а ошибка все таже:  Печаль
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'WHERE'
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #691 - 02. Октября 2015 :: 14:09
Печать  
rom35 писал(а) 02. Октября 2015 :: 11:33:
сломал всю башку, вроде все красиво и просто:

запятая не там, она должна быть не после $СсылкиДок.Д КАК [Дока $Документ], а после $Жур.ДатаДокумента КАК Дата
  
Наверх
www  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #692 - 02. Октября 2015 :: 14:54
Печать  
сорри это я в коде неправильно скопировал, я запрос уменьшал, он больше был, но даже этот мелкий не работает, естественно так:
Код
Выбрать все
ВЫБРАТЬ
$Жур.ДатаДокумента КАК Дата,
$СсылкиДок.Д КАК [Дока $Документ]
ИЗ
ЖурналДокументов КАК Жур $nolock
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.СсылкиДок КАК СсылкиДок $nolock
ГДЕ
$СсылкиДок.Д = $Жур.ТекущийДокумент 

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #693 - 02. Октября 2015 :: 15:18
Печать  
Попробуй вмето ГДЕ написать ПО, кажется так в этом прямомзапросе ON должно подставляться.
Или убрать слово ЛЕВОЕ.
В зависимости от того что ты хочешь получить....
  
Наверх
www  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #694 - 02. Октября 2015 :: 16:52
Печать  
Конечно там ПО должно быть, ГДЕ это в общем запросе, а не в соединении
Потому и пишет ошибка синтаксиса WHERE (ГДЕ) Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #695 - 02. Октября 2015 :: 17:35
Печать  
А это уже от sql-сервера зависит как такое трактовать.
sqlite, например, на такой запрос не ругается, он JOIN без ON выполняет как CROSS и не важно что там впереди LEFT или RIGHT, но и условие WHERE сработает и результат будет как условие по ON.
Но мне кажется sqlite тут не прав - LEFT или RIGHT JOIN`ы без ON бессмысленны.
  
Наверх
www  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #696 - 03. Октября 2015 :: 11:26
Печать  
CROSS без ON и так будет.
А вот WHERE в JOIN мне кажется как то слабо со стандартом TSQL-92 вяжется, но у мелких тоже не все гладко Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #697 - 07. Октября 2015 :: 14:36
Печать  
Всем спасибо! конечно ПО а не ГДЕ. сам затупил.
ошибки ушли но проблема не решилась. не делал раньше связи справочника с документом, т.е. в справочнике если реквизит с типом документ неопределенного вида ну и надо отобрать документы из определенного интервала т.е. связать журнал документов с справочником.

Код
Выбрать все
ВЫБРАТЬ
	$Жур.ДатаДокумента КАК [ДатаХаоса $Дата],
	$СсылкиДок.Д КАК [ДокСсылкаСпр $Документ],
	$СсылкиДок.ТекущийЭлемент КАК [ЭлСпр $Справочник.СсылкиДок]
ИЗ
	Справочник.СсылкиДок КАК СсылкиДок $nolock
ЛЕВОЕ СОЕДИНЕНИЕ
	ЖурналДокументов КАК Жур $nolock ПО $Жур.ТекущийДокумент = $СсылкиДок.Д
ГДЕ	($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
УПОРЯДОЧИТЬ $Жур.ДатаДокумента ВОЗР 


запрос возвращаяет пустую таблицу.
Если не делать условие соединения
Код
Выбрать все
ПО $Жур.ТекущийДокумент = $СсылкиДок.Д 

и если соединяем Справчник.СсылкаНаДокумент -> журнал документов, то заполняются значения в таблицу только из справочника, если наоборот: журнал -> Справчник.СсылкаНаДокумент, то соответственно только данные из журнала.. в общем связь не получается справочника и документа ни в какую Печаль
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #698 - 07. Октября 2015 :: 17:30
Печать  
Ну так все правильно, что не работает!
Неопределенный документ это строка 13 символов IDDOCDEF(4)+IDDOC(9), а в Журнале IDDOCDEF(4) и IDDOC(9) в разных колонках.
Вырезать надо IDDOC из $СсылкиДок.Д и только потом сравнивать, substr`ом или тем чем он там в поставщике называется.
Ну или склеивать из журнала IDDOCDEF и IDDOC а потом сравнивать с $СсылкиДок.Д
Резать или клеить - смотрим по скорости, раз в 100-1000 будет разница, в зависимости от чего вначале отталкиваемся: от журнала или от справочника.
  
Наверх
www  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #699 - 08. Октября 2015 :: 07:35
Печать  
СПАСИБО!!! получилось
Код
Выбрать все
|ЛЕВОЕ СОЕДИНЕНИЕ
	|	ЖурналДокументов КАК Жур $nolock ПО (СРЕД($СсылкиДок.Д,5,5) = СРЕД($Жур.ТекущийДокумент,1,5))  

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #700 - 08. Октября 2015 :: 18:25
Печать  
rom35 писал(а) 08. Октября 2015 :: 07:35:
СПАСИБО!!! получилось
Код
Выбрать все
|ЛЕВОЕ СОЕДИНЕНИЕ
	|	ЖурналДокументов КАК Жур $nolock ПО (СРЕД($СсылкиДок.Д,5,5) = СРЕД($Жур.ТекущийДокумент,1,5))  


Плохо получилось!
То что этот запрос (в твоем случае) работает, не значит что он правильный.
Ну вот зачем ты вырезал из $Жур.ТекущийДокумент 5 символов?
1. Этим ты сломал документы УРИБ/УРБД.
2. Этим ты сломал поиск по индексу IDDOC в журнале и очень сильно замедлил запрос.
« Последняя редакция: 08. Октября 2015 :: 19:44 - Djelf »  
Наверх
www  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #701 - 09. Октября 2015 :: 08:24
Печать  
я просто сделал то что смог сообразить..
сделал два запроса:
Код
Выбрать все
ВЫБРАТЬ
	$Жур.ТекущийДокумент КАК [Дока $Строка],
	$Жур.НомерДокумента КАК НомерДокумента
ИЗ
	ЖурналДокументов КАК Жур $nolock
ГДЕ	($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
 


и
Код
Выбрать все
ВЫБРАТЬ
 	$СсылкиДок.Д КАК [Дока $Строка]
ИЗ
   Справочник.СсылкиДок КАК СсылкиДок $nolock 


сравнил возвращаяемые строковые значиния документов, ну и наваял.

УРБД у меня нет так что это неважно, а вот поломка IDDOC я так понимаю в этом: СРЕД($Жур.ТекущийДокумент,1,5))
по сути мне тут вырезать ничего не надо, так как строка и так 5 символов, но как ее перевести в строковый формат я не сообразил, посему сделал так.

хотя переделал сейчас на
Код
Выбрать все
|	ЖурналДокументов КАК Жур $nolock ПО (СРЕД($СсылкиДок.Д,5,6) = $Жур.ТекущийДокумент)"; 

прироста скорости это не дало.
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #702 - 10. Октября 2015 :: 07:30
Печать  
Тебе же пишут IIDOC(9) ты приниципиально режешь 5 Улыбка СсылкиДок видимо 13
Попробуй так, если база DBF:
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО $СсылкиДок.Д = $Жур.ВидДокумента+$Жур.ТекущийДокумент 

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #703 - 12. Октября 2015 :: 10:36
Печать  
база sql.
попробовал - ругается: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.
если сделать чтото типа такого
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО (str($СсылкиДок.Д) = $Жур.ВидДокумента+$Жур.ТекущийДокумент) 


то отругивается: Error converting data type varchar to float.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #704 - 12. Октября 2015 :: 11:48
Печать  
первым делом берешь простой запросец, типа:
ВЫБРАТЬ
     *
ИЗ
     ЖурналДокументов КАК Жур $nolock
ГДЕ      ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
И $Жур.ТекущийДокумент=' 1CI82   '
и смотришь - какие там поля и как их собрать, чтобы получилось то, что нужно. А вообще - много разных видов документов может лежать в СсылкиДок.Д ?
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #705 - 12. Октября 2015 :: 15:59
Печать  
rom35 писал(а) 12. Октября 2015 :: 10:36:
база sql.
попробовал - ругается: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.
если сделать чтото типа такого
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО (str($СсылкиДок.Д) = $Жур.ВидДокумента+$Жур.ТекущийДокумент) 


то отругивается: Error converting data type varchar to float.


Ну если SQL то тогда так, если видов много в СсылкиДок.Д, проверь если у тебя там точно 13 иначе справа 9 нужно.
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО СРЕД($СсылкиДок.Д,5,9) = $Жур.ТекущийДокумент 


если честно не очень понимаю зачем именно этим классом пользоваться для SQL Подмигивание

А в ВЫБРАТЬ
Код
Выбрать все
$Жур.ТекущийДокумент КАК [Дока $Документ],
$Жур.ВидДокумента КАК Дока_вид
 

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #706 - 12. Октября 2015 :: 19:04
Печать  
rom35 писал(а) 12. Октября 2015 :: 10:36:
база sql.
попробовал - ругается: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.
если сделать чтото типа такого
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО (str($СсылкиДок.Д) = $Жур.ВидДокумента+$Жур.ТекущийДокумент) 


то отругивается: Error converting data type varchar to float.


Правильно ругается. Соединение/сложение/контактация строк не через +, а через ||
Т.е. не $Жур.ВидДокумента+$Жур.ТекущийДокумент, а $Жур.ВидДокумента || $Жур.ТекущийДокумент
  
Наверх
www  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #707 - 13. Октября 2015 :: 06:02
Печать  
Djelf писал(а) 12. Октября 2015 :: 19:04:
rom35 писал(а) 12. Октября 2015 :: 10:36:
база sql.
попробовал - ругается: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.

Правильно ругается. Соединение/сложение/контактация строк не через +, а через ||
Т.е. не $Жур.ВидДокумента+$Жур.ТекущийДокумент, а $Жур.ВидДокумента || $Жур.ТекущийДокумент

1. Особо выделил, какая у него база
2. В SQL базе поле IDDOCDEF - тип INT, поэтому и не складывает строки и ругается на невозможность сконвертировать (и правильно делает)
3. В классе "Прямой запрос" есть специальный метод: СоздатьФункциюIdToStr, после которого в базе появится SQL-функция
Цитата:
Описание: осуществляет создание функции «IDToStr». Функция преобразует 10-тичное число в 36-ричную строку.

4. После вызова этого метода можно будет написать
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО ($СсылкиДок.Д = IDToStr($Жур.ВидДокумента)+$Жур.ТекущийДокумент) 


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


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #708 - 16. Октября 2015 :: 08:22
Печать  
Djelf писал(а) 12. Октября 2015 :: 19:04:
Правильно ругается. Соединение/сложение/контактация строк не через +, а через ||
Т.е. не $Жур.ВидДокумента+$Жур.ТекущийДокумент, а $Жур.ВидДокумента || $Жур.ТекущийДокумент


невыходит:  Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.


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


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #709 - 16. Октября 2015 :: 09:09
Печать  
Salimbek писал(а) 13. Октября 2015 :: 06:02:
4. После вызова этого метода можно будет написать
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО ($СсылкиДок.Д = IDToStr($Жур.ВидДокумента)+$Жур.ТекущийДокумент) 




добавил в запрос:
Запрос.СоздатьФункциюIdToStr(0,0);
както всеодно не помогает:
отругивается [ODBC SQL Server Driver][SQL Server]'IDToStr' is not a recognized function name.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #710 - 19. Октября 2015 :: 07:45
Печать  
У меня уже нет ни 7-ки, ни Прямой запрос я не использовал, так что все чисто из документации. Но могу посоветовать - посмотреть через Enterprise manager или Management studio проверить - есть ли такая функция в SQL-базе. Если есть, то проверить - как она вызывается, потом потестить разные варианты запросов и таким образом полностью разобраться в ситуации.
И я бы вызывал через: Запрос.СоздатьФункциюIdToStr(1,0); иначе как-то странно.
  
Наверх
ICQ  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #711 - 20. Октября 2015 :: 09:58
Печать  
Всем откликнувшимся спасибо. но интузиазм пропал, както всеже но работает. вопрос закрыт.
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #712 - 22. Октября 2015 :: 17:01
Печать  
Здравствуйте
Вопрос к создателю класса:
У вас есть такой же класс в ПоставщикДанных.ПрямойЗапрос - но не смотря на то что файлы сохранены в одну дату и имеют одну и в конструкторе Версия =  "1.8.6 22.05.2013" - они все же немного отличаются.

Так какой из них более правильный?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #714 - 27. Октября 2015 :: 14:43
Печать  
vandalsvq
Спасибо что ответили Улыбка
Тогда еще вопрос:
Пытаюсь объединить два запроса по разным видам документов.
Каждый запрос в отдельности - работает, но стоит только объединить из через "ОБЪЕДИНИТЬ" - вываливается ошибка "Неверное значение ключа!"

Но могу понять что я делаю не так


     Если флБрак = 1 Тогда
           
           //{ПоступленияБрака
           ТекстЗапроса = ТекстЗапроса + ?(ПустоеЗначение(ТекстЗапроса) = 1, "", "
           |ОБЪЕДИНИТЬ
           |") + "
           |ВЫБРАТЬ
           |      $Журнал.ТекущийДокумент КАК [Документ $Документ],
           |      $Журнал.ВидДокумента КАК Документ_вид,
           |      $Журнал.Фирма КАК [Фирма $Справочник.Фирмы],
           |      $Документ.МестоХранения КАК [Склад $Справочник.МестаХранения],
           |      $Документ.Контрагент КАК [Плательщик $Справочник.Контрагенты],
           |      $ДокументСтроки.Товар КАК [Товар $Справочник.Номенклатура],
           |      IFNULL($ПартияГТД.ГТД, :ПустойИД) КАК [ГТД $Справочник.ГТД],
           |      СУММА($ДокументСтроки.Количество) КАК [БракКоличество $Число.10.0],
           |      СУММА(ВЫБОР КОГДА $Документ.ВалютаДокумента = :ПустойИД ИЛИ $Документ.ВалютаДокумента = :ОсновнаяВалюта
           |                        ТОГДА $ДокументСтроки.Всего
           |                        ИНАЧЕ $ДокументСтроки.Всего * $Документ.Курс
           |              КОНЕЦ) КАК [БракСумма $Число.17.2],
           |      0 КАК [ПродКоличество $Число.10.0],
           |      0 КАК [ПродСумма $Число.17.2]
           |ИЗ
           |      ЖурналДокументов КАК Журнал $nolock
           |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеБрака КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Журнал.ТекущийДокумент
           |      ЛЕВОЕ СОЕДИНЕНИЕ ДокументСтроки.ПоступлениеБрака КАК ДокументСтроки $nolock ПО $ДокументСтроки.ТекущийДокумент = $Журнал.ТекущийДокумент
           |      СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары $nolock ПО $Товары.ТекущийЭлемент = $ДокументСтроки.Товар
           |      СОЕДИНЕНИЕ Справочник.Модели КАК Модели $nolock ПО $Модели.ТекущийЭлемент = $Товары.Модель
           |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.Поступление КАК ПартияГТД $nolock ПО $ДокументСтроки.ПартияГТД = $ПартияГТД.ТекущийДокумент
           |ГДЕ
           |      $Журнал.ДатаДокумента МЕЖДУ :НачДата И :КонДата~
           |      И $Журнал.Проведен = 1
           |      И $Журнал.ВидДокумента = :ВидДокумента.ПоступлениеБрака
           |      {ДополнительныеУсловия}
           |СГРУППИРОВАТЬ
           |      $ПартияГТД.ГТД,
           |      $ДокументСтроки.Товар
           |УПОРЯДОЧИТЬ
           |      $Журнал.ПозицияДокумента
           |";
           //}
     КонецЕсли;
     
     Если флОтгрузка = 1 Тогда
           //{ РасходныеНакладные
           ТекстЗапроса = ТекстЗапроса + ?(ПустоеЗначение(ТекстЗапроса) = 1, "", "
           |ОБЪЕДИНИТЬ
           |") + "
           |ВЫБРАТЬ
           |      $Журнал.ТекущийДокумент КАК [Документ $Документ],
           |      $Журнал.ВидДокумента КАК Документ_Вид,
           |      $Журнал.Фирма КАК [Фирма $Справочник.Фирмы],
           |      $Документ.МестоХранения КАК [Склад $Справочник.МестаХранения],
           |      $Документ.Контрагент КАК [Плательщик $Справочник.Контрагенты],
           |      $ДокументСтроки.Товар КАК [Товар $Справочник.Номенклатура],
           |      IFNULL($ДокументСтроки.ГТД, :ПустойИД) КАК [ГТД $Справочник.ГТД],
           |      СУММА($ДокументСтроки.Количество) КАК [ПродКоличество $Число.10.0],
           |      СУММА(ВЫБОР
           |                  КОГДА $Договоры.ОплатаДоговора = 2 ТОГДА $ДокументСтроки.Всего * $Документ.Курс
           |                  ИНАЧЕ $ДокументСтроки.Всего
           |              КОНЕЦ) КАК [ПродСумма $Число.17.2],
           |      0 КАК [БракКоличество $Число.10.0],
           |      0 КАК [БракСумма $Число.17.2]
           |ИЗ
           |      ЖурналДокументов КАК Журнал $nolock
           |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Журнал.ТекущийДокумент
           |      ЛЕВОЕ СОЕДИНЕНИЕ ДокументСтроки.РасходнаяНакладная КАК ДокументСтроки $nolock ПО $ДокументСтроки.ТекущийДокумент = $Журнал.ТекущийДокумент
           |      СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары $nolock ПО $Товары.ТекущийЭлемент = $ДокументСтроки.Товар
           |      СОЕДИНЕНИЕ Справочник.Модели КАК Модели $nolock ПО $Модели.ТекущийЭлемент = $Товары.Модель
           |      СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры $nolock ПО $Договоры.ТекущийЭлемент = $Документ.Договор
           |ГДЕ
           |      $Журнал.ДатаДокумента МЕЖДУ :НачДата И :КонДата~
           |      И $Журнал.Проведен = 1
           |      И $Журнал.ВидДокумента = :ВидДокумента.РасходнаяНакладная
           |      {ДополнительныеУсловия}
           |СГРУППИРОВАТЬ
           |      $ДокументСтроки.ГТД,
           |      $ДокументСтроки.Товар
           |УПОРЯДОЧИТЬ
           |      $Журнал.ПозицияДокумента
           |";
           //}
     КонецЕсли;


Пояснения:
Использую ПоставщикДанных.ИндексированнаяТаблица
Надо заполнить таблицу разными документами. Пока запрос простой без объекдинения - все работает, как только начинаю добавлять еще запросы по другим видам документов - вылетает на этапе заполнения табличного поля, судя по всему - на добавлении колонок:

рос ПрямойЗапрос=) : Неверное значение ключа!
КолонкиЗапроса.Добавить(ТипизацияКолонки,ИдентификаторКолонки);
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #715 - 27. Октября 2015 :: 16:25
Печать  
Ай, сама смогла разобраться
Изменила в ПоставщикДанных.ИндексированнаяТаблица в Процедура ЗаполнитьИзОбъектаПрямойЗапрос(ПрямойЗапрос) код:
[code]
ИдентификаторКолонки = СокрЛП(Лев(ЗначениеВектора,ПозицияРазделителя - 1));
КолонкиЗапроса.Добавить(ТипизацияКолонки,ИдентификаторКолонки);
[/code]
на
[code]
ИдентификаторКолонки = СокрЛП(Лев(ЗначениеВектора,ПозицияРазделителя - 1));
Если КолонкиЗапроса.НайтиКлюч(ИдентификаторКолонки) = -1 Тогда
     ТипизацияКолонки = СокрЛП(Сред(ЗначениеВектора,ПозицияРазделителя + 1));
     КолонкиЗапроса.Добавить(ТипизацияКолонки,ИдентификаторКолонки);
КонецЕсли;
[/code]
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #716 - 30. Октября 2015 :: 10:41
Печать  
Не могу понять в чем дело, использую класс "ПрямойЗапрос"
Делаю запрос в котором в качестве источника используется вложенный:


Код
Выбрать все
ВЫБРАТЬ
	$ЖурналРеализации.Документ КАК [Документ $Документ],
	$ЖурналРеализации.Документ_Вид КАК [Документ_Вид $ВидДокумента],
	$ЖурналРеализации.ПозицияДокумента КАК ПозицияДокумента,
	$ЖурналРеализации.Плательщик КАК [Плательщик $Справочник.Контрагенты],
	$ЖурналРеализации.Модель КАК [Модель $Справочник.Модели],
	$ЖурналРеализации.Направление КАК [Направление $Справочник.ВидыМоделей],
	$ЖурналРеализации.ГТД КАК [ГТД $Справочник.ГТД],
	$ЖурналРеализации.Всего КАК [Всего $Число],
	$ЖурналРеализации.Количество КАК [ПродКоличество $Число],
	$ЖурналРеализации.ПродСумма КАК [ПродСумма $Число],
	ВЫБОР
		КОГДА $ПоследнееЗначение.Модели.Менеджер($ЖурналРеализации.Модель, $ЖурналГТД.ДатаДокумента) = :ПустойИД ТОГДА $ПоследнееЗначение.ВидыМоделей.Менеджер($ЖурналРеализации.Направление, $ЖурналГТД.ДатаДокумента)
		ИНАЧЕ ISNULL($ПоследнееЗначение.Модели.Менеджер($ЖурналРеализации.Модель, $ЖурналГТД.ДатаДокумента), $ПоследнееЗначение.ВидыМоделей.Менеджер($ЖурналРеализации.Направление, $ЖурналГТД.ДатаДокумента))
	КОНЕЦ КАК [Менеджер $Справочник.Сотрудники]
ИЗ
	(
	ВЫБРАТЬ
		$Журнал.ТекущийДокумент КАК [Документ $Документ],
		$Журнал.ВидДокумента КАК [Документ_Вид $ВидДокумента],
		$Журнал.ПозицияДокумента КАК ПозицияДокумента,
		$Документ.Контрагент КАК [Плательщик $Справочник.Контрагенты],
		$Товары.Модель КАК [Модель $Справочник.Модели],
		$Модели.ВидМодели КАК [Направление $Справочник.ВидыМоделей],
		IFNULL($ДокументСтроки.ГТД, :ПустойИД) КАК [ГТД $Справочник.ГТД],
		СУММА($ДокументСтроки.Всего) КАК [Всего $Число],
		СУММА($ДокументСтроки.Количество) КАК [ПродКоличество $Число],
		СУММА(ВЫБОР КОГДА $Договоры.ОплатаДоговора = 2 ТОГДА $ДокументСтроки.Всего * $Документ.Курс ИНАЧЕ $ДокументСтроки.Всего КОНЕЦ) КАК [ПродСумма $Число]
	ИЗ
		ЖурналДокументов КАК Журнал $nolock
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК Документ $nolock ПО $Документ.ТекущийДокумент = $Журнал.ТекущийДокумент
		СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры $nolock ПО $Договоры.ТекущийЭлемент = $Документ.Договор
		ЛЕВОЕ СОЕДИНЕНИЕ ДокументСтроки.РасходнаяНакладная КАК ДокументСтроки $nolock ПО $ДокументСтроки.ТекущийДокумент = $Журнал.ТекущийДокумент
		СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары $nolock ПО $Товары.ТекущийЭлемент = $ДокументСтроки.Товар
		СОЕДИНЕНИЕ Справочник.КатегорииНоменклатуры КАК Категории $nolock ПО $Категории.ТекущийЭлемент = $Товары.Категория
		СОЕДИНЕНИЕ Справочник.Модели КАК Модели $nolock ПО $Модели.ТекущийЭлемент = $Товары.Модель
	ГДЕ
		$Журнал.ДатаДокумента МЕЖДУ :НачДата И :КонДата~
		И $Журнал.Проведен = 1
		И $Журнал.ВидДокумента = :ВидДокумента.РасходнаяНакладная
		{УсловиеКонтрагенты}
		{УсловиеКатегории}
		{УсловиеМодели}
		{УсловиеНаправления}
	СГРУППИРОВАТЬ
		$ДокументСтроки.ГТД,
		$ДокументСтроки.Товар
	) КАК ЖурналРеализации
	СОЕДИНЕНИЕ Документ.Поступление КАК ПартияГТД ПО $ПартияГТД.ГТД = $ЖурналРеализации.ГТД
	СОЕДИНЕНИЕ ЖурналДокументов КАК ЖурналГТД ПО $ЖурналГТД.ТекущийДокумент = $ПартияГТД.ТекущийДокумент
ГДЕ
	1 = 1
	{УсловиеМенеджеры}
УПОРЯДОЧИТЬ
	$ЖурналРеализации.ПозицияДокумента
 


И почему то вываливается ошибка:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: $ЖурналРеализации.Документ
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);


Уже все мозги сломала не могу понять что я делаю то не так?
« Последняя редакция: 30. Октября 2015 :: 12:19 - Zhenya »  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #717 - 30. Октября 2015 :: 14:36
Печать  
Нет такой колонки в $ЖурналРеализации
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #718 - 30. Октября 2015 :: 14:37
Печать  
Это я прогнал, у тебя будет так ЖурналРеализации.Документ
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #719 - 30. Октября 2015 :: 14:38
Печать  
И в подзапросе нафиг типизацию выкинь всю
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #720 - 30. Октября 2015 :: 18:05
Печать  
Да, спасибо, мне уже и на Инфостарте подсказали, что в подзапросах типизация все ломает Улыбка
  
Наверх
 
IP записан
 
Simply1
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 17. Сентября 2016
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #721 - 21. Сентября 2016 :: 08:23
Печать  
Прошу помощи:
У регистра остатков есть Справочник.Товары.
У Товара есть Справочник.Артикулы.
У Артикула есть Справочник.Дивизионы.
Чтобы сделать отбор по Дивизионам мне нужно приджоинить к регистру каждый из этих справочников?

Это одноэсный запрос:
[code]"//{{ЗАПРОС(Сформировать)
|Товар=Регистр.Склад.Товар;
|Склад=Регистр.Склад.МестоХранения;
|Дивизион=Регистр.Склад.Товар.Артикул.Дивизион;
|Количество=Регистр.Склад.Количество;
|Группировка Товар Упорядочить По Товар.Артикул Без Групп;
|Группировка Склад;
|Функция КолВо=КонОст(Количество);
|Условие (Склад в Склад_);
|Условие (Дивизион в Дивизион_);
|"//}}ЗАПРОС;[/code]
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #722 - 21. Сентября 2016 :: 09:24
Печать  
[quote]Чтобы сделать отбор по Дивизионам мне нужно приджоинить к регистру каждый из этих справочников?[/quote]

Да, оба. А вот left или inner определишь по скорости. Результат будет одинаковый, а скорость может сильно отличаться.
  
Наверх
www  
IP записан
 
Simply1
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 17. Сентября 2016
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #723 - 27. Сентября 2016 :: 13:06
Печать  
[quote]Да, оба. А вот left или inner определишь по скорости. Результат будет одинаковый, а скорость может сильно отличаться.[/quote]
Спасибо!
А со скоростью действительно интересно:
Запрос 1С (см. выше) выполняется за 3:58, а прямой запрос:
[code]
     "ВЫБРАТЬ
     |       РегОст.Товар КАК [Товар $Справочник.Номенклатура]
     |      ,РегОст.МестоХранения КАК [Склад $Справочник.МестаХранения]
     |      ,РегОст.КоличествоОстаток КАК Колво
     |ИЗ
     |      $РегистрОстатки.Склад(
     |                                    ,
     |                                    ,(Товар,МестоХранения)
     |                                    ,(Количество)
     |                                    ,
     |       ) КАК РегОст $nolock
     |";
[/code]
выполняется за 3:52.
Выходит - шило на мыло. Опять не удалось перейти на Прямые и эСКьюЛайт ...

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #724 - 27. Сентября 2016 :: 18:18
Печать  
Ага... судя по $nolock у тебя mssql
На таких примитивных запросах 1с тоже не дура Подмигивание
  
Наверх
www  
IP записан
 
Simply1
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 17. Сентября 2016
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #725 - 28. Сентября 2016 :: 07:33
Печать  
Djelf писал(а) 27. Сентября 2016 :: 18:18:
Ага... судя по $nolock у тебя mssql
На таких примитивных запросах 1с тоже не дура Подмигивание

у меня dbf, а $nolock остался от прошлого запроса. В доке написано, что он убирается автоматически, если dbf
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #726 - 28. Сентября 2016 :: 07:55
Печать  
Simply1 писал(а) 28. Сентября 2016 :: 07:33:
у меня dbf, а $nolock остался от прошлого запроса. В доке написано, что он убирается автоматически, если dbf

Ну тогда покажи во что разворачивается этот прямой запрос (отладка с каким то флагом, не помню уже), обычно sqlite работает быстрее.
Скорее всего ты просто не попадаешь ни в один индекс и считывается вообще вся таблица...
  
Наверх
www  
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #727 - 29. Сентября 2016 :: 00:57
Печать  
У тебя здесь нет отбора по Дивизионам. Я так понимаю ты где то потом уже фильтруешь. Т.е. ты получаешь полностью все остатки из регистра. Джоинить нужно в самом виртуальном регистре. Примерно так:

[code]
     "ВЫБРАТЬ
     |       РегОст.Товар КАК [Товар $Справочник.Номенклатура]
     |      ,РегОст.МестоХранения КАК [Склад $Справочник.МестаХранения]
     |      ,РегОст.КоличествоОстаток КАК Колво
     |ИЗ
     |      $РегистрОстатки.Склад(
     |                                    , (($Дивизионы.ТекущийЭлемент В #ФильтрДивизионов) и (МестоХранения В #ФильтрСкладов))
     |                                    ,(Товар,МестоХранения)
     |                                    ,(Количество)
     |                                    ,СОЕДИНЕНИЕ Справочник.Товары КАК Товары ПО Товар = $Товары.ТекущийЭлемент
     |                                    СОЕДИНЕНИЕ Справочник.Артикулы КАК Артикулы ПО $Товары.Артикул = $Артикулы.ТекущийЭлемент
     |                                    СОЕДИНЕНИЕ Справочник.Дивизионы КАК Дивизионы ПО $Артикулы.Дивизион = $Дивизионы.ТекущийЭлемент
     |       ) КАК РегОст $nolock
     |";
     
     Запрос.УложитьСписокЗначений(Дивизион_, "#ФильтрДивизионов", "Дивизионы");
     Запрос.УложитьСписокЗначений(Склад_, "#ФильтрСкладов", "МестаХранения");
[code]
     Ну и еще предуспомтреть ситуацию когда списки Дивизион_ и Склад_ окажутся пустыми, в таком случае в отличии от стандартного 1С запроса это вернет не все значения а наоборот ни одного.
  
Наверх
 
IP записан
 
Simply1
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 5
Зарегистрирован: 17. Сентября 2016
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #728 - 29. Сентября 2016 :: 18:34
Печать  
[quote author=446A656C66000 link=1285352210/726#726 date=1475049344]Ну тогда покажи во что разворачивается этот прямой запрос (отладка с каким то флагом, не помню уже), обычно sqlite работает быстрее.
Скорее всего ты просто не попадаешь ни в один индекс и считывается вообще вся таблица...[/quote]

Да, я тоже подозреваю, что что-то не так.
[code]SELECT
      РегОст.Товар AS [Товар $Справочник.Номенклатура]
     ,РегОст.МестоХранения AS [Склад $Справочник.МестаХранения]
     ,РегОст.КоличествоОстаток AS [Колво $Число]
FROM
     (
     SELECT
           Товар
           ,МестоХранения
           ,SUM(КоличествоОстаток) AS КоличествоОстаток
           
     FROM
           (SELECT
                 rg_324.Товар AS Товар
                 ,rg_324.МестоХранения AS МестоХранения
                 ,rg_324.Количество AS КоличествоОстаток
                 
           FROM
                 [РегистрИтоги.Склад] AS rg_324
           WHERE
                 rg_324.PERIOD = '20160901'
           ) AS vt_ra_324
     GROUP BY
           Товар
           ,МестоХранения
     HAVING (SUM(КоличествоОстаток) <> 0)
     
) AS РегОст
create table x(
[PERIOD] char(8) not null
,[Товар] char(9) collate _1C not null
,[МестоХранения] char(9) collate _1C not null
,[Количество] numeric(20, 3) not null
,[Сумма] numeric(20, 2) not null
,[СуммаЗакупки] numeric(20, 2) not null
, idx_PERIOD_Товар_МестоХранения char(26) collate _1C default null
, idx_PERIOD_МестоХранения char(17) collate _1C default null
)[/code]
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #729 - 29. Сентября 2016 :: 19:12
Печать  
А это что? оО
,$СпрДив.Наименование AS [Дивизион $Справочник.Дивизионы]
Где они джойнятся то?

2 раза select from select, а в этом запросе такое не требуется! Ну давайте 10 раз сделаем select from select - будет быстрее.

Я пас, эти "прямые" с такими штучками я не понимаю и понимать не хочу!


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


1C++ rocks!

Сообщений: 5
Зарегистрирован: 17. Сентября 2016
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #730 - 29. Сентября 2016 :: 19:17
Печать  
[quote author=2709060F05630 link=1285352210/729#729 date=1475176368]А это что? оО
,$СпрДив.Наименование AS [Дивизион $Справочник.Дивизионы]
Где они джойнятся то?
Я пасс, эти "прямые" с такими штучками я не понимаю и понимать не хочу!
[/quote]
:) сори, это лишнее - эксперименты ставил и не почистил.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #731 - 29. Сентября 2016 :: 19:28
Печать  
Выкинь все и проверь ядро запроса без "прямых запросов", если у тебя время выполнения не изменится я буду очень удивлен!
Типизацию можно добавить, она не сильно влияет

SELECT
rg_324.Товар AS Товар
,rg_324.МестоХранения AS МестоХранения
,rg_324.Количество AS КоличествоОстаток
FROM  [РегистрИтоги.Склад] AS rg_324
WHERE
rg_324.PERIOD = '20160901'
GROUP BY  Товар,МестоХранения
HAVING (SUM(КоличествоОстаток) <> 0)
  
Наверх
www  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #732 - 17. Ноября 2016 :: 06:50
Печать  
[quote author=517F707973150 link=1285352210/729#729 date=1475176368]2 раза select from select, а в этом запросе такое не требуется! Ну давайте 10 раз сделаем select from select - будет быстрее.[/quote]

Ну в данном случае, автор вопроса не виноват что класс сделал два select-а внутри, кроме его первого select.
Возможно один селект то и можно сократить без потери для результата, но один вложенный все равно останется.

Всем здрасьте, кстати. Давненько не виделись.
  

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #733 - 17. Ноября 2016 :: 11:16
Печать  
Можно и не клеить вложенный rg_324 в 1 селект... sqlite вложенный без группировки разворачивает как будто вложенного и не было.
Все тормоза от IN - ненавижу его Подмигивание

Про 10 вложенных извиняюсь, просто сложновато в ПрямомЗапросе понять где именно тормоз ;(
  
Наверх
www  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #734 - 18. Ноября 2016 :: 05:35
Печать  
2 Djelf
Ну, сложность - это плата за универсальность и определенный уровень абстракции. Я как старался так и реализовывал возможность увидеть как работает сам класс.
  

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #735 - 18. Ноября 2016 :: 10:12
Печать  
Да понятно, иначе то никак не выкрутится...
Детальной трассировки не хватает, а так все хорошо.

2ALL так как файлы не вкладываются замените сами в коде ПрямогоЗапроса (в 2х местах).
Код
Выбрать все
		ТекстЗапроса_Триггер = "create trigger tr_oborot before update of " + СтрКолонкаИзменений + " on " + ИмяВременнойТаблицы + "
		|begin
		|	update " + ИмяВременнойТаблицы + " set
		|		" + СтрТриггерНачОстаток + "
		|	where " + ИмяВременнойТаблицы + ".rowid = old.rowid;
		|
		|	update t_ob set
		|		" + СтрТриггерОборот + "
		|	where " + СтрЗаменить(СтрЗаменить(СтрУсловияСравненияТабИтогов,ИмяВременнойТаблицы + ".",""),"t_ob","old") + ";
		|
		|	update " + ИмяВременнойТаблицы + " set
		|		" + СтрТриггерКонОстаток + "
		|	where " + ИмяВременнойТаблицы + ".rowid = old.rowid;
		|
		|	select raise(ignore); -- вот эту строку надо добавить!
		|end";
 



Это несколько ускорит запросы использующие Период в $РегистрОбороты и $РегистрОстаткиОбороты. Если используется Дополнение периода и объем данных большой - раза в полтора-два быстрее, если там месяц без дополнения - ускорение почти не заметно.
  
Наверх
www  
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #736 - 09. Октября 2018 :: 02:41
Печать  
В классе ошибка получения значения константы для DBF версии, виртуальное значение $Константа.ИмяКонстаны.
Ошибка в функции:
Функция ПарсингРеквизитаКонстанта(ПерваяЧасть,ВтораяЧасть)

     ТекстПодстановки = "(SELECT "+Значение+"
     |FROM "+?(ЭтоSQL = 1,"_1sconst","__1s_const")+" as const_vt"+ПараметрБлокировкиВТ+"
     |WHERE const_vt.OBJID = '     0   '
     |AND const_vt.ID = "+МетаДата.ИДКонстанты(ВтораяЧасть)+")";
     ТекстПодстановки = ПарсингВнутреннихИдентификаторов(ТекстПодстановки,0);

т.е. и для SQL и для DBF ID константы определяется как число.
Исправление:

     идКонстанты = МетаДата.ИДКонстанты(ВтораяЧасть);
     Если ЭтоSQL = 0 Тогда
           идКонстанты = "'" + Прав(_IdToStr(идКонстанты), 4) + "'";
     КонецЕсли;
     
     ТекстПодстановки = "(SELECT "+Значение+"
     |FROM "+?(ЭтоSQL = 1,"_1sconst","__1s_const")+" as const_vt"+ПараметрБлокировкиВТ+"
     |WHERE const_vt.OBJID = '     0   '
     |AND const_vt.ID = "+идКонстанты+")";
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #737 - 09. Октября 2018 :: 08:05
Печать  
Спасибо!
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #738 - 25. Октября 2018 :: 10:56
Печать  
Поправил в классе ПоставщикДанных.ИндексированнаяТаблица метод Выбрать(), т.к. была ошибка. Плюс добавил выгрузку с учетом текущего индекса, чтобы возвращались данные, отображаемые в текущий момент табличным полем.

Код (C++)
Выбрать все
Функция Выбрать(Знач ВекторКолонок = "") Экспорт
	Перем Идентификатор,Выборка,КоличествоРеквизитов,СтрКолонкиВыгрузки,ИмяКолонки;
	Выборка = СоздатьОбъект("ИндексированнаяТаблица");

	Если ПустоеЗначение(ВекторКолонок) = 1 Тогда
		ВекторКолонок = СоздатьОбъект("АссоциативныйВектор");
		КоличествоРеквизитов = СтруктураДанных.Количество();
		Для НомерРеквизита = 0 По КоличествоРеквизитов-1 Цикл
			Идентификатор = СтруктураДанных.ПолучитьКлюч(НомерРеквизита); 	//+Al 2018-10-25 09:36:22 БЫЛО: ВложеннаяСтруктура = СтруктураДанных.Получить(НомерРеквизита);
			ВекторКолонок.Добавить(Идентификатор,Идентификатор); 			//+Al 2018-10-25 09:54:29 БЫЛО: ВложеннаяСтруктура.Идентификатор
		КонецЦикла;
	ИначеЕсли ТипЗначенияСтр(ВекторКолонок) = "Строка" Тогда
		ВекторКолонок = Сервис.ПреобразоватьСтрокуВАссоциативныйВектор(ВекторКолонок);
	ИначеЕсли ТипЗначенияСтр(ВекторКолонок) <> "АссоциативныйВектор" Тогда
		ВекторКолонок = СоздатьОбъект("АссоциативныйВектор");
		КоличествоРеквизитов = СтруктураДанных.Количество();
		Для НомерРеквизита = 0 По КоличествоРеквизитов-1 Цикл
			Идентификатор = СтруктураДанных.ПолучитьКлюч(НомерРеквизита);
			ВекторКолонок.Добавить(Идентификатор,Идентификатор);
		КонецЦикла;
	ИначеЕсли ВекторКолонок.Количество() = 0 Тогда
		Возврат Выборка;
	КонецЕсли;

	СтрКолонкиВыгрузки = "";
	Для НомерКолонки = 0 По ВекторКолонок.Количество() - 1 Цикл
		ИмяКолонки = ВекторКолонок.Получить(НомерКолонки);
		СтрКолонкиВыгрузки = СтрКолонкиВыгрузки + ?(НомерКолонки = 0,"",",") + ИмяКолонки;
	КонецЦикла;

	ИндексированнаяТаблица.Выгрузить(Выборка,ПоставщикДанныхИТ.Индекс,СтрКолонкиВыгрузки); //+Al 2018-10-25 09:56:06 Добавил текущий индекс: ПоставщикДанныхИТ.Индекс
	Возврат Выборка;
КонецФункции
 

  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #739 - 28. Февраля 2019 :: 16:00
Печать  
Научите, пожалуйста пользоваться вложенными запросами.
Код (SQL)
Выбрать все
SELECT
ж.IDDOC AS [ТекДокумент $Документ.РасхНалоговаяНакладная],
дс.ТекДокументСтроки,
дс.Кол
FROM [Журнал] AS ж
	LEFT JOIN
		(SELECT
			дс1.IDDOC AS ТекДокументСтроки,
			SUM(дс1.Себестоимость) AS [Себестоимость $Число],
			SUM(дс1.Количество) AS [Кол $Число],
			SUM(дс1.Количество * дс1.Себестоимость) AS [СуммаСебестоимости $Число],
			SUM(дс1.СумЛей) AS [СумЛей $Число],
			SUM(дс1.НДС) AS [НДС $Число]
		FROM [ДокументСтроки.РасхНалоговаяНакладная] AS дс1
		WHERE (дс1.Себестоимость <> 0)
		GROUP BY дс1.IDDOC
		) AS дс
		ON (дс.ТекДокументСтроки = ж.IDDOC)
WHERE
ж.IDDOC = '  3APETOP'
GROUP BY ж.IDDO 



Выдает ошибку: ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: дс.Кол
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #740 - 28. Февраля 2019 :: 16:07
Печать  
Попытка1С писал(а) 30. Октября 2015 :: 14:37:
Это я прогнал, у тебя будет так ЖурналРеализации.Документ

Спасибо, помогло сообщение
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #741 - 01. Марта 2019 :: 05:26
Печать  
artamir писал(а) 28. Февраля 2019 :: 16:00:
Научите, пожалуйста пользоваться вложенными запросами.

Вложенные запросы типизировать нельзя.
  
Наверх
www  
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #742 - 08. Мая 2019 :: 13:40
Печать  
Код (SQL)
Выбрать все
CREATE TEMPORARY TABLE #ДвиженияКлиентов AS
	|(ВЫБРАТЬ
	|*
	|ИЗ
	|$БИОбороты.Основной(:НачалоДатаОтчета, :КонецДатаОтчета~, ДЕНЬ, , #Счет221, (Контрагенты), (Сумма), ,))
 



На сколько я понимаю, то нельзя использовать такую конструкцию для создания таблицы? Или я неправильно его готовлю  Озадачен
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #743 - 08. Мая 2019 :: 17:07
Печать  
artamir писал(а) 08. Мая 2019 :: 13:40:
Код (SQL)
Выбрать все
CREATE TEMPORARY TABLE #ДвиженияКлиентов AS
	|(ВЫБРАТЬ
	|*
	|ИЗ
	|$БИОбороты.Основной(:НачалоДатаОтчета, :КонецДатаОтчета~, ДЕНЬ, , #Счет221, (Контрагенты), (Сумма), ,))
 



На сколько я понимаю, то нельзя использовать такую конструкцию для создания таблицы? Или я неправильно его готовлю  Озадачен


Готовил неправильно Улыбка
Получилось
Код (C++)
Выбрать все
Функция ПолучитьТекстЗапросаСозданияТаблицыКлиентов()

	Текст = "create table if not exists "+ТаблицаДвиженияКлиентов+" as
	|select
	| *
	|from
	| $БИОстаткиОбороты.Основной(:НачалоДатаОтчета, :КонецДатаОтчета~, День, , #Счет221, (Контрагенты), (Сумма), ,)";

	Возврат Текст;

КонецФункции // ПолучитьТекстЗапросаСозданияТаблицыКлиентов
//======================================================================
Процедура СформироватьТаблицуДвиженийКлиентов()

	пз.СброситьТаблицу(ТаблицаДвиженияКлиентов);

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

КонецПроцедуры // СформироватьТаблицуДвиженийКлиентов
 

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


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #744 - 28. Мая 2019 :: 10:58
Печать  
Можно ли в ВТ БИОстаткиОбороты отключить группировку по полю Валюта?

С группировкой по полю Валюта имею не верный результат. И с обороткой не сходится.
РазделительУчета      Валюта      Счет      АП      Субконто1      Субконто1_вид      СуммаНачальныйОстаток      СуммаНачальныйОстатокДт      СуммаНачальныйОстатокКт
РУ           1             1U         3         BRL011         518      -400000.040      0.000      400000.040
РУ           1             1U         3         FBT013         518      2689.920      2689.920      0.000
РУ           1             1U         3         JEJ021         518      -43005.720      0.000      43005.720
РУ           1             1U         3         KD5001         518      0.000      0.000      0.000      0.000
РУ           1             1U         3         OLB013         518      49000.000      49000.000      0.000
РУ           1             1U         3         OVW013         518      17263.500      17263.500      0.000
РУ           1             1U         3         P77013         518      0.000      0.000      0.000      0.000
РУ           2             1U         3         JEJ021         518      43005.720      43005.720      0.000

Убираю группировку по полю Валюта все получается как надо
РазделительУчета      Счет      АП      Субконто1      Субконто1_вид      СуммаНачальныйОстаток      СуммаНачальныйОстатокДт      СуммаНачальныйОстатокКт
РУ          1U         3         BRL011         518      -400000.040      0.000      400000.040
РУ          1U         3         FBT013         518      2689.920      2689.920      0.000
РУ          1U         3         KD5001         518      0.000      0.000      0.000      0.000
РУ          1U         3         OLB013         518      49000.000      49000.000      0.000
РУ          1U         3         OVW013         518      17263.500      17263.500      0.000
РУ          1U         3         P77013         518      0.000      0.000      0.000      0.000

Понимаю что это косяк бухгалтерии, но оборотка 1С это игнорит.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #745 - 29. Мая 2019 :: 11:38
Печать  
leov-001 писал(а) 28. Мая 2019 :: 10:58:
Можно ли в ВТ БИОстаткиОбороты отключить группировку по полю Валюта?

С группировкой по полю Валюта имею не верный результат. И с обороткой не сходится.
РазделительУчета      Валюта      Счет      АП      Субконто1      Субконто1_вид      СуммаНачальныйОстаток      СуммаНачальныйОстатокДт      СуммаНачальныйОстатокКт
РУ           1             1U         3         BRL011         518      -400000.040      0.000      400000.040
РУ           1             1U         3         FBT013         518      2689.920      2689.920      0.000
РУ           1             1U         3         JEJ021         518      -43005.720      0.000      43005.720
РУ           1             1U         3         KD5001         518      0.000      0.000      0.000      0.000
РУ           1             1U         3         OLB013         518      49000.000      49000.000      0.000
РУ           1             1U         3         OVW013         518      17263.500      17263.500      0.000
РУ           1             1U         3         P77013         518      0.000      0.000      0.000      0.000
РУ           2             1U         3         JEJ021         518      43005.720      43005.720      0.000

Убираю группировку по полю Валюта все получается как надо
РазделительУчета      Счет      АП      Субконто1      Субконто1_вид      СуммаНачальныйОстаток      СуммаНачальныйОстатокДт      СуммаНачальныйОстатокКт
РУ          1U         3         BRL011         518      -400000.040      0.000      400000.040
РУ          1U         3         FBT013         518      2689.920      2689.920      0.000
РУ          1U         3         KD5001         518      0.000      0.000      0.000      0.000
РУ          1U         3         OLB013         518      49000.000      49000.000      0.000
РУ          1U         3         OVW013         518      17263.500      17263.500      0.000
РУ          1U         3         P77013         518      0.000      0.000      0.000      0.000

Понимаю что это косяк бухгалтерии, но оборотка 1С это игнорит.


Так вроде бы у тебя две различные валюты использованы?

Если нужно получить суммы без учета валют, то вот пример настроек вирт. таблицы БИОстаткиОбороты без учета валюты:
Код (C++)
Выбрать все
ИЗ $БИОстаткиОбороты.Управленческий(:НачПериода, :КонПериода~, Период, , #СчетТКС, (Субконто1, Субконто2), (Сумма), ,) КАК БИОстаткиОбороты
 



Или Используй предложение ИТОГИ оно должно быть после СГРУППИРОВАТЬ
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #746 - 30. Мая 2019 :: 06:30
Печать  
artamir писал(а) 29. Мая 2019 :: 11:38:
[quote author=353C362F74696968590 link=1285352210/744#744 date=1559041139]

Так вроде бы у тебя две различные валюты использованы?

Если нужно получить суммы без учета валют, то вот пример настроек вирт. таблицы БИОстаткиОбороты без учета валюты:
Код (C++)
Выбрать все
ИЗ $БИОстаткиОбороты.Управленческий(:НачПериода, :КонПериода~, Период, , #СчетТКС, (Субконто1, Субконто2), (Сумма), ,) КАК БИОстаткиОбороты
 



Или Используй предложение ИТОГИ оно должно быть после СГРУППИРОВАТЬ


Да, спасибо так и сделал
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #747 - 21. Марта 2020 :: 09:55
Печать  
как в запрос передать пустое перечисление заданного вида?
Например Перечисление.ВидБСО
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #748 - 21. Марта 2020 :: 23:56
Печать  
artamir писал(а) 21. Марта 2020 :: 09:55:
как в запрос передать пустое перечисление заданного вида?
Например Перечисление.ВидБСО


Ну вообще пустое значение перечисления точно такое еж как и справочника, т.е. $ПустойИД.
Но если в базе у поля тип просто "Перечисление" то как вариант:
пустоеПеречисление = ПолучитьПустоеЗначение("Перечисление.НужныйВид");
метаДата = СоздатьОбъект("MetaDataWork");
идПустогоПеречисления = метаДата.ЗначениеВДлиннуюСтрокуБД(пустоеПеречисление);

Хотя может можно и проще, модификаторы в параметрах тоже должны помочь:

"
..
ГДЕ
  нужноеПоле = :идПеречисления~
...
"
запрос.УстановитьТекстовыйПараметр("идПеречисления", ПолучитьПустоеЗначение("Перечисление.НужныйВид"));
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 57
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #749 - 15. Апреля 2020 :: 10:23
Печать  
Sserj писал(а) 21. Марта 2020 :: 23:56:
artamir писал(а) 21. Марта 2020 :: 09:55:
как в запрос передать пустое перечисление заданного вида?
Например Перечисление.ВидБСО


Ну вообще пустое значение перечисления точно такое еж как и справочника, т.е. $ПустойИД.
Но если в базе у поля тип просто "Перечисление" то как вариант:
пустоеПеречисление = ПолучитьПустоеЗначение("Перечисление.НужныйВид");
метаДата = СоздатьОбъект("MetaDataWork");
идПустогоПеречисления = метаДата.ЗначениеВДлиннуюСтрокуБД(пустоеПеречисление);

Хотя может можно и проще, модификаторы в параметрах тоже должны помочь:

"
..
ГДЕ
  нужноеПоле = :идПеречисления~
...
"
запрос.УстановитьТекстовыйПараметр("идПеречисления", ПолучитьПустоеЗначение("Перечисление.НужныйВид"));


Спасибо. Помогло :ПустойИД
  
Наверх
 
IP записан
 
michael-iv
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 15. Февраля 2022
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #750 - 15. Февраля 2022 :: 14:38
Печать  
Всем Привет.
Ребята, может подскажите - есть ли примеры запросов к "ЖурналРасчетов.Зарплата" ?
Тк.у меня при простом запросе выдает ошибку...
Подскажите плз. что я делаю не так...

Простой запрос:
// подготовим запрос...
ЗапросЗП = СоздатьОбъект("ПрямойЗапрос");
......
ТекстЗапроса = "SELECT
| Объект      AS [Объект]
| FROM :ВидЖурналаРасчетов.Зарплата
|";
-------------------------------------------
Выдает ошибку:
SELECT      Объект AS      [Объект]  FROM '  X8'
(1С++) Ошибка выполнения общего запроса (ПрямойЗапрос). Ошибка:ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such table:   X8
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #751 - 14. Октября 2022 :: 13:54
Печать  
Доброго дня всем, кто еще остался на 7.7, а так же знатокам 1с++ и прекрасного класса "ПоставщикДанных" Улыбка

Столкнулась со странным поведением класса ПоставщикДанных.Справочник во время поиска при установленных отборах: Если на ПоставщикДанных наложить несколько условий отбора (больше 2-х) - то во время поиска, неважно посимвольного по колонке, или по целому слову, происходит сбой в табличном поле и на месте найденного появляется последний элемент в списке справочника. Более того ломается весь список в табличном поле - элементы разбегаются в хаотичном порядке, последний элемент, который "встает" на место найденного по поиску дублируется множество раз . Порядок элементов восстанавливается, если сделать End - Home и все элементы возвращаются на свои места и даже тот элемент который надо найти, перелистыванием находится на своём месте. Слом происходит именно во время поиска.
При чём, слом происходит только если искомый элемент не попадает в "окно" табличного поля, отображаемое на форме. Если элемент "виден" в списке - то поиск его проходит нормально.

Отладка показала, что поиск то работает, и элемент справочника находится, но в момент позиционирования на него
Код
Выбрать все
ТабличноеПоле.ТекущаяСтрока = ЗначенияВыборки.ПолучитьЗначение(1,1); 


в табличном поле позиция найденного элемента заменяется последним элементом справочника!
Такое ощущение что ломаются какие то внутренние индексы класса связанные с источником данных?

1сpp 3.2.4.1
1sqlite 1.0.2.6/3.36.0.26 by Djelf
ПоставщикДанных 5.0.5 23.05.2014
ПрямыеЗапросы 1.8.6 22.05.2013

Может кто-то уже сталкивался и знает как исправить?
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #752 - 17. Октября 2022 :: 12:00
Печать  
Zhenya писал(а) 14. Октября 2022 :: 13:54:
Доброго дня всем, кто еще остался на 7.7, а так же знатокам 1с++ и прекрасного класса "ПоставщикДанных" Улыбка

Столкнулась со странным поведением класса ПоставщикДанных.Справочник во время поиска при установленных отборах: Если на ПоставщикДанных наложить несколько условий отбора (больше 2-х) - то во время поиска, неважно посимвольного по колонке, или по целому слову, происходит сбой в табличном поле и на месте найденного появляется последний элемент в списке справочника. Более того ломается весь список в табличном поле - элементы разбегаются в хаотичном порядке, последний элемент, который "встает" на место найденного по поиску дублируется множество раз . Порядок элементов восстанавливается, если сделать End - Home и все элементы возвращаются на свои места и даже тот элемент который надо найти, перелистыванием находится на своём месте. Слом происходит именно во время поиска.
При чём, слом происходит только если искомый элемент не попадает в "окно" табличного поля, отображаемое на форме. Если элемент "виден" в списке - то поиск его проходит нормально.

Отладка показала, что поиск то работает, и элемент справочника находится, но в момент позиционирования на него
Код
Выбрать все
ТабличноеПоле.ТекущаяСтрока = ЗначенияВыборки.ПолучитьЗначение(1,1); 


в табличном поле позиция найденного элемента заменяется последним элементом справочника!
Такое ощущение что ломаются какие то внутренние индексы класса связанные с источником данных?

1сpp 3.2.4.1
1sqlite 1.0.2.6/3.36.0.26 by Djelf
ПоставщикДанных 5.0.5 23.05.2014
ПрямыеЗапросы 1.8.6 22.05.2013

Может кто-то уже сталкивался и знает как исправить?

Zhenya писал(а) 17. Октября 2022 :: 10:25:
trad писал(а) 17. Октября 2022 :: 07:54:
ТП ведет себя подобным образом когда не обеспечена уникальность ключа порядка. Копайте в эту сторону

Хм, начала копать.
Поскольку поиск делаю по наименованию - ключом порядка выступает ТекущийОбъект.idx_DESCR
Включила отладку, увидела что при включённых отборах по полям для которых в бд включён отбор по реквизиту - при поиске выбирается индекс с этим реквизитом... - и поиск ломается
Если в отборе поставщика не используются поля с включёнными отборами - используется индекс по наименованию, как и в ключе порядка - и поиск работает как надо.

Ушла думать

Итак да, отключение признака отбор у реквизитов справочника, которые я использую в отборе поставщика данных, проблему решило.
Интересно, а можно как то влиять на выбор индексов в ПрямомЗапросе, которым пользуется ПоставщикДанных?
  
Наверх
 
IP записан
 
Zhenya
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 37
Зарегистрирован: 18. Октября 2010
Пол: Женский
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #753 - 19. Октября 2022 :: 09:35
Печать  
Zhenya писал(а) 14. Октября 2022 :: 13:54:
1sqlite 1.0.2.6/3.36.0.26 by Djelf

В общем плюнула я на навороты последней версии 1sqlite by Djelf и восстановила старенькую ещё орефковскую версию 1.0.2.6 от 03.02.2012.
И всё заработало так как и задумывалось автором класса
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать