Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

УТ 10.3 Заполнить свойства номенклатуры программно

УТ 10.3 Заполнить свойства номенклатуры программно
Я
   sasha-asn
 
27.01.20 - 15:58
Здравствуйте уважаемые эксперты, не могу понять почему не срабатывает обработка которую я написал. Подскажите пожалуйста!

Я написал запрос, в консоли запросов он выводит те поля с которыми я работаю. Теперь я хочу в обработке их Сообщить(); и далее заполнить каждое свойство номенклатуры по принципу ЗначенияСвойствОбъектов.Значение = Номенклатура.Код

ВОПРОС №1: Почему у меня не выводится каждая позиция с 4 полями через Сообщить() ?
ВОПРОС №2: Если не выводить сообщением 4 поля, как задать для номенклатуры обработкой результата ЗначенияСвойствОбъектов.Значение = Номенклатура.Код ?
   sasha-asn
 
1 - 27.01.20 - 15:58
// Запросом получаю 4 поля таблицы:  НазваниеНоменклатура, КодНоменклатуры, НазваниеСвойства, ЗначениеСвойства

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

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка);
    КонецЦикла;
   sasha-asn
 
2 - 27.01.20 - 16:02
запрос выводит данные, а обработка нет... Почему так?

https://dropmefiles.com/UaudC
   SeriyP
 
3 - 27.01.20 - 16:08
Сообщить(Выборка.Код + Выборка.Ссылка+ Выборка.Свойство+Выборка.Значение)
Не плохо бы добавить соединение по ЗначенияСвойствОбъектов.Объект = Номенклатура.Ссылка
   sasha-asn
 
4 - 27.01.20 - 16:17
(3) почему то не срабатывает обработка
    // Запросом получаю 4 поля таблицы:  НазваниеНоменклатура, КодНоменклатуры, НазваниеСвойства, ЗначениеСвойства

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

    Выборка = Запрос.Выполнить().Выбрать();
    
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Код + Выборка.Ссылка+ Выборка.Свойство+Выборка.Значение);
КонецЦикла;
   runoff_runoff
 
5 - 27.01.20 - 16:20
а где "левое соединение"?
   Масянька
 
6 - 27.01.20 - 16:25
ТекЗапись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
            
            ТекЗапись.Объект     = Номенклатура;
            ТекЗапись.Свойство     = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(Элемент.Представление);
            ТекЗапись.Значение  = Элемент.Значение;
            
            Попытка
                ТекЗапись.Записать();
            Исключение
            КонецПопытки;
   sasha-asn
 
7 - 27.01.20 - 16:26
(5) что с чем соединять?
   hhhh
 
8 - 27.01.20 - 16:28
(7) вот за такую хрень

  |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура,
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов

надо расстреливать из крупнокалиберного пулемета
   Said_We
 
9 - 27.01.20 - 16:29
(7)
ВЫБРАТЬ
    |    Номенклатура.Ссылка,
    |    Номенклатура.Код,
    |    ЗначенияСвойствОбъектов.Свойство,
    |    ЗначенияСвойствОбъектов.Значение
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура,
    |    левое соединение РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство = &Свойство"
   Said_We
 
10 - 27.01.20 - 16:29
И то это тоже не правильно.
   sasha-asn
 
11 - 27.01.20 - 16:30
(8) что в этом плохого?
   Said_We
 
12 - 27.01.20 - 16:30
В общем случае так тоже писать нельзя. Перед тем как соединять, на все таблицы уже должны быть наложены все фильтры, которые используются.
   Said_We
 
13 - 27.01.20 - 16:31
(11) В данном случае примерно ВСЁ. И это абсолютно точное определение, а не не образно всё плохо. Реально плохо всё.
   UserTizer
 
14 - 27.01.20 - 16:45
(11) Ты объединяешь ВСЮ! номенклатуру и ВСЕ! доп свойства. Если много номенклатуры и доп свойств, то ждать выполнения запроса оочень долго и ооочень неправильные данные получатся
   Timon1405
 
15 - 27.01.20 - 16:49
(9) левое соединение РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
И ЗначенияСвойствОбъектов.Свойство = &Свойство
   sasha-asn
 
16 - 27.01.20 - 17:02
(15) неправильно, тогда Свойство и Значения будут пустые
   sasha-asn
 
17 - 27.01.20 - 17:08
(15) Спасибо! я был не прав! мысли появились!
   Said_We
 
18 - 27.01.20 - 17:08
(16) Значит нет такого свойства как "КодДляСайта". У тебя свойство типа строка?
   Said_We
 
19 - 27.01.20 - 17:11
(17) В типовых свойство обычно такое имеет тип примерно такой: "ПланВидовХарактеристикСсылка.СвойстваОбъектов".
   sasha-asn
 
20 - 28.01.20 - 11:35
(19) СПАСИБО ТЕБЕ БОЛЬШОЕ! И ВСЕМ КТО ПОМОГАЛ!
   sasha-asn
 
21 - 28.01.20 - 11:35
если кто то попадёт сюда через гугл, вот решение

    КодДляСайта = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00223");
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка,
    |    Номенклатура.Код,
    |    ЗначенияСвойствОбъектов.Свойство,
    |    ЗначенияСвойствОбъектов.Значение
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |        ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
    |ГДЕ ЗначенияСвойствОбъектов.Значение Есть NULL";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Ссылка;
        МенеджерЗаписи.Свойство = КодДляСайта ;
        МенеджерЗаписи.Значение = ВыборкаДетальныеЗаписи.Код;
        
        МенеджерЗаписи.Записать();   
    КонецЦикла;
   Timon1405
 
22 - 28.01.20 - 11:48
(21) код в рубрике "вредные советы"
у вас нет соединения по свойству о чем я вам писал в (15), ваш текущий код проставит это свойство ВСЕМ незаполненным свойствам а не только свойству код для сайта
   Масянька
 
23 - 28.01.20 - 11:52
(21) Да, что ж ты второй день мучаешься?
У тебя нет консоли запросов? Найди и скачай. И делай там запрос. И проверяй выборку по запросу.
   DmVl76
 
24 - 28.01.20 - 11:57
(22) Нет, проставится только для номенклатуры, у которой нет НИ ОДНОГО свойства.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.