Имя: Пароль:
1C
1C 7.7
v7: Еще вопрос по прямым запросам
,
0 pofigos
 
21.11.13
20:10
И снова вопрос:

ТекстЗапроса = "
        |SELECT ОсновнойОстатки.Субконто1 [Контрагент $Справочник.Контрагенты]
        |, $Сотрудник.Филиал [Филиал $Справочник.Подразделение]
        |, ДокТТН.IdDoc as [Докум $Документ.ТТННаОрганизациюТовары]
        |, $ДокТТН.Менеджер [Сотрудник $Справочник.Сотрудники]
        |, $ДокТТН.Всего as Сумма
        |, ОсновнойОстатки.СуммаОстаток as СуммаДолга
        |, Case
        |WHEN LEFT($ГрафикОплат.ДатаОплаты,8) <> '01011753' THEN $ГрафикОплат.ДатаОплаты
        |ELSE
        |    Case
        |        WHEN $Договора.ВидДоговора = :ДогБанк1 THEN $ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, :ВыбДата)
        |        WHEN $Договора.ВидДоговора = :ДогБанк2 THEN    $ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, :ВыбДата)    
        |        WHEN $Договора.ВидДоговора = :ДогБанк3 THEN $ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, :ВыбДата)
        |        ELSE $ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, :ВыбДата)
        |    END
        |END ДатаОплаты
        |
        |, ГруппировкаДок.Группировка [Группировка $Перечисление.УкрупненныеГруппировки]
        |
        |FROM $БИОстатки.Основной(:ВыбДата~
        |                            ,
        |                            ,(Счет = :ВыбСчет)
        |                            ,(Субконто1,Субконто2)
        |                            , Фильтр) AS ОсновнойОстатки
        |
        |LEFT JOIN $Справочник.Документы AS Документы (NOLOCK) on Документы.id = ОсновнойОстатки.Субконто2
        |LEFT JOIN $Справочник.Договора AS Договора (NOLOCK) on Договора.id = RIGHT($Документы.ДоговорДок,9)
        |LEFT JOIN $Справочник.ГрафикОплат AS ГрафикОплат (NOLOCK) on $ГрафикОплат.Докум = $Документы.СсылкаНаДокумент
        |INNER JOIN $Документ.ТТННаОрганизациюТовары as ДокТТН (NOLOCK) on ДокТТН.IdDoc = RIGHT($Документы.СсылкаНаДокумент,9)
        |LEFT JOIN $Справочник.Сотрудники AS Сотрудник (NOLOCK) on Сотрудник.id = $ДокТТН.Менеджер
        |LEFT JOIN (
        |            SELECT DISTINCT $Группировки.УкрупненнаяГруппировка Группировка
        |                    , ТТННаОрганизациюТоварыСтроки.IDDOC Ссылка
        |            FROM $ДокументСтроки.ТТННаОрганизациюТовары AS ТТННаОрганизациюТоварыСтроки With (NOLOCK)    
        |                LEFT JOIN $Справочник.ВидыТоваров AS ВидыТоваров (NOLOCK) on ВидыТоваров.id = $ТТННаОрганизациюТоварыСтроки.ВидТМЦ
        |                LEFT JOIN $Справочник.Группировки AS Группировки (NOLOCK) on Группировки.id = $ВидыТоваров.Группировки
        |            ) as ГруппировкаДок on ДокТТН.IdDoc = ГруппировкаДок.Ссылка
        |
        |WHERE    (ОсновнойОстатки.СуммаОстаток > 0)
        |
        |Условия
        |";


1. Как в WHEN $Договора.ВидДоговора = :ДогБанк1 THEN $ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, :ВыбДата) передать вместо :ВыбДата ДокТТН.ДатаДок?
2. Как правильно Уложить список объектов и сравнить с этим списком, если параметры перечисления?

Помогите начинающим...
1 pofigos
 
21.11.13
20:25
(0) Так же интересно, $ПоследнееЗначение.ВидСправочник.Реквизит(,,,) имеет последний параметр ДокИД, что в принципе можно получить значение на позицию документа.. но что-то не взлетело. ругается на 2-й параметр.
2 Z1
 
21.11.13
21:05
(0)
В Список1 помещаешь перечисления
далее уложитьсписокОбъектов

ПрямойЗапрос.УложитьСписокОбъектов(Список1,"#Х_СписокЯч1");
Здесь важно что опускаешь третий параметр

также можно делать типизацию в самом запросе так  :
$Перечисление.ПризнПрих.Закупка


(1) ты путаешь речь идет о периодических реквизитах двигаемых документами  ( хотя могу и ошибаться потому что не использую периодич реквизиты )
3 viktor_vv
 
21.11.13
22:00
(1)  $ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, :ВыбДата~~)

Там у ыторого параметра тип должен быть DateTime. :ВыбДата~~
4 pofigos
 
22.11.13
13:19
(2)$Договора.ВидДоговора этот параметр и есть перечисление. Вот и хотел case отсортировать. дальше влияет на выбор подсчета либо банковские либо календарные дни...
только вот не получилось, поэтому в ELSE еще 3 case. Может не верно сравнение провел?

Case
|WHEN $Договора.ВидДоговора IN (SELECT Val FROM #СписокВидовДог) THEN

(3) в принципе это понятно. Взлетело
$ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8))

Пришлось документ с журналом джойнить.
5 pofigos
 
22.11.13
13:21
Тут еще загвоздка... хотелось сразу возвращать в запросе что-то вроде ДатаДок + энное количество дней). Это вообще возможно реализовать?

Кошусь в сторону CREATE FUNCTION() только примеров не нашел (
6 pofigos
 
22.11.13
13:29
(5) Конечно больше кошусь на функцию DATEADD (datepart , number , date )
Только вот пока не могу понять, как ее привязать к запросу
7 pofigos
 
22.11.13
14:56
Вопрос снят. Решено.
8 pofigos
 
22.11.13
14:58
Если кому понадобится на будущее и кто первый раз столкнется:

|, Case
        |        WHEN $Договора.ВидДоговора = :ДогБанк1 THEN Dateadd(day,$ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8)),LEFT(Журнал.DATE_TIME_IDDOC,8))
        |        WHEN $Договора.ВидДоговора = :ДогБанк2 THEN    Dateadd(day,$ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8)),LEFT(Журнал.DATE_TIME_IDDOC,8))
        |        WHEN $Договора.ВидДоговора = :ДогБанк3 THEN Dateadd(day,$ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8)),LEFT(Журнал.DATE_TIME_IDDOC,8))
        |        ELSE Dateadd(day,$ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8)),LEFT(Журнал.DATE_TIME_IDDOC,8))
        |    END ДатаОплаты
9 pofigos
 
22.11.13
15:22
Весь текст запроса... Если кому нечего будет делать, приму критику и предложения по возможной оптимизации:

ТекстЗапроса = "
|SELECT ОсновнойОстатки.Субконто1 [Контрагент $Справочник.Контрагенты]
|, $Сотрудник.Филиал [Филиал $Справочник.Подразделение]
|, ДокТТН.IdDoc as [Докум $Документ.ТТННаОрганизациюТовары]
|, $ДокТТН.Менеджер [Сотрудник $Справочник.Сотрудники]
|, $ДокТТН.Всего as Сумма
|, ОсновнойОстатки.СуммаОстаток as СуммаДолга
|, Case
|    WHEN $Договора.ВидДоговора IN (SELECT VAl FROM #СпВидДоговор )THEN Dateadd(day,$ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8)),LEFT(Журнал.DATE_TIME_IDDOC,8))
|    ELSE Dateadd(day,$ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8))-1,LEFT(Журнал.DATE_TIME_IDDOC,8))
|    END ДатаОплаты
|, ГруппировкаДок.Группировка [Группировка $Перечисление.УкрупненныеГруппировки]
|
|FROM $БИОстатки.Основной(:ВыбДата~
|            ,
|            ,(Счет = :ВыбСчет)
|            ,(Субконто1,Субконто2)
|            , Фильтр) AS ОсновнойОстатки
|
|LEFT JOIN $Справочник.Документы AS Документы (NOLOCK) on Документы.id = ОсновнойОстатки.Субконто2
|INNER JOIN $Документ.ТТННаОрганизациюТовары as ДокТТН (NOLOCK) on ДокТТН.IdDoc = RIGHT($Документы.СсылкаНаДокумент,9)
|LEFT JOIN $Справочник.Договора AS Договора (NOLOCK) on Договора.id = RIGHT($Документы.ДоговорДок,9)        
|LEFT JOIN $Справочник.Сотрудники AS Сотрудник (NOLOCK) on Сотрудник.id = $ДокТТН.Менеджер
|LEFT JOIN (
|            SELECT DISTINCT $Группировки.УкрупненнаяГруппировка Группировка
|                    , ТТННаОрганизациюТоварыСтроки.IDDOC Ссылка
|            FROM $ДокументСтроки.ТТННаОрганизациюТовары AS ТТННаОрганизациюТоварыСтроки With (NOLOCK)    
|                LEFT JOIN $Справочник.ВидыТоваров AS ВидыТоваров (NOLOCK) on ВидыТоваров.id = $ТТННаОрганизациюТоварыСтроки.ВидТМЦ
|                LEFT JOIN $Справочник.Группировки AS Группировки (NOLOCK) on Группировки.id = $ВидыТоваров.Группировки
|            ) as ГруппировкаДок on ДокТТН.IdDoc = ГруппировкаДок.Ссылка
|LEFT JOIN _1SJOURN AS Журнал With (NOLOCK) ON  ДокТТН.IDDOC = Журнал.IDDOC    
|
|WHERE    (ОсновнойОстатки.СуммаОстаток > 0)
|
|Условия
|";
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший