Переключение на Главную Страницу Страницы: 1 ... 13 14 [15] 16 17 ... 60 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" (число прочтений - 304994 )
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #210 - 12. Сентября 2009 :: 10:25
Печать  
Что-то не то с таблицей БИОстатки...
Вот запрос
Код
Выбрать все
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|Субконто1 as [МестоХранения $Субконто],
	|Субконто1_вид as МестоХранения_вид,
	|Субконто3 as [Партия $Субконто],
	|Субконто3_вид as Партия_вид,
	|Субконто2 as [ТМЦ $Субконто],
	|Субконто2_вид as ТМЦ_вид,
	|:Счет as [Счет $Счет.Основной],
	|КоличествоОстатокДт - КоличествоОстатокКт as Кво,
	|СуммаОстатокДт - СуммаОстатокКт as Сумма
	|ИЗ
	|$БИОстатки.Основной(
	|:КонДата,
	|#Счета,
	|(Субконто1,Субконто2,Субконто3),
	|(Сумма,Количество),
	|(ЛЕВО(Субконто1, 9) = :МестоХранения)
	|) as Запрос
	|ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Партии КАК Партии ПО Партии.ID = ЛЕВО(Субконто3, 9)
	|ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал $nolock ПО Журнал.IDDOC = ПРАВО($Партии.Док, 9)
	|УПОРЯДОЧИТЬ Субконто2, $Журнал.ДатаДокумента, $Журнал.ВремяДокумента  
	|";
 


База SQL. КонДата = ТекущийДокумент(). Вызывается из модуля проведения.
Выдает остатки, которые отличаются от остатков, выдаваемых стандартными бухгалтерскими итогами - причем, я не могу уловить закономерность, как-то нестабильно, раз правильно, раз неправильно Ужас
Остатки точно выдаются без учета движений текущего документа в такой записи?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #211 - 12. Сентября 2009 :: 17:21
Печать  
classic писал(а) 12. Сентября 2009 :: 10:25:
Что-то не то с таблицей БИОстатки...
Вот запрос
Код
Выбрать все
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|Субконто1 as [МестоХранения $Субконто],
	|Субконто1_вид as МестоХранения_вид,
	|Субконто3 as [Партия $Субконто],
	|Субконто3_вид as Партия_вид,
	|Субконто2 as [ТМЦ $Субконто],
	|Субконто2_вид as ТМЦ_вид,
	|:Счет as [Счет $Счет.Основной],
	|КоличествоОстатокДт - КоличествоОстатокКт as Кво,
	|СуммаОстатокДт - СуммаОстатокКт as Сумма
	|ИЗ
	|$БИОстатки.Основной(
	|:КонДата,
	|#Счета,
	|(Субконто1,Субконто2,Субконто3),
	|(Сумма,Количество),
	|(ЛЕВО(Субконто1, 9) = :МестоХранения)
	|) as Запрос
	|ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Партии КАК Партии ПО Партии.ID = ЛЕВО(Субконто3, 9)
	|ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал $nolock ПО Журнал.IDDOC = ПРАВО($Партии.Док, 9)
	|УПОРЯДОЧИТЬ Субконто2, $Журнал.ДатаДокумента, $Журнал.ВремяДокумента  
	|";
 


База SQL. КонДата = ТекущийДокумент(). Вызывается из модуля проведения.
Выдает остатки, которые отличаются от остатков, выдаваемых стандартными бухгалтерскими итогами - причем, я не могу уловить закономерность, как-то нестабильно, раз правильно, раз неправильно Ужас
Остатки точно выдаются без учета движений текущего документа в такой записи?


Однозначно там стоит условие <, без равно, поэтому не должно попадать. Однако может что-то не так.
Хотелось бы чтобы ты проверил без соединений, если без них все верно то нужно дальше смотреть что не так, если же и без них "то так то сяк" попробуй условие посмотреть (дополнительное условие ЛЕВО(Субконто1, 9) = :МестоХранения). Было бы неплохо если бы ты мог поделиться базой, я бы ее на скулу накатил и сам бы покопался.

Пы.сы. было бы неплохо показать что режим отладки выдает. Только к тхт файле в качестве прикрепления.  Подмигивание
  

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


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Класс "ПрямойЗапрос"
Ответ #212 - 14. Сентября 2009 :: 08:05
Печать  
Делаю запрос к виртуальной таблице остатков по регистру и мне надо получить значение, включая крайний документ на ТА. В документации сказано "•      КонецПериода – параметр со значением даты или документа, до которого необходимо рассчитать остатки", а мне надо не "ДО", а "ПОСЛЕ". Дату со смещением+1 как-то некрасиво использовать. Как быть? Спасибо!
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #213 - 14. Сентября 2009 :: 09:48
Печать  
Uncle писал(а) 14. Сентября 2009 :: 08:05:
Делаю запрос к виртуальной таблице остатков по регистру и мне надо получить значение, включая крайний документ на ТА. В документации сказано "•      КонецПериода – параметр со значением даты или документа, до которого необходимо рассчитать остатки", а мне надо не "ДО", а "ПОСЛЕ". Дату со смещением+1 как-то некрасиво использовать. Как быть? Спасибо!


Для даты возможно указание модификатора ~, в таком случае будет рассчитываться на конец даты. Для документа модификатор игнорируется.
  

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


I Love YaBB 2!

Сообщений: 93
Зарегистрирован: 26. Июля 2006
Re: Класс "ПрямойЗапрос"
Ответ #214 - 14. Сентября 2009 :: 10:10
Печать  
vandalsvq писал(а) 14. Сентября 2009 :: 09:48:
Uncle писал(а) 14. Сентября 2009 :: 08:05:
Делаю запрос к виртуальной таблице остатков по регистру и мне надо получить значение, включая крайний документ на ТА. В документации сказано "•      КонецПериода – параметр со значением даты или документа, до которого необходимо рассчитать остатки", а мне надо не "ДО", а "ПОСЛЕ". Дату со смещением+1 как-то некрасиво использовать. Как быть? Спасибо!


Для даты возможно указание модификатора ~, в таком случае будет рассчитываться на конец даты. Для документа модификатор игнорируется.


Это аналогично тому как я делаю сейчас
гЗапрос.УстановитьТекстовыйПараметр("КонДата",ПолучитьДатуТА()+1)
некрасиво, точнее неаккуратно  Нерешительный
А если надо будет посчитать итоги для документа в дате ТА, но уже с учетом этого документа, тогда надо писать код определения следующего документа в последовательности и указывать его в качестве границы. Вобщем выкрутиться конечно можно, но еслиб ты нашел окошко времени чтоб модификатор реагировал и на документ...  Круглые глаза
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #215 - 14. Сентября 2009 :: 10:19
Печать  
Найдем Улыбка
  

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


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #216 - 15. Сентября 2009 :: 11:57
Печать  
Эксперименты показали: БиОтатки глючит всегда, начиная со второго раза, если переменную Запрос не обнулять. У меня была глобальная переменная Запрос = СоздатьОбъект(ПрямойЗапрос) - я объект для каждого документа не создавал заново (обптимизация, ага). В таком случае остатки, выдаваемые прямым запросом с реальными практически не связаны.
Если же объект создавать заново для каждого выполнения запроса, то остатки получаются правильными практически всегда - сбой возникает на одном из 50 документов. Сейчас попробую подготовить демо базу.
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #217 - 15. Сентября 2009 :: 12:07
Печать  
В аттаче - типовая бухгалтерия для украины, демо база. В ней изменена процедура глоб. модуля "глПолучитьОстаткиПартий" - там выполняется и прямой запрос, и запрос к бухитогам. Результаты сравниваются по количеству строк, если количество строк не совпадает - выводится дамп.
Короче - нужно открывать журналы расходных, там есть документы в 2004-2005 годах, и перепроводить. Или запустить Сервис-Обработка документов, и запустить перепроведение из обработки.
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #218 - 15. Сентября 2009 :: 12:10
Печать  
Форум не разрешает большие приложения цеплять - vandalsvq, качай отсюда classic.kh.ua/buh.zip
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #219 - 15. Сентября 2009 :: 18:24
Печать  
Ну что ж... что и требовалось подтвердить. С чего мне предлагаешь начать тов. classic? С того обуждения почему я не принял твои предложения "по оптимизации", а может быть все таки с момента как я понял в чем дело?
Да все просто я с двух подряд документов посмотрел режим отладки. "Благодаря" твоей (якобы) оптимизации ты выиграл несколько мс на составлении запроса и проиграл в конечном итоге все. Поскольку ИЗНАЧАЛЬНЫЙ ТЕКСТ ЗАПРОСА в обоих случая был одинаковым (согласись что от документа к документу он не меняется), а вот параметры были разными твоя оптимизация просто напросто думала, что все это одно и тоже и поскольку экземпляр класса не уничтожался то соответственно всегда одни и теже результаты. И странно что ты не заметил что ВСЕГДА получается таблицы САМОГО ПЕРВОГО документа (который инициировал создание).

Ну а теперь о том как я добился стабильного выигрыша по сравнению с БИ.
1. Я переделал текст запроса: внутреннее соединение заменил на левое, ни к чему фильтрация результатов по условию наличия партии. Она просто "не может не быть" при партионном учете.
2. Добавил $nolock в текст после соединения со справочником партии
3. Сортировку сделал по Субконто2, $Жур.ПозицияДокумента

И кстати всегда даже без какой либо оптимизации (в смысле твоих флажков в КОП) средний выигрыш составлял 10-20% времени. Вот собственно и все.

Кстати создавать экземпляр класса можно вообще один раз, на самом деле нет смысла его всегда пересоздавать.

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

Ну в общем вот.
  

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


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #220 - 15. Сентября 2009 :: 19:30
Печать  
Спасибо.
Даже не знаю, чего ответить... И сам протупил, и время отнял, и свое и чужое...
Поставив флаг "РазрешитьОптимизациюПовторныхЗапросов" и НЕ включив его в данной задаче я ОШИБОЧНО подумал, что класс работает в своем штатном режиме.. А так как я не прописал инициализацию флага в конструкторе...
Мда, сломал, потом пол форума исписал. Спасибо еще раз. С меня ящик пиваУлыбка Можно безналом, номер счета в личку.


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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #221 - 15. Сентября 2009 :: 19:56
Печать  
classic писал(а) 15. Сентября 2009 :: 19:30:
Спасибо.
Даже не знаю, чего ответить... И сам протупил, и время отнял, и свое и чужое...
Поставив флаг "РазрешитьОптимизациюПовторныхЗапросов" и НЕ включив его в данной задаче я ОШИБОЧНО подумал, что класс работает в своем штатном режиме.. А так как я не прописал инициализацию флага в конструкторе...
Мда, сломал, потом пол форума исписал. Спасибо еще раз. С меня ящик пиваУлыбка Можно безналом, номер счета в личку.


Ящик пива говоришь... меня жена из дома с ним выгонит Улыбка.
Ничего страшного, я сразу догадался в чем дело у тебя, когда удостоверился занялся оптимизацией запроса.
А счас я спать. Больше не буду садиться за разбьоры полетов перед сном  Очень довольный, а то никогда не высплюсь. И так каждый день по 5,5 часов сплю. Не дело это.

Пы.сы. О.... а мне уже есть куда съездить, в Киев в ресторан, в Харьков за пивом  Смех.
  

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


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #222 - 16. Сентября 2009 :: 05:30
Печать  
Убрал все свои изменения. Теперь таблицы совпадают, если их проводить документ за любой день, кроме первого числа месяца. Если документ проводить первым числом, парсер генерит подозрительно короткий запрос, который очень быстро выполняется и возвращает очень мало строк (в боевой базе).
Насколько я понимаю в запросах, если документ стоит первым числом месяца, то остатки выдаются не на позицию документа, а на начало дня. Кстати, бухитоги на первом числе месяца работают раза в три дольше, чем за любой другой день.
Пример там же: classic.kh.ua/buh.zip.
Для проверки проведи последнюю расходную накладную, сравни таблицы результатов - запрос выдает неверную партию.


ОФФ: с 1-го сентября, как в школу пошел, так тоже не высыпаюсь постоянно. Ребенку все равно что 9 утра, что 6 просыпаться, а я все привыкнуть не могу. За лето расслабилсяУлыбка.
Зато хоть и не выспавшийся, но с 8 утра на работе - клиенты до сих пор привыкнуть не могут.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #224 - 16. Сентября 2009 :: 09:37
Печать  
В общем исправил класс. Вышел багофикс без изменения версии. Брать в топике темы.

Пы.сы. занимался оптимизацией запросов ин правильно задал один из параметров. Достаточно было его поменять и все стало ноормально. Больше проблем не должно быть.  Улыбка
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 13 14 [15] 16 17 ... 60
ОтправитьПечать