|   |   | 
| 
 | v7: Тормозит при записи номенклатуры | ☑ | ||
|---|---|---|---|---|
| 0
    
        geniusbsd 19.09.21✎ 08:09 | 
        Добрый День 1С77 ТИС база SQL тормозит при записи элемента справочника Номенклатура, при создании нового элемента или при редактировании старого. Раньше все работало нормально  в чем может быть проблема?     | |||
| 1
    
        trdm 19.09.21✎ 08:58 | 
        Отладчик?     | |||
| 2
    
        Калиостро 19.09.21✎ 10:19 | 
        (0) Вставили при записи контроль на уникальность наименования или реквизита?     | |||
| 3
    
        Злопчинский 19.09.21✎ 12:06 | 
        Что меняли в типом по номенклатуре? Если есть возможность - перенумеровать штнтно все карточки.     | |||
| 4
    
        серый КТУЛХУ 19.09.21✎ 12:45 | 
        что говорит замер производительности?     | |||
| 5
    
        geniusbsd 19.09.21✎ 14:32 | 
        Ни каких изменений не было
 Отладчиком не получается найти функцию которая тормозит | |||
| 6
    
        Джордж1 19.09.21✎ 14:38 | 
        Не может сработать автонумерация как вариант     | |||
| 7
    
        acanta 19.09.21✎ 14:42 | 
        А что можно сделать с авто нумерацией? Кроме префикса по дате?     | |||
| 8
    
        acanta 19.09.21✎ 14:44 | 
        Фоновым заданием максимальный номер в константу записали, а дальше что?     | |||
| 9
    
        серый КТУЛХУ 19.09.21✎ 14:48 | 
        (8): в семерке нет фоновых заданий
 (5): ещё раз, по слогам: (4) | |||
| 10
    
        acanta 19.09.21✎ 14:52 | 
        В 7ке может быть постоянно запущен один сеанс и по расписанию запускаться обработка. Или расписание может быть в виндоус, открывается 7ка, что то выполняется при начале работы системы и закрывается. В эти минуты тоже может тормозить.     | |||
| 11
    
        Джордж1 19.09.21✎ 15:01 | 
        (7)не, при проблемах с автонумерацией - там симптомы - не открывается форма элемента при вводе нового элемента     | |||
| 12
    
        Злопчинский 19.09.21✎ 16:06 | 
        Присоединюсь к (4)     | |||
| 13
    
        geniusbsd 19.09.21✎ 18:33 | 
        (12) Простите за глупый вопрос как сделать замер производительности?     | |||
| 14
    
        Джордж1 19.09.21✎ 18:45 | 
        (13)в отладчике запустить отладку     | |||
| 15
    
        geniusbsd 19.09.21✎ 18:57 | 
        Глобальный модуль                            1018    Пока ЦеныТовара.ПолучитьЭлемент()  = 1 Цикл                         501987    87.613492    96.92
 Справочник.Номенклатура.ФормаСписка.ФормаСписка 64 Цена = глВернутьЦену(ТекущийЭлемент(), ТипыЦен.ПолучитьЗначение(2)); 20 36.643302 40.54 Справочник.Номенклатура.ФормаСписка.ФормаСписка 66 Цена = глВернутьЦену(ТекущийЭлемент(), ТипыЦен.ПолучитьЗначение(4)); 20 35.400506 39.16 Справочник.Номенклатура.ФормаСписка.ФормаСписка 119 Цена = глВернутьЦену(ТекущийЭлемент(), ТипЦены); 4 17.700777 19.58 Вот как то так | |||
| 16
    
        acanta 19.09.21✎ 19:14 | 
        Четыре колонки с разными видами цен в форме списка? Мечта менеджера..     | |||
| 17
    
        Ёпрст гуру 19.09.21✎ 19:16 | 
        (15) вот это непотребность перепиши по-человечьи и будет мгновенное открытие     | |||
| 18
    
        geniusbsd 19.09.21✎ 19:38 | 
        Так проблема не в открытии формы списка Номенклатуры, а в записи элемента
 вот процедура вернуть цену Функция глВернутьЦену(Товар, КатегорияЦены) Экспорт Перем ЦеныТовара; Перем Результат; ЦеныТовара = СоздатьОбъект("Справочник.Цены"); ЦеныТовара.ИспользоватьВладельца(Товар); ЦеныТовара.ВыбратьЭлементы(); Пока ЦеныТовара.ПолучитьЭлемент() = 1 Цикл Если ЦеныТовара.ПометкаУдаления() = 1 Тогда Продолжить; КонецЕсли; Если ЦеныТовара.КатегорияЦены = КатегорияЦены Тогда Результат = ЦеныТовара.ТекущийЭлемент(); Прервать; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции | |||
| 19
    
        HawkEye 19.09.21✎ 19:54 | 
        (18) гениальный ход, особенно для вызова из общего списка... кто делал?     | |||
| 20
    
        Злопчинский 19.09.21✎ 20:10 | 
        (18) в типовой такого кода нет. Накорябали кривыми ручками вот и тормозит.     | |||
| 21
    
        Злопчинский 19.09.21✎ 20:14 | 
        Хотя, сорян... 
 Судя по коду глВернутьЦену это редакция 8.7 И что там делается при записи карточки - надо глядеть отдельно в связи с древностью конфиги. Хотя вот сейчас клиента делаю няшки как раз на такую конфигу - тормозов не замечал | |||
| 22
    
        Злопчинский 19.09.21✎ 20:17 | 
        ГлВернутьЦену можно ускорить. Исползовав Спр.ВыбратьЭлементыПоРеквизиту и сразу спозицион роваться вместо перебора. Но для единичной карточки номенклатуры это некритично будет. 
 Это так... Попутно | |||
| 23
    
        acanta 19.09.21✎ 20:20 | 
        Для этого требуется галочка отбор по реквизиту, в типовой не было.     | |||
| 24
    
        HawkEye 19.09.21✎ 20:24 | 
        (20) код то типовой, просто он не вызывается из списка справочника 4 раза на строку.....     | |||
| 25
    
        geniusbsd 19.09.21✎ 20:26 | 
        База УРБД  на SQL, на ней рабтает 5 лет сеть магазинов 10 торговых точек.  тормозов не было, началось буквально месяц назад. изменений в конфигурации ни кто не делал. Размер базы около 30Гб     | |||
| 26
    
        acanta 19.09.21✎ 20:29 | 
        Элементарно, была база с пятью позициями номенклатуры и максимум тремя типами цен и еще одной себестоимости. Документооборот может быть даже очень большой и магазинов много. И вот добавили что либо, как у всех..     | |||
| 27
    
        Злопчинский 19.09.21✎ 20:30 | 
        (23) неправильно. Упомянутая галка требуется для интерактивной установки отбора. А так достаточно только галки сортировка.     | |||
| 28
    
        geniusbsd 19.09.21✎ 20:31 | 
        (24) еще раз говорю в списке проблем нет     | |||
| 29
    
        Злопчинский 19.09.21✎ 20:32 | 
        (25) проведи полный цикл обмена и пр нудительно почисть таблицу 1сапдейтс     | |||
| 30
    
        Злопчинский 19.09.21✎ 20:33 | 
        (28) ещё раз п.4     | |||
| 31
    
        HawkEye 19.09.21✎ 20:34 | 
        (28) так если ты все знаешь, зачем тему создал?))
 If there's something strange, In your neighborhood Who you gonna call? Ghostbusters! | |||
| 32
    
        geniusbsd 19.09.21✎ 20:49 | 
        (29) А что это даст проблема не только в периферийной базе но и в центральной.     | |||
| 33
    
        geniusbsd 19.09.21✎ 20:50 | 
        (31) наверное потому что я не смог найти ответ на свой вопрс     | |||
| 34
    
        ДенисЧ 19.09.21✎ 20:55 | 
        "тормозов не было, началось буквально месяц назад"
 А не пробовали индексы перестроить, статистику обновить? | |||
| 35
    
        geniusbsd 19.09.21✎ 21:01 | 
        (34) запускал хранимую прцедуру 1sp_DBReindex     | |||
| 36
    
        Ёпрст гуру 19.09.21✎ 21:17 | 
        Ну открой наконец, жуколов, создай элемент, нажми на замер, запиши элемент, нажми на замер ышо раз.
 Сымотри стек вызовов Хотя бы | |||
| 37
    
        Ёпрст гуру 19.09.21✎ 21:18 | 
        Ну и профайлер можно натравить, хотя.. это лишнее     | |||
| 38
    
        geniusbsd 19.09.21✎ 21:34 | 
        (36) 
 Глобальный модуль 1018 Пока ЦеныТовара.ПолучитьЭлемент() = 1 Цикл 501981 85.191610 51.78 Справочник.Номенклатура.Форма 1328 глЗаписьПериодическихРеквизитов(Контекст); // добавляем небходимые закладки 1 76.893254 46.74 Глобальный модуль 952 ОткрытьФормуМодально("Обработка.ЗаписьПериодическихРеквизитов", Параметр); 1 76.893231 46.74 Справочник.Номенклатура.ФормаСписка.ФормаСписка 66 Цена = глВернутьЦену(ТекущийЭлемент(), ТипыЦен.ПолучитьЗначение(4)); 20 35.653820 21.67 Справочник.Номенклатура.ФормаСписка.ФормаСписка 64 Цена = глВернутьЦену(ТекущийЭлемент(), ТипыЦен.ПолучитьЗначение(2)); 20 34.497887 20.97 Справочник.Номенклатура.ФормаСписка.ФормаСписка 119 Цена = глВернутьЦену(ТекущийЭлемент(), ТипЦены); 4 17.144227 10.42 Глобальный модуль 1019 Если ЦеныТовара.ПометкаУдаления() = 1 Тогда 501967 1.525526 0.93 | |||
| 39
    
        Джордж1 19.09.21✎ 21:36 | 
        Надо в процедуре глВернутьЦену - поставить условие на пустое значение Товар
 Сейчас похоже при поиске цен - весь справочник перебирается и так 4 раза | |||
| 40
    
        Ёпрст гуру 20.09.21✎ 10:18 | 
        (38) понятно. У тебя не запись тормозит, а пересчетв форме списка справочника, в котором 500к элементов перебираются каждый раз, еще и мегатормоз периодика.
 Заремь в форме списка строки получения цены Цена = глВернутьЦену и проверб, что всё полетело. | |||
| 41
    
        Mikeware 20.09.21✎ 10:55 | 
        +(40) который выполняется после записи элемента...
 ------------ раз базы SQL - я б посоветовал переписать на прямой запрос, и не трахать мозг. Это быстрее всего. | |||
| 42
    
        SiAl-chel 20.09.21✎ 11:06 | 
        (18), (38) Отстой. Если нет возможности использовать прямые запросы, через 1C++ или ToySQL, то хотя бы вместо выборки элементов надо использовать стандартный (черный) запрос - это в разы должно ускорить получение цены. Ну и конечно использование индексов. Владелец - это уже индексированное поле.     | |||
| 43
    
        Mikeware 20.09.21✎ 11:35 | 
        (42) он по владельцу и отбирает.     | |||
| 44
    
        SiAl-chel 20.09.21✎ 11:53 | 
        (43) Кроме владельца нужен еще отбор по категории цены. Читай внимательно. Ты не выспался что ли?     | |||
| 45
    
        Mikeware 20.09.21✎ 12:02 | 
        (44) индекс по владельцу и другому реквизиту - создается, если галку "сортировка" поставят. Если бы поставили - тогда и отбирали бы ВыбратьЭлементыПоРеквизиту. Раз выбирают просто так - значит, и отборы не стоят, значит и индексов нет.     | |||
| 46
    
        SiAl-chel 20.09.21✎ 12:05 | 
        (45) ВыбратьЭлементы и ВыбратьЭлементыПоРеквизиту - зло. Нужно использовать черный запрос. Я это уже сказал выше. А чтобы запрос ускорился, тогда и надо включать сортировку. Так что не понимаю причину дискуссии.     | |||
| 47
    
        Mikeware 20.09.21✎ 12:10 | 
        (46) Вот! ключевые слова "я не понимаю". Что и требовалось доказать     | |||
| 48
    
        серый КТУЛХУ 20.09.21✎ 12:11 | 
        (47): ну человек не понимает - как это черный запрос может работать медленнее... ну бывает...     | |||
| 49
    
        Bigbro 20.09.21✎ 12:16 | 
        зачем полмиллиона цен лопатятся? я тоже не понимаю.     | |||
| 52
    
        SiAl-chel 20.09.21✎ 12:29 | 
        (49) Во-во.
 (48) Ты докажешь, что полмиллионная выборка будет работать быстрее черного запроса? Черный запрос при трансляции вообще-то WHERE накладывает, а выборка в каких случаях накаладывает?. | |||
| 56
    
        Ёпрст гуру 20.09.21✎ 13:20 | 
        (52) Если это выборка по реквизиту, то быстрее     | |||
| 57
    
        SiAl-chel 20.09.21✎ 13:22 | 
        (56) Если включена сортировка, то черный запрос с отбором по этой сортировке все равно будет также работать или быстрее, чем объектная выборка.     | |||
| 58
    
        Ёпрст гуру 20.09.21✎ 13:24 | 
        (57) не быстрее.     | |||
| 59
    
        SiAl-chel 20.09.21✎ 13:27 | 
        (57) У меня на 150 тысячах записей работало быстрее. Так что слово против слова. Да и спецы 1С на ИТС в рекомендациях не советовали использовать объектную выборку там, где можно использовать черный запрос. Хотя и то, и другое прямым запросам проигрывают в разы.     | |||
| 60
    
        Ёпрст гуру 20.09.21✎ 13:33 | 
        (59) Ну вот сразу видно, что ты их не писал.
 ВыбратьЭлементыПоРеквизиту, как и НайтиПоРеквизиту делает запрос по индексированному полю, и никак ты это не ускоришь, даже переписав на прямой запрос. Ну разве что, использовав свой самодельный покрывающий индекс. | |||
| 61
    
        серый КТУЛХУ 20.09.21✎ 13:33 | 
        не быстрее.
 так что два слова против слова. | |||
| 62
    
        Ёпрст гуру 20.09.21✎ 13:33 | 
        Ну и всяко, чорный запрос проиграет этой конструкции     | |||
| 63
    
        HawkEye 20.09.21✎ 13:49 | 
        (33) так если ты сам не смог найти, имеет смысл послушать, что тебе другие говорят? 
 могу повторить: проблема не в записи, а в отображении списка... | |||
| 64
    
        Злопчинский 20.09.21✎ 17:18 | 
        (63) тогда пусть тс простестирует открытие редактирование и закрытие карточки не из списка а напрямую     | |||
| 65
    
        Злопчинский 20.09.21✎ 17:21 | 
        (39) и на то что товар не группа?     | |||
| 66
    
        Джордж1 20.09.21✎ 17:26 | 
        (63)Ну автор же написал что проблема только при создании элемента - при чем тут список вообще     | |||
| 67
    
        Злопчинский 20.09.21✎ 17:31 | 
        (66) не, перечитай     | |||
| 68
    
        Джордж1 20.09.21✎ 17:44 | 
        ОткрытьФормуМодально("Обработка.ЗаписьПериодическихРеквизитов", Параметр);    1    76.893231    46.74
 тогда вот это надо смотреть еще А я вот не помню - разве в типовых в списке для для всех строк функции отрабатывают. как минимум кэширование должно быть Но функция показа остатков в форме списков вроде есть в ТиС - и включается галочкой | |||
| 69
    
        серый КТУЛХУ 20.09.21✎ 17:57 | 
        (68): никакого кэширования.
 слева-направо сверху-вниз по всем видимым строкам | |||
| 70
    
        серый КТУЛХУ 20.09.21✎ 17:58 | 
        (кэширование каждый может сам-сам-сам сделать штатными средствами, не проблема - но тут не тот случай)     | |||
| 71
    
        Джордж1 20.09.21✎ 17:59 | 
        (69)если именно по ВИДИМЫМ - то ничего страшного     | |||
| 72
    
        серый КТУЛХУ 20.09.21✎ 18:00 | 
        (71): на самом деле - страшно. ибо тормозит нещадно.     | |||
| 73
    
        Джордж1 20.09.21✎ 18:01 | 
        (72)это если работать со списком без групп, с группами не так страшно     | |||
| 74
    
        Злопчинский 20.09.21✎ 18:42 | 
        (73) какая разница? Обсчитываются выводимые на экран.     | |||
| 75
    
        Джордж1 20.09.21✎ 18:51 | 
        (73)ну на экран весь справочник не влезет
 Пока ЦеныТовара.ПолучитьЭлемент() = 1 Цикл 501981 85.191610 51.78 вот здесь 501981 - это же количество итераций? явно оно не при выводе на экран отрабатывает - это и заметили бы сразу Что там может происходить того при записи существующего элемента справочника - непонятно | |||
| 76
    
        серый КТУЛХУ 20.09.21✎ 20:45 | 
        (75): и у тебя даже не закрадывается подозрение, что 501981 штука - это тупое перелопачивание всего справочника при ошибочном указании владельца и/или без явной установки работы в режиме иерархии?..     | |||
| 77
    
        Джордж1 20.09.21✎ 20:51 | 
        (76)так я сразу написал это в (39)
 Непонятно как такое может быть для уже созданного элемента? | |||
| 78
    
        Злопчинский 20.09.21✎ 20:55 | 
        (77) да хз, когда-то полного не приведено     | |||
| 79
    
        DrZombi гуру 21.09.21✎ 06:06 | 
        (0) Поздравляю, переходите на прямые запросы :)     | |||
| 80
    
        SiAl-chel 21.09.21✎ 08:06 | 
        (61) Два так два. Мой опыт 8 лет назад на комплексной клюшке на сиквеле в 15 гектар показал, что функция, показывающая текущую среднюю себестоимость в списке номенклатуры из несколько десятков тысяч элементов, после переписывания с выборки на черный запрос ускорилась в 2,5 раза. Заказ был разовый, поэтому клиент отказался от внедрения прямых запросов.     | |||
| 81
    
        dmrjan 21.09.21✎ 10:00 | 
        В MSSQL на чтение возникает блокировка на строку, но когда данных много, то это может увеличивать стоимость запроса в MSSQL. В PostgreSQL другая проблема - несмотря на отсутствие блокировок на чтение, там при каждом обращении в цикле может возникать новая временная таблица. И так и так плохо.     | |||
| 82
    
        Злопчинский 21.09.21✎ 10:24 | 
        https://infostart.ru/1c/articles/76287/
 Может пригодится | |||
| 83
    
        Злопчинский 21.09.21✎ 10:25 | 
        (80) а что ты там переписал в списке "из выборки на чорный запрос"?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |