Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:06

НЕ СРАБАТЫВАЕТ ПОДСЧЕТ КОЛИЧЕСТВА В ЗАПРОСЕ

Автор Св Ч, 15 мар 2020, 21:15

0 Пользователей и 1 гость просматривают эту тему.

Св Ч

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

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

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

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

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




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

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

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

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


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

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

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


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

КонецЕсли;

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

antoneus

ХарактеристикиНоменклатуры.Значение какой тип имеет?

Св Ч

[/URL] upload image[/img]
Добавлено: 20 мар 2020, 00:00



Добавлено: 20 мар 2020, 00:02


помогите, пожалуйста...

antoneus

Это немного не то. В данном конкретном случае какой тип имеет характеристика "Цвет"? В консоли запросов, где все работает вы в параметре вводите строку или выбираете из какого-то справочника? Если строку - то вот так работает?

Запрос.Текст =
"ВЫБРАТЬ
| ХарактеристикиНоменклатуры.Ссылка КАК Количество_Характеристик
|ИЗ
| Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатуры
|ГДЕ
| ХарактеристикиНоменклатуры.Значение = &Цвет_
| И ХарактеристикиНоменклатуры.Ссылка.Владелец = &Номенклатура_
| И ХарактеристикиНоменклатуры.Свойство = &Свойство";

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

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() = 0 Тогда
//создаем характеристику
        Иначе
            Выборка.Следующий();
            Возврат Выборка.Ссылка
        КонецЕсли;

Св Ч

без изменений...:lol:помогите,кто-нибудь...пожалуйста

antoneus

Ну хорошо, а так?

Запрос.Текст =
    "ВЫБРАТЬ
    |    ХарактеристикиНоменклатуры.Ссылка КАК Количество_Характеристик
    |ИЗ
    |    Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ХарактеристикиНоменклатуры
    |ГДЕ
    |    ХарактеристикиНоменклатуры.Значение.Наименование = &Цвет_
    |    И ХарактеристикиНоменклатуры.Ссылка.Владелец = &Номенклатура_
    |    И ХарактеристикиНоменклатуры.Свойство = &Свойство";

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск