Имя: Пароль:
1C
1С v8
Помогите плиз с запросом
0 Alexey_55
 
26.11.12
15:25
Нужен такой отчет,
Поля: Заказ, Номенклатура, Количество, Свободный остаток на дату заказа.
Из РН ЗаказыПокупателей беру Номенклатура, Регистратор, КоличествоПриход.
к выбранному левым соединением нужно добавить Свободный остаток из РН СвободныеОстатки. его нужно присоединить по дате.

можно ли как-то использовать в этом случае виртуальную таблицу Свободных остатков?
1 Alexey_55
 
26.11.12
15:30
чтобы понятней было этот отчет нужен для того чтобы  смотреть какой процент заказываемого товара обычно лежит в свободном остатке
2 Kashemir
 
26.11.12
15:32
Я не против
3 Irek-kazan
 
26.11.12
15:35
уверен что по дате а не по номенклатуре?
4 Alexey_55
 
26.11.12
15:36
по номенклатура в том числе
5 Alexey_55
 
26.11.12
15:43
точнее отчет Сервисный коэффициент работы склада
6 Kashemir
 
26.11.12
15:45
(5) у остаточного РН есть 2 виртуальных таблицы с остатками. Остатки - можно получить только на 1 дату.
ОстаткиИОбороты - получишь остатки на начало на конец и на дни в которых были обороты.
7 dk
 
26.11.12
15:46
Период ведь задан?
циклом по датам формируй остатки на дату и пихай во врем табл
потом в запросе уже цепляйся по дате и товару ко временой таблице
8 Alexey_55
 
26.11.12
15:58
(6) Это понятно..
9 Alexey_55
 
26.11.12
15:59
(7) получается в СКД такой отчет не сделать?
10 Kashemir
 
26.11.12
16:00
(9) Почему же  нет. Получи ОстаткиИОбороты а дальше типа динамический срез последних.
11 Kashemir
 
26.11.12
16:01
+(10) Есть и более сложный путь с начальным остаток + накопленным оборотом, но имхо хватит и (10)
12 Alexey_55
 
26.11.12
17:07
(10) Спасибо!
13 Alexey_55
 
27.11.12
11:12
получился вот такой запрос

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

СГРУППИРОВАТЬ ПО
   ЗаказыПокупателейОбороты.Номенклатура,
   ЗаказыПокупателейОбороты.Регистратор

остатки из второй таблицы достает только для первой записи..
подскажите плиз как исправить?
14 programmer1c_
63
 
27.11.12
11:14
Почему связь не по регистратору?
15 Alexey_55
 
27.11.12
11:28
(14) Попробовал по регистратору, никаких изменений..
16 Kashemir
 
27.11.12
11:34
ВЫБРАТЬ
   СвободныеОстаткиОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
   СУММА(СвободныеОстаткиОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
   СвободныеОстаткиОстаткиИОбороты.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ Остатки
ИЗ
   РегистрНакопления.СвободныеОстатки.ОстаткиИОбороты(&НачПериода, &КонПериода, Авто, , ) КАК СвободныеОстаткиОстаткиИОбороты

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

ИНДЕКСИРОВАТЬ ПО
   Номенклатура,
   ПериодСекунда
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.Заказ,
   ЕСТЬNULL(Остатки.КоличествоКонечныйОстаток, 0) КАК ОстатокНаДокумент,
   ВложенныйЗапрос.КоличествоПриход
ИЗ
   (ВЫБРАТЬ
       ЗаказыПокупателейОбороты.Номенклатура КАК Номенклатура,
       ЗаказыПокупателейОбороты.Регистратор КАК Заказ,
       ВЫБОР
           КОГДА ЗаказыПокупателейОбороты.КоличествоПриход > 0
               ТОГДА ЗаказыПокупателейОбороты.КоличествоПриход
           ИНАЧЕ 0
       КОНЕЦ КАК КоличествоПриход,
       МАКСИМУМ(Остатки.ПериодСекунда) КАК ПериодОстатка
   ИЗ
       РегистрНакопления.ЗаказыПокупателей.Обороты(&НачПериода, &КонПериода, Авто, ) КАК ЗаказыПокупателейОбороты
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ Остатки КАК Остатки
           ПО ЗаказыПокупателейОбороты.Номенклатура = Остатки.Номенклатура
               И ЗаказыПокупателейОбороты.ПериодСекунда >= Остатки.ПериодСекунда
   
   СГРУППИРОВАТЬ ПО
       ЗаказыПокупателейОбороты.Номенклатура,
       ЗаказыПокупателейОбороты.Регистратор,
       ВЫБОР
           КОГДА ЗаказыПокупателейОбороты.КоличествоПриход > 0
               ТОГДА ЗаказыПокупателейОбороты.КоличествоПриход
           ИНАЧЕ 0
       КОНЕЦ) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Остатки КАК Остатки
       ПО ВложенныйЗапрос.Номенклатура = Остатки.Номенклатура
           И ВложенныйЗапрос.ПериодОстатка = Остатки.ПериодСекунда
17 Kashemir
 
27.11.12
11:39
+(16) Финальное соединение должно быть левым (у меня внутреннее)
18 Alexey_55
 
27.11.12
11:45
(16)Спасибо огромное!!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший