Консультация № 171133
07.08.2009, 16:07
0.00 руб.
0 5 0
Здравствуйте! У меня следующий вопрос! Моя задача заключается в том, что из периодического регистра сведений (измерения: Склад, Номенклатура; ресурс: НетВНаличии) получить данные запросом за период (Дата1,Дата2). Причем данные по полю НетВНаличии на Дату2 вычитаются из данных по полю НетВНаличии на Дату1. Поле НетВНаличии принимает значение 1 по номенклатуре при создании записи в регистре сведений. Значение на Дату1 по этому полю это должна быть Сумма этих единиц по данной Номенклатуре и данному складу до даты Дата1. Значение на Дату2 опять же должна быть сумма всех едниниц по данной номен и данному складу до даты Дата2. Как я уже писала раньше, в результате работы запроса должно появиться еще одно поле : значение суммы НетВНаличии на Дату2 минус значение Суммы НетВНаличии на Дату1. Я написала предполагаемый запрос, но проблема в том, что он выводит только на Дату1 результат НЕтВналичии только ед-цы либо ничего (если ничего на эту дату не было) и на Дату2 результат тоже либо 1 либо 0. А не суммирует все данные записи до Даты1 и Даты2 соответственно. Посмотрите, пожалуйста, код. Может вы догадаетесь, что можно еще сделать. А то мне кажется, что я уже всё попробовала.

Приложение:
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
ВложенныйЗапрос.Склад,
ЕСТЬNULL(ВложенныйЗапрос.НетВНаличииНАЧ, 0) КАК НетВНаличииНАЧ,
ЕСТЬNULL(ВложенныйЗапрос.НетВНаличииКОН, 0) КАК НетВНаличииКОН,
НетВНаличииКОН - НетВНаличииНАЧ КАК Поле1
ИЗ
(ВЫБРАТЬ
НетВНаличииСрезПоследних.Склад КАК Склад,
НетВНаличииСрезПоследних.Номенклатура КАК Номенклатура,
СУММА(НетВНаличииСрезПоследних.НетВНаличии) КАК НетВНаличииКОН,
НетВНаличииСрезПоследних1.Склад КАК Склад1,
НетВНаличииСрезПоследних1.Номенклатура КАК Номенклатура1,
СУММА(НетВНаличииСрезПоследних1.НетВНаличии) КАК НетВНаличииНАЧ
ИЗ
РегистрСведений.НетВНаличии.СрезПоследних(&Дата2, ) КАК НетВНаличииСрезПоследних
полное СОЕДИНЕНИЕ РегистрСведений.НетВНаличии.СрезПоследних(&Дата1, ) КАК НетВНаличииСрезПоследних1
ПО НетВНаличииСрезПоследних.Склад = НетВНаличииСрезПоследних1.Склад
И НетВНаличииСрезПоследних.Номенклатура = НетВНаличииСрезПоследних1.Номенклатура

СГРУППИРОВАТЬ ПО
НетВНаличииСрезПоследних.Склад,
НетВНаличииСрезПоследних.Номенклатура,
НетВНаличииСрезПоследних1.Склад,
НетВНаличииСрезПоследних1.Номенклатура) КАК ВложенныйЗапрос

Обсуждение

давно
Студент
218854
56
08.08.2009, 15:22
общий
Ларионова Евгения Валерьевна:
Срез последних по регистру сведений даст все последние записи по каждой уникальной комбинации значений Склад+Номенклатура и ресурс НетВНаличии всегда будет единица, ведь именно это значение фиксируется в регистре.
Чтобы получить остатки номенклатуры на складах я бы использовала регистр накопления остатков. Однако для такой реализации необходимо реализовать движения прихода и расхода и контролировать остатки по регистру при расходе.
Неизвестный
09.08.2009, 09:58
общий
Ларионова Евгения Валерьевна:
Не совсем ясна задача. Вообще остатки товаров обычно хранят в регистре накопления. Думаю большинство Ваших проблем от неверного выбора типа регистра.
Про задачу, уточните:
1. Структуру регистра.
2. Какие данные Вы хотите получить. (Не что у Вас не получается, а что КОНКРЕТНО нужно получить)
Неизвестный
10.08.2009, 10:54
общий
Ларионова Евгения Валерьевна:
По поводу регистров:

Если это информативная информация (наличие движения по товару вообще за день, какието пометки, Заказ, итд) вполне правомерно использовать переодический РегистрСведений.
Если это какоето движение - надо использовать РЕгистрНАкопления. Тк - У регистра сведений - невозможно записать в один период два значения.

Что касается вашего вопроса - уточните - что вы хотите получить.
Неизвестный
11.08.2009, 20:24
общий
Задачу конкретную я уже описала, повторюсь:
У меня следующий вопрос! Моя задача заключается в том, что из периодического регистра сведений (измерения: Склад, Номенклатура; ресурс: НетВНаличии) получить данные запросом за период (Дата1,Дата2). Причем данные по полю НетВНаличии на Дату2 вычитаются из данных по полю НетВНаличии на Дату1. Поле НетВНаличии принимает значение 1 по номенклатуре при создании записи в регистре сведений. Значение на Дату1 по этому полю это должна быть Сумма этих единиц по данной Номенклатуре и данному складу до даты Дата1. Значение на Дату2 опять же должна быть сумма всех едниниц по данной номен и данному складу до даты Дата2.

Использовать надо именно регистр сведений а не регистр накопления.
Просто получить данные, выгрузить в ТЗ, свернуть по НетВНАличии и получится сумма единиц. ТОлько дело в том, что нужную ТЗ я так и не могу получить. В нужной ТЗ должны быть все позиции номенклатуры отмеченные за заданный период в регистре сведений.

Если вы скажете, как хотя бы получить с помощью запроса данные, которые записаны в регистре меньше заданной даты одной, то тогда я уже смогу решить задачу скорее всего.
давно
Студент
218854
56
13.08.2009, 17:34
общий
Ларионова Евгения Валерьевна:
В этом случае все "прелести" использования виртуальных таблиц регистров в запросах теряются.

Для получения данных на Дата1 необходимо собрать все записи с периодом меньше Дата1, т.е. выбрать ВСЕ записи в регистре сведений.
Для получения данных на Дата2 необходимо собрать все записи с периодом меньше Дата2.

В запросе при этом будет использоваться не виртуальная таблица регистра сведений, а сами записи. Чем больше данных будет в базе данных, тем дольше будет выполняться запрос.

Все же подумайте об использовании регистра накопления. Он позволит получить виртуальную таблицу остатков без получения всех записей.
Форма ответа