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

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

ВОПРОС №1: Почему у меня не выводится каждая позиция с 4 полями через Сообщить() ?
ВОПРОС №2: Если не выводить сообщением 4 поля, как задать для номенклатуры обработкой результата ЗначенияСвойствОбъектов.Значение = Номенклатура.Код ?
1 sasha-asn
 
27.01.20
15:58
// Запросом получаю 4 поля таблицы:  НазваниеНоменклатура, КодНоменклатуры, НазваниеСвойства, ЗначениеСвойства
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка,
    |    Номенклатура.Код,
    |    ЗначенияСвойствОбъектов.Свойство,
    |    ЗначенияСвойствОбъектов.Значение
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура,
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство = &Свойство";
    Запрос.УстановитьПараметр("Свойство", "КодДляСайта");
    //Вывести результат запроса
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка);
    КонецЦикла;
2 sasha-asn
 
27.01.20
16:02
запрос выводит данные, а обработка нет... Почему так?

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

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

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

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

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