|
v7: Оптимизация РегОстатки.СводныйОстаток | ☑ | ||
---|---|---|---|---|
0
Масянька
18.10.17
✎
09:50
|
Доброе утро!
ТиС 7.7. В справочнике "Номенклатура" (форма для подбора) реализовано следующее: в колонке "Остаток" выводится остаток по фирме (в целом, без учета склада) и в правом нижнем углу окошко с остатками по складам, на форме функция, в которой получаются остатки по складам для текущей номенклатуры (используется РегОстатки.СводныйОстаток()). Замечены тормоза (не критичны, но есть). Вопрос: есть вариант оптимизировать? Спасибо. |
|||
62
Ёпрст
24.10.17
✎
16:19
|
и обсуждением
|
|||
63
Масянька
24.10.17
✎
17:57
|
(62) Извини, задергали.
А что лучше будет в данном контексте (остатки по номенклатуре по складу) для dbf? |
|||
64
ManyakRus
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
|
почитай, на ночь
http://www.mista.ru/articles1c/hare/article.47.html http://www.script-coding.com/v77tables.html http://www.mista.ru/articles1c/hare/article.11.html http://www.mista.ru/articles1c/hare/article.12.html http://www.1cpp.ru/forum/YaBB.pl?num=1148038411 http://www.1cpp.ru/forum/YaBB.pl?num=1184317705 |
|||
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) а нафига там приводить к типу в последнем масянькином примере?
Ведь Движения.Номенклатура и без приведения уже будет ссылкой ???? Или я не прав? |
|||
83
Aleksey
25.10.17
✎
21:01
|
(82) Нет это будет строка, т.е. по сути id объекта в виде строки
|
|||
84
Злопчинский
25.10.17
✎
21:07
|
(83) а что из себя представляет ссылка тогда?
|
|||
85
Aleksey
25.10.17
✎
21:20
|
(84) ссылка содержит вид. Т.е. по строке 248 нельзя однозначно сказать, что это ссылка на "веник" или ссылка на контрагента Иванова
|
|||
86
Злопчинский
25.10.17
✎
21:24
|
(85) а в регистре ОстаткиТМЦ.Номенклатура - в измерении ссылка или ид?
|
|||
87
Aleksey
25.10.17
✎
21:46
|
(86) да кто же его помнит как оно в типовой. У меня конкретный ID (указан конкретный тип и вид Справочник.Номенклатура).
Если в конфигураторе в типе значения указать просто "справочник" то будет храниться вид + ID |
|||
88
Злопчинский
25.10.17
✎
23:11
|
(87) если в типовой тип измерения Номенклатура есть Справочник.Номенклатура
? |
|||
89
Aleksey
26.10.17
✎
00:05
|
(88) ну ты как маленький
http://www.script-coding.com/v77tables.html |
|||
90
Aleksey
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). |
|||
91
Aleksey
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) ну ты это, попробуй, что вернёт без типизации и вопрос, сам собой отпадёт
|
|||
93
tgu82
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. |
|||
98
aka AMIGO
26.10.17
✎
15:46
|
(97) Склады совпадают?
|
|||
99
aka AMIGO
26.10.17
✎
15:48
|
Может, попробовать из запроса убрать склад?
|
|||
100
Масянька
26.10.17
✎
15:48
|
(98) Хороший вопрос...
Не знаю, как сказать... 2 записи (в dbf). По одному - 0, по другому - 5 (это если смотреть 01.10.2017). Если на 01.09.2017: 15 и 1. |
|||
101
Масянька
26.10.17
✎
15:50
|
(99) ИМХО, дело не в запросе. Я же в запросе явно указываю дату. И в dbf (на эту дату) именно те цифры, которые в запросе.
|
|||
102
aka AMIGO
26.10.17
✎
15:52
|
(101) я имел в виду GROUP BY
Остатки.Номенклатура |
|||
103
Масянька
26.10.17
✎
15:54
|
(102) Тоже самое (5).
|
|||
104
aka AMIGO
26.10.17
✎
15:56
|
Ну, и последнее, поискал в ветке: Пересчет итогов никто вроде не советовал?
Бывало у меня такое. |
|||
105
Масянька
26.10.17
✎
15:57
|
(104) В конфигураторе - все галки - ничего не изменилось.
Это у меня поломатая БД? |
|||
106
aka AMIGO
26.10.17
✎
16:00
|
(105) Ну, необычно ведет себя - не значит, что поломатая.
Бывали глюки необъяснимые. Извини, Масянька, не горазд я на идеи, все закончились.. |
|||
107
aka AMIGO
26.10.17
✎
16:01
|
Оператор Сводного остатка скопипасть сюда, пожалуйста..
|
|||
108
Масянька
26.10.17
✎
16:01
|
(106) Причем, по нескольким позициям посмотрела: на 01.10.2017 лежат тек. остатки.
|
|||
109
Масянька
26.10.17
✎
16:01
|
(107) Чего? Переведи...
|
|||
110
aka AMIGO
26.10.17
✎
16:04
|
Типа Ост = Регистры.ТвойРегистр.СводныйОстаток(ТвояНоменклатура,[Измерения, желательно пустые],"Остаток[илиКакойТамРеквизитВРегистре]);
|
|||
111
aka AMIGO
26.10.17
✎
16:05
|
* илиКакойТамРеквизитВРегистре = илиКакойТамРесурсВРегистре
|
|||
112
Масянька
26.10.17
✎
16:07
|
(110) (111) Так я в консоли делаю.
|
|||
113
aka AMIGO
26.10.17
✎
16:09
|
(112) Ммм.. понятно..
А то у меня в ФормеСписка есть колонка СвободныйОстаток с формулой Функция ОстатокТовараНаСкладе() //*ВМ@MyCompany, 28-08-2014 14:21:58 Возврат Формат(Регистр.ОстаткиТоваров.Остаток(ТекущийЭлемент(),Склад,"ОстатокТовара") - Регистр.ЧугунныйРезерв.СводныйОстаток(ТекущийЭлемент(),,Склад,"Количество"),"Ч15.3"); ///ВМ@MyCompany, 28-08-2014 14:21:58 КонецФункции А внизу окна списка - маркер "Показывать остаток на складе" |
|||
114
Масянька
26.10.17
✎
16:10
|
(113) Я пока в консоли запросы пытаюсь делать.
|
|||
115
aka AMIGO
26.10.17
✎
16:11
|
(114) Я понял уже.. Ладушки, не буду мешать.
|
|||
116
Масянька
26.10.17
✎
16:26
|
А я правильно понимаю, что если надо остатки на ТА, то прямым запросом (1cqlite, dbf) достаточно взять остатки на начало тек. месяца? Или не правильно?
|
|||
117
Ёпрст
26.10.17
✎
16:38
|
(116) на начало периодичности хранения останков.
|
|||
118
Ёпрст
26.10.17
✎
16:39
|
Не у всех стоит месяц. У нас , к примеру 5 дней всегда было.
Это если че, самы быстрый способ для получения итогов и записи движений в регистры. |
|||
119
Ёпрст
26.10.17
✎
16:40
|
в (96) ты всего лишь берешь итоги на начало месяца.
Нужно к ним прибавить движения , будет тебе остаток |
|||
120
Масянька
26.10.17
✎
16:43
|
(119) Дык, почему: в стандартных отчетах на начало месяца - 15, а мне запрос выдает 5? Да, и в dbf лежит 5.
|
|||
121
Aleksey
26.10.17
✎
16:47
|
(120) а начальные остатки по отчету + обороты совпадают с конечными?
|
|||
122
Aleksey
26.10.17
✎
16:48
|
(116)
Запрос.Подставлять("ДатаТА", НачМесяца(ПолучитьДатуТА())); |
|||
123
Масянька
26.10.17
✎
16:49
|
(121) Обороты (другим запросом) один в один. А вот остатки (этим запросом) - дают конечный (сегодняшний) остаток.
Вот и думаю - на фига мне обороты? |
|||
124
opus70
26.10.17
✎
17:00
|
самый простой способ поменять порядок регистров в 1с очень эффективно помогает
|
|||
125
Масянька
26.10.17
✎
17:05
|
(124) Хватит мне тут кидать! У меня и так голова прямоугольная уже :)
|
|||
126
Ёпрст
26.10.17
✎
17:35
|
(123) больше кода. Отсюда не видно чего ты там проверяешь
|
|||
127
Ёпрст
26.10.17
✎
17:35
|
и остаток на наччало<>остаток на конец
|
|||
128
Ёпрст
26.10.17
✎
17:35
|
если че.
|
|||
129
Ёпрст
26.10.17
✎
17:35
|
:)
|
|||
130
Ёпрст
26.10.17
✎
17:36
|
(120) а на конец месяца сколько ? :)
|
|||
131
Масянька
26.10.17
✎
17:40
|
(130) Вот этот запрос:
SELECT Остатки.Номенклатура As [Номенклатура :Справочник.Номенклатура], Остатки.Склад As [Склад :Справочник.Склады], Остатки.Количество As Количество FROM [РегистрИтоги.ОстаткиТМЦ] As Остатки WHERE Остатки.PERIOD = '20171001' And Остатки.Количество > 0 GROUP BY Остатки.Номенклатура, Остатки.Склад -- Остатки.Номенклатура ORDER BY Остатки.Номенклатура в консоли показывает тек. остаток. |
|||
132
Ёпрст
26.10.17
✎
17:45
|
(131) And Остатки.Количество > 0 это лишнее
|
|||
133
Ёпрст
26.10.17
✎
17:46
|
ну и
SUM(Остатки.Количество) Количество |
|||
134
Масянька
26.10.17
✎
17:46
|
(132) А без этого пустые выводит.
Ну, дык, зачем обороты-то? |
|||
135
Изучаю1С8
26.10.17
✎
17:46
|
А чего 1cqlite по дефолту не на ТА остатки показывает если дату не указывать?
|
|||
136
Ёпрст
26.10.17
✎
17:47
|
Жалко, что 1sqlite не ругается на неверный синтаксис, как t-sql или fox
|
|||
137
Ёпрст
26.10.17
✎
17:47
|
(135) конечно нет
|
|||
138
Масянька
26.10.17
✎
17:47
|
(133) Без разницы - тоже самое.
(136) А что неправильно? |
|||
139
Изучаю1С8
26.10.17
✎
17:47
|
Вообще прямойзапрос класс бы уже освоила там синтаксис что для дфб что для скуля один
|
|||
140
Ёпрст
26.10.17
✎
17:48
|
(134) че ?
|
|||
141
Изучаю1С8
26.10.17
✎
17:48
|
и мануал есть нормальный
|
|||
142
Масянька
26.10.17
✎
17:50
|
(141) Кинь мануалом.
|
|||
143
Масянька
26.10.17
✎
17:51
|
(140) То! Если убрать - выводит пустые кол-ва по складу (другому).
|
|||
144
Ёпрст
26.10.17
✎
17:52
|
(138) нет агрегатной функции к числовым полям , которые есть в селект листе и которых нет в указании в group by
|
|||
145
Изучаю1С8
26.10.17
✎
17:52
|
||||
146
Изучаю1С8
26.10.17
✎
17:53
|
||||
147
Масянька
26.10.17
✎
17:54
|
(145) Спасибо. С dbf будет работать?
|
|||
148
Изучаю1С8
26.10.17
✎
17:54
|
(147) да также через лайт, но синтаксис одинаковый
|
|||
149
Ёпрст
26.10.17
✎
17:54
|
Биомать, а ?
SELECT Остатки.Номенклатура As [Номенклатура :Справочник.Номенклатура], Остатки.Склад As [Склад :Справочник.Склады], sum(Остатки.Количество) As Количество FROM [РегистрИтоги.ОстаткиТМЦ] As Остатки WHERE Остатки.PERIOD = :НачПериод GROUP BY Остатки.Номенклатура, Остатки.Склад ..... мд = СоздатьОбъект("MetaDataWork"); НачПериод = мд.ПолучитьНачПериода(НачДата);//начало периода Запрос.Подставлять("НачПериод",НачПериод); |
|||
150
Ёпрст
26.10.17
✎
17:55
|
Если че, класс тебе не поможет.
|
|||
151
Ёпрст
26.10.17
✎
17:55
|
Всё равно, что доверить мотоцикл человеку, который на велосипеде не умеет ездить
|
|||
152
Изучаю1С8
26.10.17
✎
17:56
|
Класс более универсальный, запросы почти как на 1С8.
|
|||
153
Изучаю1С8
26.10.17
✎
17:56
|
Или базу на скуль потом перенесет, запросы переписывать придется? а так все будет работать за редким исключением.
|
|||
154
Масянька
26.10.17
✎
17:56
|
(149) Я в консоли ковыряю.
(150) Почему? (151) Ой, можно подумать, что ты ни разу с велика не падал. |
|||
155
Изучаю1С8
26.10.17
✎
17:57
|
Только поставщик поменяется.
|
|||
156
Масянька
26.10.17
✎
17:57
|
(153) Скуль платный. Начальство не ведется.
|
|||
157
Ёпрст
26.10.17
✎
17:57
|
Если че, в (149) - это останки на ТА, если НачДата в одной периодичности с ТА
|
|||
158
Изучаю1С8
26.10.17
✎
17:58
|
(156) Есть бесплатные версии.
|
|||
159
Масянька
26.10.17
✎
17:58
|
(158) Например...
|
|||
160
Изучаю1С8
26.10.17
✎
17:59
|
(159) SQL Express ограничение 10 гигов
|
|||
161
Изучаю1С8
26.10.17
✎
18:01
|
Хотя там вроде 1 гиг предел по памяти еще, может не вариант для тебя.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |