Имя: Пароль:
1C
1C 7.7
v7: Прошу помощи в оптимизации модуля проведения документа
0 Прыгун
 
17.04.13
11:12
Дано - самописка на основе бухии старого релиза. База большая, и документ Отгрузка товаров там самый ходовой. Начались проблемы при проведении Отгрузок с большой табличной частью. Если пользователь в базе проводит такой документ, все курят. Причем даже компонента ромикса не спасает, т.к. все равно все остальные ждут пока пользователь проведет этот большой документ (полторы минуты на документе с 50 позициями). Отладчик (при замере на документе с табличной частью в 50 позиций) показал, что больше всего тормозят строки
БухИт.ВыполнитьЗапрос(,ТекущийДокумент(),СписокСчУчета,,,,,"СК"); (50% времени)
И    БИ_НУ.ВыполнитьЗапрос(,ТекущийДокумент(),"Н02.02, Н02.03, Н02.07",,,,,"СК"); // 50% времени.

Весь участок проблемного кода вот:

   СписокСчУчета = "43.1, 43.2, 43.3, 41.1, 41.3, 41.4";
   СписокТоваров = СоздатьОбъект("СписокЗначений");
   ВыгрузитьТабличнуюЧасть(СписокТоваров, "Товар");
   БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
   БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокТоваров, 2);
   БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
   БухИт.ВыполнитьЗапрос(,ТекущийДокумент(),СписокСчУчета,,,,,"СК");
   
   БИ_НУ = СоздатьОбъект("БухгалтерскиеИтоги");
   БИ_НУ.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокТоваров, 2);
   БИ_НУ.ВыполнитьЗапрос(,ТекущийДокумент(),"Н02.02, Н02.03, Н02.07",,,,,"СК");
   
   БухИтКМС = СоздатьОбъект("БухгалтерскиеИтоги");
   БухИт004 = СоздатьОбъект("БухгалтерскиеИтоги");    
   ТаблицаДокумента.Свернуть("Товар,Комитент,ДоговорКомиссии,СтавкаНДС,СтавкаНП","Количество,Штук,НДС,НП,Всего,ВсегоЭ");

   ТаблицаДокумента.ВыбратьСтроки();


Вопрос, как можно соптимизировать? Пока что то в голову ничего не приходит.
1 Прыгун
 
17.04.13
11:13
Да, база дбф, работает по сети.
2 Он
 
17.04.13
11:15
Попробуй 2-й вариант бухитогов.
3 monsterZE
 
17.04.13
11:17
для начала надо пофиксить (1)
4 Прыгун
 
17.04.13
11:25
(3) В терминале такой проблемы не будет?
5 monsterZE
 
17.04.13
11:33
(4) ну попробуй провести на машине, на которой лежит база..
а вобще, вроде, была тема по оптимизации, но для скл.
6 Прыгун
 
17.04.13
11:36
(5) на машине где лежит база, т.е. на сервере этот док проводится 9 секунд. На машине по сети полторы минуты.
7 ДенисЧ
 
17.04.13
11:37
(6) вот тебе и ответ
8 Прыгун
 
17.04.13
11:39
Пока хочу попробовать оптимизировать сам код, на терминал админ не соглашается пока. )
9 viktor_vv
 
17.04.13
11:43
(8) А че там оптимизировать, если большую часть времени выполняется конструкция которую и оптимизировать не получится.
Разве что в первом еще фильтр по конкретному складу воткнуть.
10 Прыгун
 
17.04.13
11:45
(9) да вот я сам репу чешу, как соптимизировать, обычно как то удается список значений в запрос воткнуть.
11 viktor_vv
 
17.04.13
11:46
(10) Ну так по товарам ты и воткнул его.
Правда как-то подозрительно долго запросы для локальной базы выполняются.
12 Прыгун
 
17.04.13
11:55
(11) Из за чего они могут так долго выполняться, кроме того, как из-за того что по сети работает? Не пересчитаны итоги например, еще причины могут быть? Железо вроде неплохое.
13 Прыгун
 
17.04.13
12:29
щас проверили. один пользователь в базе по сети монопольно работает - 10 секунд документ с 50 строками проводится. Стоит в базу зайти еще одному - сразу полторы минуты.
14 viktor_vv
 
17.04.13
12:39
(13) Это уже вусмерть порванный баян.
Ищи "второй пользователь по сети 1С 7.7".
Кроме как терминал особо решения и нет.
Есть еще правда сетку на NetWare , но это уже жесткая экзотика, я об этом только читал :).
15 ЗомбиТ1С
 
17.04.13
12:44
(0)Дешево и сердито Wirth.ru
16 Джордж1
 
17.04.13
12:45
на сервере ОС какая?
17 vip67
 
17.04.13
12:46
Если 10 сек устраивает - то в первую очередь - терминал. и во вторую то-же.. и так до тех пор - пока на скл не перейдете
18 zak555
 
17.04.13
12:52
1. передай в СписокСчУчета СЗ СчетПоКоду
2. проставь по возможности все параметры

   БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокТоваров, 2);
   БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,,1);
   ТК = ТекущийДокумент();
   БухИт.ВыполнитьЗапрос(,ТК,СписокСчУчета,,,1,,5);
   
   БИ_НУ = СоздатьОбъект("БухгалтерскиеИтоги");
   БИ_НУ.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокТоваров, 2);
   БИ_НУ.ВыполнитьЗапрос(,ТК,СписокСчУчетаНУ,,,1,,5);
19 Злой Бобр
 
17.04.13
13:04
(8) Ну дай ему выбор: терминал или нетварь. Пусть сам решает что ему проще будет.
Тему можно закрывать, т.к. других решений нету. Решение по вайном на никсах это гемор с большой буквы, поэтому даже нерассматриваем.
20 zak555
 
17.04.13
13:09
+ (18) если не помогло, то в счета передал бы счета группы
21 Прыгун
 
17.04.13
13:14
(16) 2003 сервер.
(18) Спасибо, попробую.
22 Джордж1
 
17.04.13
13:22
(21)тогда совет в (14) не актуален
23 Прыгун
 
17.04.13
13:32
(22) Да вот в том то и дело. Вроде бы серверная операционка стоит.
24 Злой Бобр
 
17.04.13
14:06
(23) При чем тут ОС к кривизне платформы 1С? Ответ дан в (19) - дальше уже админ пусть суетится. Можешь даже ему тему эту дать почитать.
25 Прыгун
 
17.04.13
14:07
Конешно дам, не сумлевайся. )
26 Прыгун
 
17.04.13
14:17
http://infostart.ru/public/14664/ я вот это решение в свое время использовал, но проект этот сейчас закрыт. Хотя вроде на прошлой работе до сих пор на нем крутятся три магазина. Но терминал имхо будет кошернее.
Программист всегда исправляет последнюю ошибку.