Версия для печати темы (https://pro1c.org.ua/index.php?s=b0fe068201afcbfcf3a243d5b898fad1&showtopic=57707)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Не срабатывает подсчет количества в запросе

Автор: svetas_l 15.03.20, 20:13

ЕСТЬ ФУНКЦИЯ -которая должна возвращать существующую характеристику или создавать новую, если текущая не найдена,
причем сам запрос в консоли запросов отрабатывает, но в функции не хочет. В результате функция создаёт к одной номенклатуре 16 характеристик одинаковых, а должна только одну.
В чем ошибка?

Код

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

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

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

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

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




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

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

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

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


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

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

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


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

КонецЕсли;

КонецФункции

Автор: svetas_l 16.03.20, 11:09

svetas_l @ Вчера, 20:13 * ,
Vofka а ещё раз помочь можете, пожалуйста.....

Автор: pablo 16.03.20, 13:24

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

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

Автор: svetas_l 19.03.20, 23:05



svetas_l @ Сегодня, 23:01 * ,
помогите, пожалуйста...

svetas_l @ Сегодня, 23:03 * ,
Vofka а ещё раз помочь можете, пожалуйста.....

Автор: alex1c 20.03.20, 19:44

svetas_l @ 15.03.20, 20:13 * ,

Пробуйте так:

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

Автор: svetas_l 21.03.20, 21:12

alex1c @ Вчера, 19:44 * ,
так же- без изменений...помогите,кто-нибудь...пожалуйста

Автор: alex1c 22.03.20, 10:07

Цитата(svetas_l @ 21.03.20, 21:12) *
так же- без изменений...помогите,кто-нибудь...пожалуйста

Уважаемый, внимательно проверьте все типы значений, похоже что у вас это первая обработка...

Автор: svetas_l 22.03.20, 11:45

svetas_l @ Вчера, 21:12 * ,
все всем спасибо... дело было в типе значения характеристики icon_beer17.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua