Запрос для получения остатков на складе на все дни, даже когда не было движений.(Для нетиповой)
Запрос для 1С: Предприятие 8.1
Пример описывает механизм получения остатков по регистру накопления на КАЖДЫЙ день периода (даже когда не было оборотов).
Проверялось на типовой БП для Казахстана, платформа 8.1
- Описание
- Подробнее
Описание
В запросе учтены наработки, представленные на данном сайте. Спасибо авторам, извините лень искать и приводить исходные ссылки. Если кому нужно спрашивайте, напишу. Вспомагательный запрос, формирующий последовательность дат заимствован целиком с Мисты. Мне он показался более удобным, и уж точно более компактным, чем у г. Душелова.
На базе приведенного запроса построен запрос с подсчетом количества дней товара на складе. Если кому интересно, выложу.
Текст Запроса:
ВЫБРАТЬ
НоменклатураСПрПериодами.Партия КАК Партия,
НоменклатураСПрПериодами.Дата КАК Дата,
НоменклатураСПрПериодами.Номенклатура КАК Номенклатура,
НоменклатураСПрПериодами.Номенклатура.Наименование КАК НоменклатураНаименование,
РегистрАптекПартииОстаткиИОбороты.КолВоКонечныйОстаток
ИЗ
(ВЫБРАТЬ
НоменклатураСДатами.Партия КАК Партия,
НоменклатураСДатами.Дата КАК Дата,
МАКСИМУМ(РегистрАптекПартииОстаткиИОбороты.Период) КАК ПериодПоследний,
НоменклатураСДатами.Номенклатура КАК Номенклатура
ИЗ
(ВЫБРАТЬ
НоменклатураУровень2.Номенклатура КАК Номенклатура,
НоменклатураУровень2.Партия КАК Партия,
КалендарьУровень2.Дата КАК Дата
ИЗ
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ВыбраннаяНоменклатура.Номенклатура КАК Номенклатура,
ВыбраннаяНоменклатура.Партия КАК Партия
ИЗ
(ВЫБРАТЬ
РегистрАптекПартииОбороты.Номенклатура КАК Номенклатура,
РегистрАптекПартииОбороты.Партия КАК Партия
ИЗ
РегистрНакопления.РегистрАптекПартии.Обороты(&НачПериода, &КонПериода, День, Аптека = &Аптека) КАК РегистрАптекПартииОбороты
ГДЕ
РегистрАптекПартииОбороты.КолВоПриход > &Ничего
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
РегистрАптекПартииОстатки.Номенклатура,
РегистрАптекПартииОстатки.Партия
ИЗ
РегистрНакопления.РегистрАптекПартии.Остатки(&НачПериода, Аптека = &Аптека) КАК РегистрАптекПартииОстатки
ГДЕ
РегистрАптекПартииОстатки.КолВоОстаток > &Ничего) КАК ВыбраннаяНоменклатура) КАК НоменклатураУровень2
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачПериода, ДЕНЬ, T.n) КАК Дата
ИЗ
(ВЫБРАТЬ
5 * (t1.a - 1) + t2.b - 1 КАК n
ИЗ
(ВЫБРАТЬ
1 КАК a
ОБЪЕДИНИТЬ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ
ВЫБРАТЬ
6) КАК t1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
1 КАК b
ОБЪЕДИНИТЬ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ
ВЫБРАТЬ
6) КАК t2
ПО (ИСТИНА)) КАК T
ГДЕ
T.n < ДЕНЬ(КОНЕЦПЕРИОДА(&КонПериода, ДЕНЬ))) КАК КалендарьУровень2
ПО (ИСТИНА)) КАК НоменклатураСДатами
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрАптекПартии.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&НачПериода, ГОД), &КонПериода, День, , Аптека = &Аптека) КАК РегистрАптекПартииОстаткиИОбороты
ПО НоменклатураСДатами.Номенклатура = РегистрАптекПартииОстаткиИОбороты.Номенклатура
И НоменклатураСДатами.Партия = РегистрАптекПартииОстаткиИОбороты.Партия
И НоменклатураСДатами.Дата >= РегистрАптекПартииОстаткиИОбороты.Период
СГРУППИРОВАТЬ ПО
НоменклатураСДатами.Партия,
НоменклатураСДатами.Дата,
НоменклатураСДатами.Номенклатура) КАК НоменклатураСПрПериодами
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РегистрАптекПартии.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&НачПериода, ГОД), &КонПериода, День, ДвиженияИГраницыПериода, Аптека = &Аптека) КАК РегистрАптекПартииОстаткиИОбороты
ПО НоменклатураСПрПериодами.Номенклатура = РегистрАптекПартииОстаткиИОбороты.Номенклатура
И НоменклатураСПрПериодами.Партия = РегистрАптекПартииОстаткиИОбороты.Партия
И НоменклатураСПрПериодами.ПериодПоследний = РегистрАптекПартииОстаткиИОбороты.Период
УПОРЯДОЧИТЬ ПО
НоменклатураНаименование,
Партия,
Дата