Имя: Пароль:
1C
Админ
Скорость выполнения БухИт.ВыполнитьЗапрос
,
0 Sherpa
 
15.11.11
08:31
1с 7.7 SQL-версия. Конфа: Бухгалтерия (немного дописанная).
Провожу документ начисление зарплаты за июнь - 3 секунды, за июль - 15 минут. Количество документов не изменилось. Полный пересчет итогов делал. Кто-нибудь может подсказать как исправить ситуацию?
1 Sherpa
 
15.11.11
08:55
ап
2 1Сергей
 
15.11.11
09:01
отладчег знает
3 Sherpa
 
15.11.11
09:02
БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
БухИт.Опции(1,1);
БухИт.ВключатьСубсчета(, -1);
БухИт.ИспользоватьСубконто(ВидыСубконто.Сотрудники, СписокСотрудников);
БухИт.ИспользоватьСубконто(ВидыСубконто.ВидыНачисленийВыплат,СписокВидовНачисленийОблПо13);
БухИт.ИспользоватьКорСубконто();
БухИт.ВыполнитьЗапрос(НачГода(ДатаДок), КонецМесяцаДокумента, "70,ДФЛ",,, 2, "Месяц");

зависание на крайней строчке
4 1Сергей
 
15.11.11
09:15
СписокСотрудников, СписокВидовНачисленийОблПо13 - по сколько строк?
5 Sherpa
 
15.11.11
09:26
СписокСотрудников - 1
СписокВидовНачисленийОблПо13 - 3
6 1Сергей
 
15.11.11
09:27
(5) и в прошлом месяце так было?
7 1Сергей
 
15.11.11
09:34
попробуй так:

Если СписокСотрудников.РазмерСписка()=1 Тогда
   БухИт.ИспользоватьСубконто(ВидыСубконто.Сотрудники, СписокСотрудников.ПолучитьЗначение(1));
Иначе
   БухИт.ИспользоватьСубконто(ВидыСубконто.Сотрудники, СписокСотрудников);
КонецЕсли;
8 Sherpa
 
15.11.11
09:36
нет, в прошлом месяце было 29 сотрудников и 5 видов начислений.

Зависание документов начисления зарплаты, не только в конкретном документе с одним сотрудников, но и во всех последующих (за июль, август...), где список сотрудников так же 29 и видов начислений 5 штук
9 Sherpa
 
15.11.11
09:38
(7) даже если получится не решит проблему с остальными документами
10 Fynjy
 
15.11.11
09:39
Пересчет БИ делали7
11 Sherpa
 
15.11.11
09:42
Делал полный пересчет БИ, проверку логической целостности, реиндексацию
12 Sherpa
 
15.11.11
10:19
(7) попробовал. не помогло. Любой документ начиная с июля проводится около 15 минут.
13 1Сергей
 
15.11.11
10:47
(12) хз тогда. Может, есть сотрудник-группа? Может, есть документы без даты?
14 PaulBC
 
15.11.11
10:51
Смотри счет ДФЛ - где-то не закрывается скорей всего
15 Sherpa
 
15.11.11
10:52
(13) я полагаю дело в периоде
БухИт.ВыполнитьЗапрос(НачГода(ДатаДок), КонецМесяцаДокумента, "70,ДФЛ",,, 2, "Месяц");

если я ставлю вместо начГода - НачМесяца, то тогда все летает, но это алгоритмически не верно.
а в документах начиная с июля получается обрабатывается период больше чем за 6 месяцев и начинаются тормоза... (в каждом месяце 1, 2 документа начисления зарплаты по 25-30 человек или по 1)
16 Sherpa
 
15.11.11
10:55
(14) за весь год по счету ДФЛ движения всегда только по кредиту. Так не должно быть?
17 Sherpa
 
15.11.11
10:55
(13) нет сотрудника группы, все документы с датами.
18 Морозов Александр
 
15.11.11
10:59
итоги то по какой месяц рассчитаны?
19 1Сергей
 
15.11.11
11:00
(18)в бухне обычно по кварталам
20 Морозов Александр
 
15.11.11
11:03
(19) ну.. раз за июнь считается быстро, а за июль медленно (а это уже другой увартал) значит собака точно в итогах порылась.
21 zak555
 
15.11.11
11:06
ДФЛ это же забаланс ?!
22 Sherpa
 
15.11.11
11:07
итоги рассчитаны по 4 квартал 2011
23 Sherpa
 
15.11.11
11:08
(21) ДФЛ - забаланс, с двумя оборотными субконтами (сотрудники и виды начислений)
24 zak555
 
15.11.11
11:09
сделай запрос без дфл
проверь скорость
25 Морозов Александр
 
15.11.11
11:11
а в настройках - вкладка "бухгалтерские итоги" тама че?
26 Кириллка
 
15.11.11
11:18
(0)скуль сваливается в тупое сканирование. Начать с того, что обновить статистику.
27 DEVIce
 
15.11.11
11:19
ДФЛ должен закрываться при закрытии месяца
28 Sherpa
 
15.11.11
11:20
(24) да помогло. спасибо. летает.
29 Sherpa
 
15.11.11
11:20
(25) - а это вообще где? не могу найти
30 Sherpa
 
15.11.11
11:20
(26) пробовали. не помогло.
31 Sherpa
 
15.11.11
11:21
(27) каким образом? счет забалансовый с оборотными субконто
32 Морозов Александр
 
15.11.11
11:22
(29) Сервис-Параметры-"Бухгатерские Итоги"
33 Кириллка
 
15.11.11
11:23
(30)в (0) об этом ни слова.
34 Sherpa
 
15.11.11
11:24
(32) - там стоит квартал. 4 квартал 2011.
35 Sherpa
 
15.11.11
11:24
(33) да. немного волнуюсь. впервые вопрос через форум решаю.
36 DEVIce
 
15.11.11
11:25
(31). То что забалансовый не значит, что движения по нему могут быть только в одну сторону. 50-ый счет тоже имеет только оборотные субконто, однако остаток по кассе всегда можно узнать.
37 DEVIce
 
15.11.11
11:27
Кстати проблемы с ДФЛ как раз и возникают, если не закрывать месяц штатным документом. Сейчас точно ужене помню, но как раз из-за отсутствия закрытия счета ДФЛ были в бухии проблемы с начислением зп.
38 Кириллка
 
15.11.11
11:27
(36)здрасьте, остаток по СЧЕТУ 50 можешь получить, а вот в разрезе аналитики - нет.
39 Sherpa
 
15.11.11
11:28
думаю вопрос закрыт, всем спасибо за участие.
отдельное спасибо zak555 за решение.

для меня осталось загадкой причина проблемы.
40 Кириллка
 
15.11.11
11:29
(35)а как обновляли статистику?
41 DEVIce
 
15.11.11
11:31
(38). Да, в разрезе аналитики не получишь, но если у тебя будут обороты только по одной стороне, то остаток будет только накапливаться. Конкретно в бух и БУП если движения по ДФЛ только с одной стороны, то вылазят проблемы с начислением зп. Т.е. закрытие месяца делает потом обороты по ДФЛ с другой стороны, таким образом закрывая его. Причем многие алгоритмы работают даже не с сотатком а от оборотов одной стороны отнимают обороты другой, что при отсутсвии закрытия тоже приводит к проблемам.
42 Sherpa
 
15.11.11
11:32
(40). я похоже вас дважды обманул.
статистику не обновлял.
43 Кириллка
 
15.11.11
11:33
(42)такие проблемы только у тех, кто начинал свою прог. деятельность на 1с с компоненты ОУ или у альтернативно-одаренных.
44 zak555
 
15.11.11
11:35
БухИт.Опции(1,1);
БухИт.ВключатьСубсчета(, -1);

заменить на


БухИт.ВключатьСубсчета(-1, -1);
и вставит в зад счёт дфл
45 Кириллка
 
15.11.11
11:52
+43 сессно (43) относилост к (41)
(42)ну зря.
46 DEVIce
 
15.11.11
11:59
(45). Причем тут программисты? Это результат бардака в учете.
47 Sherpa
 
15.11.11
12:00
(44) Все вернулось на круги своя - время проведения порядка 15 минут.
48 Кириллка
 
15.11.11
12:06
(46)такие проблемы в учете только у тех, кто начинал свою прог. деятельность на 1с с компоненты ОУ или у альтернативно-одаренных.
49 DEVIce
 
15.11.11
12:44
(48). Без комментариев.
50 zak555
 
15.11.11
21:52
(47) какую инфу ты хочешь со счёта ДФла получить ?
51 Sherpa
 
16.11.11
08:38
(50) облагаемый доход с начала года.


БухИт.ВыбратьПериоды(1);
Пока БухИт.ПолучитьПериод() = 1 Цикл // по месяцам
   // Сумма, начисленная за период.
   НачисленоЗаМесяц = 0;
   СкидкаЗаМесяц = 0;
   
   Если БухИт.ПолучитьСубконто(1,, Сотрудник) = 1 Тогда
       БухИт.ВыбратьСубконто(2);
       Пока БухИт.ПолучитьСубконто(2) = 1 Цикл
           Если БухИт.КонДата=КонецМесяцаДокумента Тогда
               Если БухИт.ПолучитьСчет(, Сч70) = 1 Тогда
                   НачисленоПоСчету70 = БухИт.КО();
                   Если БухИт.ПолучитьКорСчет(, Сч00) = 1 Тогда
                       // Исключим из начислений начальные остатки.
                       
                       НачисленоПоСчету70 = НачисленоПоСчету70 - БухИт.КорКО();
                   КонецЕсли;
                   
                   НачисленоЗаМесяц = НачисленоЗаМесяц + НачисленоПоСчету70;
                   СкидкаЗаМесяц = СкидкаЗаМесяц + ДобавитьСкидкуПоСт217(БухИт.Субконто(2), НачисленоПоСчету70);
               КонецЕсли;
               
               Если БухИтКоррект.ПолучитьСубконто(ВидыСубконто.Сотрудники,, Сотрудник) = 1 Тогда
                   Если БухИтКоррект.ПолучитьСубконто(2,, БухИт.Субконто(2)) = 1 Тогда
                       НачисленоЗаМесяц = НачисленоЗаМесяц + БухИтКоррект.КО(); // доп. доходы в последнем месяце
                       СкидкаЗаМесяц = СкидкаЗаМесяц + ДобавитьСкидкуПоСт217(БухИтКоррект.Субконто(2), БухИтКоррект.КО());
                   КонецЕсли;
               КонецЕсли;
               
           Иначе
               Если БухИт.ПолучитьСчет(, СчДФЛ) = 1 Тогда
                   НачисленоЗаМесяц = НачисленоЗаМесяц + БухИт.КО();
                   СкидкаЗаМесяц = СкидкаЗаМесяц + ДобавитьСкидкуПоСт217(БухИт.Субконто(2), БухИт.КО());
               КонецЕсли;
           КонецЕсли;
           
           Если БухИт.ПолучитьСчет(, Сч70) = 1 Тогда
               Если БухИт.ПолучитьКорСчет(, Сч68_1) = 1 Тогда
                   Если БухИт.ПолучитьКорСубконто(1,, Перечисление.ВидыПлатежейВБюджет.Налог) = 1 Тогда
                       НачисленныйНалогНаДоходы = НачисленныйНалогНаДоходы + БухИт.КорДО();
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
   //еще куча кода
конеццикла; // по месяцам
52 zak555
 
16.11.11
08:42
а это что ?
53 Sherpa
 
16.11.11
08:51
вообще документ начисления зарплаты не правился. Конфа правилась в совершенно другом разделе, так что по идеи это типовой код и Бухи. Насколько я понимаю начисленный НДФЛ лежит именно на счете ДФЛ. собственно без этого счета НДФЛ рассчитывается неверно.
54 zak555
 
16.11.11
08:53
(53) я не помню, какой там типовой код
но код 1с можно переписать на два запроса
55 Sherpa
 
16.11.11
08:57
(45) обновляю статистику:
EXEC sp_msforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'

пока выполняется.
56 Sherpa
 
16.11.11
08:57
(54) очень не хотелось, но видимо придется
57 zak555
 
16.11.11
08:58
(56) долго что ли ?
58 Sherpa
 
16.11.11
09:05
(57) наверно я просто не знаю как быстро, изменить один запрос на два и не менять при этом тело цикла обработки запроса
59 zak555
 
16.11.11
09:07
в ТЗ данные по ДФЛ, а потом оперируй с запросом по 70 и ТЗ
60 Sherpa
 
16.11.11
09:10
(59). спасибо. так и сделаю.

тем более, что обновление статистики (55) не помогло