Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не срабатывает подсчет количества в запросе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
svetas_l
ЕСТЬ ФУНКЦИЯ -которая должна возвращать существующую характеристику или создавать новую, если текущая не найдена,
причем сам запрос в консоли запросов отрабатывает, но в функции не хочет. В результате функция создаёт к одной номенклатуре 16 характеристик одинаковых, а должна только одну.
В чем ошибка?

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

Запрос.УстановитьПараметр("Номенклатура_", СокрЛП(Строка(Номенклатура)));
Запрос.УстановитьПараметр("Цвет_", СокрЛП(Строка(Цвет)));

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДокументов = РезультатЗапроса.Выбрать();

    Пока ВыборкаДокументов.Следующий() Цикл
       kol=kol+ (ВыборкаДокументов.Количество_Характеристик);
    КонецЦикла;




Если kol=0 Тогда
     Цвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(Строка(Цвет)));
    СоздадимХарактеристику = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
СоздадимХарактеристику.УстановитьНовыйКод();
СоздадимХарактеристику.Владелец =Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Строка(Номенклатура)));
СоздадимХарактеристику.УстановитьСсылкуНового(Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор));
  СоздадимХарактеристику.Наименование =  Цвет;
СоздадимХарактеристику.НаименованиеПолное=  Цвет;

    НовоеСвойство3=СоздадимХарактеристику.ДополнительныеРеквизиты.Добавить();
    НовоеСвойство3.Свойство=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(Строка("Цвет (Мотоциклы (Для характеристик))"));
    НовоеСвойство3.Значение= СокрЛП(Строка(Цвет));
НовоеСвойство3.ТекстоваяСтрока= СокрЛП(Строка(Цвет));

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

    
ИначеЕсли kol>0 тогда
Запрос.УстановитьПараметр("Номенклатура_", СокрЛП(Строка(Номенклатура)));
Запрос.УстановитьПараметр("Цвет_", СокрЛП(Строка(Цвет)));


    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДокументов = РезультатЗапроса.Выбрать();

    Пока ВыборкаДокументов.Следующий() Цикл
       Характеристика = ВыборкаДокументов.Характеристика;
    КонецЦикла;


kol=0;
Возврат  Характеристика;

КонецЕсли;

КонецФункции
svetas_l
svetas_l @ Вчера, 20:13 необходимо зарегистрироваться для просмотра ссылки ,
Vofka а ещё раз помочь можете, пожалуйста.....
pablo
В условии ДополнительныеРеквизитыИСведения.Наименование = ""Цвет (Мотоциклы (Для характеристик))"" используйте вместо равно Подобно с соответствующими литералами, поскольку длина этого поля явно больше, чем количество переданных Вами символов.

+ если у вас есть ссылки на справочник, почему Вы сравниваете не их, а строки из наименования?
svetas_l


svetas_l @ Сегодня, 23:01 необходимо зарегистрироваться для просмотра ссылки ,
помогите, пожалуйста...

svetas_l @ Сегодня, 23:03 необходимо зарегистрироваться для просмотра ссылки ,
Vofka а ещё раз помочь можете, пожалуйста.....
alex1c
svetas_l @ 15.03.20, 20:13 необходимо зарегистрироваться для просмотра ссылки ,

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

Уважаемый, внимательно проверьте все типы значений, похоже что у вас это первая обработка...
svetas_l
svetas_l @ Вчера, 21:12 необходимо зарегистрироваться для просмотра ссылки ,
все всем спасибо... дело было в типе значения характеристики icon_beer17.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.