Имя: Пароль:
1C
1С v8
v8: Как ускорить создание объектов
0 iceman2112
 
28.08.12
15:44
Есть самописные обработки выгрузки-загрузки. Грузить ОЧЕНЬ долго, есть ли возможность ускорить процесс?
8 Aprobator
 
28.08.12
15:49
Перед записать, ЗаписываемыйОбъект.ОбменДанными.Загрузка = Истина; как минимум.
9 Aprobator
 
28.08.12
15:50
плюс работа с транзакцией.
10 andrewks
 
28.08.12
15:50
купить новый сервер ещё не предлагали?
11 anddro
 
28.08.12
15:50
экипаж прокачан на 100%? шоколад ставили?
12 AlexTim03
 
28.08.12
15:50
(6), уже есть сформироватьОченьБыстро(), работает в 1.5 раза быстрее предыдущей версии
13 iceman2112
 
28.08.12
15:51
(9) всё и так в транзакции.
14 Повелитель
 
28.08.12
15:51
Как вариант, взять машину времени, вернуться на нужное время назад, запустить вашу обработку в прошлом, а к настоящему времени она уже все сделает.
15 iceman2112
 
28.08.12
15:52
(8) не пробывал, а в чем смысл?
16 anddro
 
28.08.12
15:52
А если серьезно, то да, способы есть. Откройте для себя как минимум отладку с замером времени.
17 andrewks
 
28.08.12
15:52
(6) настоящие пацаны делают всё в одной:

Сформировать(Скорость)
18 Aprobator
 
28.08.12
15:52
(15) отключаются проверки выполняемые при записи объекта.
19 Aprobator
 
28.08.12
15:53
плюс использовать кэширование объектов.
20 ILM
 
гуру
28.08.12
15:53
(8) Не выйдет, обработка самописная.
ТС, а имя обработки случайно не ВыгрузкаЗагрузкаXML.epf?
21 AlexTim03
 
28.08.12
15:54
(0), кстати, 1С крайне не рекомендует в таких случаях делать замеры производительности.
22 Aprobator
 
28.08.12
15:54
(20) если конфа не самописная, то все очень даже выйдет.
23 anddro
 
28.08.12
15:54
(18) вот это "правильный" совет. Человек не знает про оптимизацию, а ему еще и предлагают отключить  контроль корректности данных.
24 iceman2112
 
28.08.12
15:55
Что непонятного?

В коде загрузке много взяких запросов в БД.
СоздатьОБъект()
СоздатьДокумент()

Столько талантов юмора просто капец
25 Повелитель
 
28.08.12
15:56
Есть скрытые функции 1с, обращаться надо так, работает со скоростью света:

мТест = Новый Объект("ЧакНорис");
мТест.Сформировать();
26 iceman2112
 
28.08.12
15:56
(25) Найди Евгения Ваганыча
27 Lex_Liven
 
28.08.12
15:56
(7) А вот и нет. 80% крутят мышью, 19% покупают железо, а оптимизируют только 1%. И то это максимум.
28 iceman2112
 
28.08.12
15:56
(22) попробую
29 iceman2112
 
28.08.12
15:57
загружается всё в УТ11
30 Aprobator
 
28.08.12
15:57
(23) маловато информации для такого вывода. Может причина то в объеме данных.
31 ILM
 
гуру
28.08.12
15:58
(30)УФФ, наконец то, а что загружается то? Самописьки в студию, счас оптимизнём как следует.
32 Aprobator
 
28.08.12
15:58
(29) хм. А обработка на стороне клиента работает или сервера?
33 iceman2112
 
28.08.12
15:59
в обычном приложении
34 ILM
 
гуру
28.08.12
15:59
(31) к (29)
35 H A D G E H O G s
 
28.08.12
15:59
(33) Планы обмена?
36 Serg_1960
 
28.08.12
15:59
(24) Что непонятного? Ну например как в этой обработке соответствие объектов осуществляется? Если по коду или по наименованию - свободен. Век воли...тьфу... скорости тебе не видать :)
37 Aprobator
 
28.08.12
15:59
ща еще выяснится, что все через ОЛЕ тянется.
38 iceman2112
 
28.08.12
16:00
загружается Номенклатура + доп.свойства + упаковка + остатки по ней
39 H A D G E H O G s
 
28.08.12
16:00
В УТ-БП есть косяк в алгоритме планов обмена
40 Aprobator
 
28.08.12
16:00
(36) )
41 H A D G E H O G s
 
28.08.12
16:00
(38) Еще раз - планы обмена используются для загрузки?
42 Aprobator
 
28.08.12
16:00
(39) сомнительно, чтобы самописки у ТС использовали планы обмена.
43 iceman2112
 
28.08.12
16:01
(36)

Функция ПолучитьНоменклатуру(ИмяНоменклатуры) Экспорт
   
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Наименование", СокрЛП(ИмяНоменклатуры));
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Номенклатура.Ссылка
   |ИЗ
   |    Справочник.Номенклатура КАК Номенклатура
   |ГДЕ
   |    Номенклатура.Наименование = &Наименование
   |    И НЕ Номенклатура.ЭтоГруппа";
   
   Результат = Запрос.Выполнить();
   Если Результат.Пустой() Тогда
       Возврат Справочники.Номенклатура.ПустаяСсылка();
   КонецЕсли;
   
   Выборка = Результат.Выбрать();
   Выборка.Следующий();
   
   Возврат Выборка.Ссылка;
   
КонецФункции
44 Aprobator
 
28.08.12
16:02
(43) еп.
45 ILM
 
гуру
28.08.12
16:02
Жалко самописки показать?
46 AlexTim03
 
28.08.12
16:02
(43) Браво!!!
47 iceman2112
 
28.08.12
16:02
(45) что ты хочешь конктретно? из xml файла грузиться
48 iceman2112
 
28.08.12
16:03
(46) в чем подвох?
49 salvator
 
28.08.12
16:03
(43) НайтиПоНаименованию ничего не говорит?
50 salvator
 
28.08.12
16:03
ни о чем*
51 iceman2112
 
28.08.12
16:04
(49) тот же самый запрос
52 ILM
 
гуру
28.08.12
16:04
Прикинь, вы каждую номенклатуру по наименованию находите и грузите.
53 Lex_Liven
 
28.08.12
16:04
(43) Чувак, а ты про такую вещь, как Справочники.Номенклатура.НайтиПоНаименованию(Наименование);
Никогда не слышал?
54 H A D G E H O G s
 
28.08.12
16:04
ТЗ кэша как минимум.
Это узкое место, автор?
55 AlexTim03
 
28.08.12
16:04
(48) а что будешь делать, если 2 номенклатуры имеют одинаковое наименование?
56 iceman2112
 
28.08.12
16:04
(52) а как иначе?
57 iceman2112
 
28.08.12
16:04
(55) вопрос не в этом
58 AlexTim03
 
28.08.12
16:06
(57) уже несколько человек сказало ответ -
сделай замер производительности
сделай кэширование объектов
59 Serg_1960
 
28.08.12
16:06
"Будь мужиком"(с) - сделай однажды синхронизацию объектов по внутренним идентификаторам :)
60 Serg_1960
 
28.08.12
16:07
(56) "А как иначе?" - ну, например, регистр сведений соответствия объектов обмена - не искать то, что однажды уже было найдено.
61 iceman2112
 
28.08.12
16:08
ЭТО НЕ ОБМЕН!!!!
62 iceman2112
 
28.08.12
16:08
Перенос остатокв
63 H A D G E H O G s
 
28.08.12
16:09
Перенос остатков в оптимизации не нуждается.
64 iceman2112
 
28.08.12
16:10
(63) я бы и не спрашивал, если бы было не нужно
65 H A D G E H O G s
 
28.08.12
16:10
Если у тебя в переносе останков затык по производительности - ищи точно в другом месте.
66 Serg_1960
 
28.08.12
16:10
(61) ДА КАКАЯ РАЗНИЦА-ТО?

PS: не кричи. Не првильно поймут.
67 H A D G E H O G s
 
28.08.12
16:10
Инфа 146%, что тормозит поиске по наименованию?
68 ILM
 
гуру
28.08.12
16:12
Отчаяние охватило ТС. Терпи, тут так всегда, сначала ...., ну а потом подскажут.
69 Lex_Liven
 
28.08.12
16:12
(67) Если так написан поиск по наименованию, где гарантия, что другие фрагменты написаны лучше? Там явно тормозит везде.
70 H A D G E H O G s
 
28.08.12
16:13
(69) Ничего критичного я пока не увидел.
71 Serg_1960
 
28.08.12
16:13
(67) Нет, конечно. Автор, однако, замер производительности не делал. Может быть у него и создание объектов такое-же как поиск :) Али тормозит при проведении документов в приёмнике.
72 Lex_Liven
 
28.08.12
16:13
(0) По теме. Узкие места любой операции - в циклах. Делись более крупными кусками кода.
73 H A D G E H O G s
 
28.08.12
16:14
Думаю, на уровень выше он вытаскивает ИНН через точку.
74 H A D G E H O G s
 
28.08.12
16:14
Артикул, простите.
75 ILM
 
гуру
28.08.12
16:15
(70) Я тоже, но НайтиПоНаименованию() разве не будет, а нет не будет или будет, или не будет. Нужно замерить.
76 Serg_1960
 
28.08.12
16:17
Имхо: у меня остатки для проведения инвентаризации выгружались из другой базы с неявным(!) поиском по наименованию. Около десяти тысяч наименований номенклатуры за 30-40 сек. Разве это "тормозит"?
77 acsent
 
28.08.12
16:17
(53) Вот оно новое поколение. ((((
78 0Mint
 
28.08.12
16:18
(0) Обработки выложи уже наконец.
79 Lex_Liven
 
28.08.12
16:20
(77) С этого момента поподробнее, пожалуйста. И с интонацией.
80 Serg_1960
 
28.08.12
16:24
81 Lex_Liven
 
28.08.12
16:27
[OFFTOP] Вы про слово "Чувак"? Больше не вижу ошибок в своей реплике [/OFFTOP]
82 Serg_1960
 
28.08.12
16:35
(81) И про "это" и про другое. Например, про правила общения на форуме Мисты.

(В стиле Lex_Liven Видишь пимпочку слева внизу экрана? Там ещё "Правила" написано? Нажми, не ленись. Много интересного узнаешь. Когда-то за нарушение правил 1), 5) или 7) банили модераторы.
83 H A D G E H O G s
 
модератор
28.08.12
16:37
Чего? Где, нарушения? Кого забанить?
84 Lex_Liven
 
28.08.12
16:38
(82) Я не нарушил ни одного правила. Но мы с вами сейчас нарушаем 5). Обращение на "вы" здесь редкость за те 10 месяцев, что я на форуме.
(83) Можете меня, если Serg_1960 так считает, и это является неопровержимой причиной.
85 acsent
 
28.08.12
16:39
(79) Не понимаешь ты как 1ска работает а уже советы пытаешься давать. Ну растолкуй чем НайтиПоНаименованию лучше запроса
86 H A D G E H O G s
 
28.08.12
16:40
Ладно парни, давайте забудем обиды.
87 Lex_Liven
 
28.08.12
16:41
(85) Да, я не знаю, что именно делает "НайтиПоНаименованию" на уровне данных, но, как минимум, это оптимизирует читаемость кода и время его написания программистом, а для разовых операций это время становится важнее времени выполнения кода.
88 ptiz
 
28.08.12
16:44
Тут нужны телепаты 81го уровня.
89 ILM
 
гуру
28.08.12
16:48
(87) Там весь код автора меняется на вызов "НайтиПоНаименованию".
90 Широкий
 
28.08.12
16:50
Оптимизирую обработку. Дорого
91 Axel2009
 
28.08.12
16:56
(36) это с каких пор скорости не видать?
открываю индексы таблицы, вижу индекс по коду и наименованию. пусть не кластерный, но он есть. длина уникального ключа 16 байт, у кода длина обычно 8-10 символов, дальше аналогии предлагать?
92 H A D G E H O G s
 
28.08.12
16:57
8-10 символов умножить на 2 не забудь.
93 acsent
 
28.08.12
16:59
Ну будет не 0.001сек искаться, а 0.002. что велика рзница???
94 Axel2009
 
28.08.12
17:00
(87) вот если не знаешь, то лучше промолчать.
95 H A D G E H O G s
 
28.08.12
17:00
Автор уже давно забил на тему.
96 acsent
 
28.08.12
17:01
(95) дык и мы уже давно забили на автора. Гораздо интереснее друг друга помоями облить ))
97 Serg_1960
 
28.08.12
17:02
Это, в принципе, не принципиально :) Про поиск по коду/наименованию (точнее - скорость исполнения) - это шутка и ничего более. А (36) - намёк на то, что неплохо бы узнать "подробности" алгоритма обмена.
98 Axel2009
 
28.08.12
17:03
(0) если через COM-объект, тогда в нем тормоз процентов на 60
99 Serg_1960
 
28.08.12
17:04
(97) Тьфу, опять оговорился. Не "обмена" - а "обработки".
100 H A D G E H O G s
 
28.08.12
17:04
(98) Это от нежелания замеры делать и читать матчасть.
101 Serg_1960
 
28.08.12
17:10
(98) Не соглашусь, пожалуй. Выгрузка/загрузка в XML - вот это ещё тот тормоз. Особенно на больших объёмах. Да ещё когда всё это упаковано в одну транзакцию.
102 Axel2009
 
28.08.12
17:12
(101) Выгрузка/загрузка в XML это еще больший тормоз, чем через COM-объект. но у COM-объекта своих тормозов хватает выше крыши.
103 acsent
 
28.08.12
17:12
(101) если выгрузжать без обхектов по ссылкам, то довольно таки быстро
104 Bober
 
28.08.12
17:18
(0) как вариант вынести запрос по наименованию за цикл, например:

ТЗДанных = Новый ТаблицаЗначений;
ТЗДанных.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100));
ТЗДанных.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));

Для НомерСтроки = 1 По КоличествоСтрок Цикл
   
   ...
   ТЗДанных.Добавить();
   ТЗДанных.Наименование = СокрЛП(НаименованиеТекст);
   ТЗДанных.Количество = Число(КоличествоТекст);
КонецЦикла;

ТекстЗапроса = "ВЫБРАТЬ
              |    ТЗ.Наименование КАК Наименование,
              |    ТЗ.Количество
              |ПОМЕСТИТЬ ТЗДанных
              |ИЗ
              |    &ТЗДанных КАК ТЗ
              |
              |ИНДЕКСИРОВАТЬ ПО
              |    Наименование
              |;
              |
              |////////////////////////////////////////////////////////////////////////////////
              |ВЫБРАТЬ
              |    Номенклатура.Ссылка КАК Ссылка,
              |    Номенклатура.Наименование КАК Наименование
              |ПОМЕСТИТЬ Номенклатура
              |ИЗ
              |    Справочник.Номенклатура КАК Номенклатура
              |ГДЕ
              |    Номенклатура.Наименование В
              |            (ВЫБРАТЬ
              |                ТЗ.Наименование
              |            ИЗ
              |                ТЗДанных КАК ТЗ)
              |    И НЕ Номенклатура.ЭтоГруппа
              |
              |ИНДЕКСИРОВАТЬ ПО
              |    Наименование
              |;
              |
              |////////////////////////////////////////////////////////////////////////////////
              |ВЫБРАТЬ
              |    Данные.Наименование КАК Наименование,
              |    Номенклатура.Ссылка
              |ПОМЕСТИТЬ СинхронизированныеДанные
              |ИЗ
              |    (ВЫБРАТЬ
              |        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК Ссылка,
              |        ТЗДанных.Наименование КАК Наименование
              |    ИЗ
              |        Номенклатура КАК Номенклатура
              |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗДанных КАК ТЗДанных
              |            ПО Номенклатура.Наименование = ТЗДанных.Наименование
              |    
              |    СГРУППИРОВАТЬ ПО
              |        ТЗДанных.Наименование
              |    
              |    ИМЕЮЩИЕ
              |        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) = 1) КАК Данные
              |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Номенклатура КАК Номенклатура
              |        ПО Данные.Наименование = Номенклатура.Наименование
              |
              |ИНДЕКСИРОВАТЬ ПО
              |    Наименование
              |;
              |
              |////////////////////////////////////////////////////////////////////////////////
              |ВЫБРАТЬ
              |    ЕСТЬNULL(СинхронизированныеДанные.Ссылка, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК Номенклатура,
              |    ТЗДанных.Наименование,
              |    ТЗДанных.Количество
              |ИЗ
              |    ТЗДанных КАК ТЗДанных
              |        ЛЕВОЕ СОЕДИНЕНИЕ СинхронизированныеДанные КАК СинхронизированныеДанные
              |        ПО ТЗДанных.Наименование = СинхронизированныеДанные.Наименование";
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ТЗДанных", ТЗДанных);
ТЗДанных = Запрос.Выполнить().Выгрузить();
105 Serg_1960
 
28.08.12
17:22
Заранее согласен с обоими оппонентами :)

Не знаю алгоритм обработки, могу предположить следующие: когда поиск по наименованию не находит объект - что делается дальше? Вероятно, не исключаю такое, что передаётся весь объект "целиком".

Вот тут и кроются различия XML и COM-соединения. И в свете вышесказанного, (101) уже несколько о другом аспекте их отношений :)
106 Serg_1960
 
28.08.12
17:24
Упс, я афк. Сорри.
107 ПиН
 
28.08.12
17:25
(0) начатьтранзакцию, зафиксирваотьтранзакцию...