Имя: Пароль:
1C
1С v8
Получить остатки по регистру накопления на дату
,
0 Альбатрос
 
22.11.11
10:29
Здрасьте!!! Вот простенький запрос:

|  ВЫБРАТЬ
       |    ПартииТоваровНаСкладахОстатки.Номенклатура,
       |    ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
       |    ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Колво
       |ИЗ
       |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
       |ГДЕ
       |    ПартииТоваровНаСкладахОстатки.Номенклатура = &ном";


Дает остатки на последнюю запись регистра. Не могу разобраться, что и куда добавить, чтобы получать остатки на конкретную дату. Заранее спасибо!
1 golden-pack
 
22.11.11
10:31
|  ВЫБРАТЬ
       |    ПартииТоваровНаСкладахОстатки.Номенклатура,
       |    ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
       |    ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Колво
       |ИЗ
       |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата) КАК ПартииТоваровНаСкладахОстатки
       |ГДЕ
       |    ПартииТоваровНаСкладахОстатки.Номенклатура = &ном";

Запрос.установитьпараметр("Дата",ТекущаяДата());
2 golden-pack
 
22.11.11
10:32
|  ВЫБРАТЬ
       |    ПартииТоваровНаСкладахОстатки.Номенклатура,
       |    ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
       |    ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Колво
       |ИЗ
       |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, Номенклатура = &ном) КАК ПартииТоваровНаСкладахОстатки";

Запрос.установитьпараметр("Дата",ТекущаяДата());
3 Sulimov
 
22.11.11
10:33
И номенклатуру лучше тоже туда же в параметры вирт. таблицы...
4 Sulimov
 
22.11.11
10:33
Блин, не успел..))
5 Альбатрос
 
22.11.11
10:42
(2) Огромное спасибо!
(2)(3) Еще вопросик: Вы говорите, лучше в виртуальную таблицу. А разница какая по сравнению с тем, как у меня в (0)? То есть в вашем варианте отбор идет непосредственно в записях, а в моем сначала получаю все записи, и только потом отбор? Я правильно понял?
6 hhhh
 
22.11.11
10:50
(5) да, допустим у тебя 150000 записей справочник. У тебя в (0) в оперативную память грузится 150000 строк остатков по всей номенклатуре, потом ты применяешь ГДЕ, система удаляет 149999 строк и оставляет одну. А так как в (2) система грузит только одну строку сразу, потому что уже в параметрах виртуальной таблицы написано Номенклатура = &ном.
7 FIXXXL
 
22.11.11
10:52
(6)чет не верится
8 hhhh
 
22.11.11
10:58
(7) если база файловая, то 100%, на SQL-ной не проверял.
9 Ненавижу 1С
 
гуру
22.11.11
11:00
в SQL все это на сервере, единственное что, промежуточная таблица делается уже с отбором или нет
я за отбор в параметрах виртуальной таблицы
10 Нуф-Нуф
 
22.11.11
11:01
тут был чей то обзор на тему что параметры вирутальных это зло, но я не согласен. я за официальную позицию 1с за использование этих параметров
11 unregistered
 
22.11.11
11:13
(5) >> А разница какая

Виртуальная таблица в большинстве случаев - результат соединения или объединения нескольких реальных физических таблиц. В нашем примере - физическая таблица итогов регистра (итоги хранятся с периодичностью месяц, а нам надо на день) будет дополнена данными из физической таблицы движений регистра (основной таблицы записей регистра). Условия отбора по измерениям, указанные в разделе "ГДЕ" приведут к тому, что отбор будет накладываться уже на записи в "собранной" виртуальной таблице. А условия отбора, указанные в параметрах виртуальной таблицы будут накладываться еще на этапе выборки записей из физических таблиц.

Как-то так...

Хотя, если берутся остатки на оперативную отметку или на границу месяца (итоги хранятся по месяцам), то разницы особой не будет, т.к. такой запрос будет только к одной таблице - таблице итогов регистра.
Программист всегда исправляет последнюю ошибку.