Имя: Пароль:
1C
1C 7.7
v7: Табличное поле. ПоставщикДанных.
0 Eeakie
 
17.12.14
15:37
Добрый вечер.
Разбираюсь уже который день, но до сих пор не доходит: как сделать поставщиком данных ТП прямой запрос? Дайте, пожалуйста, простейший пример. Например, надо тупо вывести в ТП одну колонку "Номер", где будут номера из:

|select
|   ltrim(rtrim(Журнал.docno)) as Номер
|from
|   $Документ.Заявка as Заявка with (nolock)
|left join
|   _1sjourn as Журнал with (nolock) on Журнал.iddoc = Заявка.iddoc
|where
|   Журнал.date_time_iddoc between :НачДата and :КонДата~";

Как, блин, сделать этот простейший пример.
Заранее благодарю.
1 Eeakie
 
17.12.14
15:52
В сегодня какой-то праздник? Где все? :)
2 Ёпрст
 
гуру
17.12.14
15:53
это очень сильное шаманство
3 Eeakie
 
17.12.14
15:54
(2) Подколы ожидал изначально. Просто с ТП раньше вплотную не сталкивался.
4 antoneus
 
17.12.14
15:54
ТП.ПоставщикДанных = СоздатьОбъект("ПоставщикДанныхODBC.SQL");

Читать тут: http://www.1cpp.ru/docum/html/TableField.html#odbc-odbcdataprovider
5 akaBrr
 
17.12.14
15:56
а почему left join?
6 antoneus
 
17.12.14
15:57
|select
|   ltrim(rtrim(Журнал.docno)) as Номер
|from
|   _1sjourn as Журнал with (nolock)
|where
|   Журнал.date_time_iddoc between :НачДата and :КонДата~ and
Журнал.iddocdef= $ВидДокумента.Заявка
7 Eeakie
 
17.12.14
15:59
(5, 6) В скорости есть ощутимая разница? Или типа "просто так не надо ничего джойнить"?
8 antoneus
 
17.12.14
15:59
(7) да, попадание в индекс по iddocdef
9 Eeakie
 
17.12.14
16:00
(8) Понял. Спасибо.
10 Ёпрст
 
гуру
17.12.14
16:09
(0)

ну на вот, занимайся

    ТекстЗапроса ="
    |Select Жур.date_time_iddoc as date_time_iddoc
    |,convert(datetime,substring(Жур.date_time_iddoc,1,8)) as [ДатаДок $Дата]
    |,Жур.DOCNO as [НомерДок $Строка]
    |,Жур.IDDOC as [Док $Документ]
    |, Жур.IDDOCDEF as [Док_вид]
    |from _1sjourn as Жур (nolock)
    |";    
    Источник=СоздатьОбъект("ODBCDataProvider.MSSQL");
    База=СоздатьОбъект("ODBCDatabase");
    МенятьРазмер=1;
    Источник.SetQueryText (ТекстЗапроса);
    Источник.УстКлючПорядка("date_time_iddoc");            
    Источник.БазаДанных=База;
    Источник.Поля.Добавить("Док").Автоудаление=0;
    Источник.Поля.Добавить("Док_вид").Автоудаление=0;
     _Форма = СоздатьОбъект("Форма");
     ТабличноеПоле = _Форма.СоздатьЭлементУправленияНаФорме(Форма, "ТабличноеПоле", "РеквизитНаФормеПодТабличноеПоле");

    ТабличноеПоле.СтильЗаголовков=0;
    ТабличноеПоле.ТаймаутОбновления=10;
    ТабличноеПоле.ВертикальныеЛинии=1;
    ТабличноеПоле.ГоризонтальныеЛинии=1;
    ТабличноеПоле.ТаймаутБыстрогоПоиска=1;  
    ТабличноеПоле.РежимВыделенияСтроки = 0;
        
    Колонки=ТабличноеПоле.Колонки;
    Колонка=Колонки.Добавить("НомерДок");
    Колонка.Заголовок="НомерДок";
    Колонка.Ширина = 18;
    Колонка.Данные="НомерДок";
    Колонка.ГоризонтальноеВыравнивание=1;
    Колонка.ИзменениеРазмера =МенятьРазмер;  
    Колонка.ЗнакУпорядочивания=1;
    
    
    Колонки=ТабличноеПоле.Колонки;
    Колонка=Колонки.Добавить("ДатаДок");
    Колонка.Заголовок="Дата";
    Колонка.Ширина = 15;
    Колонка.Данные="ДатаДок";
    Колонка.ГоризонтальноеВыравнивание=1;
    Колонка.ИзменениеРазмера =МенятьРазмер;  
    Колонка.ЗнакУпорядочивания=1;
    
    
    
    Колонки=ТабличноеПоле.Колонки;
    Колонка=Колонки.Добавить("Док_вид");
    Колонка.Заголовок="Док_вид";
    Колонка.Ширина = 0;
    Колонка.Данные="Док_вид";
    Колонка.ГоризонтальноеВыравнивание=1;
    Колонка.ИзменениеРазмера =МенятьРазмер;  
    Колонка.ЗнакУпорядочивания=1;
    Колонка.Видимость=0;
    
    Колонки=ТабличноеПоле.Колонки;
    Колонка=Колонки.Добавить("Док");
    Колонка.Заголовок="Док";
    Колонка.Ширина = 0;
    Колонка.Данные="Док";
    Колонка.ГоризонтальноеВыравнивание=1;
    Колонка.ИзменениеРазмера =МенятьРазмер;  
    Колонка.ЗнакУпорядочивания=1;
    Колонка.Видимость=0;
    
    ТабличноеПоле.ПоставщикДанных=Источник;    
    ТабличноеПоле.ОбновитьСтроки();
11 Eeakie
 
17.12.14
16:12
(1) УстТекстЗапроса() не работает чтоль.. ?
12 Eeakie
 
17.12.14
16:12
(11) > (10)
13 Eeakie
 
17.12.14
16:12
(10) Спасибо. Это то, что было нужно.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший