Имя: Пароль:
1C
1С v8
В запросе найти динам. цену по вхождению базовой цены в диапазан
,
0 seren_km
 
24.01.12
15:36
Друзья, может кто знает, как найти в запросе динамическую цену - по вхождению базовой цены в диапазон (это второй вариант динамической цены).
1 seren_km
 
24.01.12
16:50
Ну кто нибуууууудь !....
2 depthzer0
 
24.01.12
16:52
в каком запросе?
3 Maxus43
 
24.01.12
16:53
какую цену?
4 seren_km
 
24.01.12
16:53
Вы знаете, запрос надо написать.
5 Maxus43
 
24.01.12
16:54
задачу поконкретней опиши, с примером
6 Maxus43
 
24.01.12
16:54
+ без слов "динамическую"
7 seren_km
 
24.01.12
16:55
А, цена берётся из запроса:

ВЫБРАТЬ
   ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул КАК Артикул,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Поставщик КАК Поставщик,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Производитель КАК Производитель,
   ПРЕДСТАВЛЕНИЕ(ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)) КАК Цена,
   ВЫБОР
       КОГДА СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ) < 0
           ТОГДА СУММА(ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ - ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ) + РАЗНОСТЬДАТ(&НачПериода1, &КонПериода1, ДЕНЬ)
       ИНАЧЕ СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ)
   КОНЕЦ - ЕСТЬNULL(ДниДоПервогоПрихода.ПоправкаДней, 0) КАК ДнейНулевыхОстатков,
   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * (ВЫБОР
       КОГДА СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ) < 0
           ТОГДА СУММА(ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ - ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ) + РАЗНОСТЬДАТ(&НачПериода1, &КонПериода1, ДЕНЬ)
       ИНАЧЕ СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ)
   КОНЕЦ - ЕСТЬNULL(ДниДоПервогоПрихода.ПоправкаДней, 0)) КАК Количество_ВольтДней,
   СреднийРасход.ПроданоШтук КАК ПроданоЗаПериодШтук,
   РАЗНОСТЬДАТ(&НачПериода, &КонПериода, ДЕНЬ) - ВЫБОР
       КОГДА СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ) < 0
           ТОГДА СУММА(ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ - ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ) + РАЗНОСТЬДАТ(&НачПериода, &КонПериода, ДЕНЬ)
       ИНАЧЕ СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ)
   КОНЕЦ КАК ДнейВНаличии,
   СреднийРасход.ПроданоШтук / (РАЗНОСТЬДАТ(&НачПериода, &КонПериода, ДЕНЬ) - ВЫБОР
       КОГДА СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ) < 0
           ТОГДА СУММА(ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ - ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ) + РАЗНОСТЬДАТ(&НачПериода, &КонПериода, ДЕНЬ)
       ИНАЧЕ СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ)
   КОНЕЦ) КАК Средний_ежедневный_расход,
   ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * (ВЫБОР
       КОГДА СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ) < 0
           ТОГДА СУММА(ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ - ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ) + РАЗНОСТЬДАТ(&НачПериода1, &КонПериода1, ДЕНЬ)
       ИНАЧЕ СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ)
   КОНЕЦ - ЕСТЬNULL(ДниДоПервогоПрихода.ПоправкаДней, 0)) * СреднийРасход.ПроданоШтук / (РАЗНОСТЬДАТ(&НачПериода, &КонПериода, ДЕНЬ) - ВЫБОР
       КОГДА СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ) < 0
           ТОГДА СУММА(ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ - ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ) + РАЗНОСТЬДАТ(&НачПериода, &КонПериода, ДЕНЬ)
       ИНАЧЕ СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ)
   КОНЕЦ) КАК Возможная_выручка,
   ЕСТЬNULL(ДниДоПервогоПрихода.ПоправкаДней, 0) КАК ПоправкаДней
ИЗ
   РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПериода1, &КонПериода1, День, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ТоварыНаСкладахОбороты.Склад КАК Склад,
           ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
           МИНИМУМ(ТоварыНаСкладахОбороты.Период) КАК ПервПоступление,
           ВЫБОР
               КОГДА МИНИМУМ(ТоварыНаСкладахОбороты.Период) > &НачПериода1
                       И МИНИМУМ(ТоварыНаСкладахОбороты.Период) < &КонПериода1
                   ТОГДА РАЗНОСТЬДАТ(&НачПериода1, МИНИМУМ(ТоварыНаСкладахОбороты.Период), ДЕНЬ)
               ИНАЧЕ ВЫБОР
                       КОГДА МИНИМУМ(ТоварыНаСкладахОбороты.Период) < &НачПериода1
                               И МИНИМУМ(ТоварыНаСкладахОбороты.Период) < &КонПериода1
                           ТОГДА 0
                       ИНАЧЕ 0
                   КОНЕЦ
           КОНЕЦ КАК ПоправкаДней
       ИЗ
           РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПериода, &КонПериода, День, , Склад = &Склад) КАК ТоварыНаСкладахОбороты
       ГДЕ
           ТоварыНаСкладахОбороты.КоличествоПриход > 0
           И ТоварыНаСкладахОбороты.КоличествоКонечныйОстаток > 0
           И ТоварыНаСкладахОбороты.Номенклатура В
                   (ВЫБРАТЬ
                       ТоварыНаСкладахОстатки.Номенклатура
                   ИЗ
                       РегистрНакопления.ТоварыНаСкладах.Остатки(&НачПериода, Склад = &Склад) КАК ТоварыНаСкладахОстатки
                   ГДЕ
                       ТоварыНаСкладахОстатки.КоличествоОстаток <= 0)
       
       СГРУППИРОВАТЬ ПО
           ТоварыНаСкладахОбороты.Склад,
           ТоварыНаСкладахОбороты.Номенклатура
       
       ИМЕЮЩИЕ
           МИНИМУМ(ТоварыНаСкладахОбороты.Период) < &КонПериода1 И
           МИНИМУМ(ТоварыНаСкладахОбороты.Период) ЕСТЬ НЕ NULL ) КАК ДниДоПервогоПрихода
       ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ДниДоПервогоПрихода.Номенклатура
           И ТоварыНаСкладахОстаткиИОбороты.Склад = ДниДоПервогоПрихода.Склад
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦены, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
       ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ПродажиОбороты.Номенклатура КАК Номенклатура,
           СУММА(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0)) КАК ПроданоШтук,
           ПродажиОбороты.ДокументПродажи.Склад КАК Склад
       ИЗ
           РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, День, ДокументПродажи.Склад = &Склад) КАК ПродажиОбороты
       
       СГРУППИРОВАТЬ ПО
           ПродажиОбороты.ДокументПродажи.Склад,
           ПродажиОбороты.Номенклатура
       
       ИМЕЮЩИЕ
           СУММА(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0)) >= 0) КАК СреднийРасход
       ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = СреднийРасход.Номенклатура
           И ТоварыНаСкладахОстаткиИОбороты.Склад = СреднийРасход.Склад
ГДЕ
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура В
           (ВЫБРАТЬ
               ТоварыНаСкладах.Номенклатура КАК Номенклатура
           ИЗ
               РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
           ГДЕ
               ТоварыНаСкладах.Период >= &НачПериода
               И ТоварыНаСкладах.Период <= &КонПериода
               И ТоварыНаСкладах.Склад = &Склад
           СГРУППИРОВАТЬ ПО
                       ТоварыНаСкладах.Номенклатура)

СГРУППИРОВАТЬ ПО
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
   ТоварыНаСкладахОстаткиИОбороты.Склад,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Поставщик,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Производитель,
   ЦеныНоменклатурыСрезПоследних.Цена,
   СреднийРасход.ПроданоШтук,
   ДниДоПервогоПрихода.ПоправкаДней

ИМЕЮЩИЕ
   ВЫБОР
       КОГДА СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ) < 0
           ТОГДА СУММА(ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ - ВЫБОР
                       КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                               И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                           ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                       ИНАЧЕ 0
                   КОНЕЦ) + РАЗНОСТЬДАТ(&НачПериода1, &КонПериода1, ДЕНЬ)
       ИНАЧЕ СУММА(ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток <= 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ - ВЫБОР
                   КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                           И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                       ТОГДА РАЗНОСТЬДАТ(&НачПериода1, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                   ИНАЧЕ 0
               КОНЕЦ)
   КОНЕЦ - ЕСТЬNULL(ДниДоПервогоПрихода.ПоправкаДней, 0) > 0
8 Error pro
 
24.01.12
16:55
(7) Так тут же все понятно. с первого взгляда.
9 seren_km
 
24.01.12
17:02
Это из СКД. Запрос ищет количество дней нулевых остатков каждого товара на складе &Склад. Нулевые дни ищутся за период (от &НачПериода1 до &КонПериода1), по той номенклатуре, по которой были движения в периоде(от &НачПериода до &КонПериода). Потом считается упущенная прибыль за эти нулевые дни, как бы если бы продажа в них шла так же бойко, как за дни, когда он имелся на складе. Для этого считается средний расход каждой номенклатуры за день (только по дням наличия на складе !) за период (от &НачПериода до &КонПериода). Средний расход умножается на &Цена и на КоличествоНулевыхДней, и получается упущенная прибыль по каждой номенклатуре.
10 seren_km
 
24.01.12
17:07
Люди хотят видеть всё в пересчёте по какой-либо динамически считаемой цене, т.е. которой нет в регистре ЦеныНоменклатуре. Но которая считаетется каждый раз заново (допустим, в момент оформления документа Продажа). Да, забыл сказать, это конфа Управление Тороговлей 8.1 - её регистры, её справочники и т.д. В Бухгалтерии этот код СКД-шного запроса работать не будет.
11 seren_km
 
24.01.12
17:10
Шестое поле выборки (Цена) нужно взять как динамическое, а не просто как цену из регистра цены как срез последних.
12 depthzer0
 
24.01.12
17:15
(11) передавать в качестве параметра?
13 seren_km
 
24.01.12
17:18
Параметров вряд ли нужно, соединить левым соединением (по номенклатуре) с таблицей, в которой будут все номенклатуры и соответствующие им цифры в качестве значения данной цены.
14 PVV65
 
24.01.12
17:19
Вместо ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
пишешь

(ВЫБОР КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) > &НижняяГраницаПервогоИнтервала И ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) < &ВерхняяГраницаПервогоИнтервала Тогда ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * &КоэффПервогоИнтервала
ИНАЧЕ
ВЫБОР КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) > &НижняяГраницаВторогоИнтервала И ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) < &ВерхняяГраницаВторогоИнтервала Тогда ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * &КоэффВторогоИнтервала
ИНАЧЕ ....)
15 seren_km
 
24.01.12
17:23
Уважаемый PVV65, как же Вам благодарен.
16 seren_km
 
24.01.12
17:49
Скажите, а что содержится в параметрах &КоэффПервогоИнтервала и &КоэффВторогоИнтервала ?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший