Имя: Пароль:
1C
1С v8
заполнить автоматом при создании из заказа клиента в реализации метод доставки
,
0 mad
 
18.02.21
16:39
Прошу помощи с кодом.

УТ11.4 8.3

на основании заказа клиента создается реализация.
в ее дополнительные свойства из заказа надо переносить значения дополнительных свойств

Дополнительное свойство в заказе - Способ доставки
Дополнительное свойство в реализации - Метод доставки

зашел в РеализацияТоваровУслугЛокализация
в Процедура ПередЗаписью(Объект, Отказ, РежимЗаписи, РежимПроведения) Экспорт

добавил

    // Вызывается из соответствующего обработчика документа
//
// Параметры:
//  Объект - ДокументОбъект - Обрабатываемый объект
//  Отказ - Булево - Признак отказа от записи.
//                   Если в теле процедуры-обработчика установить данному параметру значение Истина,
//                   то запись выполнена не будет и будет вызвано исключение.
//  РежимЗаписи - РежимЗаписиДокумента - В параметр передается текущий режим записи документа. Позволяет определить в теле процедуры режим записи.
//  РежимПроведения - РежимПроведенияДокумента - В данный параметр передается текущий режим проведения.
//
Процедура ПередЗаписью(Объект, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    
    //++ Локализация
    Если ЗначениеЗаполнено(Объект.ЗаказКлиента) Тогда
        Заказ = Объект.ЗаказКлиента.ПолучитьОбъект();
                
        //получаем значение доставки из доп.свойства заказа клиента
        k = УправлениеСвойствами.ЗначениеСвойства(Объект.ЗаказКлиента, Объект.СпособДоставки);
        //k = "проверка";
        
         Если ЗначениеЗаполнено(k) тогда
            ТаблицаСвойствИЗначений = Новый ТаблицаЗначений;
        ТаблицаСвойствИЗначений.Колонки.Добавить("Свойство");
        ТаблицаСвойствИЗначений.Колонки.Добавить("Значение");
        НоваяСтрока = ТаблицаСвойствИЗначений.Добавить();
        НоваяСтрока.Свойство = "Метод Доставки";
        НоваяСтрока.Значение = k;
         УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ДокументСсылка.РеализацияТоваровУслуг,ТаблицаСвойствИЗначений);
         ТаблицаСвойствИЗначений.Очистить();
         КонецЕсли;

    //-- Локализация
    
КонецПроцедуры

Пишет что поле объекта РеализацияТоваровУслуг не найдено.

я так понимаю ошибка в обоих строках (проверка на заполнение k не проходит)
k = УправлениеСвойствами.ЗначениеСвойства(Объект.ЗаказКлиента, Объект.СпособДоставки);

либо
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ДокументСсылка.РеализацияТоваровУслуг,ТаблицаСвойствИЗначений);

может быть есть кто поумней меня.
я в общем-то впервые это всё вижу ))
Спасибо!
1 lubitelxml
 
18.02.21
17:32
1. Локализация не для твоих доработок была добавлена.
2. Отладчиком не умеешь пользоваться?
2 hhhh
 
18.02.21
18:50
(0) что  такое ДокументСсылка у тебя? Что это за хрень?
3 mad
 
18.02.21
18:54
1. Я поискал похожую проблему и нашел вот это решение. http://catalog.mista.ru/public/1092117/
Там именно задача при сохранении чтоб из Заказа заполнялись значения. И оно вроде работает. У меня точно такая же задача - надо каждый раз при сохранении документа реализации чтоб подтягивались из заказа данные.  Но мне надо получать/заполнять дополнительные свойства.
Если локализация - это не то, то в какую сторону мне гуглить?

2. Не умею. Но при попытке обновлении конфигурации выдается ошибка на строку
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ДокументСсылка.РеализацияТоваровУслуг,ТаблицаСвойствИЗначений);
конкретно, что не найдена переменная "ДокументСсылка."

но ошибок явно 2, т.к. если включить вариант проверки "Если ЗначениеЗаполнено(k) тогда" , то становится понятно что k не заполняется.
4 hhhh
 
18.02.21
19:07
(3) ну да.

k = УправлениеСвойствами.ЗначениеСвойства(Объект.ЗаказКлиента, Объект.СпособДоставки);

тут по идее нужно имя свойства передать в процедуру ЗначениеСвойства, посмотрите эту функцию, какие параметры у нее на входе?
5 mad
 
18.02.21
20:59
ЗначениеСвойства
Возвращает значение дополнительного свойства объекта.
Синтаксис

Функция ЗначениеСвойства(Объект, Свойство, КодЯзыка = "") Экспорт
Параметры

  Объект   - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура,
                           ДокументСсылка.ЗаказПокупателя, ...
  Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на
                           дополнительный реквизит, значение которого нужно получить.
           - Строка - имя дополнительного свойства.
  КодЯзыка - Строка - если указано, то вместо значения дополнительного свойства будет
                      возвращено его представление на указанном языке.
Возвращаемое значение

  Произвольный - любое значение, допустимое для свойства.
Пример вызова

Результат = УправлениеСвойствами.ЗначениеСвойства(Объект, Свойство, КодЯзыка)

Доступность Сервер, Толстый клиент, Внешнее соединение
6 hhhh
 
18.02.21
22:18
(5) Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на
                           дополнительный реквизит, значение которого нужно получить.
           - Строка - имя дополнительного свойства.

ну вот, передавайте имя дополнительного свойства.
7 mad
 
19.02.21
16:23
да проблема в том как именно написать вот это вот "ДокументСсылка.РеализацияТоваровУслуг" года так пишешь - не работает. Видимо эту ссылку как-то надо иначе туда вставлять.

в общем ,первую часть починил вроде (получение k но не уверен что туда заполняется что нужно. но уже проходит проверку на заполнение и вылетает вторая ошибка. Уже в самом документе (не в конфигураторе)
ошибка звучит так (при попытке записи документа реализации)
"поле объекта не обнаружено (реализацияТоваровУслуг)"
т.е. видимо ссылка на текущий документ как-то тоже иначе прописывается.
строка вызывающая ошибку  УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.РеализацияТоваровУслуг,ТаблицаСвойствИЗначений);

конкретно проблема в первом параметре Объект.РеализацияТоваровУслуг он должен выглядеть как-то иначе

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