Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Помогите исправить ошибку в запросе , альфа авто 4.1          
okotik Подменю пользователя
сообщение 03.11.11, 22:41
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0

День добрий всім. Я новичок в 1с . В мене стоїть 1с 8.2 конфігурація альфа авто 4.1. При добавлянні характеристик товару вискакує помилка
{Обработка.ЗначенияСвойствОбъекта(226)}: Помилка при виклику методу контексту (Выполнить)
ВремТЗ = Запрос.Выполнить().Выгрузить();
через:

через:
{(12, 34)}: Неправильні параметри в операції порівняння. Не можна порівнювати поля
необмеженої довжини і поля несумісних типів.
ЗначенияСвойствОбъектов.Объект <<?>>= &ОбъектОтбора) КАК РегистрЗначения

Допоможіть хто зможе

onsamuy Подменю пользователя
сообщение 03.11.11, 22:48
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 264
Спасибо сказали: 69 раз
Рейтинг: 0

предоставьте пожалуйста текст запроса полностью

vbi Подменю пользователя
сообщение 04.11.11, 9:32
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Что устанавливается в значение "&ОбъектОтбора"?
Лучше предоставте весь текст процедуры, в которой есть этот запрос.


Signature
Впроваджую, супроводжую

Zaval Подменю пользователя
сообщение 04.11.11, 9:53
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

К Отладчику с такими вопросами!
Поставьте точку останова там, где устанавливается параметр и посмотрите значение.
Затем в режиме Предприятия попробуйте добавить Свойство аналогичному объекту.

okotik Подменю пользователя
сообщение 04.11.11, 18:36
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0

х

Сообщение отредактировал mister-x - 04.11.11, 18:54
Причина редактирования: Logist Вам же ж вказав - правила п. 12! Ще раз стаємо на ті ж граблі...

okotik Подменю пользователя
сообщение 05.11.11, 14:49
Сообщение #6

Молчаливый
*
Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0

Викладаю весь текст процедури

#Если Клиент Тогда
////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТИРУЕМЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

// Проверяет корректность заполнения объекта.
// Обычно выполняется универсальным обработчиком, но могут быть добавлены доп. проверки
//
// Параметры:
//  Ошибки       - строка, в случае некорректного заполнения содержит описанием возникших ошибок,
//
// Возвращаемое значение:
//  Булево - Возвращает Истина если все заполнено корректно и Ложь иначе.
//
Функция ПроверитьКорректность(Ошибки="") Экспорт
    // Здесь могут быть определены дополнительные условия проверки
    Результат = орПроверитьКорректностьСвойств(ЭтотОбъект, Ошибки);
    Возврат Результат;
КонецФункции // ПроверитьКорректность()

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

// Находит соответствующий предопределенный элемент ПВХ "Назначения свойств"
// по заполненному "ОбъектОтбораЗначений"
// Возвращает истину. если сумела найти назначение, ложь иначе
Функция ПолучитьПредопределенноеНазначение() Экспорт
    Если ОбъектОтбораЗначений=Неопределено Тогда Возврат Ложь; КонецЕсли;
    ТипЗначения = ТипЗнч(ОбъектОтбораЗначений);
    Мет = ОбъектОтбораЗначений.Метаданные();

    // Обрабатываем три вида назначений в зависимости от типа объекта
    // 1 - Характеристики номенклатуры по типу номенклатуры и предопределенному назначению
    // 2 - Справочники по иерархии и предопределенным назначениям
    // 3 - Документы только по предопределенным назначениям
    Если ТипЗначения=Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Или
             ТипЗначения=Тип("СправочникОбъект.ХарактеристикиНоменклатуры") Тогда
        ИмяНазначения = "ХарактеристикиНоменклатуры";
        НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствОбъектов[ИмяНазначения];
        
    ИначеЕсли Найти(ТипЗначения,"Справочник")<>0 Тогда
        // Ежели не найдено, по иерархии, будем искать предопределенный
        Если НазначениеСвойств.Пустая() Тогда
            //Исключение ПрочиеАктивы - по типам номенклатуры!!!
            Если ТипЗначения = Тип("СправочникСсылка.ПрочиеАктивы") Тогда
                НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствОбъектов.НайтиПоРеквизиту("Объект", ОбъектОтбораЗначений.ТипНоменклатуры);
            Иначе
                ИмяНазначения = "Справочник_"+Мет.Имя;
                Попытка
                    НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствОбъектов[ИмяНазначения];
                Исключение
                КонецПопытки;
            КонецЕсли;
        КонецЕсли;
        
    ИначеЕсли Найти(ТипЗначения,"Документ")<>0 Тогда
        ИмяНазначения = "Документ_"+Мет.Имя;
        Попытка
            НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствОбъектов[ИмяНазначения];
        Исключение
        КонецПопытки;
    Иначе Возврат Ложь;
    КонецЕсли;
КонецФункции

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

// Процедура заполняет табличную часть обработки свойствами и значениями свойств объекта.
// При заполнении используются значения реквизитов обработки:
// ОбъектОтбораЗначений - объект, значения свойств которого отбираются.
// НазначениеСвойств - значение ПВХ НазначенияСвойств, по которому отбораются свойства.
Процедура ПрочитатьЗаполнитьСвойстваИЗначения() Экспорт
    // Сначала определим объект назначения свойств и получим набор записей значений свойств
    СвойстваИЗначения.Очистить();
    ПолучитьПредопределенноеНазначение();
    Если обЗначениеНеЗаполнено(НазначениеСвойств) Тогда    Возврат; КонецЕсли;
    
    Если обЗначениеНеЗаполнено(ОбъектОтбораЗначений) Тогда
        //значит нужны только виды свойтсв базового назначения
        СвойстваИЗначения.Загрузить(НазначениеСвойств.ВидыСвойств.Выгрузить());
        Возврат;
    КонецЕсли;
    
    // Определяем объект, для которого может быть создано назначение, соответствующий объекту отбора
    Если НазначениеСвойств=ПланыВидовХарактеристик.НазначенияСвойствОбъектов.Характеристи
киНоменклатуры
        И НЕ ОбъектОтбораЗначений.ЭтоГруппа Тогда
        
        ОбъектНазначения = ОбъектОтбораЗначений.Владелец;
        Если ТипЗнч(ОбъектНазначения)=Тип("СправочникСсылка.Номенклатура") Тогда
            ОбъектНазначения = ОбъектНазначения.ТипНоменклатуры;
        КонецЕсли;
    Иначе
        ОбъектНазначения = ОбъектОтбораЗначений;
    КонецЕсли;
    
    ОбъектОтбора = ОбъектОтбораЗначений;
    // Если  объект отбора - СправочникОбъект, то создаем пустую ссылку
    Если Найти(ТипЗнч(ОбъектОтбораЗначений),"объект") > 0 Тогда
        ОбъектОтбора = Справочники[ОбъектОтбораЗначений.Метаданные().Имя].ПустаяСсылка();
    КонецЕсли;
    
    Если Найти(ТипЗнч(ОбъектНазначения),"объект") > 0 Тогда
        ОбъектНазначения = Справочники[ОбъектНазначения.Метаданные().Имя].ПустаяСсылка();
    КонецЕсли;

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

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

// Заполняет параметры свойств объекта и открывает форму редактирования
Процедура ОткрытьФормуСвойств(Объект) Экспорт
    // проверим могут ли быть свойства у данного объекта
    Если НЕ Метаданные.ПланыВидовХарактеристик.НазначенияСвойствОбъектов.Тип.СодержитТип(Тип
Знч(Объект)) Тогда
        Предупреждение("Для данного вида объекта доп. свойства не назначаются!",10); Возврат;
    КонецЕсли;
    
    ОбъектОтбораЗначений = Объект;
    ПрочитатьЗаполнитьСвойстваИЗначения();
    
    Если СвойстваИЗначения.Количество()=0 Тогда
        ТекстВопроса = "Для данного объекта не задано ни одного свойства.
                 |Добавить новое свойство?";
        Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да);
        Если Ответ = КодВозвратаДиалога.Да Тогда

            РедактироватьНазначенияСвойств();
            
            Если СвойстваИЗначения.Количество()=0 Тогда
               Возврат
            КонецЕсли;
        Иначе    
            Возврат
        КонецЕсли;    
    
    КонецЕсли;    
    ПолучитьФорму("ЗначенияСвойствОбъекта").Открыть();
    
КонецПроцедуры

// Процедура приводит тип значения значения свойства к требуемому типу.
// Предназначена для вызова из обработчиков форм
// СвойстваИЗначенияПриНачалеРедактирования, СвойстваИЗначенияЗначениеОчистка.
//
// Параметры:
//  Нет.
//
Процедура ПривестиТипЗначенияСвойства(ТекущаяСтрока) Экспорт
    ТекущаяСтрока.Значение = ТекущаяСтрока.Свойство.ТипЗначения.ПривестиЗначение(ТекущаяСтрока.Значение);
КонецПроцедуры

// Функция записывает значения свойств в информационную базу.
//
// Параметры:
//  Нет.
//
// Возвращаемое значение:
//  Истина - если значения свойств были записаны, или их не требуется записывать
//  Ложь   - если значения свойств не удалось записать.
//
Функция ЗаписатьВсеЗначенияСвойств() Экспорт
    
    //проверим корректность
    СтрОшибок="";
    Если НЕ ПроверитьКорректность(СтрОшибок) Тогда
        Предупреждение("При проверке обнаружены следующие ошибки: " + СтрОшибок);        
         Возврат Ложь;
    КонецЕсли;
    
    // Создадим и заполним набор записей
    НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(ОбъектОтбораЗначений);

    Для Каждого Строка Из СвойстваИЗначения Цикл
        Если НЕ обЗначениеНеЗаполнено(Строка.Значение) Тогда
            Запись = НаборЗаписейЗначенияСвойств.Добавить();
            Запись.Объект   = ОбъектОтбораЗначений;
            Запись.Свойство = Строка.Свойство;
            Запись.Значение = Строка.Значение;
        КонецЕсли;
    КонецЦикла;

    // Перепишем существующие записи по отбору
    Попытка
        НаборЗаписейЗначенияСвойств.Записать();
    Исключение
        Предупреждение("Не удалось записать значения свойств:" + Символы.ПС + ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;

    Возврат Истина;
КонецФункции

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ

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


#КонецЕсли
Причина редактирования: [code]

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.04.24, 12:45
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!