Имя: Пароль:
1C
1С v8
v8: По всей номенклатуре в последний раз остаток равен 0?
0 EarthsSoul
 
30.09.11
06:06
Мне нужно узнать по всем номенклатурам на всех складах когда в ПОСЛЕДНИЙ раз её остаток был равен 0... Вот не знаю как написать запрос, если например организация одна и искать для конкретной номенклатуры и конкретного склада то запрос примет вид

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

Но если искать для всех складов и номенклатур, то ума не приложу как это делать. Ваши идеи?
1 skunk
 
30.09.11
06:16
неправильная постановка вопроса ...
2 EarthsSoul
 
30.09.11
06:32
Все понял, оказывается просто :-)

"ВЫБРАТЬ
| ПартииТоваровНаСкладахОстатки.Организация,
| ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
| ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ПОМЕСТИТЬ НеНулеваяНоменклатура
|ИЗ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
| &АнализируемаяДата,
| Номенклатура = &Номенклатура
| И Склад = &Склад
| И Организация = &Организация) КАК ПартииТоваровНаСкладахОстатки
|ГДЕ
| ПартииТоваровНаСкладахОстатки.КоличествоОстаток > 0
|
|ИНДЕКСИРОВАТЬ ПО
| Склад,
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.Период) КАК ДатаНачалаАнализа,
| ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
| ПартииТоваровНаСкладахОстаткиИОбороты.Склад
|ИЗ
| НеНулеваяНоменклатура КАК НеНулеваяНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
| ,
| ,
| Час,
| ,
| Номенклатура = &Номенклатура
| И Склад = &Склад
| И Организация = &Организация) КАК ПартииТоваровНаСкладахОстаткиИОбороты
| ПО НеНулеваяНоменклатура.Склад = ПартииТоваровНаСкладахОстаткиИОбороты.Склад
| И НеНулеваяНоменклатура.Номенклатура = ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
| И НеНулеваяНоменклатура.Организация = ПартииТоваровНаСкладахОстаткиИОбороты.Организация
|ГДЕ
| ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток = 0
|
|СГРУППИРОВАТЬ ПО
| ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
| ПартииТоваровНаСкладахОстаткиИОбороты.Склад";
3 EarthsSoul
 
30.09.11
06:33
Может будут тогда замечания по производительности запроса?
4 Escander
 
30.09.11
06:47
(3) берём остатки на конкретную дату а обороты за весь период?
Имхо, в первом запросе секция ГДЕ лишняя - регистр накопления не хранит пустых записей. Не? - хотя на производительности не скажется. А зачем периодичность час? Дня мало?
5 Starhan
 
30.09.11
07:24
А если остатка нет на текущий момент?
6 EarthsSoul
 
30.09.11
07:33
Да номенклатура которой нет имеет значения, вот.. А периодичность час потому что пока не уверен что дня достаточно, позже выясню особенности данной базы...

На счет Где(4) как его можно обойти?
7 EarthsSoul
 
30.09.11
07:48
Во

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

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
   ПартииТоваровНаСкладахОстаткиИОбороты.Склад

думаю так быстрее всего будет...
8 Starhan
 
30.09.11
07:53
(6)Просто убрать условие

Если номенклатуры нет на остатке. Получишь дату последнего прихода. Что не равно по смыслу "Мне нужно узнать по всем номенклатурам на всех складах когда в ПОСЛЕДНИЙ раз её остаток был равен 0"
9 Starhan
 
30.09.11
07:53
(8) к последнему запросу
10 EarthsSoul
 
30.09.11
08:02
тут уточню хочу что бы пользователь имел возможность задавать или не задавать номенклатуру и склад, мне нужно это для дальнейшей обработки, я так понимаю здесь надо не обязательно условие в построителе отчетов (который со вчерашнего дня осваиваю).

   ПостроительПервый = Новый ПостроительОтчета;
   ПостроительПервый.Текст="ВЫБРАТЬ
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.Склад,
                           |    МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.Период) КАК Период
                           |ИЗ
                           |    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(
                           |            ,
                           |            ,
                           |            Регистратор,
                           |            ,
                           |            Номенклатура = &Номенклатура
                           |                И Склад = &Склад
                           |                И Организация = &Организация) КАК ПартииТоваровНаСкладахОстаткиИОбороты
                           |ГДЕ
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток = 0
                           |
                           |СГРУППИРОВАТЬ ПО
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
                           |    ПартииТоваровНаСкладахОстаткиИОбороты.Склад";
   ПостроительПервый.ЗаполнитьНастройки();
   ПостроительПервый.Параметры.Вставить("Номенклатура",КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[2].Значение);
   ПостроительПервый.Параметры.Вставить("Склад",КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[1].Значение);
   ПостроительПервый.Параметры.Вставить("АнализируемаяДата",КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[0].Значение);
   ПостроительПервый.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоКоду("000000001"));
   ПостроительПервый.Выполнить();
как указать что он условия номенклатуры и склада не обязательные?