1С8. ВЫРАЗИТЬ( ... КАК СТРОКА(1000)) для избежания ошибки.

Язык 1С 8 не строго типизированым как например С и C#.
для сравнения двух величин они должны быть одного типа.
Функция ВЫРАЗИТЬ( КАК) служит для приведения значения к заданному типу.
Пример синтаксиса в запросе:
ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1000)) КАК стрПредставление
В запросах 1С 8 нельзя сравнивать поля неограниченной длины или поля несовместимых типов.

Пример запроса к регистру сведений. Пример очищает записи с неверными адресами E-mail в регисте сведений.

Поле КонтактнаяИнформация.Представление - строка неограниченной длины. При попытке сравнить ее в запросе с пустой строкой возникает Неприятная ошибка при выполнении запроса:

Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов.

Используем функцию ВЫРАЗИТЬ( ... КАК СТРОКА(1000)) ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1000)) <> """"

или через параметр

ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1000)) <> &ПустоеЗначение

//-----------------------------------------------------------------------------
// Исправляем значения Контактной Информации контрагента в Регистре сведений
Функция ОчиститьEmail(
	Контрагент, 
	ТипКонтактнойИнформации,
	ВидКонтактнойИнформации,
	Представление 
	)
		
	НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
	
	НаборЗаписей.Отбор.Объект.Установить(Контрагент);
	НаборЗаписей.Отбор.Тип.Установить(ТипКонтактнойИнформации);
	НаборЗаписей.Отбор.Вид.Установить(ВидКонтактнойИнформации);	
	НаборЗаписей.Прочитать();
	
	Для каждого СтрНабЗап Из НаборЗаписей Цикл
		
		СтрНабЗап.Представление	= ""; 		
		сообщить("" + Контрагент + " | " 
		+ ТипКонтактнойИнформации + " | " 
		+ ВидКонтактнойИнформации + " | " 
		+ Представление + " -> " + СтрНабЗап.Представление + " [Ok!]");
	КонецЦикла;

	//НабЗап.Отбор.Пользователь.Установить(Объект.Ссылка);
	НаборЗаписей.Записать();	
	
КонецФункции

// Получить таблицу значений
// Записи из Регистра Сведений КонтактнаяИнформация с некорректными Email
функция ПолучитьТЗ()		
		
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1000000
	|	КонтактнаяИнформация.Объект,
	|	КонтактнаяИнформация.Тип,
	|	КонтактнаяИнформация.Вид,
	|	КонтактнаяИнформация.Представление,
	|	(ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1000))) как стрПредставление
	|ИЗ
	|	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
	|ГДЕ
	|	КонтактнаяИнформация.Тип = &Тип
	|	//И КонтактнаяИнформация.Вид = &Вид	
	|	И (ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(1000))) <> &ПустоеЗначение		
	|	И НЕ КонтактнаяИнформация.Представление ПОДОБНО &ШаблонEmail";
	
	//Параметры запроса:	
	
	// Типы контактной информации
	Запрос.УстановитьПараметр("Тип",Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
		
	// не проходит
	Запрос.УстановитьПараметр("ПустоеЗначение","");// Строка
	
	// критерий отбора для примера простой - строка содержит символ "@" - значит это почта
	Запрос.УстановитьПараметр("ШаблонEmail","%@%");// Строка
	Результат = Запрос.Выполнить();	
	
	//Выборка = Результат.Выбрать();
	
	// результат запроса выгрузить в
	// таблицу значений 
	ПлохиеEmailТЗ   = Результат.Выгрузить();
	
	Возврат ПлохиеEmailТЗ;
КонецФункции

// На входе - таблица значений с некорректными адресами электронной почты
Функция СтеретьПлохиеEmail(ПлохиеEmailТЗ)  
	для каждого строкаТЗ  из ПлохиеEmailТЗ Цикл
		
		ОчиститьEmail(
			строкаТЗ["Объект"],	
			строкаТЗ["Тип"],	
			строкаТЗ["Вид"],
			строкаТЗ["Представление"]
		);	
		
	КонецЦикла;

	Возврат 0;

КонецФункции //ПолучитьРезультатЗапроса_ЗаписисневернымадресомEMail

// Логика
Функция main()
	ПлохиеEmailТЗ = ПолучитьТЗ(); 		// найти 	
	СтеретьПлохиеEmail(ПлохиеEmailТЗ); 	// изменить	
КонецФункции

main();

Ошибка: Нельзя сравнивать поля  неограниченной длины и поля несовместимых типов.




Рекламный блок:

Предлагаем решение Ваших задач 1С.

Внедрение 1С:

Доработка и сопровождение 1С:

Ориентировочная стоимость работ программиста 1С : 500 р. за 1 час работы.

Пишите: j008@j008.ru

Звоните: 8 916 710 83 51 Ольга