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