|
Что происходит при перезаписи элемента справочника? | ☑ | ||
---|---|---|---|---|
0
slafor
23.05.22
✎
16:17
|
Разбираюсь с кодом предшественников, и нашел там одну особенность. Для ускорения получения остатков и резервов номенклатуры, эти остатки и резервы хранятся в самом справочнике номенклатуры в виде реквизитов, и меняются регламентной процедурой каждые 5 минут. То есть каждые 5 минут в фоновом режиме строится запрос по регистру остатков, его результаты сверяются с этими реквизитами справочника номенклатуры, и если они отличаются, то получается НоменклатураОбъект, туда устанавливаются новые значения и объект перезаписывается. В связи с эти у меня возникло два вопроса:
1. Когда существующий элемент справочника перезаписывается в базу, то заново перезаписываются все реквизиты, или они сравниваются теми, что были ранее, и записываются только измененные? Просто запись почему-то идет очень долго... 2. Если я для хранения текущих значений остатков сделаю отдельные регистры сведений, понятно, что их запись будет ижти быстрее. А вот будут ли они читаться так же быстро, как и реквизиты номенклатуры? |
|||
1
yopQua
23.05.22
✎
16:19
|
(0) бугага
зачем их хранить где то еще, кроме как в регистрах остатков? |
|||
2
H A D G E H O G s
23.05.22
✎
16:21
|
(0) Выпили это нахрен.
|
|||
3
Kassern
23.05.22
✎
16:23
|
(0) Не надо хранить остатки в справочнике... У вас перезаписывается весь объект, а там полюбому 100500 различных проверок производится
|
|||
4
Kassern
23.05.22
✎
16:24
|
Интересно, а как предшественники собирали остатки по дням отчет?)
|
|||
5
balak05
23.05.22
✎
16:24
|
(0) А зачем так хранится то? В отчете данные берутся каком то из реквизита? Или при проведении документов каких? В любом случае лучше брать данные по остаткам из виртуальной таблицы остатков
|
|||
6
Жан Пердежон
23.05.22
✎
16:25
|
(0) будет примерно тоже самое, что брать их из текущих итогов;
имхо, лучше убрать нафиг |
|||
7
p-soft
23.05.22
✎
16:25
|
так в 7.7 раньше веселились. кто то видно на старых дрожжах в 8 заехал)
|
|||
8
Kassern
23.05.22
✎
16:26
|
(7) там был вроде периодический реквизит)
|
|||
9
Kassern
23.05.22
✎
16:27
|
(5) как зачем, вангую, чтобы удобно было, юзвер зашел в карточку товара и сразу остаток видит, либо доп колонкой вывести в список и не надо запрос к остатками делать, но какая цена вопроса...)
|
|||
10
timurhv
23.05.22
✎
16:27
|
>1. Когда существующий элемент справочника перезаписывается в базу, то заново перезаписываются все реквизиты, или они сравниваются теми, что были ранее, и записываются только измененные? Просто запись почему-то идет очень долго...
Вроде, это работает только для регистров накопления (движений документа). >2. Если я для хранения текущих значений остатков сделаю отдельные регистры сведений, понятно, что их запись будет ижти быстрее. А вот будут ли они читаться так же быстро, как и реквизиты номенклатуры? 1С при обращении через точку делает внутреннее соединение с таблицей, так что в теории - будет также. |
|||
11
p-soft
23.05.22
✎
16:27
|
(8) не, периодика - злом в клюшках была. так кешировали остатки, расчеты и тп хрень для целей выгрузки куда либо.
|
|||
12
Злопчинский
23.05.22
✎
16:28
|
(1) спроси это у разработчиков типовых, в то же самой УНФ. там аналогичная хрень для ускорения получения остатков.
|
|||
13
yopQua
23.05.22
✎
16:29
|
(12) осмелюсь заметить - для получения неактуальных остатков
|
|||
14
Волшебник
модератор
23.05.22
✎
16:30
|
# Здесь мем с Лавровым
|
|||
15
timurhv
23.05.22
✎
16:31
|
(1)
Регистр накопления, состав индекса "Таблица остатков" [ОРРХ | ОРНР1 +] Период + Измерение (Измерению "Измерение" задано свойство "Индексировать"(начиная со второго измерения). Поэтому регистр сведений быстрее. |
|||
16
H A D G E H O G s
23.05.22
✎
16:32
|
(15) Почему?
|
|||
17
balak05
23.05.22
✎
16:34
|
(9) Согласен - в этом случае хоть какая то польза от данного механизма
|
|||
18
yopQua
23.05.22
✎
16:34
|
(15) шта?
поставь индекс где хочешь выполнять получение остатков раз в 5 минут и писать половину справочника в базу по новой - ничем не быстрее, чем получать остатки в нужных отчетах, которые строятся пусть раз в пол часа |
|||
19
yopQua
23.05.22
✎
16:37
|
(17) это удаление зубов через ухо
нарисуйте на форме ТабДок, ТабПоле, html страницу и еще десяток средств отображения, сделайте запрос по одной! ссылке и покажите остатки как хочется - с ериями, с характеристика, по складам или ячейкам или еще чему там... ну это к (0) конечно. сопутствуюищий вопрос, тоже к (0) - а в реквизитах справочника и склады остатков есть? |
|||
20
slafor
23.05.22
✎
16:38
|
(4) Все отчеты естественно делаются по регистрам накопления )
Но когда пользователь хочет увидеть остатки в колонке таблицы на форме подбора, то получение остатков для всей номенклатуры таблицы из регистра накопления конечно будет тормозить. |
|||
21
yopQua
23.05.22
✎
16:40
|
(20) в любой(ну наверно) типовой открываете справочник и видите внизу/сбоку/ с прискоком табличку, в которой выведены текущие остатки, рассчитываются приактивизации строки, проблем с получением не видно
|
|||
22
slafor
23.05.22
✎
16:40
|
(19) Им многого не надо - хотят видеть общий остаток по всем складам )
|
|||
23
Kassern
23.05.22
✎
16:41
|
я вижу 2 варианта:
1) В дин списках получать остатки из виртуальных таблиц рег. накоплений и прочих условий и логик 2) Создать рег. сведений, с остатками и получать из него остатки. Регламентно его обновлять. Весь вопрос в быстродействии и оперативности данных. Либо 50 юзверов каждые несколько минут по 20 раз юзают таблицу, где по сложной логике получает 1с свободные остатки и резерв+еще какие-нибудь данные. Либо мы заранее регламентом получаем данные и пишем в табличку. Вот только выбор в справочник был крайне не удачный, так как приходится весь объект перезаписывать. Плюс ко всему блокировка таблицы происходит. |
|||
24
yopQua
23.05.22
✎
16:44
|
(22) ну а подлежащие списанию, которые переместили на склад, с которого потом списывают? они тоже будут в этой куче
|
|||
25
Kassern
23.05.22
✎
16:45
|
(22) Ведомость товаров на складах им в помощь)
|
|||
26
balak05
23.05.22
✎
16:46
|
(19) ну я согласен - с реквизитом на форме и получением остатка по данной позиции из таблицы остатков было бы лучше значительно
|
|||
27
yopQua
23.05.22
✎
16:50
|
на ИТСе пишут, что в УНФ все это есть
https://its.1c.ru/db/answers1c/content/1240/hdoc может надо конфу немного изучить? |
|||
28
slafor
23.05.22
✎
16:57
|
(21) В подборе такое тоже есть. Но вот именно, что получение остатков происходит при активизации каждой строки - а пользователь хочет видеть в отдельной колонке, и сразу, не активизируя каждую строку отдельно )
|
|||
29
H A D G E H O G s
23.05.22
✎
17:00
|
(28) Номенклатура + левоесоединение с оперативной таблицей остатков
|
|||
30
Kassern
23.05.22
✎
17:00
|
(28) А у вас есть понимание, почему именно так было сделано в типовой?)
|
|||
31
lodger
23.05.22
✎
17:05
|
(0) это могло быть актуально в эпоху 8.0 или интенсивного роста 8.2 (когда были некие глюки в некоторых промежуточных подверсиях).
в 2022 году это невероятно древний и кривой костыль. это никак не может быть быстрее. (20) на каком складе? на какой организации? какой состав измерений в РН остатков? |
|||
32
H A D G E H O G s
23.05.22
✎
17:07
|
Хех. Посмотрел типовую. Выводят в отдельную колонку, берут через левое соединение с РС РаспределениеЗапасов.
ERP 2.5.7 |
|||
33
Kassern
23.05.22
✎
17:08
|
(28) конфа какая?
|
|||
34
Kassern
23.05.22
✎
17:09
|
(32) может у ТС отраслевка какая-нибудь на 8.1)
|
|||
35
yopQua
23.05.22
✎
17:09
|
(28) "каждую строку отдельно" а все вместе, это что - документ, список справочника или что? ну в любом случае можно прикрутить куда угодно.
(33) ну да, я почему то решил унф, наверно тему перепутал |
|||
36
slafor
23.05.22
✎
17:14
|
(33) Розница 2.3.
|
|||
37
Said_We
23.05.22
✎
17:18
|
(0) СпрОбъект.ОбменДанными.Загрузка = Истина;
Есть такое или нет. Такая запись отключит проверки, но правда и регистрацию объекта в обменах. Если обменов нет, то может ускорить на время проверок, которые могут быть при записи. Для формы списка тянутся же данные только для Номенклатуры, которая отображается в списке + одна страница вверх и одна страница вниз? Или каждый раз для всей номенклатуры? |
|||
38
Said_We
23.05.22
✎
17:21
|
(36) В рознице иногда остатки вообще не важны при продаже - если товар на полке лежит. Что за товар?
|
|||
39
Kassern
23.05.22
✎
17:21
|
(36) ну вот для того, чтобы список не тормозил, сделали остатки отдельной табличкой при активизации. Чтобы при пролистывании 100500 позиций номенклатуры не было обращения постоянного к таблице остатков.
|
|||
40
Kassern
23.05.22
✎
17:22
|
(38) тут вопрос в другом, начальство сказало - хочу, погромисты сказали -окей и пихнули в номенклатуру реквизиты. А сейчас оказывается тормозит рег задание)
|
|||
41
Kassern
23.05.22
✎
17:25
|
Для анализа склада есть отчет Оценка склада, а для подбора в рознице нет смысла вообще остатки показывать в списке, если позиция интересует - ее сканируют, позиционируется строчка и показывается остаток на складах.
|
|||
42
Said_We
23.05.22
✎
17:25
|
Переделать рег задание. Пусть пишет не все остатки, а только по которым были изменения. Сами изменения писать в отдельный РС при движении по РН с остатками. Сам регламент пробегает и меняет только там где могли поменяться остатки и очищает РС.
|
|||
43
Kassern
23.05.22
✎
17:26
|
поэтому изначально задача странная. Для УТ там другое дело, там оптовые продажи, можно посмотреть аналоги, их количество и решить какой лучше товар предложить. Тут же просто розница, что принесли на кассу, то и пробили
|
|||
44
Said_We
23.05.22
✎
17:29
|
"ее сканируют, позиционируется строчка и" - а если сканируют что-то большое и не подъемное :-) Шутка.
Я к тому же. В рознице отказать покупателю в продаже, так как у тебя по остаткам показывает, что нет в наличии, когда покупатель в руках это держит..... Ну как бы... А если продают оргтехнику, то тут в руках может и не держит, а получение на складе Ситилинк тот же. Тоже розница, но без зала. |
|||
45
slafor
23.05.22
✎
17:32
|
(38) (43) Это Розница, но отраслевое решение - "Магазин автозапчастей". И сразу знать, что есть такой-то болт для конкретной тачки, или такая-то АКБ - никто наверное не сможет.
|
|||
46
Kassern
23.05.22
✎
17:34
|
(45) В этом случае нужно будет допилить форму так как вам нужно с учетом комплектующих. Для этого дело есть и специализированные конфигурации. Так как там различные аналоги и т.д.
|
|||
47
Kassern
23.05.22
✎
17:34
|
*дела
|
|||
48
Kassern
23.05.22
✎
17:37
|
а блин, это же типовое решение на базе розницы)
|
|||
49
Йохохо
23.05.22
✎
17:41
|
(45) всё хуже, он подбирает аналоги. перед тем как сбежать попробуй со скоростью разобраться и забрать деньги
|
|||
50
Злопчинский
23.05.22
✎
18:01
|
ну.. актуальные - они на сейчас, сейчас - оно одно. а неактуальные - это на когда?
|
|||
51
yopQua
23.05.22
✎
18:33
|
на время отработки задания до 4:59
"я нажал, а оно а оно не показывает, а ему, ему нужен сранный ссальник" **показывает на чела с деньгами в руках, "плачет" |
|||
52
СвинТуз
23.05.22
✎
18:47
|
И такое бывает.
|
|||
53
ДедМорроз
23.05.22
✎
23:30
|
В половине интернет-сервисов остатки кешируются,да и точное количество не всегда отображается,а вот при оформлении заказа остатки проверяются и делается резерв - частенько бывают случаи,когда по таблице есть,а по факту - уже нет - и никто не умер.
Поэтому,остатки в реальном времени имеют право на существование только с резервированием тоже в реальном времени - то есть когда менеджер что-то добавил в заказ,то оно сразу в резерве,но тут нужно ограничивать время работы с заказом и не давать менеджеру бросить заказ,или при закрытии,еслм не проведен,то резерв снимать. |
|||
54
timurhv
24.05.22
✎
00:55
|
(18) >поставь индекс где хочешь
Ставьте, толку? Спереди будет Период. Вы путаете с физической таблицей Регистр накопления, "Основная таблица регистра" [ОРРХ | ОРНР1 +] Измерение + Период + Регистратор + НомерСтроки Измерению "Измерение" задано свойство "Индексировать". |
|||
55
H A D G E H O G s
24.05.22
✎
01:02
|
(54) И? 1С вставит в запрос условие на период = 3999 году
|
|||
56
Остап Ибрагимович
24.05.22
✎
02:26
|
несколько удивлен таким зашкаливающим количеством "ну нафига" и фуканием (при таком то скоплении "матерых зубров").
такое бывает оправдано - если в форме списка надо видеть остатки приблизительно, при этом идет не интенсивная отгрузка (или хронологически регламентированная - редкость, но бывает). а самое главное - такой реквизит можно вытащить в любой(!) список (в любых диалогах), в котором фигурирует ссылка на этот справочник - тупо вытянуть в любую такую форму этот реквизит через стандартное "изменить форму" в пользовательском режиме. и это бывает ооочень удобно. во всяком случае юзеры (и заказчики) часто видят в такой возможности плюсы, перевешивающие со свистом замечания о приблизительности показателя. |
|||
57
Обработка
24.05.22
✎
07:21
|
(0) Выпили эту гадость!
Если уж сильно хочется именно так то. 1. Создай РС не периодический. Назовем это "ОстаткиТоваров". Измерение Номенклатура Ресурс остаток. 2. Обновляй остатки в нем хоть каждые 5 минут хоть каждую 10 минут При условии если остатки изменились. 3. Делай левое соединение номенклатуры м этим регистром. |
|||
58
ИС-2
naïve
24.05.22
✎
08:08
|
(0) академически это не правильно. С точки зрения пользователя очень удобно. Например, в любом отчете видеть ситуация на данный момент
Проанализировать через сервис Гилева из-за чего делается долго. Или хотя бы замером производительности. Для ускорения 1) Записывать в режиме ОбменДанными.Загрузка. Убрать проверки. 2) В спр. номенклатура добавить Реквизит "ДанныеОстатков". В него писать текущие остатки. За счет этого не должно быть блокировок 3) Вычистить планы обмена от спр. номенклатура. |
|||
59
Serg_1960
24.05.22
✎
08:37
|
Спорить о том правильно это или нет не буду, только замечу: принципе, чисто теоретически, остатки и резервы в справочнике можно актуализировать при записи в соответствующие регистры конфигурации, используя пресловутое "ОбменДанными.Загрузка = Истина" для скорости. Тогда вопрос тормозного регламентного задания отпадает за ненадобностью :)
|
|||
60
Ryzeman
24.05.22
✎
08:48
|
(0)
>>1. Когда существующий элемент справочника перезаписывается в базу, то заново перезаписываются все реквизиты, или они сравниваются теми, что были ранее, и записываются только измененные? Просто запись почему-то идет очень долго... Перезаписывается целиком, но сама запись справочника средствами СУБД занимает милисекунды. Тормоза идут из-за проверок, расчётов или блокировок. Плюс скажем есть у тебя 200 тысяч элементов справочника, и вот 200 тысяч раз в цикле сервер обращается к СУБД что бы найти и изменить запись... В теории можно ускорить, тут уже писали как. >>2. Если я для хранения текущих значений остатков сделаю отдельные регистры сведений, понятно, что их запись будет ижти быстрее. А вот будут ли они читаться так же быстро, как и реквизиты номенклатуры Смотря как напишешь, но в целом - да. Левое соединение с простой табличкой остатков будет отрабатывать влёт. |
|||
61
yopQua
24.05.22
✎
08:50
|
удобность присутствует
сомнения вызывает сам принцип построения такой "архитектуры", потому что если использовать его один раз, то вроде бы и ничего (ну как ничего - если большой список номенклатуры и текучка остатков, то и чего), но если взять этот принцип за правило и расставить по всей базе.. ну хз у меня такая реализация вызывает мягко говоря "отторжение" на уровне инстинктов самосохранения. поэтому, пригодность присутствует если вы ради пользователя готовы послать себя в светлое будущее с производительностью, где ТС и находится в настоящем, потому что надо было думать в прошлом. а претензии ему теперь предъявляет все тот же пользователь(видимо). значит объяснить ему надо "либо удобно, либо быстро - ничего личного" пс. сейчас заметил из постов ТС - запрос, перебор номенклатуры, обновление/запись. вопрос то у него не во времени получения остатков, а в долгой записи номенклатуры. ну и где то было уже - остатки можно получить только для видимых в списке позиций, положить в табличку и оттуда доставать, если позиция уже есть в табличке, то не дергаться, если сменили группу, то очистить, то удалить из табличкиЮ что было получено раньше и больше пока не нужно. ну в общем пофантазировать и сделать можно, что бы без тормозов при просмотре и без фона каждые 5 минут |
|||
62
ДедМорроз
24.05.22
✎
08:57
|
Можно сделать два решистра - один для хранения остатков,а другой - для записи информации о том,что остатки нужно обновить - при любом изменении документов,в которых укпзана номенклатура - писать во второй регистр,а обновлять остатки только по тем товарам,которые записаны с удалением записи.
|
|||
63
Обработка
24.05.22
✎
09:30
|
(62) Даа это 5 ое колесо при уже существующем 4 нормальных.
|
|||
64
Kassern
24.05.22
✎
09:34
|
(62) сейчас еще придем к планам обмена, через них регистрировать изменения остатков, а регламентом уже по нему обновлять остатки)
|
|||
65
lodger
24.05.22
✎
10:02
|
(64) и прикрутить к нему последовательность, с измерением по номенклатуре.
|
|||
66
timurhv
24.05.22
✎
10:44
|
(55)
Создал тестовую: 1. Регистр сведений (независимый) Склад + Номенклатура (принудительно добавил индексирование) Ресурс: Количество 2. Регистр накопления Склад + Номенклатура (принудительно добавил индексирование) Ресурс: Количество 3. Записал тестовые данные на 1 млн уникальных записей. Выполнил запросы: 1. Справочник Номенклатура с левым соединением регистра сведений: CPU = 1031, Reads = 10979, Duration = 1035 2. Справочник Номенклатура с левым соединением регистра накопления (без параметров виртуальной таблицы): CPU = 1688, Reads = 13330, Duration = 1693 |
|||
68
Said_We
24.05.22
✎
13:11
|
(59) ""ОбменДанными.Загрузка = Истина"" в (37) уже предлагалось. Не пробуют и не рассматривают такой вариант. :-)
|
|||
69
H A D G E H O G s
24.05.22
✎
13:55
|
(66) Ну и?
В РС кластерный индекс Склад+Номенклатура=16+16=32 байта на запись В РН кластерный индекс Период+Склад+Номенклатура=6+16+16 = 38 байта на запись РС/РН=32/38*100=84% оценочно 10979/13330*100=82% фактически. Никакой магии, влияние поля Период, вот и всё. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |