![]() |
|
Запрос возвращает разные данные на конец закрытого периода | ☑ | ||
---|---|---|---|---|
0
Бешеная Нога
21.11.13
✎
17:49
|
Есть запрос. Получает остатки по РАУЗУ на начало и конец периода в разрезе подразделений и номенклатурных групп, получает такие же остатки по БУ по 20 счету и сравнивает их на предмет расхождения.
Запросы выполняется с датами 01.01.2013 и 30.09.2013. Дата запрета редактирования 31.12.2013. Почему несколько раз нажимая кнопку Сфомировать я получаю разные итоги по колонке РАЗНИЦАНАЧАЛЬНАЯ? Запрос выполнялся на живой базе УПП 1.3. Может что-то с блокировками и ключами аналитик? Вот запрос: ВЫБРАТЬ АналитикаВидаУчета.Ссылка КАК Ссылка ПОМЕСТИТЬ ТаблицаАналитикВидаУчетаЗатраты ИЗ РегистрСведений.АналитикаВидаУчета КАК АналитикаВидаУчета ГДЕ АналитикаВидаУчета.СчетУчета В ИЕРАРХИИ(&СчетУчета) И АналитикаВидаУчета.РазделУчета = &РазделУчета И АналитикаВидаУчета.Организация = &Организация ИНДЕКСИРОВАТЬ ПО Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ АналитикаВидаУчета.Ссылка КАК Ссылка ПОМЕСТИТЬ ТаблицаАналитикВидаУчетаЗатратыНаВыпуск ИЗ РегистрСведений.АналитикаВидаУчета КАК АналитикаВидаУчета ГДЕ АналитикаВидаУчета.СчетУчета В ИЕРАРХИИ(&СчетУчета) И АналитикаВидаУчета.РазделУчета = &РазделУчета2 И АналитикаВидаУчета.Организация = &Организация ИНДЕКСИРОВАТЬ ПО Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ АналитикаВидаУчета.Ссылка КАК Ссылка ПОМЕСТИТЬ ТаблицаАналитикВидаУчетаПолная ИЗ РегистрСведений.АналитикаВидаУчета КАК АналитикаВидаУчета ГДЕ АналитикаВидаУчета.СчетУчета В ИЕРАРХИИ(&СчетУчета) И (АналитикаВидаУчета.РазделУчета = &РазделУчета ИЛИ АналитикаВидаУчета.РазделУчета = &РазделУчета2) И АналитикаВидаУчета.Организация = &Организация ИНДЕКСИРОВАТЬ ПО Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(УчетЗатратРеглОстатки.КоличествоОстаток) КАК КоличествоНачальныйОстаток, СУММА(УчетЗатратРеглОстатки.СтоимостьОстаток) КАК СтоимостьНачальныйОстаток, РегАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, РегАналитикаВидаУчета.ПодразделениеОрганизации КАК ПодразделениеОрганизации ПОМЕСТИТЬ ТаблицаНачальныхОстатков ИЗ РегистрНакопления.УчетЗатратРегл.Остатки( &НачалоПериода, АналитикаВидаУчета В (ВЫБРАТЬ ТаблицаАналитикВидаУчета.Ссылка ИЗ ТаблицаАналитикВидаУчетаПолная КАК ТаблицаАналитикВидаУчета)) КАК УчетЗатратРеглОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаРаспределенияЗатрат КАК РегАналитикаРаспределенияЗатрат ПО УчетЗатратРеглОстатки.АналитикаРаспределенияЗатрат = РегАналитикаРаспределенияЗатрат.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК РегАналитикаУчетаЗатрат ПО УчетЗатратРеглОстатки.АналитикаУчетаЗатрат = РегАналитикаУчетаЗатрат.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК РегАналитикаВидаУчета ПО УчетЗатратРеглОстатки.АналитикаВидаУчета = РегАналитикаВидаУчета.Ссылка СГРУППИРОВАТЬ ПО РегАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа, РегАналитикаВидаУчета.ПодразделениеОрганизации ИНДЕКСИРОВАТЬ ПО ПодразделениеОрганизации, НоменклатурнаяГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(УчетЗатратРеглОстатки.КоличествоОстаток) КАК КоличествоКонечныйОстаток, СУММА(УчетЗатратРеглОстатки.СтоимостьОстаток) КАК СтоимостьКонечныйОстаток, РегАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, РегАналитикаВидаУчета.ПодразделениеОрганизации КАК ПодразделениеОрганизации ПОМЕСТИТЬ ТаблицаКонечныхОстатков ИЗ РегистрНакопления.УчетЗатратРегл.Остатки( ДОБАВИТЬКДАТЕ(&ОкончаниеПериода, СЕКУНДА, 1), АналитикаВидаУчета В (ВЫБРАТЬ ТаблицаАналитикВидаУчета.Ссылка ИЗ ТаблицаАналитикВидаУчетаПолная КАК ТаблицаАналитикВидаУчета)) КАК УчетЗатратРеглОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаРаспределенияЗатрат КАК РегАналитикаРаспределенияЗатрат ПО УчетЗатратРеглОстатки.АналитикаРаспределенияЗатрат = РегАналитикаРаспределенияЗатрат.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК РегАналитикаУчетаЗатрат ПО УчетЗатратРеглОстатки.АналитикаУчетаЗатрат = РегАналитикаУчетаЗатрат.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК РегАналитикаВидаУчета ПО УчетЗатратРеглОстатки.АналитикаВидаУчета = РегАналитикаВидаУчета.Ссылка СГРУППИРОВАТЬ ПО РегАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа, РегАналитикаВидаУчета.ПодразделениеОрганизации ИНДЕКСИРОВАТЬ ПО ПодразделениеОрганизации, НоменклатурнаяГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЕСТЬNULL(ТаблицаНачальныхОстатков.НоменклатурнаяГруппа, ТаблицаКонечныхОстатков.НоменклатурнаяГруппа) КАК НоменклатурнаяГруппа, СУММА(ЕСТЬNULL(ТаблицаНачальныхОстатков.СтоимостьНачальныйОстаток, 0)) КАК СтоимостьНачальныйОстаток, СУММА(ЕСТЬNULL(ТаблицаКонечныхОстатков.СтоимостьКонечныйОстаток, 0)) КАК СтоимостьКонечныйОстаток, ЕСТЬNULL(ТаблицаНачальныхОстатков.ПодразделениеОрганизации, ТаблицаКонечныхОстатков.ПодразделениеОрганизации) КАК ПодразделениеОрганизации ПОМЕСТИТЬ ТаблицаОстатковРауз ИЗ ТаблицаНачальныхОстатков КАК ТаблицаНачальныхОстатков ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаКонечныхОстатков КАК ТаблицаКонечныхОстатков ПО ТаблицаНачальныхОстатков.НоменклатурнаяГруппа = ТаблицаКонечныхОстатков.НоменклатурнаяГруппа И ТаблицаНачальныхОстатков.ПодразделениеОрганизации = ТаблицаКонечныхОстатков.ПодразделениеОрганизации СГРУППИРОВАТЬ ПО ЕСТЬNULL(ТаблицаНачальныхОстатков.НоменклатурнаяГруппа, ТаблицаКонечныхОстатков.НоменклатурнаяГруппа), ЕСТЬNULL(ТаблицаНачальныхОстатков.ПодразделениеОрганизации, ТаблицаКонечныхОстатков.ПодразделениеОрганизации) ИНДЕКСИРОВАТЬ ПО ПодразделениеОрганизации, НоменклатурнаяГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ХозрасчетныйОстатки.Субконто2 КАК НоменклатурнаяГруппа, СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК СуммаНачальныйОстатокДТ, ХозрасчетныйОстатки.Субконто1 КАК ПодразделениеОрганизации ПОМЕСТИТЬ ТаблицаНачальныхОстатковБУ ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(&НачалоПериода, Счет В ИЕРАРХИИ (&СчетУчета), &ПорядокСубконто, Организация = &Организация) КАК ХозрасчетныйОстатки СГРУППИРОВАТЬ ПО ХозрасчетныйОстатки.Субконто1, ХозрасчетныйОстатки.Субконто2 ИНДЕКСИРОВАТЬ ПО ПодразделениеОрганизации, НоменклатурнаяГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ХозрасчетныйОстатки.Субконто2 КАК НоменклатурнаяГруппа, СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК СуммаКонечныйОстатокДТ, ХозрасчетныйОстатки.Субконто1 КАК ПодразделениеОрганизации ПОМЕСТИТЬ ТаблицаКонечныхОстатковБУ ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(ДОБАВИТЬКДАТЕ(&ОкончаниеПериода, СЕКУНДА, 1), Счет В ИЕРАРХИИ (&СчетУчета), &ПорядокСубконто, Организация = &Организация) КАК ХозрасчетныйОстатки СГРУППИРОВАТЬ ПО ХозрасчетныйОстатки.Субконто1, ХозрасчетныйОстатки.Субконто2 ИНДЕКСИРОВАТЬ ПО ПодразделениеОрганизации, НоменклатурнаяГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЕСТЬNULL(ТаблицаНачальныхОстатковБУ.НоменклатурнаяГруппа, ТаблицаКонечныхОстатковБУ.НоменклатурнаяГруппа) КАК НоменклатурнаяГруппа, СУММА(ЕСТЬNULL(ТаблицаНачальныхОстатковБУ.СуммаНачальныйОстатокДТ, 0)) КАК СуммаНачальныйОстатокДТ, СУММА(ЕСТЬNULL(ТаблицаКонечныхОстатковБУ.СуммаКонечныйОстатокДТ, 0)) КАК СуммаКонечныйОстатокДТ, ЕСТЬNULL(ТаблицаНачальныхОстатковБУ.ПодразделениеОрганизации, ТаблицаКонечныхОстатковБУ.ПодразделениеОрганизации) КАК ПодразделениеОрганизации ПОМЕСТИТЬ ТаблицаОстатковБУ ИЗ ТаблицаНачальныхОстатковБУ КАК ТаблицаНачальныхОстатковБУ ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаКонечныхОстатковБУ КАК ТаблицаКонечныхОстатковБУ ПО ТаблицаНачальныхОстатковБУ.НоменклатурнаяГруппа = ТаблицаКонечныхОстатковБУ.НоменклатурнаяГруппа И ТаблицаНачальныхОстатковБУ.ПодразделениеОрганизации = ТаблицаКонечныхОстатковБУ.ПодразделениеОрганизации СГРУППИРОВАТЬ ПО ЕСТЬNULL(ТаблицаНачальныхОстатковБУ.НоменклатурнаяГруппа, ТаблицаКонечныхОстатковБУ.НоменклатурнаяГруппа), ЕСТЬNULL(ТаблицаНачальныхОстатковБУ.ПодразделениеОрганизации, ТаблицаКонечныхОстатковБУ.ПодразделениеОрганизации) ИНДЕКСИРОВАТЬ ПО ПодразделениеОрганизации, НоменклатурнаяГруппа ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЕСТЬNULL(ТаблицаОстатковРауз.ПодразделениеОрганизации, ТаблицаОстатковБУ.ПодразделениеОрганизации) КАК ПодразделениеОрганизации, ЕСТЬNULL(ТаблицаОстатковРауз.НоменклатурнаяГруппа, ТаблицаОстатковБУ.НоменклатурнаяГруппа) КАК НоменклатурнаяГруппа, ЕСТЬNULL(ТаблицаОстатковРауз.СтоимостьНачальныйОстаток, 0) КАК СтоимостьНачальныйОстаток, ЕСТЬNULL(ТаблицаОстатковБУ.СуммаНачальныйОстатокДТ, 0) КАК СуммаНачальныйОстатокДТ, ЕСТЬNULL(ТаблицаОстатковРауз.СтоимостьНачальныйОстаток, 0) - ЕСТЬNULL(ТаблицаОстатковБУ.СуммаНачальныйОстатокДТ, 0) КАК РАЗНИЦАНАЧАЛЬНАЯ, ЕСТЬNULL(ТаблицаОстатковРауз.СтоимостьКонечныйОстаток, 0) КАК СтоимостьКонечныйОстаток, ЕСТЬNULL(ТаблицаОстатковБУ.СуммаКонечныйОстатокДТ, 0) КАК СуммаКонечныйОстатокДТ, ЕСТЬNULL(ТаблицаОстатковРауз.СтоимостьКонечныйОстаток, 0) - ЕСТЬNULL(ТаблицаОстатковБУ.СуммаКонечныйОстатокДТ, 0) КАК РАЗНИЦАКОНЕЧНАЯ ИЗ ТаблицаОстатковРауз КАК ТаблицаОстатковРауз ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаОстатковБУ КАК ТаблицаОстатковБУ ПО ТаблицаОстатковРауз.НоменклатурнаяГруппа = ТаблицаОстатковБУ.НоменклатурнаяГруппа И ТаблицаОстатковРауз.ПодразделениеОрганизации = ТаблицаОстатковБУ.ПодразделениеОрганизации ИТОГИ СУММА(РАЗНИЦАНАЧАЛЬНАЯ), СУММА(РАЗНИЦАКОНЕЧНАЯ) ПО ОБЩИЕ |
|||
1
Бешеная Нога
21.11.13
✎
17:49
|
опечатка: Дата запрета редактирования 31.12.2012
|
|||
2
Бешеная Нога
21.11.13
✎
17:58
|
апну чтоли
|
|||
3
Бешеная Нога
21.11.13
✎
19:02
|
Спят наверно все...
|
|||
4
kosts
21.11.13
✎
19:35
|
Переменные в обработке не обнуляешь
|
|||
5
GANR
21.11.13
✎
19:45
|
(0) Профайлер не пробовал смотреть? В СКЛ-варианте запрос выглядит одинаково или по-разному при условии, что выходные данные разные? Если по-разному - следует написать на v8@1c.ru.
|
|||
6
GANR
21.11.13
✎
19:52
|
(0) А данные регистра сведений АналитикаУчета, случайно, не "прыгают" от раза к разу.
|
|||
7
Бешеная Нога
21.11.13
✎
20:23
|
(4) это в консоли запросов
|
|||
8
Бешеная Нога
21.11.13
✎
20:24
|
(6) еще не смотрел, попробую глянуть
(7) а почему они должны прыгать? |
|||
9
GANR
21.11.13
✎
21:49
|
(8) Например, некое фоновое задание с ними что-нибудь делает (правда, самому в такое не верится, но кто знает).
|
|||
10
GANR
21.11.13
✎
21:51
|
(8) Да, кстати, а параметры запроса, подаваемые на вход точно одинаковые? Будем постепенно исключать версии.
|
|||
11
GANR
21.11.13
✎
21:57
|
А если переписать (0) на вложенные запросы?
СУММА(РАЗНИЦАНАЧАЛЬНАЯ) - не может ли это быть фантомное чтение, от которого защищает только самый высокий уровень блокировок Serializable http://snipurl.com/287dr20 ? |
|||
12
GANR
21.11.13
✎
22:00
|
Вспомнил, что когда-то смотрел запросы в профайлере и видел, что таблица остатков ведется на самую последнюю дату, а то что ДО этой даты - просто высчитывается путем вычитания оборотов/проводок. И, естественно, дата запрета от такой ситуации едва ли спасет - ВО! Вот это очень вероятно.
|
|||
13
hhhh
21.11.13
✎
22:04
|
(8) а причем здесь закрытые периоды? Специально нам лапшу вешаешь на уши, чтобы мы сбились со следа?
|
|||
14
hhhh
21.11.13
✎
22:06
|
и савмое первое, надо попробовать 2012-й год.
|
|||
15
GANR
21.11.13
✎
22:07
|
(13) Бешеная Нога не первый год программирует тяжелые конфигурации.
Короче, для того, чтобы гарантировать правильность этого самого остатка, система должна заблокировать таблицу итогов по счету _AccTtl0<n> самым жестким образом. А если это сделать - так все пользователи работать не смогут http://help1c.com/faq/view/673.html. Может, система этого не делает??? |
|||
16
GANR
21.11.13
✎
22:08
|
Может, решающее значение имеет режим разделения итогов по регистру?
|
|||
17
hhhh
21.11.13
✎
22:10
|
(15) не думаю что пользователи вносят данные за 2012-й год. Да еще и в большом количестве
|
|||
18
GANR
21.11.13
✎
22:16
|
(17) Неееет... Если считать, что в 2012 гарантированно ничего не меняется.
Засада в том, что отчет считает конечный остаток используя СКЛ-ную таблицу итогов по регистру - там итог считается на ВСЕ движения для каждого счета и аналитики, полагаю - вот она то и "пляшет" скорее всего _AccTtl0<n> и из-за нее неправильный остаток. (0) Посмотри, что в этой таблице на уровне СКЛ находится - должно сразу стать понятно, в чем дело. Если в профайлере видно обращение к этой таблице _AccTtl0<n> - понятно, в чем дело. |
|||
19
sanja26
21.11.13
✎
22:18
|
а вот это зачем вообще?
ТаблицаАналитикВидаУчетаЗатратыНаВыпуск ТаблицаАналитикВидаУчетаЗатраты |
|||
20
sanja26
21.11.13
✎
22:25
|
по-моему, здесь проще ли здесь объединить
ТаблицаНачальныхОстатков КАК ТаблицаНачальныхОстатков ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаКонечныхОстатков КАК ТаблицаКонечныхОстатков |
|||
21
GANR
21.11.13
✎
22:33
|
Короче, если _AccTtl0<n> не блокируется при запросе (0) - тогда понятно как день почему остатки пляшут. Я бы попробовал принудительно БлокировкаДанных заблокировать все, что необходимо сохранить неизменным на время выполнения запроса и уж потом смотреть результат.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |