Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Товары на складах без движения

Товары на складах без движения
Я
   Novaginn
 
05.08.20 - 09:30
Товарищи форумчане, нужно рассчитать кол-во товаров без движения в регистре накопления «Товары на складах». Есть запрос, его надо как то оптимизировать или переделать, так как от него 1С намертво встает.

ВЫБРАТЬ
    КОЛИЧЕСТВО(ТоварыНаСкладахОстатки.Номенклатура) КАК Номенклатура,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ПОМЕСТИТЬ Остаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыНаСкладахОстатки

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстатки.ВНаличииОстаток
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
ПОМЕСТИТЬ Оборот
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Остаток.Номенклатура КАК Номенклатура,
    Оборот.ВНаличииПриход КАК ВНаличииПриход,
    Оборот.ВНаличииРасход КАК ВНаличииРасход,
    Оборот.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
ИЗ
    Остаток КАК Остаток,
    Оборот КАК Оборот
ГДЕ
    Оборот.ВНаличииПриход = 0
    И Оборот.ВНаличииРасход = 0
   Ёпрст
 
1 - 05.08.20 - 09:42
(0)ересь же написана.
КОЛИЧЕСТВО(ТоварыНаСкладахОстатки.Номенклатура) КАК Номенклатура ? И нафига считать количество ссылок при одинаковом остатке ?Шо за бред, не Пит ?
   Ёпрст
 
2 - 05.08.20 - 09:42
ну и 3 запрос..шедевр
   Ёпрст
 
3 - 05.08.20 - 09:43
Если не понял, то поясню

на остатках у тебя
Валенки 10
Сапоги 10
Тапки 20

твой первый запрос вернёт тебе

10 2
20 1

оно тебе точно надо ?
   Ёпрст
 
4 - 05.08.20 - 09:44
Ну а третий запрос неявным иннер джоином, даже комментить неохота.
   Novaginn
 
5 - 05.08.20 - 10:01
КОЛИЧЕСТВО(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК ВНаличииОстаток 

Подскажите, пожалуйста,как правильно написать.
   Ёпрст
 
6 - 05.08.20 - 10:35
(5) просто напиши запрос к остаткииобороты и условие на оборот=0 ...всё
   Novaginn
 
7 - 05.08.20 - 11:55
(6) дает нулевой результат
   Novaginn
 
8 - 05.08.20 - 13:02
Тот,который,я выложила, выдает ошибку:
Ошибка выполнения запроса
по причине:
Недостаточно памяти для получения результата запроса к базе данных
   Галахад
 
9 - 05.08.20 - 13:09
(8) В третьем запросе декартово произведение. А тебе нужно левое соеденение.
   Ёпрст
 
10 - 05.08.20 - 13:12
(7) нам отсюда не видно, что именно выполняешь
   azernot
 
11 - 05.08.20 - 13:13
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон) КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ 
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход = 0 и ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход = 0
   Novaginn
 
12 - 05.08.20 - 14:02
azernot, Спасибо тебе, Добрый человек!
   azernot
 
13 - 05.08.20 - 15:16
(12) Внезапно выяснилось что в (7) не совсем правда, да?
   Novaginn
 
14 - 05.08.20 - 16:19
Только получилось, что с движением и без движения одни и те же цифры

ВЫБРАТЬ
    ВЫРАЗИТЬ(СУММА(ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток) КАК ЧИСЛО(32, 0)) КАК ВНаличииКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ТоварыНаСкладахОстаткиИОбороты

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток



БЕЗ ДВИЖЕНИЯ 

ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход,
    ВЫРАЗИТЬ(СУММА(ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток) КАК ЧИСЛО(32, 0)) КАК ВНаличииКонечныйОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход = 0
    И ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход = 0

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход
   Novaginn
 
15 - 05.08.20 - 16:23
В результате полученных данных, выявлены следующие факты:                                        
                                        
1.    На складах предприятия находится материальных запасов на  2 680 611 413  руб. по  14 254 839  позициям.                                    
                                        
2.    "14 255 030  позиций суммарной стоимостью  2 680 611 413  руб. находятся            
 без движения с 01.07.2020 0:00:00г.    (а может быть и дольше), из них  12 588 921    
позиций малоценные, суммарной стоимостью  144 987 912  руб."                                    
                                        
                                        
3.    По  -191  позициям суммарной стоимостью  0  руб. происходит движение.
   Быдло замкадное
 
16 - 05.08.20 - 16:26
а типовой отчет товары на складах, с отбором количество приход = 0 и количество расход = 0 тут не подойдет?!
   Быдло замкадное
 
17 - 05.08.20 - 16:27
(15) 14 миллионов элементов номенклатуры? Ты убедись в этом перед тем как начальству докладывать))
   Ёпрст
 
18 - 05.08.20 - 16:38
(14) полный пэ.
Мот того, для начала, выкинишь нелелпые группировки по количеству из обоих запросов, и добавишь номенклвтуру в первый запрос?
   azernot
 
19 - 05.08.20 - 16:38
(14) У меня кровь течёт из глаз...
   Ёпрст
 
20 - 05.08.20 - 16:38
И выразить тоже выкинь
   azernot
 
21 - 05.08.20 - 16:45
Все остатки:

ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииОстаток КАК ВНаличииКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонГрница) КАК ТоварыНаСкладахОстатки


Не забываем про:
Запрос.УстановитьПараметр("ДатаКонГрница", Новый Граница(ДатаКон, ВидГраницы.Включая);

Без движения:

ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход = 0
    И ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход = 0

Никаких группировок не нужно, виртуальная таблица и без того уже сгруппирована по выбранным полям.

Далее, если тебе нужна не сумма остатков по количеству, а именно количество разных позиций номенклатуры - так и скажи, это другой запрос.
   Novaginn
 
22 - 05.08.20 - 17:00
Позиций номенклатуры
   azernot
 
23 - 05.08.20 - 17:35
ВЫБРАТЬ
    Количество(Различные ТоварыНаСкладахОстатки.Номенклатура) КАК КоличествоПозицийНаОстатках
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонГраница) КАК ТоварыНаСкладахОстатки
Где
   ТоварыНаСкладахОстатки.ВНаличииОстаток>0

Не забываем про:
Запрос.УстановитьПараметр("ДатаКонГраница", Новый Граница(МояДатаКон, ВидГраницы.Включая));


ВЫБРАТЬ
    Количество(Различные ТоварыНаСкладахОстаткиИОбороты.Номенклатура) КАК КоличествоПозицийНаОстаткахБезДвижения
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход = 0
    И ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход = 0
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток > 0
   H A D G E H O G s
 
24 - 05.08.20 - 17:38
1С -у стоило бы убрать из платформы ОстаткиИОбороты()

Страна вздохнула бы свободнее
   azernot
 
25 - 05.08.20 - 17:40
(24) Типун тебе на язык.
   H A D G E H O G s
 
26 - 05.08.20 - 17:43
(25) Це ересь же.
   azernot
 
27 - 05.08.20 - 17:49
(26) Народу ндравится!
Лично я регулярно использую. Готовая ОСВ.
   Novaginn
 
28 - 06.08.20 - 11:41
Делаю круговую диаграмму по этим позициям. Пример взяла с интернета. Ругается на Поле объекта не обнаружено (D1)


График = Макет.ПолучитьОбласть("Диаграмма");
    Диаграмма = График.Рисунки.D1.Диаграмма;
    Диаграмма.ТипДиаграммы = ТипДиаграммы.Круговая;
    Диаграмма.СерииВСтроках = ложь;
    Диаграмма.Обновление = Ложь;
    
     
   Диаграмма.Очистить();
   Диаграмма.ОтображатьЗаголовок = Ложь;
   
   ТЗДиаграммы = Новый ТаблицаЗначений;
   ТЗДиаграммы.Колонки.Добавить("Измерение1");
   ТЗДиаграммы.Колонки.Добавить("Измерение2");
   ТЗДиаграммы.Колонки.Добавить("Измерение3");
   ТЗДиаграммы.Колонки.Добавить("Точка");
   ТЗДиаграммы.Колонки.Добавить("Ресурс1");
   ТЗДиаграммы.Колонки.Добавить("Ресурс2");
   
   НовСтр = ТЗДиаграммы.Добавить();
   НовСтр.Измерение1=ТабличнаяЧастьСтрока.Параметры.Количество;
   НовСтр.Измерение2=ТабличнаяЧастьСтрока.Параметры.КолМал;
   НовСтр.Измерение3=ТабличнаяЧастьСтрока.Параметры.КолБезДвиж;
   НовСтр.Точка="01/01/01";
   НовСтр.Ресурс1=10;
   НовСтр.Ресурс2=15;
   НовСтр.Ресурс3=20;
   
   НовСтр = ТЗДиаграммы.Добавить();
   НовСтр.Измерение1=ТабличнаяЧастьСтрока.Параметры.Количество;
   НовСтр.Измерение2=ТабличнаяЧастьСтрока.Параметры.КолМал;
   НовСтр.Измерение3=ТабличнаяЧастьСтрока.Параметры.КолБезДвиж;
   НовСтр.Точка="01/02/01";
   НовСтр.Ресурс1=5;
   НовСтр.Ресурс2=9;
   НовСтр.Ресурс3=15;
   
   НовСтр = ТЗДиаграммы.Добавить();
   НовСтр.Измерение1=ТабличнаяЧастьСтрока.Параметры.Количество;
   НовСтр.Измерение2=ТабличнаяЧастьСтрока.Параметры.КолМал;
   НовСтр.Измерение3=ТабличнаяЧастьСтрока.Параметры.КолБезДвиж;
   НовСтр.Точка="01/03/01";
   НовСтр.Ресурс1=1;
   НовСтр.Ресурс2=3;
   НовСтр.Ресурс3=5;

   
   
   
      // Заполнить диаграмму 

 
       Для Каждого ТекСтр из ТЗДиаграммы цикл
      // Получить серию, точку и значение для них 

 
        ТекущаяСерия = Диаграмма.УстановитьСерию(ТекСтр.Измерение1);
        ТекущаяТочка = Диаграмма.УстановитьТочку(ТекСтр.Точка);
        Диаграмма.УстановитьЗначение(ТекущаяТочка, ТекущаяСерия, ТекСтр.Ресурс1, ,) ;
      
   ТекущаяСерия = Диаграмма.УстановитьСерию(ТекСтр.Измерение2);
   ТекущаяТочка = Диаграмма.УстановитьТочку(ТекСтр.Точка);
     Диаграмма.УстановитьЗначение(ТекущаяТочка, ТекущаяСерия, ТекСтр.Ресурс2, ,) ;
     
     ТекущаяСерия = Диаграмма.УстановитьСерию(ТекСтр.Измерение3);
   ТекущаяТочка = Диаграмма.УстановитьТочку(ТекСтр.Точка);
     Диаграмма.УстановитьЗначение(ТекущаяТочка, ТекущаяСерия, ТекСтр.Ресурс3, ,) ;

 КонецЦикла;
 
   Диаграмма.Обновление = Истина;
   
   ПечатнаяФорма.Вывести(График);
   ПечатнаяФорма.Защита = Ложь;
   ПечатнаяФорма.ТолькоПросмотр = Истина;
   ПечатнаяФорма.Показать();


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