Имя: Пароль:
1C
1C 7.7
v7: Подскажите с прямым запросом
0 AMKahm
 
06.09.12
08:48
рс = СоздатьОбъект("ODBCRecordset");
   тз = СоздатьОбъект("ТаблицаЗначений");    
   ТекстЗапроса = "
       |SELECT DISTINCT
       |    TabSpr.id [Номенклатура $Справочник.Номенклатура],
       |    TabSpr.DESCR as Наименование,
       |   $ОстНом.Остаток as МинимальныйОстаток,
       |    $ОстНом1.Остаток as МаксимальныйОстаток,
       |    ЗапросОстатки.КоличествоОстаток as КоличествоОстаток,
       |    ЗапросОстатки.СуммаБезНДСОстаток as СуммаБезНДС,
       |    ЗапросРезервы.КоличествоОстаток as КоличествоРезерв,
       |    ЗапросРезервыУтвержденные.КоличествоОстаток as КоличествоРезервУтверждено,
       |    Заказано = NULL
       |FROM      
       |    $Справочник.Номенклатура As TabSpr (nolock)
       |    LEFT JOIN $Справочник.ОстаткиНоменклатуры AS ОстНом (nolock) ON (TabSpr.ID = ОстНом.PARENTEXT) AND ($ОстНом.ВидОстатка = :Мин)  and ($ОстНом.Склад = :ЦентрСклад)
       |    LEFT JOIN $Справочник.ОстаткиНоменклатуры AS ОстНом1 (nolock) ON (TabSpr.ID = ОстНом1.PARENTEXT) AND ($ОстНом1.ВидОстатка = :Макс)  and ($ОстНом1.Склад = :ЦентрСклад)
       |    LEFT JOIN $РегистрОстатки.ПартииНаличие(:КонДата~,,(МОЛ = :МОЛ),(Номенклатура),(Количество,СуммаБезНДС)) AS ЗапросОстатки ON (TabSpr.ID = ЗапросОстатки.Номенклатура)
       |    LEFT JOIN $РегистрОстатки.РезервыТМЦ(:КонДата~,,(Склад = :ЦентрСклад),(Номенклатура),(Количество)) AS ЗапросРезервы ON (TabSpr.ID = ЗапросРезервы.Номенклатура)
       |    LEFT JOIN $РегистрОстатки.РезервыТМЦ(:КонДата~,INNER JOIN $Документ.ЗаявкаПокупателя as Док ON Док.IDDoc = ЗаявкаПокупателя AND $Док.Утвержден = 1,(Склад = :ЦентрСклад),(Номенклатура,ЗаявкаПокупателя),(Количество)) AS ЗапросРезервыУтвержденные ON (TabSpr.ID = ЗапросРезервыУтвержденные.Номенклатура)
       |WHERE (TabSpr.IsMark = 0) AND (TabSpr.IsFolder = 2)
       |ORDER BY Наименование";
   рс.УстановитьТекстовыйПараметр("КонДата", ТекущаяДата());
   рс.УстановитьТекстовыйПараметр("ЦентрСклад", Константа.ЦенСклад);
   рс.УстановитьТекстовыйПараметр("МОЛ", Константа.ЦенСклад.МОЛ);
   рс.УстановитьТекстовыйПараметр("Мин", Перечисление.ВидыОстатков.Минимальный);
   рс.УстановитьТекстовыйПараметр("Макс", Перечисление.ВидыОстатков.Максимальный);
   тз = рс.ВыполнитьИнструкцию(ТекстЗапроса);
   тз.Выгрузить(тест);

Смысл:
НЕ работает строчка
LEFT JOIN $РегистрОстатки.РезервыТМЦ(:КонДата~,INNER JOIN $Документ.ЗаявкаПокупателя as Док ON Док.IDDoc = ЗаявкаПокупателя AND $Док.Утвержден = 1,(Склад = :ЦентрСклад),(Номенклатура,ЗаявкаПокупателя),(Количество)) AS ЗапросРезервыУтвержденные ON (TabSpr.ID = ЗапросРезервыУтвержденные.Номенклатура)

Хочу получить резервы только по тем заявкам которые были утверждены.
Признак утверждения - реквизит самого документа.
1 AMKahm
 
06.09.12
08:59
P.S. в Регистре РезервыТМЦ измерение ЗаявкаПокупателя - тип просто Документ.
Мож поэтому не линкует? Чето особенное вспоминается по этому поводу... вроде.
2 Mikeware
 
06.09.12
09:04
ON $ВидДокумента36.ЗаявкаПокупателя+Док.IDDoc = ЗаявкаПокупателя
или
ON Док.IDDoc = right(ЗаявкаПокупателя,9)
3 AMKahm
 
06.09.12
09:05
Лолг! Спасибо. Токачто нашел $ВидСправочника36.Контрагенты + СпрК.ID  = $Док.Контрагент
Для того где тип не указан... думал есть ли ВидДокумента36...
4 Mikeware
 
06.09.12
09:08
(3) Вроде, его позже добавили. в als к версии 2.0 этого нет.
но вроде как с райт(,9) быстрее работает
5 AMKahm
 
06.09.12
09:12
(4) Угу.... сделал с right. Тока IDDoc ж нужен... да и читабельней так :)
Спасиб еще раз!
6 Mikeware
 
06.09.12
09:33
(5) читабельность - дело второе. а первое, главное - попасть в индекс.