Переключение на Главную Страницу Страницы: 1 ... 55 56 [57] 58 59 60 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" (число прочтений - 303472 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос"
Ответ #840 - 31. Августа 2010 :: 09:25
Печать  
Kalen писал(а) 31. Августа 2010 :: 09:23:
Eprst писал(а) 31. Августа 2010 :: 07:58:
Это не нули, это пустой ИД - у вас же нет прихода/расхода..

да, конечно я имел в виду "нули".
так если нет ни документа, ни оборотов, зачем эта запись? о чем она?

А разве это не очевидно ?
Остатки то на начало и конец периода есть!
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #841 - 31. Августа 2010 :: 09:51
Печать  
Eprst писал(а) 31. Августа 2010 :: 09:25:
Kalen писал(а) 31. Августа 2010 :: 09:23:
Eprst писал(а) 31. Августа 2010 :: 07:58:
Это не нули, это пустой ИД - у вас же нет прихода/расхода..

да, конечно я имел в виду "нули".
так если нет ни документа, ни оборотов, зачем эта запись? о чем она?

А разве это не очевидно ?
Остатки то на начало и конец периода есть!

Вот тут-то и засада. С началом порядок, а конец подкачал Улыбка
  
Наверх
GTalkICQ  
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос"
Ответ #842 - 31. Августа 2010 :: 10:02
Печать  
Kalen писал(а) 31. Августа 2010 :: 09:51:
Eprst писал(а) 31. Августа 2010 :: 09:25:
Kalen писал(а) 31. Августа 2010 :: 09:23:
Eprst писал(а) 31. Августа 2010 :: 07:58:
Это не нули, это пустой ИД - у вас же нет прихода/расхода..

да, конечно я имел в виду "нули".
так если нет ни документа, ни оборотов, зачем эта запись? о чем она?

А разве это не очевидно ?
Остатки то на начало и конец периода есть!

Вот тут-то и засада. С началом порядок, а конец подкачал Улыбка


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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос"
Ответ #843 - 31. Августа 2010 :: 10:18
Печать  
Kalen писал(а) 31. Августа 2010 :: 09:51:
Вот тут-то и засада. С началом порядок, а конец подкачал Улыбка


Что значит подкачал ?
У тебя там, где нет прихода и расхода (а соответственно и твоего документа), начОст = КонОст .. т.е все верно!


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


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос"
Ответ #844 - 31. Августа 2010 :: 10:48
Печать  
2 kalen ты наверно сравниваешь со стандартными отчетами, где итоги по группе выводятся в первой строке?

в твоем отчете нет группировок, каждая строка - отдельный докумет и остаток на этот документ.
  
Наверх
wwwICQ  
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #845 - 01. Сентября 2010 :: 05:07
Печать  
Anatol писал(а) 31. Августа 2010 :: 10:48:
2 kalen ты наверно сравниваешь со стандартными отчетами, где итоги по группе выводятся в первой строке?

в твоем отчете нет группировок, каждая строка - отдельный докумет и остаток на этот документ.

именно что я начал так думать, увидев строку с пустым значением "группировки". будем надеяться, что я такой единственный Подмигивание
  
Наверх
GTalkICQ  
IP записан
 
Anatol
Senior Member
****
Отсутствует


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

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос"
Ответ #846 - 01. Сентября 2010 :: 05:19
Печать  
Kalen писал(а) 01. Сентября 2010 :: 05:07:
увидев строку с пустым значением "группировки".


нет на твоих скринах группировок
  
Наверх
wwwICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #847 - 02. Сентября 2010 :: 12:35
Печать  
Есть ли разница между Выполнить с передачей текста запроса сразу или предварительной подготовкой текста запроса?
или как на обычных, не слишком маленьких данных, эта разница слишком мала по сравнения со временем выполнения уже подготовленного запроса?

что быстрее?
Цитата:
шаблонЗапроса = Запрос.ПодготовитьТекстЗапроса(ТекстЗапроса, 1);
     ИТЗРезультат = Запрос.Выполнить(,шаблонЗапроса, 1);

или
Цитата:
     шаблонЗапроса = Запрос.ПодготовитьШаблонЗапроса();
     ИТЗРезультат = Запрос.Выполнить(,шаблонЗапроса, 1);

или
Цитата:
     ИТЗРезультат = Запрос.Выполнить();
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #848 - 03. Сентября 2010 :: 03:12
Печать  
Если хочется сначала подготовить запрос, а потом несколько раз его вызывать то лучше использовать параметризированные запросы. Но в целом при единоразовом вызове между Выполнить и Подготовить+Выполнить(без подготовки) не будет никакой разницы.
В общем для многоразового вызова советую Параметризированные для одноразового обычные и без разницы как.
  

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


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #849 - 03. Сентября 2010 :: 06:34
Печать  
vandalsvq писал(а) 03. Сентября 2010 :: 03:12:
В общем для многоразового вызова советую Параметризированные

Я про это и спрашиваю. Приведи простейший пример, плиз.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #850 - 03. Сентября 2010 :: 06:39
Печать  
Начальные тесты класса ПрямойЗапрос для системы тестирования 1С++.

В приложенном файле - сам класс и его определение.

ЗЫ при желании могу выделить отдельно необходимые файлы и классы для автономного запуска тестов в любых конфах 77.
  

_____________2.7z ( 3 KB | Загрузки )

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Потенциальный баг в классе ПрямойЗапрос
Ответ #851 - 03. Сентября 2010 :: 12:58
Печать  
Изучая исходники класса обнаружил, что ДатаТА, ПозицияТА и ДокументТА вычисляются один раз при создании класса и затем используются при построении виртуальных таблиц. Но ведь между созданием класса и построением виртуальных таблиц может быть значительный интервал времени. ТА может сдвинуться или вообще слететь. Это может приводить к ошибкам в остатках или к неправильному построению виртуальной таблицы. Я неправ?
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Потенциальный баг в классе ПрямойЗапрос
Ответ #852 - 03. Сентября 2010 :: 13:49
Печать  
Alex_Bob писал(а) 03. Сентября 2010 :: 12:58:
Изучая исходники класса обнаружил, что ДатаТА, ПозицияТА и ДокументТА вычисляются один раз при создании класса и затем используются при построении виртуальных таблиц. Но ведь между созданием класса и построением виртуальных таблиц может быть значительный интервал времени. ТА может сдвинуться или вообще слететь. Это может приводить к ошибкам в остатках или к неправильному построению виртуальной таблицы. Я неправ?

Приведи пожалуйста версию класса - данная ошибка была давным давно исправлена.
  
Наверх
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #853 - 03. Сентября 2010 :: 14:09
Печать  
Цитата:
... обнаружил, что ДатаТА, ПозицияТА и ДокументТА вычисляются один раз при создании класса и затем используются при построении виртуальных таблиц. Но ведь между созданием класса и построением виртуальных таблиц может быть значительный интервал времени. ТА может сдвинуться или вообще слететь. Это может приводить к ошибкам в остатках или к неправильному построению виртуальной таблицы. Я неправ?

Соврал. Расчет происходит при подготовке запроса. А если учесть, что повторное использование запросов с участием виртуальных таблиц не рекомендуется, то этот временной разрыв - миллисекунды.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
cleaner
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 26. Января 2010
Re: Класс "ПрямойЗапрос"
Ответ #854 - 05. Сентября 2010 :: 05:25
Печать  
Небольшой пример для тех, кто только начинает переходить на ПрямойЗапрос:

[code]      ТекстЗапросаДвижений =
     "SELECT
     |        $Жур.ТекущийДокумент КАК [Документ $Документ]
     //|        Журнал.IDDOC as [Документ $Документ]
     |      , $Жур.ВидДокумента КАК Документ_вид
     //|      , Журнал.IDDOCDef as Документ_вид
     |      , $Жур.ДатаДокумента КАК [ДатаДок $Дата]      
     //|      , "+?(БазаSQL = 0,"Журнал.DATE","$НачалоПериода.День(Журнал.DATE_TIME_IDDOC)")+" as ДатаДок
     |      
     |      , $СпрДоговора.ТекущийЭлемент КАК [Договор $Справочник.Договоры]
     //|      , СпрДоговора.ID КАК [Договор $Справочник.Договоры]
     |      , $СпрКонтрагенты.ТекущийЭлемент КАК [Покупатель $Справочник.Контрагенты]
     //|      , СпрКонтрагенты.ID КАК [Покупатель $Справочник.Контрагенты]
     |
     |      , $НаименованиеРегистра.ВидДвижения КАК ПриходРасход
     //|      , НаименованиеРегистра.DEBKRED КАК ПриходРасход
     |
     |      , НаименованиеРегистра.Фирма КАК [Фирма $Справочник.Фирмы]
     |      , НаименованиеРегистра.ВидДолга КАК [ВидДолга $Перечисление.ВидыДолга]
     |      , НаименованиеРегистра.КредДокумент КАК [КредДокумент $Документ]
     |      , НаименованиеРегистра.ДокументОплаты КАК [ДокументОплаты $Документ]
     |      , НаименованиеРегистра.КодОперации КАК [КодОперации $Перечисление.КодыОпераций]
     |
     |      , НаименованиеРегистра.СуммаРуб*(1 - $НаименованиеРегистра.ВидДвижения * 2) КАК СуммаВзаиморасчетовВВалютеБухУчета
     //|      , $НаименованиеРегистра.СуммаРуб*(1 - НаименованиеРегистра.DEBKRED * 2) КАК СуммаВзаиморасчетовВВалютеБухУчета
     |
     |      , Жур.$ОбщийРеквизит.Автор  КАК [Автор $Справочник.Пользователи]
     |      , Жур.$ОбщийРеквизит.Проект КАК [Проект $Справочник.Проекты]
     |      , Жур.$ОбщийРеквизит.ЮрЛицо КАК [ЮрЛицо $Справочник.СвоиЮрЛица]
     |
     |FROM Регистр."+НаименованиеРегистра+" КАК НаименованиеРегистра
     //|FROM $Регистр."+НаименованиеРегистра+" КАК НаименованиеРегистра
     |      INNER JOIN ЖурналДокументов КАК Жур ON $НаименованиеРегистра.ТекущийДокумент = $Жур.ТекущийДокумент
     //|      INNER JOIN "+?(БазаSQL = 0,"1SJOURN","_1SJOURN")+" AS Журнал "+?(БазаSQL = 0,"","With (NOLOCK)")+" ON НаименованиеРегистра.IDDOC = Журнал.IDDOC
     |      LEFT JOIN Справочник.Договоры КАК СпрДоговора ON $СпрДоговора.ТекущийЭлемент = НаименованиеРегистра.Договор
     //|      LEFT JOIN $Справочник.Договоры КАК СпрДоговора ON СпрДоговора.ID = $НаименованиеРегистра.Договор
     |      LEFT JOIN Справочник.Контрагенты КАК СпрКонтрагенты ON $СпрКонтрагенты.ТекущийЭлемент = СпрДоговора.ParentExt
     //|      LEFT JOIN $Справочник.Контрагенты КАК СпрКонтрагенты ON СпрКонтрагенты.ID = СпрДоговора.ParentExt
     |
     |WHERE $Жур.ДатаДокумента BETWEEN :ВыбНачПериода AND :ВыбКонПериода~
     //|WHERE ("+?(БазаSQL = 0,"Журнал.DATE","Журнал.DATE_TIME_IDDOC")+" BETWEEN :ВыбНачПериода"+?(БазаSQL = 0,"~~","")+" AND :ВыбКонПериода"+?(БазаSQL = 0,"~~","~")+")
     |
     |";[/code]

В примере показано, что меняется. Старый вариант запроса для DBF закомментирован
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 55 56 [57] 58 59 60
ОтправитьПечать