Имя: Пароль:
1C
Админ
Не найдено дополнительное типизирующее поле
0 Холст
 
11.10.13
02:02
ТекстЗапроса = "
    |SELECT
    | J.iddoc as [Док$Документ]
    |,J.IDDocDef as [Док_вид]
    |,J.DocNo as Номер
    |,J.date_time_iddoc as Дата
    | FROM  _1SJourn as J
    | ";
я же указал типизирующее поле, что не так ?
1 Холст
 
11.10.13
02:03
запрос sql
2 КонецЦикла
 
11.10.13
02:21
Попробуй красиво написать

| J.iddoc as [Док $Документ]
|,J.IDDocDef as [Док_вид $ВидДокумента]

может пробел не поставил...
3 Холст
 
11.10.13
02:22
данные из sql запроса выводятся в ТП
полный код

    Пост=СоздатьОбъект("ODBCDataProvider.MSSQL");
    База=СоздатьОбъект("ODBCDatabase");
    Пост.БазаДанных=База;
        
    ТекстЗапроса = "
    |SELECT
    | J.iddoc as [Док $Документ]
    |,J.IDDocDef Док_вид
    |,J.DocNo as Номер
    |,J.date_time_iddoc as Дата
    | FROM  _1SJourn as J
    | ";
    
    Пост.Отладка(1);
    Пост.УстТекстЗапроса(ТекстЗапроса);
    Пост.УстИДПоле("Док");
    Пост.УстКлючПорядка("Дата");
    
    ТП_ДобавитьКолонку("Докк", "Документ",35);
    ТП_ДобавитьКолонку("Дата",,20);
    ТП_ДобавитьКолонку("Время",,20);
    ТП_ДобавитьКолонку("Номер",,30);

    ТП.ПоставщикДанных=Пост;
    ТП.ОбновитьСтроки();
4 Холст
 
11.10.13
02:24
и с пробелом и без  пробела пробовал
5 Холст
 
11.10.13
02:24
отлладка сообщает
select top 44
J.date_time_iddoc as Дата,
J.iddoc as Док,
J.DocNo as Номер
from _1SJourn as J

order by J.date_time_iddoc
6 Холст
 
11.10.13
02:25
непонятоно куда из отладки девается строка
|,J.IDDocDef Док_вид
7 Холст
 
11.10.13
02:27
совместное указание полей
Пост.УстИДПоле("Док,Док_вид");
дает
{R:\ТП_Ж_АВИАБИЛЕТЫА.ERT(80)}: Недопустимое указание поля.
8 Холст
 
11.10.13
02:30
|SELECT
    | J.iddoc as [Док $Документ]
    |,J.IDDocDef as [Док_вид $ВидДокумента]
    |,J.DocNo as Номер
    |,J.date_time_iddoc as Дата
    | FROM  _1SJourn as J
    | ";
это тоже для типизации поля "Док", не найдено дополнительное типизирующее поле
9 КонецЦикла
 
11.10.13
02:32
Давай от простого к сложному :)
Выполни его отдельно, не в качестве поставщика данных
А вообще если ничего нет специфического лучше класс готовый юзать
10 Холст
 
11.10.13
02:35
(9) готовый класс Поставщик данных не осилил пока, не понимаю как в нем указывать для произвольных документов журнал
11 КонецЦикла
 
11.10.13
02:37
Документ одного вида там будет?
12 Холст
 
11.10.13
02:40
(11) трех видов документы, они не принадлежат одному журналу
дополнительный журнал не хочется заводить
13 Rie
 
11.10.13
02:44
А какая версия 1С++?
А то ведь было http://www.1cpp.ru/bugs/show_bug.cgi?id=3993
14 Холст
 
11.10.13
02:48
на разных машинах
версия 3.2.4.0 bf2
версия 3.0.1.22
15 Холст
 
11.10.13
02:51
версия 3.2.2.0
тоже проверил та же ошибка
16 Rie
 
11.10.13
02:56
Так а если выполнить запрос отдельно - ошибка возникает?
17 Холст
 
11.10.13
03:02
(16) не на чем выполнить, нет консоли под рукой
18 Злопчинский
 
11.10.13
03:07
ну капец, код напиши на худой случай
19 Rie
 
11.10.13
03:07
(17) А зачем консоль?
Просто выполнить, без разницы, что он вернёт.
Самый интересный момент - в (6).
20 Холст
 
11.10.13
03:44
ТекстЗапроса = "
    |SELECT
    |  Жур.row_id as row_id,
    |  Жур.Date_Time_IDDoc as Позиция,
    |
    |  CASE
    |  WHEN Жур.IsMark = 1 THEN 6
    |  WHEN Жур.Closed & 1 = 1 THEN 1
    |  ELSE 0 END as Картинка,
    |
    |  Жур.IDDoc as Документ ,
    |  Жур.IDDocDef as Документ_вид
    | FROM     _1SJourn as Жур (NOLOCK)
    | ";
    
    Пост.Отладка(1);

    Пост.УстТекстЗапроса(ТекстЗапроса);
    Пост.УстИДПоле("Документ");
    Пост.УстКлючПорядка("row_id");

    ТП_ДобавитьКолонку("Документ", "Документ",35);
    ТП_ДобавитьКолонку("Дата",,20);
    ТП_ДобавитьКолонку("Документ_вид",,20);
    ТП_ДобавитьКолонку("Позиция",,30);


выполнил этот код, в колонку ТП Документ_вид заполнилось десятичными цифрами только, может десятичные надо во чтото преобразовать ?
21 Rie
 
11.10.13
03:48
(20) Так а если теперь типизировать Документ?
И сказать Отладка(1)?
22 Холст
 
11.10.13
03:50
заработал в результате такой код

    Пост=СоздатьОбъект("ODBCDataProvider.MSSQL");
    База=СоздатьОбъект("ODBCDatabase");
    Пост.БазаДанных=База;
    Поле = Пост.Поля.Добавить("Док");

    ТекстЗапроса = "
    |SELECT
    |  Жур.row_id as row_id,
    |  Жур.Date_Time_IDDoc as Позиция,
    |
    |  CASE
    |  WHEN Жур.IsMark = 1 THEN 6
    |  WHEN Жур.Closed & 1 = 1 THEN 1
    |  ELSE 0 END as Картинка,
    |
    |  Жур.IDDoc as [Документ $Документ],
    |  Жур.IDDocDef as Документ_вид
    | FROM     _1SJourn as Жур (NOLOCK)
    | ";
    
    Пост.Отладка(1);
    Пост.УстТекстЗапроса(ТекстЗапроса);
    Пост.УстИДПоле("Документ");
    Пост.УстКлючПорядка("row_id");
    
    ТП_ДобавитьКолонку("Документ", "Документ",35);
    ТП_ДобавитьКолонку("Дата",,20);
    ТП_ДобавитьКолонку("Документ_вид",,20);
    ТП_ДобавитьКолонку("Позиция",,30);

    ТП.ПоставщикДанных=Пост;
    ТП.ОбновитьСтроки();

хотя типизация и раньше была
23 Rie
 
11.10.13
03:53
(22) А для интереса - перемести запятые в SELECT начало строк.
Метапарсер иногда излишне чувствителен к подобным деталям.
24 Холст
 
11.10.13
04:00
сек
25 Холст
 
11.10.13
04:11
итак, вроде нашел где порылась собака

    Пост=СоздатьОбъект("ODBCDataProvider.MSSQL");
    База=СоздатьОбъект("ODBCDatabase");
    Пост.БазаДанных=База;
    Поле = Пост.Поля.Добавить("Док");

    ТекстЗапроса = "
    |SELECT
    |  Жур.row_id as row_id,
    |  Жур.Date_Time_IDDoc as Позиция,
    |  SUBSTRING(Жур.Date_Time_IDDoc,1,8) as [Дата $Дата],
    |  CASE
    |  WHEN Жур.IsMark = 1 THEN 6
    |  WHEN Жур.Closed & 1 = 1 THEN 1
    |  ELSE 0 END as Картинка,  
    |  Жур.DocNo as Номер,
    |
    |  Жур.IDDoc as [Документ $Документ],
    |  Жур.IDDocDef as Документ_вид
    | FROM     _1SJourn as Жур (NOLOCK)
    | ";
    
    Пост.Отладка(1);
    Пост.УстТекстЗапроса(ТекстЗапроса);
    Пост.УстИДПоле("Документ");
    Пост.УстКлючПорядка("row_id");
    
        ТП_ДобавитьКолонку("Документ_вид",,0);
    ТП_ДобавитьКолонку("Дата",,10);
    ТП_ДобавитьКолонку("Время",,10);
    ТП_ДобавитьКолонку("Номер",,14);

    ТП.ПоставщикДанных=Пост;
    ТП.ОбновитьСтроки();
вот такой код работает
а если в нем закомментировать строку
ТП_ДобавитьКолонку("Документ_вид",,0);
то не формируется и выдает ошибку из (0)
26 Злопчинский
 
11.10.13
05:13
ну дык наверное и правильно что не работает если "Документ_вид" - непонятно какого типа - к чему ипизировать то надо..?
27 ADirks
 
11.10.13
06:47
(26) Документ_вид абсолютно понятно какого типа - int. У ТС совершенно другая проблема, а именно: парсер запросов в ТП выкидывает доп. колонку с целью оптимизации, а потом жалуется на её отсутствие :)  Я бы для начала обновил бы 1С++ до последней версии.  Ещё возможно, что колонка 'Документ_вид' воспринимается как доп., а вот '[Документ_вид]' - не воспринимается.

Топикстартеру же рекомендую почитать  http://www.script-coding.com/v77tables.html
там много полезного
28 Rie
 
11.10.13
06:50
(27) У ТС достаточно свежая версия 1С++. Проблема у него была в том, что не только в запросе, но и в ТП требовалась типизирующая колонка - (25).
29 ADirks
 
11.10.13
07:20
(28) на кой дьявол оно в ТП то?
Поставщик.Поля.Добавить("Документ_вид");
и всех делов, даже автоудаление не надо выключать
30 Rie
 
11.10.13
07:25
(29) И действительно.
(По ночам надо спать :-)
31 Холст
 
11.10.13
11:03
"парсер запросов в ТП выкидывает доп. колонку с целью оптимизации"
печально, из-за отсутствия этого знания вчера мной потрачено 4 часа
32 ADirks
 
11.10.13
12:12
(31) лучше бы эти 4 часа на чтение документации потратил, а то ведь в следующий раз опять на что-нибудь такое наступишь
33 trad
 
11.10.13
12:23
(29) а точно автоудаление не нужно выключать?
34 ADirks
 
11.10.13
12:28
(33) я проверил - тоже сначала думал, что надо
35 trad
 
11.10.13
12:30
(34) видимо с лохматых времен что то изменилось
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс