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

Хранилище

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

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



> Не срабатывает подсчет количества в запросе          
svetas_l Подменю пользователя
сообщение 15.03.20, 20:13
Сообщение #1

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

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

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

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

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

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

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




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

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

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

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


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

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

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


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

КонецЕсли;

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


Сообщение отредактировал Vofka - 16.03.20, 9:29

svetas_l Подменю пользователя
сообщение 16.03.20, 11:09
Сообщение #2

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

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

pablo Подменю пользователя
сообщение 16.03.20, 13:24
Сообщение #3

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

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

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


Signature
Правильно поставленный вопрос содержит до 90% ответа.

svetas_l Подменю пользователя
сообщение 19.03.20, 23:05
Сообщение #4

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



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

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

alex1c Подменю пользователя
сообщение 20.03.20, 19:44
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

svetas_l @ 15.03.20, 20:13 * ,

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


Сообщение отредактировал alex1c - 20.03.20, 19:45

svetas_l Подменю пользователя
сообщение 21.03.20, 21:12
Сообщение #6

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

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

alex1c Подменю пользователя
сообщение 22.03.20, 10:07
Сообщение #7

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

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

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

svetas_l Подменю пользователя
сообщение 22.03.20, 11:45
Сообщение #8

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

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

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


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

 

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