Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос 1С++. Не удалось привязать составной идентификатор
,
0 daviels
 
28.08.15
15:41
Всем доброго дня.

помогите разобраться , пожалуйста....

вот  такой код:

обМетаданные = СоздатьОбъект("MetaDataWork");
    
    идНачалоПериода = "SP" + обМетаданные.ИДРеквизитаШапки("ПланПоРаботеМенеджеров","ДатаНачПериода");
    идКонецПериода  = "SP" + обМетаданные.ИДРеквизитаШапки("ПланПоРаботеМенеджеров","ДатаКонПериода");
    
    идПланМенеджер = "SP" + обМетаданные.ИДРеквизитаТабличнойЧасти("ПланПоРаботеМенеджеров","Менеджер");
    идПланНоменклатура = "SP" + обМетаданные.ИДРеквизитаТабличнойЧасти("ПланПоРаботеМенеджеров","Номенклатура");
    
    обЗапрос = СоздатьОбъект("ODBCRecordSet");
    
    обЗапрос.УстановитьТекстовыйПараметр("ДатаНач", ДатаНач);  
    обЗапрос.УстановитьТекстовыйПараметр("ДатаКон", ДатаКон);
    
    Документы = "
    |Select $ДокПланСтрока.Менеджер as [Менеджер $Справочник.Сотрудники],
    |       $ДокПланСтрока.Номенклатура as [Товар $Справочник.Номенклатура],
    |       sum($ДокПланСтрока.Количество) as КолПлан,
    |       sum($ДокПланСтрока.КоличествоКонтрагентов) as КолКонтр
    |from
    |$ДокументСтроки.ПланПоРаботеМенеджеров as ДокПланСтрока
    |inner join
    |$Документ.ПланПоРаботеМенеджеров as ДокПлан ON (ДокПланСтрока.iddoc = ДокПлан.iddoc and
    |(ДокПлан." + идНачалоПериода + " >= :ДатаНач) and (ДокПлан." + идКонецПериода + " >= :ДатаКон))
    |inner join
    |_1SJourn  AS Журнал ON (Журнал.IDDoc = ДокПланСтрока.iddoc AND
    |                        Журнал.Closed & 1 = 1)
    |inner join (select $ДокФактСтрока.Товар,
    |                   $ДокФакт.Представитель,
    |                   sum($ДокФактСтрока.Нетто) as КолФакт,
    |                   $ДокФактСтрока.Цена as ЦенаЗаготовки
    |from
    |$ДокументСтроки.ПоступлениеТоваров as ДокФактСтрока
    |inner join
    |$Документ.ПоступлениеТоваров as ДокФакт ON (ДокФактСтрока.iddoc = ДокФакт.iddoc)
    |inner join
    |_1SJourn  AS Журнал ON (Журнал.IDDoc = ДокФактСтрока.iddoc AND
    |                        Журнал.Closed & 1 = 1 and
    |                        Журнал.DATE_TIME_IDDOC BETWEEN :ДатаНач AND :ДатаКон~)
    |group by
    |$ДокФактСтрока.Товар,
    |$ДокФакт.Представитель,
    |$ДокФактСтрока.Цена) as ВыборкаФакт ON ($ДокФакт.Представитель = ДокПланСтрока." + идПланМенеджер + " and ДокФактСтрока.sp3093 = ДокПланСтрока." + идПланНоменклатура + ")
    |group by
    |$ДокПланСтрока.Менеджер,
    |$ДокПланСтрока.Номенклатура
    |order by
    |$ДокПланСтрока.Менеджер";
    
    Результат = обЗапрос.Открыть(Документы);  
    
    Если Результат = 0 Тогда  
        Сообщить("Запрос не выполнен");  
        Сообщить(обЗапрос.ПолучитьОписаниеОшибки());
        обЗапрос.Закрыть();
        Возврат;
    КонецЕсли;
        
    обЗапрос.ПолучитьРезультатыВ_ТЗ(табл,1);
    обЗапрос.Закрыть();

выдает ошибку: Не удалось привязать составной идентификатор "ДокФакт.sp3081" .... как это победить??????
1 daviels
 
28.08.15
15:42
ДокФакт.sp3081 = $ДокФакт.Представитель, если что...
2 dk
 
28.08.15
15:52
покажи итоговый запрос - нефиг тут выдумывать с какими параметрами ты запускаешь
3 dk
 
28.08.15
15:54
что за бред с
Результат = обЗапрос.Открыть(Документы);
-----
просто сразу
Результат = обЗапрос.ВыполнитьИнструкцию(Документы);
4 daviels
 
28.08.15
15:57
да нее ..это ж не параметр, это я просто указал что ругается на поле "представитель" документа ПоступлениеТоваров

по выполнению запроса ..это я согласен, исправлю, но это дела не меняет...
5 dk
 
28.08.15
16:00
скорее всего поле неопределенного типа или вида?
6 mehfk
 
28.08.15
16:00
Вот я отформатировал твой запрос в удобочитаемый вид и сразу нашел ошибку

    |Select
    |    $ДокПланСтрока.Менеджер as [Менеджер $Справочник.Сотрудники],
    |   $ДокПланСтрока.Номенклатура as [Товар $Справочник.Номенклатура],
    |   sum($ДокПланСтрока.Количество) as КолПлан,
    |   sum($ДокПланСтрока.КоличествоКонтрагентов) as КолКонтр
    |from
    |    $ДокументСтроки.ПланПоРаботеМенеджеров as ДокПланСтрока
    |inner join
    |    $Документ.ПланПоРаботеМенеджеров as ДокПлан
    |ON
    |    ДокПланСтрока.iddoc = ДокПлан.iddoc
    |and
    |    ДокПлан." + идНачалоПериода + " >= :ДатаНач
    |and
    |    ДокПлан." + идКонецПериода + " >= :ДатаКон
    |inner join
    |    _1SJourn  AS Журнал
    |ON
    |    (Журнал.IDDoc = ДокПланСтрока.iddoc
    |AND
    |    Журнал.Closed & 1 = 1)
    |inner join
    |    (select
    |        $ДокФактСтрока.Товар,
    |       $ДокФакт.Представитель,
    |       sum($ДокФактСтрока.Нетто) as КолФакт,
    |       $ДокФактСтрока.Цена as ЦенаЗаготовки
    |    from
    |        $ДокументСтроки.ПоступлениеТоваров as ДокФактСтрока
    |    inner join
    |        $Документ.ПоступлениеТоваров as ДокФакт
    |    ON
    |        (ДокФактСтрока.iddoc = ДокФакт.iddoc)
    |    inner join
    |        _1SJourn  AS Журнал
    |    ON
    |        (Журнал.IDDoc = ДокФактСтрока.iddoc
    |    AND
    |       Журнал.Closed & 1 = 1
    |    and
    |       Журнал.DATE_TIME_IDDOC BETWEEN :ДатаНач AND :ДатаКон~
    |    )
    |    group by
    |        $ДокФактСтрока.Товар,
    |        $ДокФакт.Представитель,
    |        $ДокФактСтрока.Цена
    |    ) as ВыборкаФакт
    |ON
    |    $ВыборкаФакт.Представитель = ДокПланСтрока." + идПланМенеджер + "
    |and
    |    ВыборкаФакт.sp3093 = ДокПланСтрока." + идПланНоменклатура + "
    |group by
    |    $ДокПланСтрока.Менеджер,
    |    $ДокПланСтрока.Номенклатура
    |order by
    |    $ДокПланСтрока.Менеджер
7 daviels
 
28.08.15
16:04
ЗаЛаботалоооооооооо урааааааа )))))))

Спасибо  mehfk. Действительно надо было ВыборкаФакт использовать. Я ТУПЕНЬ!!!!!!!!!
8 daviels
 
28.08.15
16:05
Тока $ВыборкаФакт.Представитель не работает, а работает
ВыборкаФакт.sp3081
9 daviels
 
28.08.15
16:06
dk

тебе тоже спасибо, что отозвался.
10 trad
 
28.08.15
16:09
(8) просто надо в подзапросе назначить алиас полю
$ДокФакт.Представитель as Представитель,
и снаружи использовать
ВыборкаФакт.Представитель
11 daviels
 
28.08.15
16:10
trad
Точно. Я так и сделал только что
Закон Брукера: Даже маленькая практика стоит большой теории.