Вход | Регистрация

  1  2   
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

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

v7: Оптимизация РегОстатки.СводныйОстаток
Я
   Масянька
 
18.10.17 - 09:50
Доброе утро!
ТиС 7.7.
В справочнике "Номенклатура" (форма для подбора) реализовано следующее:
в колонке "Остаток" выводится остаток по фирме (в целом, без учета склада) и в правом нижнем углу окошко с остатками по складам, на форме функция, в которой получаются остатки по складам для текущей номенклатуры (используется РегОстатки.СводныйОстаток()).
Замечены тормоза (не критичны, но есть).
Вопрос: есть вариант оптимизировать?
Спасибо.
 
 
   пипец
 
1 - 18.10.17 - 10:49
прямой запрос )))
   Масянька
 
2 - 18.10.17 - 10:54
(1) А ты уверен (на 200%), что тормоза уйдут?
   aka AMIGO
 
3 - 18.10.17 - 10:55
(1) Припарка.. не поможет. Проверено.
Только смириться с тормозами. Я приручил клиента, употребляет нормально :)
   aka AMIGO
 
4 - 18.10.17 - 10:56
+3 правда, сделал доп.колонку "Остатки"
   Ёпрст
 
5 - 18.10.17 - 10:56
(0) можно, даже штатно.
Покажи скриншот
   Ёпрст
 
6 - 18.10.17 - 10:57
(2) я- да, на 300%
   Масянька
 
7 - 18.10.17 - 11:01
(5) http://pastenow.ru/bf75af89c41089f595b3d1ee2ae16015
(6) Да, не освоила я их :(
   Масянька
 
8 - 18.10.17 - 11:01
(3) (4) Предложила убрать (табличку с остатками) - возмутились. А сама - задумалась :(
   Ёпрст
 
9 - 18.10.17 - 11:02
(7)
штатно,так, например:
при открытии формы, выгрузитьИтоги в ТЗ (лучше в ИТЗ)
далше, в форме списка - поиск в этой тз и показ.
   Ёпрст
 
10 - 18.10.17 - 11:02
по кнопке, можешь обновлять останки.
 
 Рекламное место пустует
   Ёпрст
 
11 - 18.10.17 - 11:03
Тормозов не будет, от слова совсем.
   aka AMIGO
 
12 - 18.10.17 - 11:04
(0) сколько позиций в Номенклатуре?
У меня ок.15тысяч, добавлены колонки "Свободно, Остаток, Резерв", более того, вычисляется наличие аналогов Артикулов - это желтый треугольник во второй колонке:
https://i.paste.pics/64563e1621fff6fdc96ac2d669e5b5c4.png
И тормозов особых не заметно
   Масянька
 
13 - 18.10.17 - 11:04
(9) О! Попробую. Спасибо.
   Масянька
 
14 - 18.10.17 - 11:10
(12) Я уже проверила - если убрать функцию на форме - летает. А так подтормаживает. Не критично, но интересно ведь :)
   Масянька
 
15 - 18.10.17 - 14:09
(11) Ты сильно указкой не лупи, но - не ищет по двум:

ИндексТабОстатков.ДобавитьИндекс("Поиск", "Номенклатура, Склад"); 
СписокДляПоиска = СоздатьОбъект("СписокЗначений");
СписокДляПоиска.ДобавитьЗначение(ТекНоменклатура);
СписокДляПоиска.ДобавитьЗначение(СкладОсновной);
        Ост = ИндексТабОстатков.НайтиСтроку("Поиск", СписокДляПоиска, , 1);
Сообщить("№ - " + Ост + ", основной - " + ИндексТабОстатков.Количество);
СписокДляПоиска = СоздатьОбъект("СписокЗначений");
СписокДляПоиска.ДобавитьЗначение(ТекНоменклатура);
СписокДляПоиска.ДобавитьЗначение(СкладСписание);
        Ост = ИндексТабОстатков.НайтиСтроку("Поиск", СписокДляПоиска, , 1);
Сообщить("№ - " + Ост + ", списание - " + ИндексТабОстатков.Количество);

А по одному - ищет...
   Масянька
 
16 - 18.10.17 - 14:10
+ (15) ТекНоменклатура - строка справ.
СкладОсновной - ссылка на справ. склады.
   Джинн
 
17 - 18.10.17 - 14:14
(9) Тогда форма будет очень долго открываться. Это не панацея.
   Смотрящий
 
18 - 18.10.17 - 14:21
(0) Получение остатков по складам для текущей номенклатуры убрать как отдельную функцию; вставить ее код в получение остатво без учета складов
   Масянька
 
19 - 18.10.17 - 15:15
(11) Я тебя обожаю!!!!!!!!!!
   Ёпрст
 
20 - 18.10.17 - 16:16
(19) это хорошо. Получилось ?
   Ёпрст
 
21 - 18.10.17 - 16:17
(15) для итз нужно * пихать в индекс
   Ёпрст
 
22 - 18.10.17 - 16:18
(17) выгрузитьИтоги с фильтрами, почти мгновенно. ПриОткрытии будет незаметно
   Масянька
 
23 - 18.10.17 - 16:28
(20) Да.
Я довольна. Пользователи - пищат.
Спасибо!
   Злопчинский
 
24 - 18.10.17 - 21:04
(23) это ровно до того времени пок аво время открытой формы подбора не произойжет случая сильного изменения остатков. манагер ориентируется на устаревшей цифры, по факту - часть товара уже забрал другой манагер. Это принципиально с высоколиквидным товаром с малыми запасами, например. Но, имхо, вполне нормальная плата за простоту решения.
   АЛьФ
 
25 - 19.10.17 - 10:34
2(24) Такие случаи всяко на этапе проведения разруливаются. Т.к. два менеджера даже с обновленными остатками могут одновременно подобрать один и тот же остаток. А вот в момент проведения один из них получит отлуп. Так что с кэшем в тз нормальное решение.
   Злопчинский
 
26 - 19.10.17 - 11:35
(25) Это понятно. Но частенько - раз идет ручной подбор - манагер в это время еще и с клиентом на телефоне висит. и вроде все, утрясли 100 штук товара, а тут раз во время проведения - отлуп... ну нехорошо это... ;-)
   Ёпрст
 
27 - 19.10.17 - 12:08
(26) там кнопка обновить есть
   Масянька
 
28 - 19.10.17 - 12:11
(26) Ой. Да хватит уже.
   VladZ
 
29 - 19.10.17 - 12:14
(28) Нужно говорить: "Ой, всё!" :)
   Ёпрст
 
30 - 19.10.17 - 12:18
(28) если у тя типовая тис (или на основе её) переделай открытие документов, ышо быстрее будет
   Масянька
 
31 - 19.10.17 - 12:26
(30) В данном случае, у меня все замечательно. :)
А что касается остатков - се ля ви.
   Ёпрст
 
32 - 19.10.17 - 12:35
(31) подбора партий, случаем, не ведёте ?
Там тоже нужно штатный механизм выкинуть к едрени фени, ну это так, на всякий
   Злопчинский
 
33 - 19.10.17 - 13:17
(32) а что сиподбором партий принципиально не так?
 
 
   Ёпрст
 
34 - 19.10.17 - 13:48
(33)дык всё не так. Если б пользовался, не спрашивал бы, а переделал. А у тя по-ходу автоподбор партий стоит , ты и не паришься
   Масянька
 
35 - 19.10.17 - 13:51
(32) Коню понятно :)
Еще бы и единицы выкинуть - никак руки/ноги не дойдут.
   Ёпрст
 
36 - 19.10.17 - 14:16
(35) А че с единицами ?
На счет подбора партий, открывается не форма списка справочника с отбором, а своя форма обработки для подбора с ТЗ/ТП на форме. Это в разы быстрее, чем форма списка справочника с отбором.
   Ёпрст
 
37 - 19.10.17 - 14:16
туда и останки показать можно, при желании
   Масянька
 
38 - 19.10.17 - 14:36
(36) Тут есть задумка: при приходе/расходе пересчет (из упаковок в штуки и пр.), хранение и показ (в отчетах)...
Пока - варится...
   Злопчинский
 
39 - 19.10.17 - 19:07
(34) ну там я помню, что вроде показываются все партии - используется форма списка справочника. у меня юзали это когда фармацевтика была - там работали строго по партиям с полу-ручным подбором - неудобно было весь список нафиг не нужен.
типа так?
   Ёпрст
 
40 - 19.10.17 - 19:08
(39) да.
   Злопчинский
 
41 - 19.10.17 - 19:08
(36) во, ты и написал
в самописной WMS для ОХ у меня так и делается при необходимости ручного подбора
   Ёпрст
 
42 - 19.10.17 - 19:08
если партий много, установка отбора тормозит безбожно
   Злопчинский
 
43 - 19.10.17 - 19:18
(38) если я правильно вангую, то скорее всего это либо нафиг не нужно, либо нужно ну в очень спец.случаях.
у меня все учитывается в штуках (базовые). хранится все в заводских коробах и упаковках. Вопросов типа "а сколько мы можем отгрузить коробок" или "а скольо коробок на остатке" - не возникает, если у меня 5487 штук, а размер коробки = 24 шт, то составляет 5487/24 = 228.625, это значит что в реале на складе будет 225 коробок, вскрыто единовременно не более 2 заводских коробок...
и так - по иерархи упаковок - оценивается при необходимости запас.
сборщикам на складе - нужное количество для отбора выдается разложенное по иерархии упаковок - надо собрать клиенту 275 штук, это значит надо взять (коробка = 24 штуки, в коробке 4 блока по 6 штук) = 11кор (11*24=264) + 1блок (6 шт)+5шт.
Этого вполне хватает для нормальной беспроблемной работы. сборщик может вообще все количество набрать блоками/штуками - главное - нужное количество штук4 чтобы было.
.
вымороченным клиентам (сетям и пр) = заказы приходят в количестве кратном упаковкам. И на отборе стоит флаг на соотв.отбо "строго кратно упаковками" - то есть тут сборщик штуками не может набрать, только именно упаковками.
.
такой организации работы со штуками/упаковками - вполне хватает, без всяких дополнительных заморочек усложнения учета единиц.
.
вот как-то так.
   Злопчинский
 
44 - 19.10.17 - 19:20
(42) я с отборами в штатных формах вообще стараюсь не работать. если нужен отбор - фильтрую и вываливаю списком-тз/сз
   Масянька
 
45 - 24.10.17 - 15:31
(42) Прямые запросы, прямые запросы...
Почему:
    ТекстЗапроса = "
    |SELECT
    |    $Рег.Фирма as [Фирма $Справочник.Фирмы],
    |    $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
    |    $Рег.Количество as Количество
    |FROM
    |    $РегистрИтоги.ОстаткиТоваров as Рег
    |WHERE
    |    $Рег.Фирма = ? AND
    |    $Рег.Номенклатура = ? AND
    |    $Рег.Склад = ? ";

    RS.Подготовить(ТекстЗапроса);
    RS.ПостроитьПараметры();

    RS.УстПараметр(1, глПользователь.ОсновнаяФирма);
    RS.УстПараметр(2, ТекущийЭлемент());
    RS.УстПараметр(3, СкладОсновной);
    Возврат RS.ВыполнитьСкалярный();

ругается: 
RS.УстПараметр(1, глПользователь.ОсновнаяФирма);
{Справочник.Номенклатура.ФормаСписка.ДляПодбора.Модуль(334)}: Недопустимое значение индекса параметра
   Ёпрст
 
46 - 24.10.17 - 15:33
(45) у тя скуль ?
   Масянька
 
47 - 24.10.17 - 15:34
(46) 7.7 для Sql, базы dbf.
   Ёпрст
 
48 - 24.10.17 - 15:35
ну и выполнитьСкалярный тут нельзя применять. У тя же запрос возвратит не одно значение
   Масянька
 
49 - 24.10.17 - 15:35
(46) Ты только линейку убери подальше :(
 
 Рекламное место пустует
   Ёпрст
 
50 - 24.10.17 - 15:35
(47) :))
Для дбф тем более этот синтаксис не применим
   Масянька
 
51 - 24.10.17 - 15:36
(50) А какой применим?
   Масянька
 
52 - 24.10.17 - 15:36
(48) Так он не доходит до выполнить.
   Ёпрст
 
53 - 24.10.17 - 15:36
ну и запрос, в корне не верен.
   Масянька
 
54 - 24.10.17 - 15:37
(53) Давай по очереди.
Какой применим?
   Ёпрст
 
55 - 24.10.17 - 15:37
(51) нужно использовать или оледб или 1sqlite
   Масянька
 
56 - 24.10.17 - 15:40
(55) А можно подробнее...
   Ёпрст
 
57 - 24.10.17 - 15:45
На вот, примерчик, мот поможет
https://cloud.mail.ru/public/AeJK/71o1vuzd1
   Ёпрст
 
58 - 24.10.17 - 15:45
Хотя, если тебе так уж нужон параметизированный запрос, то тут токма скульлайт
   Масянька
 
59 - 24.10.17 - 16:11
(58) У меня есть 1sqlite.dll.
А как с ним работать?
   Ёпрст
 
60 - 24.10.17 - 16:19
(59) к этой вк есть als и chm
   Ёпрст
 
61 - 24.10.17 - 16:19
+
на форуме 1cpp куча веток с примерами
   Ёпрст
 
62 - 24.10.17 - 16:19
и обсуждением
   Масянька
 
63 - 24.10.17 - 17:57
(62) Извини, задергали.
А что лучше будет в данном контексте (остатки по номенклатуре по складу) для dbf?
   ManyakRus
 
64 - 24.10.17 - 22:53
надо использовать дополнительный класс "ПоставщикДанных.Справочник"
тогда можно все данные получать одним запросом,
он получает только видимые на экране данные.
   Масянька
 
65 - 25.10.17 - 11:49
(62) А как дату задать?
Select
   Рег.Номенклатура [Номенклатура :Справочник.Номенклатура],
   Рег.Склад [Склад :Справочник.Склады],
   Рег.Количество 

From
[РегистрИтоги.ОстаткиТМЦ] as Рег
WHERE 
Рег.period = ('01.10.2017')
Group by Рег.Номенклатура,Рег.Склад
В dbf стоит "01.10.2017".
   Ёпрст
 
66 - 25.10.17 - 11:53
(65) я ж тебе пример дал :)
Там универсально, независимо от того, какая выставлена периодичность хранения останков.
   Масянька
 
67 - 25.10.17 - 11:54
(66) Твой пример для меня силён...
Сижу, ковыряю консоль...
   Ёпрст
 
68 - 25.10.17 - 11:55
+
тебе нужно понимать, какие останки ты хочешь видеть, на ТА или на произвольный момент времени.
Если на ТА, то просто берются останки с таблички RG по последней дате периодичности итогов.
Если на любую дату, то берется предыдущая дата хранения останков и прибавляется оборот с RA с даты пердыдущей периодичности до нужной тебе даты.
   Ёпрст
 
69 - 25.10.17 - 11:56
+68 берутся итоги с предудыщей даты + оборот с RA
   Масянька
 
70 - 25.10.17 - 11:56
(68) Останки хочу на дату подбора. В перспективе.
В консоли без даты - хрень полная получается.
   Ёпрст
 
71 - 25.10.17 - 11:59
   Масянька
 
72 - 25.10.17 - 16:00
(71) С остатками на начало получилось.
С движениями - нет. Причем, не ругается собака... Молча пусто.
SELECT
    Движения.Номенклатура As [Номенклатура :Справочник.Номенклатура],
    Движения.Склад As [Склад :Справочник.Склады],
    Движения.Количество As Количество
--    Движения.Количество * (1 - Движения.debkred * 2) As Количество
FROM
    [Регистр.ОстаткиТМЦ] As Движения
WHERE
    Движения.IDDOC >= '20171001' And  Движения.IDDOC <= '20171023' 
  -- and Движения.Количество > 0
GROUP BY
    Движения.Номенклатура, Движения.Склад
ORDER BY
    Движения.Номенклатура
   Ёпрст
 
73 - 25.10.17 - 16:19
(72) iddoc - это внутренний идентификатор документа.
Нужно date фильтровать
:)
   Масянька
 
74 - 25.10.17 - 16:26
(73) Уже разобралась... Тебя пока дождешься - родишь :))))
Но - тебе ОГРОМНОЕ спасибо!
   Масянька
 
75 - 25.10.17 - 16:29
(73) Кстати, первая строка после select - там будет просто строка с наименованием или полноценная ссылка (со всеми вытекающими последствиями)?
   Ёпрст
 
76 - 25.10.17 - 16:52
(75) ссылка, ты же метапарсеру задаешь тип вот тут:
[Номенклатура :Справочник.Номенклатура]
   Масянька
 
77 - 25.10.17 - 16:55
(76) А почему квадратные скобки используются?
   Ёпрст
 
78 - 25.10.17 - 16:56
(77) просто указание метапарсеру
   Ёпрст
 
79 - 25.10.17 - 16:56
что нужно полю присвоить определенный алияс (псевдоним) и привести к такому-то типу
   Масянька
 
80 - 25.10.17 - 16:56
(78) Я тебя обожаю!!! Спасибо!!!
   Масянька
 
81 - 25.10.17 - 16:57
(79) Про алиас - и коню понятно. Вот про метапарсер была мысль, но лучше уточнить.
   Злопчинский
 
82 - 25.10.17 - 20:54
(76) а нафига там приводить к типу в последнем масянькином примере?
Ведь
Движения.Номенклатура и без приведения уже будет ссылкой
????
Или я не прав?
   Aleksey
 
83 - 25.10.17 - 21:01
(82) Нет это будет строка, т.е. по сути id объекта в виде строки
   Злопчинский
 
84 - 25.10.17 - 21:07
(83) а что из себя представляет ссылка тогда?
   Aleksey
 
85 - 25.10.17 - 21:20
(84) ссылка содержит вид. Т.е. по строке 248 нельзя однозначно сказать, что это ссылка на "веник" или ссылка на контрагента Иванова
   Злопчинский
 
86 - 25.10.17 - 21:24
(85) а в регистре ОстаткиТМЦ.Номенклатура - в измерении ссылка или ид?
   Aleksey
 
87 - 25.10.17 - 21:46
(86) да кто же его помнит как оно в типовой. У меня конкретный ID (указан конкретный тип и вид Справочник.Номенклатура).
Если в конфигураторе в типе значения указать просто "справочник" то будет храниться вид + ID
   Злопчинский
 
88 - 25.10.17 - 23:11
(87) если в типовой тип измерения Номенклатура есть Справочник.Номенклатура
?
   Aleksey
 
89 - 26.10.17 - 00:05
(88) ну ты как маленький
http://www.script-coding.com/v77tables.html
   Aleksey
 
90 - 26.10.17 - 00:06
1.1.1. Хранение ID объекта

ID может иметь 3 представления (уровня) в зависимости от длины (количества значащих символов):

    9 символов – определен тип и вид объекта (например «Справочник.Клиенты»), в ID включается только порядковый номер в 36-ричной системе исчисления. Под порядковый номер отводятся первые 6 символов, последние 3 символа зарезервированы под код базы УРБД.
    13 символов – определен только тип объекта, вид не задан (например «Справочник»). Первые 4 символа – идентификатор вида (как он задан в метаданных), последующие 9 символов – по аналогии с предыдущим пунктом.
    23 символа – не определен тип и вид объекта. В таком случае в первых 2 символах хранится тип объекта (будет рассмотрен ниже), следующие 13 символов формируются аналогично предыдущему пункту.

В некоторых случаях, при указании неопределенного типа объекта (длина ID кода 23 символа) создается дополнительное поле с символом «T» вначале (например, если в справочнике задан реквизит SP235 как неопределенный, то в таблице справочника будет создано еще одно поле TSP235).
   Aleksey
 
91 - 26.10.17 - 00:17
Соответственно если задан конкретный справочник (Справочник.Номенклатура), то данные хранятся как 9 символов (6 под сам ID объект в 36-ричном формате + 3 символа по УРБД как оно задано в конфигураторе)

Т.е. прямой запрос вернет строку "   248   " (ну или "   248FIL" если создан в урбд копии у которой код FIL)

Если там просто справочник/документ, то будет что то типа " N57 5BTJC   ", где N57 это ID вида, а 5BTJC - 9-ти значный ID объекта
   Ёпрст
 
92 - 26.10.17 - 08:00
(82) ну ты это, попробуй, что вернёт без типизации и вопрос, сам собой отпадёт
   tgu82
 
93 - 26.10.17 - 09:16
(12) У меня тоже так сделано. Но если хотят, флагом переключают показывать это или нет. Малость тормозит но не всегда
   Масянька
 
94 - 26.10.17 - 13:58
(92) Почем расхода нет:
SELECT
    Движения.Номенклатура As [Номенклатура :Справочник.Номенклатура],
    Движения.Склад As [Склад :Справочник.Склады],
   CASE 
       WHEN (DEBKRED   = 1) THEN Движения.Количество
       ELSE 0 
   END As Расход,
   CASE 
       WHEN (DEBKRED   = 0) THEN Движения.Количество 
       ELSE 0
   END As Приход
FROM
    [Регистр.ОстаткиТМЦ] As Движения
INNER Join [Журнал] Жур ON Жур.iddoc = Движения.iddoc and Жур.date BETWEEN '20171001'  And '20171025'
GROUP BY
    Движения.Номенклатура, Движения.Склад
ORDER BY
    Движения.Номенклатура

А приход есть.
   Масянька
 
95 - 26.10.17 - 14:20
+(94) Получилось! :)))
   Масянька
 
96 - 26.10.17 - 14:55
Вопрос по регистрам (dbf):
стандартный отчет "Ведомость по остаткам" показывает:
нач. ост   приход   расход   кон. ост
   15        11        21       5
запрос:
SELECT
    Остатки.Номенклатура As [Номенклатура :Справочник.Номенклатура],
    Остатки.Склад As [Склад :Справочник.Склады],
    Остатки.Количество As Количество
FROM
    [РегистрИтоги.ОстаткиТМЦ] As Остатки
WHERE
    Остатки.PERIOD = '20171001' And Остатки.Количество > 0
GROUP BY
    Остатки.Номенклатура, Остатки.Склад
ORDER BY
    Остатки.Номенклатура
выдает  - Количество - 5.
Лезу в dbf и вижу 01.10.17 - 5, 01.09.17 - 15.
Вопрос: так как же получить остатки на нач. периода?
Стандартный "Остатки ТМЦ" показывает тоже 15.
   Масянька
 
97 - 26.10.17 - 15:37
Проверила - за сентябрь движений нет.
Переиндексила БД.
Результат - тот же: в отчете - 15, в запросе - 5.
   aka AMIGO
 
98 - 26.10.17 - 15:46
(97) Склады совпадают?
   aka AMIGO
 
99 - 26.10.17 - 15:48
Может, попробовать из запроса убрать склад?
   Масянька
 
100 - 26.10.17 - 15:48
(98) Хороший вопрос...
Не знаю, как сказать...
2 записи (в dbf). По одному - 0, по другому - 5 (это если смотреть 01.10.2017). Если на 01.09.2017: 15 и 1.
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует