v7: Оптимизация РегОстатки.СводныйОстаток #806828


#0 by Масянька
Доброе утро! ТиС 7.7. В справочнике "Номенклатура" (форма для подбора) реализовано следующее: в колонке "Остаток" выводится остаток по фирме (в целом, без учета склада) и в правом нижнем углу окошко с остатками по складам, на форме функция, в которой получаются остатки по складам для текущей номенклатуры (используется РегОстатки.СводныйОстаток). Замечены тормоза (не критичны, но есть). Вопрос: есть вариант оптимизировать? Спасибо.
#0 by Масянька
Доброе утро! ТиС 7.7. В справочнике "Номенклатура" (форма для подбора) реализовано следующее: в колонке "Остаток" выводится остаток по фирме (в целом, без учета склада) и в правом нижнем углу окошко с остатками по складам, на форме функция, в которой получаются остатки по складам для текущей номенклатуры (используется РегОстатки.СводныйОстаток). Замечены тормоза (не критичны, но есть). Вопрос: есть вариант оптимизировать? Спасибо.
#1 by пипец
прямой запрос )))
#2 by Масянька
А ты уверен (на 200%), что тормоза уйдут?
#3 by aka AMIGO
Припарка.. не поможет. Проверено. Только смириться с тормозами. Я приручил клиента, употребляет нормально :)
#4 by aka AMIGO
+3 правда, сделал доп.колонку "Остатки"
#5 by Ёпрст
можно, даже штатно. Покажи скриншот
#6 by Ёпрст
я- да, на 300%
#7 by Масянька
Да, не освоила я их :(
#8 by Масянька
Предложила убрать (табличку с остатками) - возмутились. А сама - задумалась :(
#9 by Ёпрст
штатно,так, например: при открытии формы, выгрузитьИтоги в ТЗ (лучше в ИТЗ) далше, в форме списка - поиск в этой тз и показ.
#10 by Ёпрст
по кнопке, можешь обновлять останки.
#11 by Ёпрст
Тормозов не будет, от слова совсем.
#12 by aka AMIGO
сколько позиций в Номенклатуре? У меня ок.15тысяч, добавлены колонки "Свободно, Остаток, Резерв", более того, вычисляется наличие аналогов Артикулов - это желтый треугольник во второй колонке: И тормозов особых не заметно
#13 by Масянька
О! Попробую. Спасибо.
#14 by Масянька
Я уже проверила - если убрать функцию на форме - летает. А так подтормаживает. Не критично, но интересно ведь :)
#15 by Масянька
Ты сильно указкой не лупи, но - не ищет по двум: А по одному - ищет...
#16 by Масянька
+ ТекНоменклатура - строка справ. СкладОсновной - ссылка на справ. склады.
#17 by Джинн
Тогда форма будет очень долго открываться. Это не панацея.
#18 by Смотрящий
Получение остатков по складам для текущей номенклатуры убрать как отдельную функцию; вставить ее код в получение остатво без учета складов
#19 by Масянька
Я тебя обожаю!!!!!!!!!!
#20 by Ёпрст
это хорошо. Получилось ?
#21 by Ёпрст
для итз нужно * пихать в индекс
#22 by Ёпрст
выгрузитьИтоги с фильтрами, почти мгновенно. ПриОткрытии будет незаметно
#23 by Масянька
Да. Я довольна. Пользователи - пищат. Спасибо!
#24 by Злопчинский
это ровно до того времени пок аво время открытой формы подбора не произойжет случая сильного изменения остатков. манагер ориентируется на устаревшей цифры, по факту - часть товара уже забрал другой манагер. Это принципиально с высоколиквидным товаром с малыми запасами, например. Но, имхо, вполне нормальная плата за простоту решения.
#25 by АЛьФ
2 Такие случаи всяко на этапе проведения разруливаются. Т.к. два менеджера даже с обновленными остатками могут одновременно подобрать один и тот же остаток. А вот в момент проведения один из них получит отлуп. Так что с кэшем в тз нормальное решение.
#26 by Злопчинский
Это понятно. Но частенько - раз идет ручной подбор - манагер в это время еще и с клиентом на телефоне висит. и вроде все, утрясли 100 штук товара, а тут раз во время проведения - отлуп... ну нехорошо это... ;-)
#27 by Ёпрст
там кнопка обновить есть
#28 by Масянька
Ой. Да хватит уже.
#29 by VladZ
Нужно говорить: "Ой, всё!" :)
#30 by Ёпрст
если у тя типовая тис (или на основе её) переделай открытие документов, ышо быстрее будет
#31 by Масянька
В данном случае, у меня все замечательно. :) А что касается остатков - се ля ви.
#32 by Ёпрст
подбора партий, случаем, не ведёте ? Там тоже нужно штатный механизм выкинуть к едрени фени, ну это так, на всякий
#33 by Злопчинский
а что сиподбором партий принципиально не так?
#34 by Ёпрст
дык всё не так. Если б пользовался, не спрашивал бы, а переделал. А у тя по-ходу автоподбор партий стоит , ты и не паришься
#35 by Масянька
Коню понятно :) Еще бы и единицы выкинуть - никак руки/ноги не дойдут.
#36 by Ёпрст
А че с единицами ? На счет подбора партий, открывается не форма списка справочника с отбором, а своя форма обработки для подбора с ТЗ/ТП на форме. Это в разы быстрее, чем форма списка справочника с отбором.
#37 by Ёпрст
туда и останки показать можно, при желании
#38 by Масянька
Тут есть задумка: при приходе/расходе пересчет (из упаковок в штуки и пр.), хранение и показ (в отчетах)... Пока - варится...
#39 by Злопчинский
ну там я помню, что вроде показываются все партии - используется форма списка справочника. у меня юзали это когда фармацевтика была - там работали строго по партиям с полу-ручным подбором - неудобно было весь список нафиг не нужен. типа так?
#40 by Ёпрст
да.
#41 by Злопчинский
во, ты и написал в самописной WMS для ОХ у меня так и делается при необходимости ручного подбора
#42 by Ёпрст
если партий много, установка отбора тормозит безбожно
#43 by Злопчинский
если я правильно вангую, то скорее всего это либо нафиг не нужно, либо нужно ну в очень спец.случаях. у меня все учитывается в штуках (базовые). хранится все в заводских коробах и упаковках. Вопросов типа "а сколько мы можем отгрузить коробок" или "а скольо коробок на остатке" - не возникает, если у меня 5487 штук, а размер коробки = 24 шт, то составляет 5487/24 = 228.625, это значит что в реале на складе будет 225 коробок, вскрыто единовременно не более 2 заводских коробок... и так - по иерархи упаковок - оценивается при необходимости запас. сборщикам на складе - нужное количество для отбора выдается разложенное по иерархии упаковок - надо собрать клиенту 275 штук, это значит надо взять (коробка = 24 штуки, в коробке 4 блока по 6 штук) = 11кор (11*24=264) + 1блок (6 шт)+5шт. Этого вполне хватает для нормальной беспроблемной работы. сборщик может вообще все количество набрать блоками/штуками - главное - нужное количество штук4 чтобы было. . вымороченным клиентам (сетям и пр) = заказы приходят в количестве кратном упаковкам. И на отборе стоит флаг на соотв.отбо "строго кратно упаковками" - то есть тут сборщик штуками не может набрать, только именно упаковками. . такой организации работы со штуками/упаковками - вполне хватает, без всяких дополнительных заморочек усложнения учета единиц. . вот как-то так.
#44 by Злопчинский
я с отборами в штатных формах вообще стараюсь не работать. если нужен отбор - фильтрую и вываливаю списком-тз/сз
#45 by Масянька
Прямые запросы, прямые запросы... Почему: {Справочник.Номенклатура.ФормаСписка.ДляПодбора.Модуль}: Недопустимое значение индекса параметра
#46 by Ёпрст
у тя скуль ?
#47 by Масянька
7.7 для Sql, базы dbf.
#48 by Ёпрст
ну и выполнитьСкалярный тут нельзя применять. У тя же запрос возвратит не одно значение
#49 by Масянька
Ты только линейку убери подальше :(
#50 by Ёпрст
:)) Для дбф тем более этот синтаксис не применим
#51 by Масянька
А какой применим?
#52 by Масянька
Так он не доходит до выполнить.
#53 by Ёпрст
ну и запрос, в корне не верен.
#54 by Масянька
Давай по очереди. Какой применим?
#55 by Ёпрст
нужно использовать или оледб или 1sqlite
#56 by Масянька
А можно подробнее...
#57 by Ёпрст
На вот, примерчик, мот поможет
#58 by Ёпрст
Хотя, если тебе так уж нужон параметизированный запрос, то тут токма скульлайт
#59 by Масянька
У меня есть 1sqlite.dll. А как с ним работать?
#60 by Ёпрст
к этой вк есть als и chm
#61 by Ёпрст
+ на форуме 1cpp куча веток с примерами
#62 by Ёпрст
и обсуждением
#63 by Масянька
Извини, задергали. А что лучше будет в данном контексте (остатки по номенклатуре по складу) для dbf?
#64 by ManyakRus
надо использовать дополнительный класс "ПоставщикДанных.Справочник" тогда можно все данные получать одним запросом, он получает только видимые на экране данные.
#65 by Масянька
А как дату задать? Рег.period = ('01.10.2017') Group by Рег.Номенклатура,Рег.Склад В dbf стоит "01.10.2017".
#66 by Ёпрст
я ж тебе пример дал :) Там универсально, независимо от того, какая выставлена периодичность хранения останков.
#67 by Масянька
Твой пример для меня силён... Сижу, ковыряю консоль...
#68 by Ёпрст
+ тебе нужно понимать, какие останки ты хочешь видеть, на ТА или на произвольный момент времени. Если на ТА, то просто берются останки с таблички RG по последней дате периодичности итогов. Если на любую дату, то берется предыдущая дата хранения останков и прибавляется оборот с RA с даты пердыдущей периодичности до нужной тебе даты.
#69 by Ёпрст
+68 берутся итоги с предудыщей даты + оборот с RA
#70 by Масянька
Останки хочу на дату подбора. В перспективе. В консоли без даты - хрень полная получается.
#71 by Ёпрст
#72 by Масянька
С остатками на начало получилось. С движениями - нет. Причем, не ругается собака... Молча пусто.     Движения.Количество As Количество --    Движения.Количество * (1 - Движения.debkred * 2) As Количество
#73 by Ёпрст
iddoc - это внутренний идентификатор документа. Нужно date фильтровать :)
#74 by Масянька
Уже разобралась... Тебя пока дождешься - родишь :)))) Но - тебе ОГРОМНОЕ спасибо!
#75 by Масянька
Кстати, первая строка после select - там будет просто строка с наименованием или полноценная ссылка (со всеми вытекающими последствиями)?
#76 by Ёпрст
ссылка, ты же метапарсеру задаешь тип вот тут:
#77 by Масянька
А почему квадратные скобки используются?
#78 by Ёпрст
просто указание метапарсеру
#79 by Ёпрст
что нужно полю присвоить определенный алияс (псевдоним) и привести к такому-то типу
#80 by Масянька
Я тебя обожаю!!! Спасибо!!!
#81 by Масянька
Про алиас - и коню понятно. Вот про метапарсер была мысль, но лучше уточнить.
#82 by Злопчинский
а нафига там приводить к типу в последнем масянькином примере?ВедьДвижения.Номенклатура и без приведения уже будет ссылкой????Или я не прав?
#83 by Aleksey
Нет это будет строка, т.е. по сути id объекта в виде строки
#84 by Злопчинский
а что из себя представляет ссылка тогда?
#85 by Aleksey
ссылка содержит вид. Т.е. по строке 248 нельзя однозначно сказать, что это ссылка на "веник" или ссылка на контрагента Иванова
#86 by Злопчинский
а в регистре ОстаткиТМЦ.Номенклатура - в измерении ссылка или ид?
#87 by Aleksey
да кто же его помнит как оно в типовой. У меня конкретный ID (указан конкретный тип и вид Справочник.Номенклатура). Если в конфигураторе в типе значения указать просто "справочник" то будет храниться вид + ID
#88 by Злопчинский
если в типовой тип измерения Номенклатура есть Справочник.Номенклатура?
#89 by Aleksey
ну ты как маленький
#90 by Aleksey
1.1.1. Хранение ID объекта ID может иметь 3 представления (уровня) в зависимости от длины (количества значащих символов):     9 символов – определен тип и вид объекта (например «Справочник.Клиенты»), в ID включается только порядковый номер в 36-ричной системе исчисления. Под порядковый номер отводятся первые 6 символов, последние 3 символа зарезервированы под код базы УРБД.     13 символов – определен только тип объекта, вид не задан (например «Справочник»). Первые 4 символа – идентификатор вида (как он задан в метаданных), последующие 9 символов – по аналогии с предыдущим пунктом.     23 символа – не определен тип и вид объекта. В таком случае в первых 2 символах хранится тип объекта (будет рассмотрен ниже), следующие 13 символов формируются аналогично предыдущему пункту. В некоторых случаях, при указании неопределенного типа объекта (длина ID кода 23 символа) создается дополнительное поле с символом «T» вначале (например, если в справочнике задан реквизит SP235 как неопределенный, то в таблице справочника будет создано еще одно поле TSP235).
#91 by Aleksey
Соответственно если задан конкретный справочник (Справочник.Номенклатура), то данные хранятся как 9 символов (6 под сам ID объект в 36-ричном формате + 3 символа по УРБД как оно задано в конфигураторе) Т.е. прямой запрос вернет строку "   248   " (ну или "   248FIL" если создан в урбд копии у которой код FIL) Если там просто справочник/документ, то будет что то типа " N57 5BTJC   ", где N57 это ID вида, а 5BTJC - 9-ти значный ID объекта
#92 by Ёпрст
ну ты это, попробуй, что вернёт без типизации и вопрос, сам собой отпадёт
#93 by tgu82
У меня тоже так сделано. Но если хотят, флагом переключают показывать это или нет. Малость тормозит но не всегда
#94 by Масянька
Почем расхода нет:    END As Расход,    END As Приход FROM     [Регистр.ОстаткиТМЦ] As Движения INNER Join [Журнал] Жур ON Жур.iddoc = Движения.iddoc and Жур.date BETWEEN '20171001'  And '20171025' А приход есть.
#95 by Масянька
+ Получилось! :)))
#96 by Масянька
Вопрос по регистрам (dbf): стандартный отчет "Ведомость по остаткам" показывает: нач. ост   приход   расход   кон. ост    15        11        21       5 запрос: SELECT     Остатки.Склад As [Склад :Справочник.Склады],     Остатки.Количество As Количество FROM выдает  - Количество - 5. Лезу в dbf и вижу 01.10.17 - 5, 01.09.17 - 15. Вопрос: так как же получить остатки на нач. периода? Стандартный "Остатки ТМЦ" показывает тоже 15.
#97 by Масянька
Проверила - за сентябрь движений нет. Переиндексила БД. Результат - тот же: в отчете - 15, в запросе - 5.
#98 by aka AMIGO
Склады совпадают?
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С