|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Добрый день! Необходимо сделать выборку (SQL) товаров с указанием количества сколько он лежал на складе. Прямым способом через определение остатков на каждый день и затем суммирование дней, где кол-во отлично от нуля, это выполняется очень долго. Думаю, что не я первый с этим сталкивается. Подскажите, пожалуйста, или методику или код как это сделать. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2017, 15:15 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Других методик не будет. Потому что единственный выход: считать остатки. Как вариант - сделать журнал с подневными остатками. И зачитывать из него. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2017, 16:13 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Lexx_SQLДобрый день! Необходимо сделать выборку (SQL) товаров с указанием количества сколько он лежал на складе. Прямым способом через определение остатков на каждый день и затем суммирование дней, где кол-во отлично от нуля, это выполняется очень долго. Думаю, что не я первый с этим сталкивается. Подскажите, пожалуйста, или методику или код как это сделать. Спасибо. Вообщем то можно. Делаете SUM кол-во операции PARTITION BY товары, ORDER by дата, id операции - высчитываете остаток на начало операции (соответственно остаток на конец операции = на начало + количество самой операция). Соответственно для операции определяется change = 1 - если появился, -1 - если исчез, 0 если его статус не изменился. А дальше GROUP BY по change * (конец интервала - date) - "подсчет интеграла" в SQL правыми прямоугольниками. Ну и еще надо с началами интервалов пободаться. Соответственно, это все делается одним запросом, но на голом SQL или псевдо-SQL вроде хибернейтовского или 1с-ского вы убьетесь это делать. Модератор: Тема перенесена из форума "ERP и учетные системы". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2017, 17:14 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Lexx_SQLПрямым способом через определение остатков на каждый день и затем суммирование дней, где кол-во отлично от нуля, это выполняется очень долго.еще и неверно. Утром распродали весь остаток и пришла новая партия - в конце дня остаток есть, но оборот товара отличный от нуля. В итоге ликвидный товар тоже попадает в отчет как неликвидный. Отсюда: Ежедневные остатки Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Где "Дни" - таблица дат за период Посмотри на ИТС: Методическая поддержка 1С:Предприятия 8 -> Методические рекомендации по конфигурированию -> Система компоновки данных -> Дополнение периодов в системе компоновки данных Если нет ИТС, скачай бесплатные материалы по 1С по ссылке http://v8.1c.ru/edu/ выбери "Версия для обучения программированию" и нажми "скачать бесплатно". В архиве на 1,8 ГБ будет папка ITS - там как раз офф-лайн версия ИТС (680 МБ). прямая ссылка - http://online.1c.ru/catalog/free/18610119/ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 08:51 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Вот еще ресурс - http://pro1c.org.ua/index.php?showtopic=27559 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 08:55 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Партии если есть то можно по ним смотреть. Уход партий и остатки на конец ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 09:14 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Владимир ЛазуркоLexx_SQLПрямым способом через определение остатков на каждый день и затем суммирование дней, где кол-во отлично от нуля, это выполняется очень долго.еще и неверно. Утром распродали весь остаток и пришла новая партия - в конце дня остаток есть, но оборот товара отличный от нуля. В итоге ликвидный товар тоже попадает в отчет как неликвидный. Отсюда: Ежедневные остатки Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Где "Дни" - таблица дат за период Посмотри на ИТС: Методическая поддержка 1С:Предприятия 8 -> Методические рекомендации по конфигурированию -> Система компоновки данных -> Дополнение периодов в системе компоновки данных Если нет ИТС, скачай бесплатные материалы по 1С по ссылке http://v8.1c.ru/edu/ выбери "Версия для обучения программированию" и нажми "скачать бесплатно". В архиве на 1,8 ГБ будет папка ITS - там как раз офф-лайн версия ИТС (680 МБ). прямая ссылка - http://online.1c.ru/catalog/free/18610119/ Так это и есть определение остатков на каждый день и затем суммирование дней. Итого у вас материализуется таблица размером кол-во дней * среднее количество товара на остатках, СУБД очень порадуется. Плюс при таком запросе СУБД не будет использовать результат предыдущего дня а для каждого будет считать сначала. То есть фиг с материализацией, у вас сложность алгоритма выполнения, будет кол-во дней * кол-во операций / 2. В цикле и то лучше. Вы хоть думайте прежде чем такое рекомендовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 09:14 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Nitro_Junkie, ну ладно уж количество дней - количество дней когда были изменения остатков. Если товар не оборачиваемый то это немного ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 09:24 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Nitro_JunkieВы хоть думайте прежде чем такое рекомендовать.Вы хоть думайте прежде чем писать "Вы хоть думайте". Просьба относиться ко всем участникам конференции уважительно. А вот мой совет "посмотри на ИТС" был проигнорирован. ИТС плохого не посоветует? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 10:08 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
ZerroNitro_Junkie, ну ладно уж количество дней - количество дней когда были изменения остатков. Если товар не оборачиваемый то это немного Материализоваться то как раз будут кол-во дней * (кол-во товаров которые были на начало или по которым было движение). И как раз если товар не оборачиваемый это еще хуже. Так как ассортимент будет широкие и у вас будет много остатков по одной единице - скажем 200к, и при выполнении запроса у вас будет материализоваться таблица на 6млн записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 11:44 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Владимир ЛазуркоNitro_JunkieВы хоть думайте прежде чем такое рекомендовать.Вы хоть думайте прежде чем писать "Вы хоть думайте". Просьба относиться ко всем участникам конференции уважительно. А вот мой совет "посмотри на ИТС" был проигнорирован. ИТС плохого не посоветует? Не наезд. Случайно получилось. :( ИТС плохого не посоветует? Это риторический вопрос? Если да, то не совсем понимаю какой на него ответ. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 11:48 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Nitro_JunkieЭто риторический вопрос? Если да, то не совсем понимаю какой на него ответ. :)вопросительный знак был лишний. От ТС мы не получили полной задачи - ему надо показывать неликвиды (чтобы из реализовать) или какова заполненность склада (чтобы оптимизировать затраты на арендованное помещение) - от этого меняется и подход и способ получения данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 12:15 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Nitro_JunkieZerroNitro_Junkie, ну ладно уж количество дней - количество дней когда были изменения остатков. Если товар не оборачиваемый то это немного Материализоваться то как раз будут кол-во дней * (кол-во товаров которые были на начало или по которым было движение). И как раз если товар не оборачиваемый это еще хуже. Так как ассортимент будет широкие и у вас будет много остатков по одной единице - скажем 200к, и при выполнении запроса у вас будет материализоваться таблица на 6млн записей. 20 тышь товаров* продается 3-4 раза в месяц =100 тышь записей фигня ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 12:42 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
ZerroNitro_Junkieпропущено... Материализоваться то как раз будут кол-во дней * (кол-во товаров которые были на начало или по которым было движение). И как раз если товар не оборачиваемый это еще хуже. Так как ассортимент будет широкие и у вас будет много остатков по одной единице - скажем 200к, и при выполнении запроса у вас будет материализоваться таблица на 6млн записей. 20 тышь товаров* продается 3-4 раза в месяц =100 тышь записей фигня 20тыщ товаров * кол-во дней в периоде. То есть за месяц 600 тысяч записей. А если 200 тысяч или период - год - 6млн ну и т.д. А если нужно по часам считать, а если эти данные используются в операционной деятельности - ну и т.п. То есть тут подход в принципе стремный. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 13:23 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Nitro_JunkieZerroпропущено... 20 тышь товаров* продается 3-4 раза в месяц =100 тышь записей фигня 20тыщ товаров * кол-во дней в периоде. То есть за месяц 600 тысяч записей. А если 200 тысяч или период - год - 6млн ну и т.д. А если нужно по часам считать, а если эти данные используются в операционной деятельности - ну и т.п. То есть тут подход в принципе стремный. Посмотри как разворачивает запрос по периодам - только те дни когда было движение. то есть 20*4*12 = 640 тышь записей. не страшно. вот цикл по остаткам по 7200 тышь записям по любому медленнее будет ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 13:34 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
ZerroNitro_Junkieпропущено... 20тыщ товаров * кол-во дней в периоде. То есть за месяц 600 тысяч записей. А если 200 тысяч или период - год - 6млн ну и т.д. А если нужно по часам считать, а если эти данные используются в операционной деятельности - ну и т.п. То есть тут подход в принципе стремный. Посмотри как разворачивает запрос по периодам - только те дни когда было движение. то есть 20*4*12 = 640 тышь записей. не страшно. вот цикл по остаткам по 7200 тышь записям по любому медленнее будет Не совсем понимаю что значит "разворачивает запрос по периодам". Можете хотя бы контурно обрисовать какой у него план выполнения будет? Потому как я кроме nested loop'а по дням, а дальше seq scan по таблице остатков и оборотов придумать не могу как он может это выполнять. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 13:54 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Nitro_JunkieZerroпропущено... Посмотри как разворачивает запрос по периодам - только те дни когда было движение. то есть 20*4*12 = 640 тышь записей. не страшно. вот цикл по остаткам по 7200 тышь записям по любому медленнее будет Не совсем понимаю что значит "разворачивает запрос по периодам". Можете хотя бы контурно обрисовать какой у него план выполнения будет? Потому как я кроме nested loop'а по дням, а дальше seq scan по таблице остатков и оборотов придумать не могу как он может это выполнять. когда в 1с ставишь показывать обороты с остатками по регистру день он показывает остатки на начало и конец дня в котором сменись остатки. то есть если у товара были продажи 3 и 7 то будет 2 записи 20 0 2 18 -3 18 0 1 17 -7 на каждый день просто так не сделаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2017, 14:14 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Lexx_SQL, - А может зря мучаетесь? Это от Вас попросил логист для.... (много пропущенного текста). Ключевое - это будет запускаться раз в месяца от силы. Есть ли смысл тратить несколько дней работы на алгоритм, который сэкономит логисту 5 минут в месяц? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2017, 13:50 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Программист 1сLexx_SQL, - А может зря мучаетесь? Это от Вас попросил логист для.... (много пропущенного текста). Ключевое - это будет запускаться раз в месяца от силы. Есть ли смысл тратить несколько дней работы на алгоритм, который сэкономит логисту 5 минут в месяц?Для таких целей целесообразно создать регистр сведений, в который писать дату и время открытия отчета и его наименование. А потом в конце месяца/квартала/полугодия посмотреть по нему статистику. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2017, 09:44 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Программист 1с, Нужна статистика по дням для заказа. А заказ может делаться и несколько раз в день. В 1С в каком то отчете смотрел это реализуется секунд за 30 с другими данными. Если высчитывать остатки по дням за год (около 6,5 млн записей) и потом группировать, то выходит минут 15. Возможно нужно считать по периодам, но не могу понять из какой таблице забирать данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2017, 12:45 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Lexx_SQLПрограммист 1с, Нужна статистика по дням для заказа. А заказ может делаться и несколько раз в день. В 1С в каком то отчете смотрел это реализуется секунд за 30 с другими данными. Если высчитывать остатки по дням за год (около 6,5 млн записей) и потом группировать, то выходит минут 15. Возможно нужно считать по периодам, но не могу понять из какой таблице забирать данные.Загуглите - "1с остатки на каждый день". Там и замечательный пример есть. Думаю как раз - не более 30 секунд будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2017, 17:50 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Легко решается обьединением с календарем (есть такой регистр в 1С) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 09:26 |
|
1С83 дней на складе за год (SQL)
|
|||
---|---|---|---|
#18+
Все примеры кривые. Не учитывают то что в УТ10 например 2 регистра остатков по складам - с типом оптовые и отдельные регистр остатки в рознице. Также не учитывают что могут быть выходные праздники и прочее. На самом деле запрос намного больше и намного сложнее. Еще может быть задача отдельно по складам и еще при ведении характеристик.... Так и быть поделюсь рабочим запросом и своего решения для УТ11 (оригинал http://subsystems.ru/solutions/program=154/) Для УТ10 запрос будет сложнее из за двух регистров ВЫБРАТЬ НоменклатураСКолДней.Номенклатура, НоменклатураСКолДней.Характеристика, СУММА(НоменклатураСКолДней.КоличествоДнейВПродаже) ИЗ (ВЫБРАТЬ РабочиеДниНоменклатуры.Номенклатура КАК Номенклатура, РабочиеДниНоменклатуры.Характеристика КАК Характеристика, СУММА(ВЫБОР КОГДА ИсторияОстатков.ВНаличииКонечныйОстаток > 0 ИЛИ КОНЕЦПЕРИОДА(РабочиеДниНоменклатуры.ДатаГрафика, ДЕНЬ) = КОНЕЦПЕРИОДА(ИсторияОстатков.Период, ДЕНЬ) И ИсторияОстатков.ВНаличииКонечныйОстаток <= ИсторияОстатков.ВНаличииРасход И НЕ ИсторияОстатков.ВНаличииРасход = 0 И ИсторияОстатков.ВНаличииНачальныйОстаток > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК КоличествоДнейВПродаже ИЗ (ВЫБРАТЬ ДниКалендаря.ДатаГрафика КАК ДатаГрафика, МАКСИМУМ(ИсторияОстатков.Период) КАК Период, ИсторияОстатков.Номенклатура КАК Номенклатура, ИсторияОстатков.Характеристика КАК Характеристика ИЗ РегистрСведений.КалендарныеГрафики КАК ДниКалендаря ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ИсторияОстатков ПО (НАЧАЛОПЕРИОДА(ДниКалендаря.ДатаГрафика, ДЕНЬ) >= НАЧАЛОПЕРИОДА(ИсторияОстатков.Период, ДЕНЬ)) ГДЕ ДниКалендаря.Календарь = &РабочийКалендарь И ДниКалендаря.ДатаГрафика <= &КонецПериода И ДниКалендаря.ДатаГрафика >= &НачалоПериода И ДниКалендаря.ДеньВключенВГрафик СГРУППИРОВАТЬ ПО ДниКалендаря.ДатаГрафика, ИсторияОстатков.Номенклатура, ИсторияОстатков.Характеристика) КАК РабочиеДниНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, ДвиженияИГраницыПериода, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ИсторияОстатков ПО РабочиеДниНоменклатуры.Период = ИсторияОстатков.Период И РабочиеДниНоменклатуры.Номенклатура = ИсторияОстатков.Номенклатура И РабочиеДниНоменклатуры.Характеристика = ИсторияОстатков.Характеристика СГРУППИРОВАТЬ ПО РабочиеДниНоменклатуры.Номенклатура, РабочиеДниНоменклатуры.Характеристика ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 09:54 |
|
|
start [/forum/search_topic.php?author=Alexander+Yuferev&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
147ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 587ms |
total: | 862ms |
0 / 0 |