Имя: Пароль:
1C
1C 7.7
V7 производительность
0 Eugene_a
 
07.07.18
11:44
1С 7.70.027 на вин10.
база DBF на сетевом диске.
в ТЗ насасываются данные из справочников, потом по дням обрабатываются эти ТЗ.
отчет работает 45 секунд.

судя по диспетчеру задач, никакой из ресурсов не загружен даже на 50 % (только в помент запуска обработки сеть загружена, пока читаются справочники).

кто не дает обработке работать быстрее?

https://drive.google.com/file/d/13lQ82aV6R1f6dApnid-c9Eq3HvTD022A/view?usp=sharing
1 Djelf
 
07.07.18
11:47
А что замер в отладчике показывает?
2 Злопчинский
 
07.07.18
11:57
Видимо зависит от места - на Граевке будет быстрее, на Вульке - медленнее... А в Старых Задворцах вообще может не работать.. ,;-)
3 Aleksey
 
07.07.18
12:08
ы проц упирается
я так понимаю 4-х ядерник
4 Злопчинский
 
07.07.18
12:10
Для начала замер производительности штатный, потом положи базу на локальный диск для сравнения.

Данные тянешь выборками скорее всего. Каждый объект из выборки в полном объёме тянется из сетевой шары на локальный комп, потом наверняка куча не оптимальности по работе с тз типа много раз найти значение иили удалить строку,,, оно все в комплексе и набежало , а может быть где-то одна хрень глобальная типа на справочник из 1000 человек для каждого дня обрабатывается на каждого человека перебором 10000 записей по табел...  Оппа уже 10 млн телодвижений и все это по сети дергается на каждое телодвижение
5 Злопчинский
 
07.07.18
12:13
Цп 4 ядра, итого одно ядро = 25%, оно забито под 100%... 77 не многозадачная, трещит на одном процесс... Закрепи 77 на время выполнения за конкретным процесс ради интереса, получишь процентов 5 добавки к скорости
6 МихаилМ
 
07.07.18
12:34
даже на 100 мбит сети - 45 сек - очень долго.

выкладывайте код.
7 Eugene_a
 
07.07.18
12:53
график по ядрам:

https://drive.google.com/file/d/1yPJH_soDWujlmBehqnxfI1MZqUUUobuN/view?usp=sharing

почему-то приложение работает поочередно на двух правых ядрах.
и, действительно, загружает ядро полностью.

штатно позже померяю.
8 Aleksey
 
07.07.18
13:28
(7) Ну вот тебе и ответ.
1С вообще и 7-ка в частности - однопоточная. И если на 8-ке через фоновые задания можно попытаться сэмулировать использования "многоядерности", то 7-ки увы - все упирается в производительности на 1 ядро. Чем она выше, тем быстрее будет работать.
Максимум что ты можешь сделать без замены проца и/или его разгона - это закрепить 1с за конкретным ядром, чтобы график не скакал, что даст пару процентов прироста
9 Salimbek
 
07.07.18
13:38
(7) Да нет проблемы - штатно померить, запускаешь 1С - отладчик, открываешь эту обработку - в начале нужной процедуры ставишь брейкпойнт - запускаешь обработку свою, настраиваешь, как в отладчик выйдешь - нажимаешь Замерить время и запускаешь обработку дальше. Как она отработает - переключаешься в отладчик и останавливаешь замер времени. Результат внимательно смотришь.
З.Ы. Еще удобно пользоваться не ТЗ, а ИндесированнаяТаблица из 1С++ - она иногда супер-круто всяческие задачи закрывала, которые в обычной ТЗ через одно место приходилось решать. Например, отфильтровать по нужному полю.
10 ildus78
 
07.07.18
15:21
(0) ставь Novell Netware на сервер и будет тебе счастье
11 Злопчинский
 
07.07.18
16:20
Как известно
"В Европе три столицы - Москва. Париж и Луховицы",
а "лучше Бреста - нету места!"
поэтому помочь земляку, автоматизирующему что-то там в Бресте (и не дай бог еще на ж/д) - святое дело! навались, ребята!
(знаю что уже в Бресте есть как минимум 2 одноэсника, пора вам вступить в картельный сговор и монополизировать рынок и цены ;-)
.
Автор, стучись в скайп Zlopun или на [email protected] - помогу (через тимвьювер), по крайней мере, в отладчике скорость померять (ну и в код глянем м.б.)
12 Eugene_a
 
07.07.18
23:43
Спасибо за помощь, наваливаться не нужно, достаточно хорошего целеуказания. )

Интересно, а где видно, что я из Бреста?
Профиль вроде пока пуст.
13 Eugene_a
 
07.07.18
23:47
(10) новелл вряд ли возможен, так как сервер где-то виртуально крутится с вин2003 и MSSQL, а сеть контролируется контроллером домена и сисадминами. )
14 Злопчинский
 
08.07.18
04:07
(12) вы все брестские 1Сники, а ты в особенности, давно у меня под колпаком, я за вами слежу...
15 Aleksey
 
08.07.18
06:03
(12) ИМХО, по IP вычислил
16 youalex
 
08.07.18
06:11
(12) Все просто. Место проживания указано в регистрационной карточке ФСБ.
17 Sserj
 
08.07.18
06:26
(12) Все гораздо проще чем кажется, скриншоты лучше красить надо :)
Я в таких случаях использую 1sqlite. Создаю нужные таблицы в памяти, заполняю их нужными данными запросами из базы. И дальше уже вся работа с памятью запросами к этим таблицам. Скорость формирования в некоторых случаях вырастает на несколько порядков. Это удобнее чем индексированная таблица, так как к своим таблицам можно строить любые запросы и так же создавать любые индексы.
18 Обработка
 
08.07.18
11:24
(17) "На" или "В" несколько порядков?
19 Sserj
 
08.07.18
12:21
(18) Ну порядков все таки "на" перерасчет на "В" это получается "в 10" или в "в 100" изредка получается таки и "в 1000" раз.
20 Eugene_a
 
11.07.18
13:49
написал отчет.
данные из двух справочников заполняю в две ТЗ и потом их тупо в циклах обрабатываю.
Вроде нигде в циклах к справочникам не обращаюсь, то есть только к ТЗ, но при входе в 1С второго пользователя (с другого компа) начинает работать раз в 100 медленнее.
Если я со своего компа вхожу в 1С под другим пользователем, то отчет формируется так же быстро, как в монопольном режиме.
В чем может быть причина такой разницы в скорости работы?

https://drive.google.com/file/d/1zYVcubvGZAZy2LXbFnRHOBMAKYVWYAIs/view?usp=sharing

в печатной форме данные только из ТЗ берутся.
21 Builder
 
11.07.18
13:53
(20) Ответ ты сам сказал - "база DBF на сетевом диске. "
22 Builder
 
11.07.18
13:58
(20) "Вроде нигде в циклах к справочникам не обращаюсь"
Ну да ну да.....
ТЗ_сотрудники.Сотрудник.Оклад.Получить(дата_цикла)
Везде обращение к периодическим реквизитам, а они в 7.7 хранятся в отдельном месте....
23 Eugene_a
 
11.07.18
14:03
(22)
то есть периодические реквизиты не попадают в ТЗ как свойство объекта?
24 Builder
 
11.07.18
14:11
(23) Вы думаете что в ТЗ попадает ВЕСЬ элемент справочника? Думаю там только ссылка на объект. Дальнейшее обращение к этому справочнику все равно тянет данные из базы.
Периодические реквизиты в 7.7 вообще одно из слабых и тормознутых мест.
25 arsik
 
гуру
11.07.18
14:47
Лучше запросом в ТЗ сразу выбрать все значения реквизитов которые понадобятся, а потом уже обращаться к ним, а не через объект.
26 Eugene_a
 
11.07.18
15:03
а, может, есть хранищище в памяти, которое может хранить сразу объект справочника целиком, как в ООП ?
27 ptiz
 
11.07.18
15:11
(0) Сделай замер производительности, всё будет видно
28 Djelf
 
11.07.18
15:24
(27) Ему об этом уже раз 5 писали...

(26) Вот зачем этот код
ТЗ_сотрудники.Сотрудник.Подразделение.Получить(Дата_Цикла).Код
Выполнять 3 раза?
Добавь в ТЗ_сотрудники колонки Старый,Принятый,Уволенный
В одном цикле пересчитай все что нужно, избегая повторных обращений Получить(Дата_Цикла), а потом прогони 3 цикла печати.
Причем это можно сделать еще на этапе заполнения ТЗ_сотрудники.
29 Pit0n_08
 
11.07.18
17:01
(20)"... база DBF на сетевом диске/
Если я со своего компа вхожу в 1С под другим пользователем, то отчет формируется так же быстро, как в монопольном режиме.
В чем может быть причина такой разницы в скорости работы?..."
Отключается кеширование в ОС при  немонопольном доступе к файлам - приходится пилить ж/диск.
30 Djelf
 
11.07.18
17:25
Кеширование то можно вылечить.
v7dbnet в помощь https://cloud.mail.ru/public/C3fY/CWQwnhy5L
Это клиент/сервер для файлового варианта.

А насчет "быстро" я сомневаюсь. Этот отчет вообще не должен работать быстро. Разве что вытягивать периодические в тз таким образом и крутить уже тз.

Периодический.ИспользоватьОбъект("", Справочник.ТекущийЭлемент());
Периодический.ВыбратьЗначения(НачДата,КонДата);
Периодический.ВыбратьЗначения();
Пока Периодический.ПолучитьЗначение()=1 Цикл
31 AliAksA
 
12.07.18
08:32
(11) Брест - конечно, крепость-герой, но столица Полесья - ПИНСК)))
32 AliAksA
 
12.07.18
08:38
(20) верни ХР и жизнь наладится ...
33 SleepyHead
 
гуру
12.07.18
08:42
Их - за 45 секунд так переживать? Да что с вами, люди.
34 vova1122
 
12.07.18
09:18
(33) А вдруг он этот отчет запускает каждые 10 минут...
35 Злопчинский
 
12.07.18
13:26
(30) Использование объекта "Периодический" при массовых операциях дает выигрыш ~25%
36 Злопчинский
 
12.07.18
13:27
(31) знаменитиые пинские мотобольщики?!
37 Eugene_a
 
12.07.18
20:17
(24) Вы думаете что в ТЗ попадает ВЕСЬ элемент справочника? Думаю там только ссылка на объект. Дальнейшее обращение к этому справочнику все равно тянет данные из базы.

то есть если засунуть элементы справочника в ТЗ,
а потом в справочнике их изменить,
то в ТЗ (то есть по ссылке на справочник) мы увидим изменения?
не перезаливая справочник в ТЗ.
38 Eugene_a
 
12.07.18
20:21
(28) Вот зачем этот код
ТЗ_сотрудники.Сотрудник.Подразделение.Получить(Дата_Цикла).Код
Выполнять 3 раза?

наверное, потому что сотрудники иногда мигрируют между подразделениями в течение периода отчета.
39 Eugene_a
 
12.07.18
20:43
вот если бы можно было узнать даты изменения периодического реквизита без перебора дат в периоде.....
40 Eugene_a
 
12.07.18
21:05
(39) Использование объекта "Периодический" позволяет это сделать.
41 vova1122
 
13.07.18
11:17
(3) совершенно верно. но не так как вы представляете. В Тз есть ссылка на объект. (на форме отображается только только текст, хотя по сути это ссылка на справочник). Когда вы заполните свою Тз а потом измените Наименование в справочнике, то на форме естественно ничего не поменяется. Но если вызвать например  Сообщить(ТЗ_подразделения.Подразделение.Наименование) то получите уже измененное наименование
42 vova1122
 
13.07.18
11:31
(41) => (37)
43 Djelf
 
13.07.18
11:37
(38) > наверное, потому что сотрудники иногда мигрируют между подразделениями в течение периода отчета.

Т.е. успевают мигрировать пока выполняется обработка? оО
44 Eugene_a
 
13.07.18
12:08
(43) нет, но нужно в отчете отражать каждое их перемещение, а также изменения оклада, режима работы и должности.
Которые происходят хаотично в течение месяца, за который формируется Штатное.
И при каждом изменении, например, 12 числа, нужно за 12е число вывести соответствующий отчет с изменениями у всех сотрудников за это число. (а увольнение - за предыдущее рабочее число).
То есть листов в отчете может быть от 1 до 31.
45 hhhh
 
13.07.18
12:25
(44) ну тогда и неудивителдьно, что тормозит. Чего вы хотели?
46 Eugene_a
 
13.07.18
12:37
(45) я хотел считать справочник в ТЗ целиком, как объекты в ООП и работать с данными в памяти.
но 1С, как выяснилось, только ссылки на справочник запихивает в ТЗ.

Сейчас сделаю ЭТО через объект "Периодический" и будет счастье.
47 Djelf
 
13.07.18
12:42
(44) Да по коду все понятно. Я о другом.
Ты 3 раза запрашиваешь одно и то же значение.
В этом нет смысла, только потеря производительности.
Ты вообще (28) читал?
> Добавь в ТЗ_сотрудники колонки Старый,Принятый,Уволенный
> В одном цикле пересчитай все что нужно, избегая повторных обращений Получить(Дата_Цикла), а потом прогони 3 цикла печати.

И вообще, даже простая замена Подразделение.Код на КодПодразделения=Подразделение.Код и сравнение периодического кода с КодПодразделения уже значительно уменьшит количество запросов к базе.

И почитай про оптимизацию  http://catalog.mista.ru/public/18924/