Имя: Пароль:
1C
1С v8
Запрос выдает разные данные в рабочей базе (общие формы)
0 Михаил 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) И ты здрав будь, боярин.
В беде лихой, что с тобой приключилась, запрос повинен. Не должно ему час отрабатывать, потому как регистр ты вестимо для изменений не блокируешь, а пользователи поганые работать с ним не перестают, вот и маешься ты.
3 Михаил 1С
 
25.02.21
13:12
(1) Хм, пока не удалось этого!
И то я молодец - вместо того, что было раньше ускорил в 2.5 раза.
Было 30 временных таблиц с использованием бух.итогов, я нашел все общие случаи и сделал вначале 6 временных таблиц, которые считают все необходимые бух.даные.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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