Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Запрос выдает разные данные в рабочей базе (общие формы)

Запрос выдает разные данные в рабочей базе (общие формы)
Я
   Михаил 1С
 
25.02.21 - 13:02
Здравия вам, форумчане.

Расскажите, кто знает ответ на такую беду?

В 1С (на общих формах) отчет выдает нестабильные данные.
Запрос обращается к бух.итогам. А именно - к таблицам вида РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт. И вот что странно - в рабочей базе отчет показывает то одни результаты, то другие. Различие не большое, не для всех Субконто сразу, но и это не приятно.
Причем - в копии базы, которая делается каждый день - всё хорошо.

Есть предположение - это от того, что запрос работает очень долго, и при работе пользователей бух.итоги начинают пересчитываться и запрос иногда что-то не захватывает.
Но это же фигня какая-то!
Это что - мне теперь каждый запрос надо опасаться делать, раз в 1С бывает такая неустойчивость?

Как вы думаете - может ли быть причиной именно такие вещи, когда запрос, выполняя пять раз обращения к бух.итогам, может наткнуться на тот момент, когда бух.итоги содержат не актуальные данные?

Дополнительные детали:
1. Запрос выполняется в фоновом задании. Работает около 1 часа.
2. Похоже, что когда запрос работал просто в форме, то этой проблемы не было (но не точно). Раньше был обычный синхронный способ исполнения кода, а пол года назад они попросили сделать выполнение в фоновом задании.
3. Методист уверяет, что никто не проводит тех документов, которые влияют на эти счета в этом периоде.
И, дескать, ключевые справочники никто не может трогать. Хотя, кто знает, если все не ясно, то и это отменять нельзя.

ПС: Общие формы, платформа 8.3.17,  База: УПП 1.2 (сильно доработанная).
   ДенисЧ
 
1 - 25.02.21 - 13:06
Сделай так, чтобы запрос а) работал одним куском и б) быстро.
   Малыш Джон
 
2 - 25.02.21 - 13:07
(0) И ты здрав будь, боярин.
В беде лихой, что с тобой приключилась, запрос повинен. Не должно ему час отрабатывать, потому как регистр ты вестимо для изменений не блокируешь, а пользователи поганые работать с ним не перестают, вот и маешься ты.
   Михаил 1С
 
3 - 25.02.21 - 13:12
(1) Хм, пока не удалось этого!
И то я молодец - вместо того, что было раньше ускорил в 2.5 раза.
Было 30 временных таблиц с использованием бух.итогов, я нашел все общие случаи и сделал вначале 6 временных таблиц, которые считают все необходимые бух.даные.

А как ещё сократить - пока не знаю.
   Михаил 1С
 
4 - 25.02.21 - 13:13
(2) Вот же тати такие...
А я знал, я знал, что всё из-за них :(
   DrShad
 
5 - 25.02.21 - 13:17
запрос около часа? запрос в студию
   Михаил 1С
 
6 - 25.02.21 - 13:17
(2) Да ведь всего 6 (даже 5) временных таблиц обращаются к Бух.регистру!
О-небо, за что напасть такая на нас грешных?? :((

Или эта гадская ОборотыДтКт очень долгая ?

Причём, методист на пытках божилась, что этот период (прошлый год) по этим счетам никто не трогает.
   DrShad
 
7 - 25.02.21 - 13:20
отчет на сотни тысяч строк выводится за несколько минут, а тут выполнение запроса около часа?
   Галахад
 
8 - 25.02.21 - 13:20
(6) Ну ежели не трогают, тогда делай свой запрос в свежей копии.
   Михаил 1С
 
9 - 25.02.21 - 13:22
(8) Это можно. Но не спортивно.

Да и самому не понятно - почему запрос вдруг оказался такой неустойчивой вещью?
Я всегда думал, что вода мокрая, а оказывается она и твёрдая бывает.

Надо прямо понять как жить дальше.
   Михаил 1С
 
10 - 25.02.21 - 13:24
(7) Да, над ним постарались предыдущие программисты :)
Я его только улучшаю, но не берусь охватить сразу весь.

И данных в базе много. Может быть и сервер не очень хорош.
   Михаил 1С
 
11 - 25.02.21 - 13:24
(5) Оо, я узнаю у начальства. Если позволят - напишу.
Или постараюсь хотябы начало написать.
   piter3
 
12 - 25.02.21 - 13:25
На копии можно было бы итоги пересчитать,не факт,но все же
   Масянька
 
13 - 25.02.21 - 13:27
(10) Старая 1с-овская мудрость: работает - не трожь (С)
Доулучшался...
   Kassern
 
14 - 25.02.21 - 13:29
(6) запускаешь консоль запросов и смотришь какой из пакетов жрет львиную долю времени, анализируешь его и делаешь, чтобы выполнялся быстро. Час для отчета по мне так это оооочень долго
   Галахад
 
15 - 25.02.21 - 13:31
(13) Устаревшая, мудрость-то.
   Михаил 1С
 
16 - 25.02.21 - 13:34
(14) Спасибо.
   Масянька
 
17 - 25.02.21 - 13:34
(15) Спорно.
   Малыш Джон
 
18 - 25.02.21 - 13:35
(17) а может и без
   d4rkmesa
 
19 - 25.02.21 - 13:36
(0) Смотря какой запрос. К примеру, с коррелирующим подзапросом, который зависит от упорядочивания, результаты могут быть разными при одних и тех же данных, иногда.
   Михаил 1С
 
20 - 25.02.21 - 14:01
(5) Вот это начало запроса. Весь приводить не могу

ВЫБРАТЬ РАЗЛИЧНЫЕ
    РегСоответствие.Счет
ПОМЕСТИТЬ НашиСчета
ИЗ
    РегистрСведений.РегСоответствие КАК РегСоответствие
ГДЕ
    РегСоответствие.Период = &Период
;

///////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СчетДт КАК СчетДт,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ВЫРАЗИТЬ(ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Справочник.СтатьиЗатрат) КАК СубконтоДт1,
    ВЫРАЗИТЬ(ХозрасчетныйОборотыДтКт.СубконтоДт2 КАК Справочник.ПодразделенияОрганизаций) КАК СубконтоДт2
ПОМЕСТИТЬ Обороты_Дт_Суб1
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
            &НачалоПериода,
            &КонецПериода,
            ,
            СчетДт В ИЕРАРХИИ
                    (ВЫБРАТЬ
                        НашиСчета.Счет
                    ИЗ
                        НашиСчета КАК НашиСчета)
                И НЕ СчетДт В ИЕРАРХИИ (&Счет20),
            &ВидыСубконто1,
            ,
            ,
            Организация = &Организация) КАК ХозрасчетныйОборотыДтКт
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СчетДт КАК СчетДт,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ВЫРАЗИТЬ(ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Справочник.ПрочиеДоходыИРасходы) КАК СубконтоДт1,
    ВЫРАЗИТЬ(ХозрасчетныйОборотыДтКт.СубконтоДт2 КАК Справочник.ПодразделенияОрганизаций) КАК СубконтоДт2
ПОМЕСТИТЬ Обороты_Дт_Суб2
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
            &НачалоПериода,
            &КонецПериода,
            ,
            СчетДт В ИЕРАРХИИ
                    (ВЫБРАТЬ
                        НашиСчета.Счет
                    ИЗ
                        НашиСчета КАК НашиСчета)
                И НЕ СчетДт В ИЕРАРХИИ (&Счет20),
            &ВидыСубконто2,
            ,
            ,
            Организация = &Организация) КАК ХозрасчетныйОборотыДтКт
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СчетДт КАК СчетДт,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ВЫРАЗИТЬ(ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Справочник.ПрочиеДоходыИРасходы) КАК СубконтоДт1,
    ВЫРАЗИТЬ(ХозрасчетныйОборотыДтКт.СубконтоДт2 КАК Справочник.ПодразделенияОрганизаций) КАК СубконтоДт2,
    ВЫРАЗИТЬ(ХозрасчетныйОборотыДтКт.СубконтоДт3 КАК Справочник.НоменклатурныеГруппы) КАК СубконтоДт3
ПОМЕСТИТЬ Обороты_Дт_Суб3
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
            &НачалоПериода,
            &КонецПериода,
            ,
            СчетДт В ИЕРАРХИИ
                (ВЫБРАТЬ
                    НашиСчета.Счет
                ИЗ
                    НашиСчета КАК НашиСчета),
            &ВидыСубконто3,
            ,
            ,
            Организация = &Организация) КАК ХозрасчетныйОборотыДтКт
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СчетКт КАК СчетКт,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоДт2
ПОМЕСТИТЬ Обороты_ДтЗатрат_Суб1_Кт
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
            &НачалоПериода,
            &КонецПериода,
            ,
            СчетДт В ИЕРАРХИИ (&ЗатратныеСчета),
            &ВидыСубконто1,
            СчетКт В ИЕРАРХИИ
                    (ВЫБРАТЬ
                        НашиСчета.Счет
                    ИЗ
                        НашиСчета КАК НашиСчета)
                И НЕ СчетКт В ИЕРАРХИИ (&Счет20),
            ,
            Организация = &Организация) КАК ХозрасчетныйОборотыДтКт
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ХозрасчетныйОборотыДтКт.СчетКт КАК СчетКт,
    ХозрасчетныйОборотыДтКт.СуммаОборот,
    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    ХозрасчетныйОборотыДтКт.СубконтоДт2
ПОМЕСТИТЬ Обороты_ДтЗатрат_Суб2_Кт
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
            &НачалоПериода,
            &КонецПериода,
            ,
            СчетДт В ИЕРАРХИИ (&ЗатратныеСчета),
            &ВидыСубконто2,
            СчетКт В ИЕРАРХИИ
                    (ВЫБРАТЬ
                        НашиСчета.Счет
                    ИЗ
                        НашиСчета КАК НашиСчета)
                И НЕ СчетКт В ИЕРАРХИИ (&Счет20),
            ,
            Организация = &Организация) КАК ХозрасчетныйОборотыДтКт
;

////////////////////////////////////////////////////////////////////////////////
   Михаил 1С
 
21 - 25.02.21 - 14:03
(19) Выше я привел запрос. Его начало, где берутся данные по бух.регистрам.
Как ты думаешь - это тот случай, что ты описал?
   Курцвейл
 
22 - 25.02.21 - 14:06
(0) Встречался с такой хренью из-за того что в Измерении регистра БУ Подразделение было то Пустая ссылка, то Null
   Kassern
 
23 - 25.02.21 - 14:10
(20) тебе доставляет удовольствие каждый раз обращаться к таблице и ее отбирать таким путем СчетДт В ИЕРАРХИИ (ВЫБРАТЬ НашиСчета.Счет ИЗ НашиСчета КАК НашиСчета) И НЕ СчетДт В ИЕРАРХИИ (&Счет20),&ВидыСубконто2.... А нельзя было один раз получить временную таблицу, а потом уже работать с ней?
   DrShad
 
24 - 25.02.21 - 14:12
(20) попробуй для начала проиндексировать свои ВТ
   DrShad
 
25 - 25.02.21 - 14:13
(23) + 100500
   DrShad
 
26 - 25.02.21 - 14:14
даже боюсь представить что идет потом
   Михаил 1С
 
27 - 25.02.21 - 14:16
(26) Потом идёт полный ужас.
   Михаил 1С
 
28 - 25.02.21 - 14:17
(23) Расскажи что я упустил?
Мне казалось, что я и так поместил счета во временную таблицу НашиСчета.
А что ещё можно улучшить?
   Dmitrii
 
29 - 25.02.21 - 14:17
(11) >> узнаю у начальства. Если позволят - напишу.

Детский лепет какой-то.
Тебя же не данные просят предоставить, а текст запроса.

Боюсь даже представить - что там за *авнокод, что его готовы признать охраняемой интеллектуальной собственностью и секретным ноу-хау.
   DrShad
 
30 - 25.02.21 - 14:19
(28) один раз взять таблицу оборотов, поместить ее в ВТ, а уже все дальнейшие выборки делать из нее
 
 Рекламное место пустует
   Михаил 1С
 
31 - 25.02.21 - 14:20
(30) Таблица оборотов берется по разным Видам субконто.
Поэтому я и делаю вначале три ВТ по оборотам, хотя вроде бы одниковые там запросы.
   Kassern
 
32 - 25.02.21 - 14:21
(28) скинь пакет с максимальным временем выполнения, вот там самый сок должен быть
   DrShad
 
33 - 25.02.21 - 14:21
(31) так что тебе мешает эти разные субконто вытащить из одной ВТ?
   DrShad
 
34 - 25.02.21 - 14:23
(32) он же до сих пор на УПП 1.2 откуда у него консоль запросов )))
   Dmitrii
 
35 - 25.02.21 - 14:23
(28) >> что ещё можно улучшить?

Для начала переписать полностью запрос.
Не использовать таблицу ОборотыДтКт.
Получать данные не из виртуальных таблиц, а из первичных - Хозрасчетный и Хозрасчетный.Субконто.

Но боюсь, что ты не осилишь, судя по тексту из (20). Без обид.
   Михаил 1С
 
36 - 25.02.21 - 14:24
(33) Эквилибризм должен быть помощнее, чем у меня.
Если ставить в параметр ВидСубконто, то дальше "все само".
А так прийдется ручками дальше многое собирать.

Это прямо труд не детский. Мне так кажется.
   Cthulhu
 
37 - 25.02.21 - 14:28
(28): возможно, ты упустил тот факт, что каждое обращение к временной таблице (в запросе - а описании источника данных "ИЗ" или в соединении) - это ее расчет по основным таблицам.
   Михаил 1С
 
38 - 25.02.21 - 14:28
(35) Я не обижаюсь. Я знаю, что бухгалтерия не мой конёк. Работаю на среднем хорошем уровне.
(сами назовите как хотите).

Да, это не просто для меня будет - собрать все самому из Хозрасчетный и Хозрасчетный.Субконто.
И что важно - за это уже врядли заплатят.

Но само по себе мне ново, что иногда лучше "Получать данные не из виртуальных таблиц, а из первичных".
Я думал, что авто-механизмы всегда быстрее и лучше.
Аа, или в моем случае как раз меня и подставляют эти виртуальные таблицы.
У меня же как раз проблема в том, что они не всегда корректны...
   Cthulhu
 
39 - 25.02.21 - 14:29
в (37): не "временной" а "виртуальной", прдн
   Cthulhu
 
40 - 25.02.21 - 14:31
повторяющиеся виртуальные - засунь на старте во временную, и ее везде где надо юзай.
   Михаил 1С
 
41 - 25.02.21 - 14:31
(40) Да, я так и сделал - вместо 30 сделал 5.
   Михаил 1С
 
42 - 25.02.21 - 14:32
(40) Но в этих пяти есть разное. Разные виды субконто в первых трех. Далее еще две таблицы - они с другими условиями на счета. А между собой опять отличаются видами субконто.
   Dmitrii
 
43 - 25.02.21 - 14:35
(38) >> иногда лучше "Получать данные не из виртуальных таблиц, а из первичных".

В твоём случае точно.
У регистра бухгалтерии из виртуальных таблиц быстро работают только Остатки и Обороты. Да и то не всегда.
В остальном виртуальные таблицы РБ удобны лишь тем, что сильно упрощают жизнь программисту, который пишет запрос и позволяют сильно абстрагироваться от проблемы видов и типов субконто, их номеров и вида движения (Дт/Кт).
В 90% случаев, когда встаёт вопрос ускорения получения данных (особенно по оборотам) - правильнее написать прямые запросы к исходным таблицам. Но тексты запросов получаются большими, очень сложными для чтения и понимания.
   Cthulhu
 
44 - 25.02.21 - 14:38
(42): по твоему коду этого не видно.
один раз получи виртуальную за период в максимальном охвате и положи во временную - а уже потом дергая из этой временной отфильтровывай ее как надо (по нужным "суженным" фильтру по счетам, по субконто, etc).
странно что приходится тебе это объяснять...
   Cthulhu
 
45 - 25.02.21 - 14:41
(43): это в офиц.рекомендациях или метод.материалах есть - или просто личный "опыт, сын ошибое трудных"?..
   Kassern
 
46 - 25.02.21 - 14:42
(44) я об этом ему написал еще в (23) , но возможно это не сильно его спасет, поэтому написал скинуть самый долговыполняющийся пакет. Возможно дальше в этом запросе идут куча корявых соединений потом группировок и прочей ереси, которые жрут дофига времени.
   Dmitrii
 
47 - 25.02.21 - 14:52
(45) Личный опыт, бытовая логика и здравый смысл.
Достаточно почитать соответствующие разделы руководства, где описана реальные (физические) таблицы РБ - первичные и таблицы итогов.
А дальше становится понятным - как собираются виртуальные таблицы.
Быстро виртуальные таблицы РБ работаеют быстро только тогда, когда ты очень близко попадаешь по выборке в те исходные таблицы, из которых собирается виртуальная таблица. В остальных случаях получаешь тормоза.
Когда выборка специфическая, как у автора ветки, с высокой долей вероятности запрос к первичным  таблицам будет работать быстрее.
Особняком тут стоят остатки. Без виртуальной таблицы остатки получить невозможно.
   DrShad
 
48 - 25.02.21 - 14:55
(47) возможно посчитать самому остатки, но гемморно
   Kassern
 
49 - 25.02.21 - 14:58
(34) А что разве на упп 1.2 нельзя запустить скачанную консоль запросов? https://its.1c.ru/db/metod8dev/content/3682/hdoc
   Михаил 1С
 
50 - 25.02.21 - 15:10
(49) Можно.  Но ребята захотели еще поиздеваться.
   Kesim
 
51 - 25.02.21 - 15:10
(20) а еще попробуй выбрать все счета "Свои" с учетом Иерархии, чтобы потом вместо "И НЕ СчетДт В ИЕРАРХИИ" было "И НЕ СчетДт В"
   Михаил 1С
 
52 - 25.02.21 - 15:13
(43) (44) (47) и всем остальным, кто помогал - Благодарю покорно! Вы пролили свет в это царство теней! Долой сумрак!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.