Имя: Пароль:
1C
1C 7.7
v7: Остатки и класс прямой запрос
0 zenon46
 
28.12.19
17:53
Доброго дня!
Использую класс прямой запрос для получения таблицы остатков, но столкнулся с проблемой отдельным полем нужно вывести код номенклатуры. Но валится ошибка "Meta name parser error: неизвестное метаимя или алиас "$SC84""
Запрос :
        |SELECT
    |    СпрНоменклатура.Code [Код],    
    |    COUNT(*) as КолВо                          
        |FROM
    |    $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,:КонДата~,День Дополнение,ДвиженияИГраницыПериода,(Номенклатура IN (SELECT Val FROM #TempTable)) AND (Фирма = :ВбрФирма),(Номенклатура),(Количество)) РегистрОстаткиОбороты
        |INNER JOIN
    |    $Справочник.Номенклатура AS СпрНоменклатура ON СпрНоменклатура.ID = РегистрОстаткиОбороты.Номенклатура    
    |WHERE
    |    (РегистрОстаткиОбороты.КоличествоКонечныйОстаток > 0) OR (((РегистрОстаткиОбороты.КоличествоПриход) <> 0 AND (РегистрОстаткиОбороты.КоличествоРасход <>0)) AND (РегистрОстаткиОбороты.КоличествоКонечныйОстаток = 0))
        |";

без     |    СпрНоменклатура.Code [Код], и         |INNER JOIN
    |    $Справочник.Номенклатура AS СпрНоменклатура ON СпрНоменклатура.ID = РегистрОстаткиОбороты.Номенклатура    
работает, но от результата толку то нет одна цифра
1 Sserj
 
28.12.19
18:00
Если запрос через ПрямойЗапрос, то нельзя использовать  $Справочник.Номенклатура и идентификаторы полей. Т.е. должно быть:

Справочник.Номенклатура КАК СпрНоменклатура ПО $СпрНоменклатура.ТекущийЭлемент = РегистрОстаткиОбороты.Номенклатура

И соответственно в полях:

SELECT
$СпрНоменклатура.Код КАК  [Код],    
COUNT(*) as КолВо
2 zenon46
 
28.12.19
18:01
Так вот сам элемент выводит :
    |SELECT
    |    РегистрОстаткиОбороты.Номенклатура [Номенк $Справочник.Номенклатура],
    |    COUNT(*) as КолВо                          
    |FROM
    |    $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,:КонДата~,День Дополнение,ДвиженияИГраницыПериода,(Номенклатура IN (SELECT Val FROM #TempTable)) AND (Фирма = :ВбрФирма),(Номенклатура),(Количество)) РегистрОстаткиОбороты
    |WHERE
    |    (РегистрОстаткиОбороты.КоличествоКонечныйОстаток > 0) OR (((РегистрОстаткиОбороты.КоличествоПриход) <> 0 AND (РегистрОстаткиОбороты.КоличествоРасход <>0)) AND (РегистрОстаткиОбороты.КоличествоКонечныйОстаток = 0))
    |GROUP BY
    |    РегистрОстаткиОбороты.Номенклатура

А соединятся с таблицей справочника не хочет
3 zenon46
 
28.12.19
18:02
(1) плюсую, попробую
4 zenon46
 
28.12.19
18:08
Да, вот так работает :
    |SELECT
    |    $СпрНоменклатура.Код AS [Код],
    |    COUNT(*) AS КолВо                          
    |FROM
    |    $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,:КонДата~,День Дополнение,ДвиженияИГраницыПериода,(Номенклатура IN (SELECT Val FROM #TempTable)) AND (Фирма = :ВбрФирма),(Номенклатура),(Количество)) РегистрОстаткиОбороты
    |INNER JOIN
    |    Справочник.Номенклатура AS СпрНоменклатура ON $СпрНоменклатура.ТекущийЭлемент = РегистрОстаткиОбороты.Номенклатура    
    |WHERE
    |    (РегистрОстаткиОбороты.КоличествоКонечныйОстаток > 0) OR (((РегистрОстаткиОбороты.КоличествоПриход) <> 0 AND (РегистрОстаткиОбороты.КоличествоРасход <>0)) AND (РегистрОстаткиОбороты.КоличествоКонечныйОстаток = 0))
    |GROUP BY
    |    $СпрНоменклатура.Код
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший