Вход | Регистрация
 
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) Нет, проставится только для номенклатуры, у которой нет НИ ОДНОГО свойства.


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