Имя: Пароль:
1C
1С v8
Сравнение в запросе.
0 Boudybuilder
 
16.10.12
22:58
Гуглил , думал , но уже нервов не хватает самому это рвать! К тому же не могу отладчиком посмотреть , так как это внешняя обработка заполнения табличной части.

Братиши , выручайте.

Создаю предварительную таблицу :

   ТаблицаПредварительная = Новый ТаблицаЗначений;
   ТаблицаПредварительная.Колонки.Добавить("Код",Новый ОписаниеТипов("Строка"), "Код", 15);


Потом заполняю ее:

   Для каждого ТекСтрокаЗагрузки Из ТаблицаЗагрузки Цикл
       НовСтрока = ТаблицаПредварительная.Добавить();
       Для каждого ТС Из СоответствиеКолонок Цикл
           Если ЗначениеЗаполнено(ТС.КолонкаСоответствия) Тогда
               Значение = Вычислить("ТекСтрокаЗагрузки."+ТС.КолонкаСоответствия);
               Если ТаблицаПредварительная.Колонки.Найти(ТС.Колонка+"Контрагента") <> Неопределено Тогда
                   НовСтрока[ТС.Колонка+"Контрагента"] = Значение;
               Иначе
                   НовСтрока[ТС.Колонка] = Значение;                
               КонецЕсли;                
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;



Колонку Код очищаю от лишних знаков


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

И преливаю ее в табличное поле:

ТаблВыставленияСоответствия = ТаблицаПредварительная.Скопировать();


А дальше ищу соответствия из регистра


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


И тут проблема:


Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ПО НоменклатураКонтрагентов.КодНоменклатурыКонтрагента <<?>>= ТЗ.Код



Если ставить "ПОДОБНО" , то работает.   Но при таком методе сравнения запрос отрабатывается на порядок медленнее чем "=".
Где что не так?
1 XLife
 
16.10.12
23:00
выразить?
2 Шифровальщик2012
 
16.10.12
23:02
Выразить(НоменклатураКонтрагентов.КодНоменклатурыКонтрагента КАК СТРОКА(20))
3 Лефмихалыч
 
16.10.12
23:13
(0) квалификатор строки добавь в описание типа, будь мужиком, блеать. Платформа русским же языком говорит "Нельзя сравнивать поля неограниченной длины"
4 Boudybuilder
 
16.10.12
23:23
ТаблицаПредварительная.Колонки.Добавить("Код",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(25)), "Код", 25);





Так?


Работает! ;)
Ура!!! Спасибо , Братиши!!!

Лев Михайлович, отдельное спасибо!