Имя: Пароль:
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/ я вот это решение в свое время использовал, но проект этот сейчас закрыт. Хотя вроде на прошлой работе до сих пор на нем крутятся три магазина. Но терминал имхо будет кошернее.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.