| 
    
        
     
     | 
    
    
  | 
Запрос возвращает разные данные на конец закрытого периода | ☑ | ||
|---|---|---|---|---|
| 
    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) - тогда понятно как день почему остатки пляшут. Я бы попробовал принудительно БлокировкаДанных заблокировать все, что необходимо сохранить неизменным на время выполнения запроса и уж потом смотреть результат.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |