День добрий всім. Я новичок в 1с . В мене стоїть 1с 8.2 конфігурація альфа авто 4.1. При добавлянні характеристик товару вискакує помилка
{Обработка.ЗначенияСвойствОбъекта(226)}: Помилка при виклику методу контексту (Выполнить)
ВремТЗ = Запрос.Выполнить().Выгрузить();
через:
через:
{(12, 34)}: Неправильні параметри в операції порівняння. Не можна порівнювати поля
необмеженої довжини і поля несумісних типів.
ЗначенияСвойствОбъектов.Объект <<?>>= &ОбъектОтбора) КАК РегистрЗначения
Допоможіть хто зможе
предоставьте пожалуйста текст запроса полностью
Что устанавливается в значение "&ОбъектОтбора"?
Лучше предоставте весь текст процедуры, в которой есть этот запрос.
К Отладчику с такими вопросами!
Поставьте точку останова там, где устанавливается параметр и посмотрите значение.
Затем в режиме Предприятия попробуйте добавить Свойство аналогичному объекту.
х
Викладаю весь текст процедури
#Если Клиент Тогда
////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТИРУЕМЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
// Проверяет корректность заполнения объекта.
// Обычно выполняется универсальным обработчиком, но могут быть добавлены доп. проверки
//
// Параметры:
// Ошибки - строка, в случае некорректного заполнения содержит описанием возникших ошибок,
//
// Возвращаемое значение:
// Булево - Возвращает Истина если все заполнено корректно и Ложь иначе.
//
Функция ПроверитьКорректность(Ошибки="") Экспорт
// Здесь могут быть определены дополнительные условия проверки
Результат = орПроверитьКорректностьСвойств(ЭтотОбъект, Ошибки);
Возврат Результат;
КонецФункции // ПроверитьКорректность()
// Процедура вызывает форму назначений свойств
Процедура РедактироватьНазначенияСвойств() Экспорт
ФормаНазначения = НазначениеСвойств.ПолучитьФорму();
ФормаНазначения.ОткрытьМодально();
ВремТЗ = НазначениеСвойств.ВидыСвойств.Выгрузить();
ВремТЗ.Колонки.Добавить("Значение",,,);
СвойстваИЗначения.Загрузить(ВремТЗ);
КонецПроцедуры
// Находит соответствующий предопределенный элемент ПВХ "Назначения свойств"
// по заполненному "ОбъектОтбораЗначений"
// Возвращает истину. если сумела найти назначение, ложь иначе
Функция ПолучитьПредопределенноеНазначение() Экспорт
Если ОбъектОтбораЗначений=Неопределено Тогда Возврат Ложь; КонецЕсли;
ТипЗначения = ТипЗнч(ОбъектОтбораЗначений);
Мет = ОбъектОтбораЗначений.Метаданные();
// Обрабатываем три вида назначений в зависимости от типа объекта
// 1 - Характеристики номенклатуры по типу номенклатуры и предопределенному назначению
// 2 - Справочники по иерархии и предопределенным назначениям
// 3 - Документы только по предопределенным назначениям
Если ТипЗначения=Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Или
ТипЗначения=Тип("СправочникОбъект.ХарактеристикиНоменклатуры") Тогда
ИмяНазначения = "ХарактеристикиНоменклатуры";
НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствОбъектов[ИмяНазначения];
ИначеЕсли Найти(ТипЗначения,"Справочник")<>0 Тогда
// Ежели не найдено, по иерархии, будем искать предопределенный
Если НазначениеСвойств.Пустая() Тогда
//Исключение ПрочиеАктивы - по типам номенклатуры!!!
Если ТипЗначения = Тип("СправочникСсылка.ПрочиеАктивы") Тогда
НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствОбъектов.НайтиПоРеквизиту("Объект", ОбъектОтбораЗначений.ТипНоменклатуры);
Иначе
ИмяНазначения = "Справочник_"+Мет.Имя;
Попытка
НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствОбъектов[ИмяНазначения];
Исключение
КонецПопытки;
КонецЕсли;
КонецЕсли;
ИначеЕсли Найти(ТипЗначения,"Документ")<>0 Тогда
ИмяНазначения = "Документ_"+Мет.Имя;
Попытка
НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствОбъектов[ИмяНазначения];
Исключение
КонецПопытки;
Иначе Возврат Ложь;
КонецЕсли;
КонецФункции
//функция, получает назначение свойств непосредственно для объекта
Функция ПолучитьНазначениеСвойств(пНазначениеСвойств = Неопределено) Экспорт
Если пНазначениеСвойств = Неопределено Тогда
ПолучитьПредопределенноеНазначение();
Иначе
НазначениеСвойств = пНазначениеСвойств;
КонецЕсли;
Если обЗначениеНеЗаполнено(НазначениеСвойств) Тогда Возврат Неопределено; КонецЕсли;
// Определяем объект, для которого может быть создано назначение, соответствующий объекту отбора
Если НазначениеСвойств=ПланыВидовХарактеристик.НазначенияСвойствОбъектов.Характеристи
киНоменклатуры Тогда
ОбъектНазначения = ОбъектОтбораЗначений.Владелец;
Если ТипЗнч(ОбъектНазначения)=Тип("СправочникСсылка.Номенклатура") Тогда
ОбъектНазначения = ОбъектНазначения.ТипНоменклатуры;
КонецЕсли;
Иначе
ОбъектНазначения = ОбъектОтбораЗначений;
КонецЕсли;
Если Найти(ТипЗнч(ОбъектНазначения),"объект") > 0 Тогда
ОбъектНазначения = Справочники[ОбъектНазначения.Метаданные().Имя].ПустаяСсылка();
КонецЕсли;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| НазначенияСвойствОбъектов.Ссылка
|ИЗ
| ПланВидовХарактеристик.НазначенияСвойствОбъектов КАК НазначенияСвойствОбъектов
|ГДЕ
| НазначенияСвойствОбъектов.БазовоеНазначение = &НазначениеСвойств
| И НазначенияСвойствОбъектов.Объект = &ОбъектНазначения");
Запрос.УстановитьПараметр("НазначениеСвойств",НазначениеСвойств);
Запрос.УстановитьПараметр("ОбъектНазначения",ОбъектНазначения);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка
Иначе
Возврат НазначениеСвойств;
КонецЕсли;
КонецФункции
// Процедура заполняет табличную часть обработки свойствами и значениями свойств объекта.
// При заполнении используются значения реквизитов обработки:
// ОбъектОтбораЗначений - объект, значения свойств которого отбираются.
// НазначениеСвойств - значение ПВХ НазначенияСвойств, по которому отбораются свойства.
Процедура ПрочитатьЗаполнитьСвойстваИЗначения() Экспорт
// Сначала определим объект назначения свойств и получим набор записей значений свойств
СвойстваИЗначения.Очистить();
ПолучитьПредопределенноеНазначение();
Если обЗначениеНеЗаполнено(НазначениеСвойств) Тогда Возврат; КонецЕсли;
Если обЗначениеНеЗаполнено(ОбъектОтбораЗначений) Тогда
//значит нужны только виды свойтсв базового назначения
СвойстваИЗначения.Загрузить(НазначениеСвойств.ВидыСвойств.Выгрузить());
Возврат;
КонецЕсли;
// Определяем объект, для которого может быть создано назначение, соответствующий объекту отбора
Если НазначениеСвойств=ПланыВидовХарактеристик.НазначенияСвойствОбъектов.Характеристи
киНоменклатуры
И НЕ ОбъектОтбораЗначений.ЭтоГруппа Тогда
ОбъектНазначения = ОбъектОтбораЗначений.Владелец;
Если ТипЗнч(ОбъектНазначения)=Тип("СправочникСсылка.Номенклатура") Тогда
ОбъектНазначения = ОбъектНазначения.ТипНоменклатуры;
КонецЕсли;
Иначе
ОбъектНазначения = ОбъектОтбораЗначений;
КонецЕсли;
ОбъектОтбора = ОбъектОтбораЗначений;
// Если объект отбора - СправочникОбъект, то создаем пустую ссылку
Если Найти(ТипЗнч(ОбъектОтбораЗначений),"объект") > 0 Тогда
ОбъектОтбора = Справочники[ОбъектОтбораЗначений.Метаданные().Имя].ПустаяСсылка();
КонецЕсли;
Если Найти(ТипЗнч(ОбъектНазначения),"объект") > 0 Тогда
ОбъектНазначения = Справочники[ОбъектНазначения.Метаданные().Имя].ПустаяСсылка();
КонецЕсли;
// Часть запроса для предопределенного назначения и для объекта назначения
Текст = "ВЫБРАТЬ
| НазначенияСвойствОбъектовВидыСвойств.Свойство,
| &ПоследнийУровень КАК УровеньИерархии,
| НазначенияСвойствОбъектовВидыСвойств.НомерСтроки
|ИЗ
| ПланВидовХарактеристик.НазначенияСвойствОбъектов.ВидыСвойств КАК НазначенияСвойствОбъектовВидыСвойств
|ГДЕ
| НазначенияСвойствОбъектовВидыСвойств.Ссылка = &ПредопределенноеНазначение
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| НазначенияСвойствОбъектовВидыСвойств.Свойство,
| 0,
| НазначенияСвойствОбъектовВидыСвойств.НомерСтроки
|ИЗ
| ПланВидовХарактеристик.НазначенияСвойствОбъектов.ВидыСвойств КАК НазначенияСвойствОбъектовВидыСвойств
|ГДЕ
| НазначенияСвойствОбъектовВидыСвойств.Ссылка.Объект = &ОбъектНазначения";
Запрос = Новый Запрос;
ПоследнийУровень = 1;
// Выполняем рекурсивное построение части запроса для получения видов свойств по иерархии, для справочников и характеристик
ТипЗначения = ТипЗнч(ОбъектОтбора);
Если Найти(ТипЗначения,"Документ")=0 Тогда
ПоследнийУровень = ПолучитьЗапрос(Запрос, Текст, ОбъектНазначения, 1);
КонецЕсли;
// Группируем по видам свойств для получения строк с наивысшим уровнем иерархии и объединяем с исходной для получения номера строки
Текст = "ВЫБРАТЬ
| ВидыСвойствСгруппированные.Свойство,
| ВидыСвойствСгруппированные.УровеньИерархии,
| ВидыСвойств.НомерСтроки
|ИЗ
| (ВЫБРАТЬ
| ВидыСвойств.Свойство,
| МАКСИМУМ(ВидыСвойств.УровеньИерархии) КАК УровеньИерархии
| ИЗ
| ("+Текст+") КАК ВидыСвойств
|
| СГРУППИРОВАТЬ ПО
| ВидыСвойств.Свойство) КАК ВидыСвойствСгруппированные
| СОЕДИНЕНИЕ ("+Текст+") КАК ВидыСвойств
| ПО ВидыСвойств.Свойство = ВидыСвойствСгруппированные.Свойство
| И ВидыСвойств.УровеньИерархии = ВидыСвойствСгруппированные.УровеньИерархии ";
//Объединяем полученные виды свойств с записями регистра значений, отфильтрованными по объекту отбора
Запрос.Текст = "ВЫБРАТЬ
| РегистрЗначения.СвойствоИзРегистра КАК СвойствоИзРегистра,
| РегистрЗначения.Значение,
| ВидыСвойств.Свойство
|ИЗ
| (ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Свойство КАК СвойствоИзРегистра,
| ЗначенияСвойствОбъектов.Значение
| ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| ГДЕ
| ЗначенияСвойствОбъектов.Объект = &ОбъектОтбора) КАК РегистрЗначения
| ПОЛНОЕ СОЕДИНЕНИЕ ("+Текст+") КАК ВидыСвойств
| ПО ВидыСвойств.Свойство = РегистрЗначения.СвойствоИзРегистра
|
|УПОРЯДОЧИТЬ ПО
| ВидыСвойств.УровеньИерархии УБЫВ,
| ВидыСвойств.НомерСтроки";
Запрос.УстановитьПараметр("ПредопределенноеНазначение",НазначениеСвойств);
Запрос.УстановитьПараметр("ОбъектОтбора",ОбъектОтбора);
Запрос.УстановитьПараметр("ОбъектНазначения",ОбъектНазначения);
Запрос.УстановитьПараметр("ПоследнийУровень",ПоследнийУровень);
ВремТЗ = Запрос.Выполнить().Выгрузить();
ВремТЗ.Колонки.Добавить("Активность");
// Определим "Активность" записи и приведем типы значений свойств к требуемым типам
Для Каждого ТекСтрока Из ВремТЗ Цикл
ТекСтрока.Активность = НЕ обЗначениеНеЗаполнено(ТекСтрока.Свойство);
Если НЕ ТекСтрока.Активность Тогда
//Сообщить("Найдена несоответствующая запись свойства "+СтрокаТЗ.СвойствоИзРегистра+": "+СтрокаТЗ.Значение);
//ВремТЗ.Удалить(СтрокаТЗ);
ТекСтрока.Свойство = ТекСтрока.СвойствоИзРегистра;
ИначеЕсли обЗначениеНеЗаполнено(ТекСтрока.Значение) Тогда
ПривестиТипЗначенияСвойства(ТекСтрока);
КонецЕсли;
КонецЦикла;
орЗаполнитьСвойстваИЗначения(ОбъектОтбора,ВремТЗ);
СвойстваИЗначения.Загрузить(ВремТЗ);
КонецПроцедуры
// Заполняет параметры свойств объекта и открывает форму редактирования
Процедура ОткрытьФормуСвойств(Объект) Экспорт
// проверим могут ли быть свойства у данного объекта
Если НЕ Метаданные.ПланыВидовХарактеристик.НазначенияСвойствОбъектов.Тип.СодержитТип(Тип
Знч(Объект)) Тогда
Предупреждение("Для данного вида объекта доп. свойства не назначаются!",10); Возврат;
КонецЕсли;
ОбъектОтбораЗначений = Объект;
ПрочитатьЗаполнитьСвойстваИЗначения();
Если СвойстваИЗначения.Количество()=0 Тогда
ТекстВопроса = "Для данного объекта не задано ни одного свойства.
|Добавить новое свойство?";
Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да);
Если Ответ = КодВозвратаДиалога.Да Тогда
РедактироватьНазначенияСвойств();
Если СвойстваИЗначения.Количество()=0 Тогда
Возврат
КонецЕсли;
Иначе
Возврат
КонецЕсли;
КонецЕсли;
ПолучитьФорму("ЗначенияСвойствОбъекта").Открыть();
КонецПроцедуры
// Процедура приводит тип значения значения свойства к требуемому типу.
// Предназначена для вызова из обработчиков форм
// СвойстваИЗначенияПриНачалеРедактирования, СвойстваИЗначенияЗначениеОчистка.
//
// Параметры:
// Нет.
//
Процедура ПривестиТипЗначенияСвойства(ТекущаяСтрока) Экспорт
ТекущаяСтрока.Значение = ТекущаяСтрока.Свойство.ТипЗначения.ПривестиЗначение(ТекущаяСтрока.Значение);
КонецПроцедуры
// Функция записывает значения свойств в информационную базу.
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// Истина - если значения свойств были записаны, или их не требуется записывать
// Ложь - если значения свойств не удалось записать.
//
Функция ЗаписатьВсеЗначенияСвойств() Экспорт
//проверим корректность
СтрОшибок="";
Если НЕ ПроверитьКорректность(СтрОшибок) Тогда
Предупреждение("При проверке обнаружены следующие ошибки: " + СтрОшибок);
Возврат Ложь;
КонецЕсли;
// Создадим и заполним набор записей
НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(ОбъектОтбораЗначений);
Для Каждого Строка Из СвойстваИЗначения Цикл
Если НЕ обЗначениеНеЗаполнено(Строка.Значение) Тогда
Запись = НаборЗаписейЗначенияСвойств.Добавить();
Запись.Объект = ОбъектОтбораЗначений;
Запись.Свойство = Строка.Свойство;
Запись.Значение = Строка.Значение;
КонецЕсли;
КонецЦикла;
// Перепишем существующие записи по отбору
Попытка
НаборЗаписейЗначенияСвойств.Записать();
Исключение
Предупреждение("Не удалось записать значения свойств:" + Символы.ПС + ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
// Рекурсивная функция формирования текста запроса для выбора видов свойств по иерархии
Функция ПолучитьЗапрос (Запрос, ТекстЗапроса, Объект, Глубина)
Если Не обЗначениеНеЗаполнено(Объект) И Не обЗначениеНеЗаполнено(Объект.Родитель) Тогда
Результат=ПолучитьЗапрос(Запрос, ТекстЗапроса, Объект.Родитель, Глубина+1);
ТекстЗапроса = ТекстЗапроса + "
| ОБЪЕДИНИТЬ
| ВЫБРАТЬ
| НазначенияСвойствОбъектовВидыСвойств.Свойство,
| &Уровень"+Глубина+" КАК УровеньИерархии,
| НазначенияСвойствОбъектовВидыСвойств.НомерСтроки
| ИЗ
| ПланВидовХарактеристик.НазначенияСвойствОбъектов.ВидыСвойств КАК НазначенияСвойствОбъектовВидыСвойств
| ГДЕ
| НазначенияСвойствОбъектовВидыСвойств.Ссылка.Объект = &Объект" + Глубина;
Запрос.УстановитьПараметр("Объект"+Глубина,Объект.Родитель);
Запрос.УстановитьПараметр("Уровень"+Глубина,Глубина);
Возврат Результат;
Иначе
Возврат Глубина;
КонецЕсли;
КонецФункции
#КонецЕсли
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua