Имя: Пароль:
1C
1С v8
Запрос к таблице значений - ошибка "тип не определен..."
0 Kaukass
 
09.10.15
15:00
Помогите разобраться.
Создал ТЗ, полям задал нужные типы данных, но при попытке обратиться к ТЗ из запроса - вышеупомянутая ошибка.

code
    табл = новый ТаблицаЗначений();
    Знак = ДопустимыйЗнак.Любой;
ПараметрыСтроки = Новый КвалификаторыСтроки(5,ДопустимаяДлина.Переменная);
ПараметрыЧислаК = Новый КвалификаторыЧисла(15,3,Знак ) ;
ПараметрыЧислаЦ = Новый КвалификаторыЧисла(15,2, Знак) ;
ПараметрыДаты = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , ПараметрыСтроки);
Массив.Очистить();
Массив.Добавить(Тип("Дата"));
ОписаниеТиповД = Новый ОписаниеТипов(Массив, , ПараметрыДаты);
Массив.Очистить();

ОписаниеТиповК = Новый ОписаниеТипов(Массив, , ПараметрыЧислаК);

Массив.Очистить();
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ПараметрыЧислаК);
Массив.Очистить();
ОписаниеТиповЦ = Новый ОписаниеТипов(Массив, , ПараметрыЧислаЦ);
табл.Колонки.Добавить("Период",ОписаниеТиповД);
Табл.Колонки.Добавить("Документ",Новый ОписаниеТипов("ДокументСсылка.ПеремещениеТоваров"));
Табл.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
табл.Колонки.Добавить("Количество",ОписаниеТиповК);
табл.Колонки.Добавить("Цена",ОписаниеТиповЦ);
табл.Колонки.Добавить("Сумма",ОписаниеТиповЦ);
....
Текст запроса
....
"ВЫБРАТЬ
               |    ТЗ.Период,
               |    ТЗ.Регистратор,
               |    ТЗ.Количество КАК Количество,
               |    ТЗ.СУмма КАК СУмма
               |ПОМЕСТИТЬ ВТ
               |ИЗ
               |    &ТЗ КАК ТЗ
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               |    ВТ.Период,
               |    ВТ.Регистратор,
               |    СУММА(ВТ.Количество) КАК Количество,
               |    СУММА(ВТ.СУмма) КАК СУмма
               |ИЗ
               |    ВТ КАК ВТ
               |
               |СГРУППИРОВАТЬ ПО
               |    ВТ.Период,
               |    ВТ.Регистратор,
               |    ВТ.Количество"
code
1 GreatOne
 
09.10.15
15:01
Типизурй колонки
2 GreatOne
 
09.10.15
15:02
ой, не прочитал.
3 jurassic
 
09.10.15
15:02
ошибку покажи
4 GreatOne
 
09.10.15
15:03
не вижу колонки "регистратор"
5 jurassic
 
09.10.15
15:04
(4) это её в табл нет. а в &ТЗ есть, наверное
6 GreatOne
 
09.10.15
15:06
(5) ну вот и получаем ошибку, тип не описан
7 Kaukass
 
09.10.15
15:11
И я не вижу. Накосячил при создании ТЗ -колонка Документ, а в запросе Регистратор.
8 Kaukass
 
09.10.15
15:12
Спасибо
9 Kaukass
 
09.10.15
15:30
Изменил название поля, но ошибка та же
текст
code
{Форма.ФормаОтчета.Форма(77)}: Тип не определен (ВЫБРАТЬ
    ТЗ.Период,
    ТЗ.Регистратор,
    ТЗ.Количество КАК Количество,
    ТЗ.СУмма КАК СУмма,
    ТЗ.Цена
ПОМЕСТИТЬ ВТ
ИЗ
    &ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Период,
    ВТ.Регистратор,
    СУММА(ВТ.Количество) КАК Количество,
    СУММА(ВТ.СУмма) КАК СУмма
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.Период,
    ВТ.Регистратор,
    ВТ.Количество)
10 GreatOne
 
09.10.15
15:33
покажи полный текст ошибки
11 GreatOne
 
09.10.15
15:34
ладно, вангую, что на клиенте запрос запускаешь
12 Kaukass
 
09.10.15
15:37
(10) Это и есть - полный текст.
Обычное приложение. УТ 10.3
13 Kaukass
 
09.10.15
15:51
Оставил одну колонку Дата в ТЗ, но все равно: "Тип не определен"

code
ПараметрыДаты = Новый КвалификаторыДаты(ЧастиДаты.Дата);
Массив = Новый Массив;
Массив.Добавить(Тип("Дата"));
ОписаниеТиповД = Новый ОписаниеТипов(Массив, , ПараметрыДаты);
ВЫБРАТЬ
               |    ТЗ.Период
               |ПОМЕСТИТЬ ВТ
               |ИЗ
               |    &ТЗ КАК ТЗ
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               |    ВТ.Период
               |ИЗ
               |    ВТ КАК ВТ
               |
               |СГРУППИРОВАТЬ ПО
               |    ВТ.Период"
14 ptiz
 
09.10.15
15:53
Это как понимать?
Массив.Очистить();

ОписаниеТиповК = Новый ОписаниеТипов(Массив, , ПараметрыЧислаК);

...
табл.Колонки.Добавить("Количество",ОписаниеТиповК);


Вот тут и нет типа.
15 Kaukass
 
09.10.15
15:57
(14) Так было описано в примере, который нашел.
Как правильно?
А описания типов должны быть в одном массиве?
16 Kaukass
 
09.10.15
16:11
(14) Покажи на примере таблицы с одним полем, как сделать?
17 GreatOne
 
09.10.15
16:13
(14) муахахах) и никто не заметил)
18 GreatOne
 
09.10.15
16:14
(16) сделай запрос только к регистратору - заработает
19 Kaukass
 
09.10.15
16:25
(18) Крегистратору тоже не работает

табл = новый ТаблицаЗначений();
ПараметрыДаты = Новый КвалификаторыДаты(ЧастиДаты.Дата);
Массив = Новый Массив;
ОписаниеТиповД = Новый ОписаниеТипов(Массив, , ПараметрыДаты);
Табл.Колонки.Добавить("Регистратор",Новый ОписаниеТипов("ДокументСсылка.ПеремещениеТоваров"));
ДатаЧ = ТекущаяДата();
Строка = Табл.Добавить();
Строка.регистратор = Документы.ПеремещениеТоваров.ПустаяСсылка();

Запрос = Новый("ВЫБРАТЬ
               |    ТЗ.Регистратор
               |ПОМЕСТИТЬ ВТ
               |ИЗ
               |    &ТЗ КАК ТЗ
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               |    ВТ.Регистратор
               |ИЗ
               |    ВТ КАК ВТ"  )   ;
Запрос.УстановитьПараметр("ТЗ", Табл);
20 Kaukass
 
09.10.15
16:27
Выходит, какой то косяк при описании типов. Но какой????????????
21 GreatOne
 
09.10.15
16:29
мда.......................

Запрос (Query)
На основании текста запроса
Синтаксис:

Новый Запрос(<ТекстЗапроса>)
Параметры:

<ТекстЗапроса> (необязательный)

Тип: Строка.
Текст запроса.
Значение по умолчанию: Пустая строка.
Описание:

Создает запрос с указанным текстом.
Пример:

// Создание запроса с текстом.
Запрос = Новый Запрос(ТекстЗапроса);
// Создание запроса без текста.
Запрос = Новый Запрос;
22 GreatOne
 
09.10.15
16:30
раз 5 хотел попросить написать код целиком, но надеялся на лучшее
23 GreatOne
 
09.10.15
16:32
на будущее - пользуйся конструктором запроса с обработкой результата
24 aleks_default
 
09.10.15
16:44
(20) Да тот же самый!
Массив = Новый Массив;
ОписаниеТиповД = Новый ОписаниеТипов(Массив, , ПараметрыДаты); - что ты понял из этого куска кода?
25 GreatOne
 
09.10.15
16:50
(24) все куда тривиальнее. Запрос вообще не построен.
26 aleks_default
 
09.10.15
16:55
(25) у, ёёёё...
Короче,ТС, найди в ближайшем парке раздвоенную березу или осину, заложи между стволами руки и...
27 Kaukass
 
09.10.15
20:54
(26)
Может быть, что ты пришел в этот мир с врожденными знаниями 1С и начал кодить раньше чем самостоятельно научился подтирать задницу, но я пока учусь и далеко не во всем разбираюсь.
Было бы полезней, если бы ткнул в проблемные куски кода, сказал:"Уважаемый, у Вас тут и тут ошибки."
28 Kaukass
 
09.10.15
21:00
Полетела деревянная птица. Не хватало этого:
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
29 GreatOne
 
09.10.15
21:06
(27) Эй, инфантил, тебя уже ткнули носом. Тут большинство пришли в 1С вообще без знаний что такое переменная.
Говорить "деточка, вот тут у тебя ошибка" - это детство, добро пожаловать в реальный мир, тут голову надо включать, ответственность и другие мужские радости. И никто тебя тут уважать не будет за просто так.

В пособии разраба Радченко описана работа с отладчиком. Ты туда вообще не смотрел!

(28) все не так.
30 GreatOne
 
09.10.15
21:09
Если у тебя до сих пор не работает запрос, посмотри в СП как строится запрос вообще. Что такое конструктор и так далее. Ты не запрос строишь, ты переменной "запрос" присваиваешь какую-то хрень
31 Kaukass
 
09.10.15
21:19
Не обратил внимания на эту деталь. Думал, что нет разницы, когда и куда писать текст запроса.
Так тоже работает - проверил:
Запрос = новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Номенклатура");
    Выборка = Запрос.Выполнить().Выбрать();
    Сообщить(Выборка.Количество());

--------
Если работает в обоих случаях, то чем отличается
Запрос = Новый Запрос(Текст);
от
запрос.Текст = Текст?
32 Kaukass
 
09.10.15
21:25
(29) Ты - воспитанный человек. Я, бы обозвал олигофреном или имбицилом.
33 jurassic
 
10.10.15
06:06
(31) разные конструкторы
(32) пишется через Е, как и дебил
34 фобка
 
10.10.15
06:15
(31) ничем