Имя: Пароль:
1C
1С v8
Во вложеном запросе ошибка на сравнение строк неограниченной длинны
,
0 Boudybuilder
 
08.12.12
12:58
Вот запрос:

       Запрос = Новый Запрос;
       МенеджерВТ = Новый МенеджерВременныхТаблиц;
       Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
       Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    ТабПрайс."+КолонкаКод+" КАК Код,
       |    ТабПрайс."+КолонкаЦена+" КАК Цена
       |ПОМЕСТИТЬ ТабПрайс
       |ИЗ
       |    &ТабПрайс КАК ТабПрайс        
       |ГДЕ
       |    ТабПрайс."+КолонкаКод+" НЕ ПОДОБНО """"";
       Запрос.УстановитьПараметр("ТабПрайс",ТабПрайс);
       Запрос.Выполнить();


Так хочется поставить вместо "НЕ ПОДОБНО" знак не равно "<>" , ведь это в разы ускорит отработку запроса . Но... НЕЛЬЗЯ СРАВНИВАТЬ ПОЛЯ НЕОГРАНИЧЕННОЙ ДЛИННЫ И НЕСОВМЕСТИМЫХ ТИПОВ !

Проверяю отладчиком , и там вроде все ок.


ТабПрайс.Колонки[КолонкаКод] : ТипЗначения-Строка , Длинна - 20.

что может быть не так?
1 Wobland
 
08.12.12
12:59
поле неограниченной длины может быть не так. следующий!
2 Wobland
 
08.12.12
12:59
а длина пишется с двумя Н, только когда она очень длинная
3 Рэйв
 
08.12.12
12:59
(1)Что ты такой ехидный стал последнее время?
4 Живой Ископаемый
 
08.12.12
12:59
а ТабПрайс какой тип в отладчике?
5 Рэйв
 
08.12.12
13:00
(1)Девушки не дают?:-)
6 mikecool
 
08.12.12
13:00
используй Выразить
7 Wobland
 
08.12.12
13:00
(3) болею

а таблица типизирована, кстати?
8 Рэйв
 
08.12.12
13:01
(7)Чет долго болеешь:-)...Выздовравливай давай!
9 Boudybuilder
 
08.12.12
13:01
(4) ТаблицаЗначений
10 Boudybuilder
 
08.12.12
13:02
(3) (5) (7) Разговорчики в строю!!!!!!!!!!!!!!!!
11 Wobland
 
08.12.12
13:02
(8) рука не работает, это надолго.
хочу сказать много, а не могу. абыдно, блин ;)
12 Wobland
 
08.12.12
13:03
(10) а вот на (7) ответь..
13 Рэйв
 
08.12.12
13:03
(11)Посмотри на это с другой стороны.
Нацчишься топтать клаву с обеих рук.Помакедонски мля!:-))
14 Живой Ископаемый
 
08.12.12
13:04
2(9) И запрос ты строишь тоже к таблицезначений? или к табличной части, в которой нужное тебе поле таки неограниченной длины?
15 Живой Ископаемый
 
08.12.12
13:05
а. да...
16 Wobland
 
08.12.12
13:05
(14) чо?
ИЗ
       |    &ТабПрайс КАК ТабПрайс
17 Boudybuilder
 
08.12.12
13:06
ТабПрайс = Новый ТаблицаЗначений;
Потом заполняю...
18 Wobland
 
08.12.12
13:07
(17) то есть, не типизирована
19 Wobland
 
08.12.12
13:08
вот так я типизировал:

   ОписаниеЧисла=Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный));
   ТЗ=Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Товар", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
   ТЗ.Колонки.Добавить("ДатаПрихода", Новый ОписаниеТипов("Дата"));
   ТЗ.Колонки.Добавить("КоличествоПрихода", ОписаниеЧисла);
20 Рэйв
 
08.12.12
13:10
(19)ОписаниеЧисла
Можно вполне сделать по примеру даты
овый ОписаниеТипов("Число")
21 Рэйв
 
08.12.12
13:10
и строку и булево тоже:-)
22 Boudybuilder
 
08.12.12
13:10
(19) Молодчинка!
Но я то прайс читаю , а потом ему задаю где что! Вобще то все там строками должно быть , кроме цены...

Вот как она заполняется:




ТабПрайс = Новый ТаблицаЗначений;              
       //Скачаем Прайс в таблицу значений
       Попытка
           Excel      = Новый COMОбъект("Excel.Application");
           WB         = Excel.Workbooks.Open(Строка.Прайс);
           WS         = WB.Worksheets(1);//указываем номер листа - 1
           arr        = WS.UsedRange.Value;
           WB.Close(0);
       Исключение
           Предупреждение("Внимание! Файл не открыт."+Символы.ПС+"Попробуйте открыть и пересохранить данный файл программой Эксель.");
           Возврат;
       КонецПопытки;
       //Узнаём данные выходные данные об листе ексель    
       МассивКолонок = arr.Выгрузить();
       колКол = МассивКолонок.ВГраница();
       колСтр = МассивКолонок.Получить(0).Количество();
       //
       ТабПрайс.Колонки.Добавить("Номер", ,"Номер").Ширина=5;  //Добавим новый столбец номер строки
       Для кол = 0 По колКол Цикл
           назКолМК = "Колонка"+(кол+2);    //Сообщить("наз "+имяКолМК);
           имяКолМК = назКолМК;              //Сообщить("имя "+имяКолМК);
           ТабПрайс.Колонки.Добавить(назКолМК, Новый ОписаниеТипов("Строка"), имяКолМК).Ширина=20;  //имя-колонка1, шапка-КолИмя
       КонецЦикла;
       
       //Вставляем необходимое колличество колонок строк в ТабПоле
       Для новСтрока = 1 По колСтр Цикл
           новСтр = ТабПрайс.Добавить();
           номСтр = ТабПрайс.Индекс(новСтр);
           новСтр.Установить(0,номСтр+1);
       КонецЦикла;
       //Заполняем ТЗ
       столбец =1;
       Для Каждого Колонка Из МассивКолонок Цикл
           СтолбецИмя = ТабПрайс.Колонки.Получить(столбец).Имя; //Сообщить("-"+СтолбецИмя);
           ТабПрайс.ЗагрузитьКолонку(Колонка,СтолбецИмя);//табельный номер
           столбец =столбец+1;
       КонецЦикла;
       
       //Заменим символы в коде
       Для Каждого Стр ИЗ ТабПрайс Цикл
           Стр[КолонкаКод] = СокрЛП(СтрЗаменить(Стр[КолонкаКод],Символы.НПП,""));
       КонецЦикла;




В конце где код , надо менять СимволыНПП ,  а то ведь всякие пробелы в коде попадаются.
23 Boudybuilder
 
08.12.12
13:11
Может все таки Выразить?

ВЫРАЗИТЬ(ТабПрайс.Код КАК СТРОКА) КАК Код,
как еще задать строке длинну тут?
24 Wobland
 
08.12.12
13:12
Новый ОписаниеТипов("Строка") - неограниченная ж, не?
25 Живой Ископаемый
 
08.12.12
13:12
ой... А почему ты не откроешь Эксель через источники данных, выполнишь к нему запрос, и сразу не выгрузишь в таблицу значений?
26 Wobland
 
08.12.12
13:13
(23) подстрока
27 Рэйв
 
08.12.12
13:13
(24), там параметр для ограничения. Если не установил, то неограниченая подефолту.
28 Wobland
 
08.12.12
13:13
(27) во! я ж сказал (1) ;)
29 Рэйв
 
08.12.12
13:15
(28)Имхается мне,вряд ли тс понял, что ты сказать хотел:-)
30 Wobland
 
08.12.12
13:16
(29) будет плохо, напрягусь и сгенерирую пример, так ибыть ;)
31 Рэйв
 
08.12.12
13:17
ну  флаг в руки:-)
32 Boudybuilder
 
08.12.12
13:17
(28) Правильно тебе имхается! ))) Ниче не понял.

(25) Потому что пока не умею. Так быстрее считает ?  А то ведь при таком заполнении ТЗ 28 000 за 12 секунд. Это вроде много... ???
33 Живой Ископаемый
 
08.12.12
13:20
попробуй.
34 Boudybuilder
 
08.12.12
13:22
Вобще , очем я тут...
Скачал когда то обработку подключаемую к ТЧ дока ЗаполнениеЦенНоменклатурыКонтрагентов и оттуда по каждому контрагенту  заполнял. Каждый док отдельно.
Щас тупо в обработке создал ТЗ , в которую добавляю строку , где есть Контрагент , ТипЦены , и путь к прайсу. Настройки по колонкам прайсов предварително уже сохранены . Только путь к прайсу надо поменять и все. Нажал кнопочку ,и по каждому контрагенту создало заполненный док.
Но вот с этими запросами...
35 Wobland
 
08.12.12
13:22
КС=Новый КвалификаторыСтроки(20);
   ОграниченнаяСтрока=Новый ОписаниеТипов("Строка", КС);
   ТЗ=Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("ДатаПрихода", ОграниченнаяСтрока);
36 Wobland
 
08.12.12
13:27
ТЗ.Колонки.Добавить("ДатаПрихода", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(20)));
37 Boudybuilder
 
08.12.12
13:36
(36)
Но ведь когда создается у меня ТабПрайс то я еще не знаю где у меня КолонкаКод , потому сразу не могу задать Тип.
38 petrowsky
 
08.12.12
13:59
(23) бери ВРАЗИТЬ
ВЫРАЗИТЬ(ТабПрайс.Код КАК СТРОКА(1000)) КАК Код,
39 Boudybuilder
 
08.12.12
14:34
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаКод+" КАК СТРОКА(250)) КАК Код,
       |    ТабПрайс."+КолонкаЦена+" КАК Цена
       |ПОМЕСТИТЬ ТабПрайс
       |ИЗ
       |    &ТабПрайс КАК ТабПрайс        
       |ГДЕ
       |    ТабПрайс."+КолонкаКод+" <> """"";
       Запрос.УстановитьПараметр("ТабПрайс",ТабПрайс);


Все равно то же самое!!!!!!!!
40 petrowsky
 
08.12.12
14:46
|ГДЕ
       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаКод+"КАК СТРОКА(250)) <> """"";

а так?
41 Живой Ископаемый
 
08.12.12
14:54
2(40) пробовал?
42 Boudybuilder
 
08.12.12
14:59
О! (40)
43 Boudybuilder
 
08.12.12
17:24
Ладно  вот некоторые еще непонятки...

Синтаксическая ошибка "КАК"
ВЫРАЗИТЬ(ТабПрайс.Колонка10 КАК СТРОКА(100)) <<?>>КАК Колонка10,

Что тут может быть не так?
44 petrowsky
 
08.12.12
18:14
скинь весь код запроса
45 Wobland
 
08.12.12
19:32
(43) ничего тут не может быть не так. разве что колонка10 у тебя уже где-то естьЮ но тогда ошибка была бы другой.
раскладка?
46 Boudybuilder
 
09.12.12
00:32
Запрос = Новый Запрос;
       МенеджерВТ = Новый МенеджерВременныхТаблиц;
       Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
       Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаКод+" КАК СТРОКА(250)) КАК Код,
       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаЦена+" КАК СТРОКА(25))КАК Цена"+ТекстНал+"
       |ПОМЕСТИТЬ ТабПрайс
       |ИЗ
       |    &ТабПрайс КАК ТабПрайс                                                    
       |ГДЕ
       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаКод+" КАК СТРОКА(250)) <> """"";
       Запрос.УстановитьПараметр("ТабПрайс",ТабПрайс);
       Запрос.Выполнить();
       
       Запрос.Текст = "ВЫБРАТЬ
                      |    МИНИМУМ(ТабПрайс.Цена) КАК Цена,
                      |    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
                      |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры"+ТекстНал+"
                      |ИЗ
                      |    ТабПрайс КАК ТабПрайс
                      |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                      |        ПО ТабПрайс.Код = НоменклатураКонтрагентов.КодНоменклатурыКонтрагента
                      |ГДЕ
                      |    НоменклатураКонтрагентов.Контрагент = &Контрагент
                      |
                      |СГРУППИРОВАТЬ ПО
                      |    НоменклатураКонтрагентов.Номенклатура,
                      |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры"+ТекстНал+"
                      |
                      |УПОРЯДОЧИТЬ ПО
                      |    Номенклатура" ;
       Запрос.УстановитьПараметр("Контрагент",Строка.Контрагент);
47 Boudybuilder
 
09.12.12
00:37
А без группировки ошибки нету

Запрос = Новый Запрос;
       МенеджерВТ = Новый МенеджерВременныхТаблиц;
       Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
       Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаКод+" КАК СТРОКА(250)) КАК Код,
       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаЦена+" КАК СТРОКА(25))КАК Цена"+ТекстНал+"
       |ПОМЕСТИТЬ ТабПрайс
       |ИЗ
       |    &ТабПрайс КАК ТабПрайс                                                    
       |ГДЕ
       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаКод+" КАК СТРОКА(250)) <> """"";
       Запрос.УстановитьПараметр("ТабПрайс",ТабПрайс);
       Запрос.Выполнить();                                                                                

       
       Запрос.Текст = "ВЫБРАТЬ
                      |    ТабПрайс.Цена КАК Цена,
                      |    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
                      |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры"+ТекстНал+"
                      |ИЗ
                      |    ТабПрайс КАК ТабПрайс
                      |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                      |        ПО ТабПрайс.Код = НоменклатураКонтрагентов.КодНоменклатурыКонтрагента
                      |ГДЕ
                      |    НоменклатураКонтрагентов.Контрагент = &Контрагент
                      |
                      |УПОРЯДОЧИТЬ ПО
                      |    Номенклатура" ;
       Запрос.УстановитьПараметр("Контрагент",Строка.Контрагент);
48 Boudybuilder
 
09.12.12
00:42
Группирую потому что в прайсах часто бывают дубли. А регистр не позволит записать док с дублями.
49 France
 
09.12.12
00:48
если сыр бор для исключения дублей - Выбрать Различные - не прет?
50 Boudybuilder
 
09.12.12
01:00
(49)

"ВЫБРАТЬ
                      |    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
                      |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
                      |    ВЗ.Цена"+ТекстНал+"
                      |ИЗ
                      |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                      |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      |            ТабПрайс.Код КАК Код,
                      |            МИНИМУМ(ТабПрайс.Цена) КАК Цена
                      |        ИЗ
                      |            ТабПрайс КАК ТабПрайс
                      |        
                      |        СГРУППИРОВАТЬ ПО
                      |            ТабПрайс.Код) КАК ВЗ
                      |        ПО НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = ВЗ.Код
                      |ГДЕ
                      |    НоменклатураКонтрагентов.Контрагент = &Контрагент
                      |
                      |УПОРЯДОЧИТЬ ПО
                      |    Номенклатура" ;


А так ;)???
51 Boudybuilder
 
09.12.12
01:01
(49) Модет , но в моем примере показывает минимальную цену в прайсе. Хотя,  цены там тоже дублируются, но так... на всякий случай... ;)
52 France
 
09.12.12
01:02
ну, да.. код вместо полногонаименования логично..
но все же "Различные" для того и придумали, чтобы дубли исключить) и, чем соединение будет быстрее..
53 Boudybuilder
 
09.12.12
01:06
Блин , смотрю если в прайсе цена такого формата 2'180.00
, то мне  в ТЧ дока после всего приходит 0 .
54 Boudybuilder
 
09.12.12
01:08
Сначала в ТЗ делал так к коду :

       //Заменим символы в коде
       Для Каждого Стр ИЗ ТабПрайс Цикл
           Стр[КолонкаКод] = СокрЛП(СтрЗаменить(Стр[КолонкаКод],Символы.НПП,""));
       КонецЦикла;


а в запросе к цене :

       |    ВЫРАЗИТЬ(ТабПрайс."+КолонкаЦена+" КАК СТРОКА(25))КАК Цена"+ТекстНал+"


может чтото пошаманить и з ценой в ТЗ ?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс