Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Регистр остатков (число прочтений - 4474 )
ybill
Junior Member
**
Отсутствует


I Love ...!

Сообщений: 35
Зарегистрирован: 01. Сентября 2008
Пол: Мужской
Регистр остатков
22. Октября 2008 :: 14:05
Печать  
Осваиваю прямые запросы. Со справочниками разобрался а с регистрами никак.
Объясните как правильно получить остатки прямым запросом.
Регистр остаткиТМЦ,
измерения - фирма, склад, номенклатура, партия
ресурсы - количество
Есть предварительно сформированный СписокНомеклатуры, нужно найти по нему сводные остатки на ТА.
Делаю такой запрос:

SELECT
$ОстаткиТМЦИтоги.Номенклатура [Номенклатура $Справочник.Номенклатура],
Sum($ОстаткиТМЦИтоги.Количество) СуммаКоличество
FROM $РегистрИтоги.ОстаткиТМЦ AS ОстаткиТМЦИтоги
WHERE $ОстаткиТМЦИтоги.Номенклатура IN (SELECT val FROM #СписокНоменклатуры)
GROUP BY $ОстаткиТМЦИтоги.Номенклатура
ORDER BY $ОстаткиТМЦИтоги.Номенклатура

Работает, но ни остатки, ни количество строк не совпадает с контрольным 1С запросом:

Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
Количество = Регистр.ОстаткиТМЦ.Количество;
Функция КоличествоКонОст = КонОст(Количество);
Группировка Номенклатура без Групп;
Условие(Номенклатура в СписокНоменклатуры);

Как говориться, что я делаю не так?
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Регистр остатков
Ответ #1 - 22. Октября 2008 :: 14:08
Печать  
WHERE $ОстаткиТМЦИтоги.Номенклатура IN (SELECT val FROM #СписокНоменклатуры)
AND ОстаткиТМЦИтоги.PERIOD = :ДатаТА

....

RecordSet.УстановитьТекстовыйПараметр("ДатаТА",                  НачМесяца(ПолучитьДатуТА())); //если периодичность месяц

ДатаТА - это если нужны актуальные остатки, иначе надо другую дату или вообще присоединять таблицу движений (пользоваться ВТ (для SQL))
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
ybill
Junior Member
**
Отсутствует


I Love ...!

Сообщений: 35
Зарегистрирован: 01. Сентября 2008
Пол: Мужской
Re: Регистр остатков
Ответ #2 - 22. Октября 2008 :: 14:31
Печать  
Спасибо, но НачМесяца(ПолучитьДатуТА()) - это будет на начало месяца, а мне надо на ТА?

А как поступить если надо получить номенклатуру имеющую нулевые остатки? Именно запросом такое можно?
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Регистр остатков
Ответ #3 - 22. Октября 2008 :: 14:38
Печать  
ybill писал(а) 22. Октября 2008 :: 14:31:
А как поступить если надо получить номенклатуру имеющую нулевые остатки? Именно запросом такое можно?


RightJoin к результатам запроса весь справочник номенклатуры (с условием isfolder<>1)
На месте остатка для не прописаной в регистре номенклатуры получишь NULL, а дальше - простое COALESCE
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Регистр остатков
Ответ #4 - 22. Октября 2008 :: 18:52
Печать  
Вообще-то в описании виртуальной таблицы $РегистрОстатки.<ИмяРегистра> сказано, что при отсутствии параметра <ГраницаРасчета> остатки получаются на ТА. Исходя из этого я бы написал так:
Код
Выбрать все
SELECT
ОстаткиТМЦИтоги.Номенклатура [Номенклатура $Справочник.Номенклатура],
ОстаткиТМЦИтоги.КоличествоОстаток СуммаКоличество
FROM $РегистрОстатки.ОстаткиТМЦ(,,Номенклатура in (Select Val From #СписокНоменклатуры),(Номенклатура),(Количество)) AS ОстаткиТМЦИтоги
GROUP BY ОстаткиТМЦИтоги.Номенклатура
ORDER BY ОстаткиТМЦИтоги.Номенклатура
 


более подробно смотреть вот тут: http://www.1cpp.ru/docum/icpp/html/ODBC.html#id34
  
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Регистр остатков
Ответ #5 - 23. Октября 2008 :: 05:39
Печать  
leshik писал(а) 22. Октября 2008 :: 18:52:
Вообще-то в описании виртуальной таблицы $РегистрОстатки.<ИмяРегистра> сказано, что при отсутствии параметра <ГраницаРасчета> остатки получаются на ТА. Исходя из этого я бы написал так:

А зачем вообще использовать виртувльную таблицу в этом конкретном случае? Автору нужны остатки на ТА.

ybill писал(а) 22. Октября 2008 :: 14:31:
Спасибо, но НачМесяца(ПолучитьДатуТА()) - это будет на начало месяца, а мне надо на ТА?

В таблице итогов значения на ТА хранятся именно на начало месяца (если у тебя периодичность регистра - месяц)
  
Наверх
 
IP записан
 
ybill
Junior Member
**
Отсутствует


I Love ...!

Сообщений: 35
Зарегистрирован: 01. Сентября 2008
Пол: Мужской
Re: Регистр остатков
Ответ #6 - 23. Октября 2008 :: 07:35
Печать  
Спасибо, все взлетело.

Но все-таки еще для меня не решён вопрос. можно ли получить прямым запросом список номенклатуры с нулевыми остатками?

Сейчас я просто сравниваю два списка - до запроса остатков и после.
  
Наверх
ICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Регистр остатков
Ответ #7 - 23. Октября 2008 :: 07:45
Печать  
ybill писал(а) 22. Октября 2008 :: 14:05:
Осваиваю прямые запросы. Со справочниками разобрался а с регистрами никак.


Может чем то поможет: http://metaprog.co.ua/secrprog/doc_reg.html#_2
  
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Регистр остатков
Ответ #8 - 23. Октября 2008 :: 09:49
Печать  
ybill писал(а) 23. Октября 2008 :: 07:35:
Но все-таки еще для меня не решён вопрос. можно ли получить прямым запросом список номенклатуры с нулевыми остатками?

Тебе же уже ответили
  
Наверх
 
IP записан
 
ybill
Junior Member
**
Отсутствует


I Love ...!

Сообщений: 35
Зарегистрирован: 01. Сентября 2008
Пол: Мужской
Re: Регистр остатков
Ответ #9 - 23. Октября 2008 :: 10:10
Печать  
Я это прочитал Улыбка, про right join я сообразил, но так я получу все и положительные и нулевые. Что и где надо добавить чтобы остались только нулевые?

p.s. количество моих сообщений очень точно отображают мой уровень в прямых запросах Улыбка
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Регистр остатков
Ответ #10 - 23. Октября 2008 :: 10:31
Печать  
может так:
Код
Выбрать все
GROUP BY $ОстаткиТМЦИтоги.Номенклатура HAVING Sum($ОстаткиТМЦИтоги.Количество)=0 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать