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

Записать дополнительные реквизиты программно (управляемые формы)

Записать дополнительные реквизиты программно (управляемые формы)
Я
   bfss-732
 
27.08.20 - 11:41
Всем привет!
На основании Заказа Клиента делаю Заказа поставщика, дозаполняю программно дополнительные реквизиты в Заказа поставщика...

В модуле объекта Заказа поставщика запросом получаю Реквизиты.типДоставки и  Реквизиты.ГрузовикКонтейнер далее  пишу

ДопРеквизитTruckOrContainer = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Truck or Container", Истина);
ДопРеквизитТипДоставки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Тип доставки", Истина);
СсылкаНаОбъект = Ссылка.ПолучитьОбъект();
МассивСтруктур = Новый Массив;
МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитTruckOrContainer, Реквизиты.типДоставки));
МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитТипДоставки, Реквизиты.ГрузовикКонтейнер));
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СсылкаНаОбъект, МассивСтруктур);

Ошибка "Элемент не выбран!" на строку СсылкаНаОбъект = Ссылка.ПолучитьОбъект();

Что делать? Документ по факту не записан, как получить "ВладелецСвоств"  в ЗаписатьСвойстваУОбъекта()?
   bfss-732
 
1 - 27.08.20 - 11:58
Понимаю что прежде чем получить объект необходимо иметь на него ссылку, ее по факту нет. Как быть в моем случае с ЗаписатьСвойстваУОбъекта?
   Галахад
 
2 - 27.08.20 - 12:10
А потом записать, когда ссылка появиться не вариант?
   bfss-732
 
3 - 27.08.20 - 12:13
(2) отличное предложение, ща попробую
   bfss-732
 
4 - 27.08.20 - 13:08
(2) В модуле объекта заказ поставщику не прокатывает
   bfss-732
 
5 - 27.08.20 - 13:10
Вообще эти данные надо заполнять в Процедура ЗаполнитьДокументНаОснованииЗаказа(Знач ЗаказКлиента)
   Ёпрст
 
6 - 27.08.20 - 13:14
(0) через установитьссылку нового поиметь ссылку на незаписанный документ, её и использовать в своих доп свойствах.
В при закрытии проверять, если документ не записан - грохнуть все доп свойства, чтоб не было битых ссылок
   Ёпрст
 
7 - 27.08.20 - 13:16
тип того

    Если ЭтоНовый() Тогда
        СсылкаНаОбъект = ПолучитьСсылкуНового();
        Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
            СсылкаНаОбъект = Документы.НужныйВид.ПолучитьСсылку(); 
            УстановитьСсылкуНового(СсылкаНаОбъект);
        КонецЕсли;
    Иначе
        СсылкаНаОбъект  = Ссылка;
    КонецЕсли;
   bfss-732
 
8 - 27.08.20 - 13:17
(7) делал, ошибку выдает "Объект не найден"
   bfss-732
 
9 - 27.08.20 - 13:18
Если ЭтоНовый() И Ссылка.Пустая() Тогда
         ЭтотОбъект.УстановитьСсылкуНового(Документы.ЗаказНаряд.ПолучитьСсылку(Новый УникальныйИдентификатор));
    КонецЕсли; 
        
    НоваяСсылка = ЭтотОбъект.ПолучитьСсылкуНового();
   bfss-732
 
10 - 27.08.20 - 13:24
(7) {ОбщийМодуль.ПодключаемыеКомандыКлиент.Модуль(162)}: Ошибка при вызове метода контекста (ОткрытьФорму)
            ОткрытьФорму(ОписаниеКоманды.ИмяФормы, ПараметрыФормы, Контекст.Форма, Истина);
по причине:
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
{ОбщийМодуль.УправлениеСвойствами.Модуль(1166)}: Значение не является значением объектного типа (Ссылка)
            ЗаблокироватьДанныеДляРедактирования(ВладелецСвойствОбъект.Ссылка);
   Ёпрст
 
11 - 27.08.20 - 13:25
(10) больше кода
   Ёпрст
 
12 - 27.08.20 - 13:26
нам отсюда не видно, че ты там творишь
   bfss-732
 
13 - 27.08.20 - 13:30
В отладчике СсылкаНаОбъект Значение <Объект не найден> (420:afca0050560065c211eae84f14021bdc)

Далее попадаю в в Общий модуль УправлениеСвойствами.ЗаписатьСвойстваУОбъекта...в Процедура ЗаписатьСвойстваУОбъекта(ВладелецСвойств, ТаблицаСвойствИЗначений) Экспорт

ТаблицаДопРеквизитов = Новый ТаблицаЗначений;
    ТаблицаДопРеквизитов.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
    ТаблицаДопРеквизитов.Колонки.Добавить("Значение");
    ТаблицаДопРеквизитов.Колонки.Добавить("ТекстоваяСтрока");
    
    ТаблицаДопСведений = ТаблицаДопРеквизитов.СкопироватьКолонки();
    
    Для Каждого СтрокаТаблицыСвойств Из ТаблицаСвойствИЗначений Цикл
        Если СтрокаТаблицыСвойств.Свойство.ЭтоДополнительноеСведение Тогда
            НоваяСтрока = ТаблицаДопСведений.Добавить();
        Иначе
            НоваяСтрока = ТаблицаДопРеквизитов.Добавить();
            
            Если ТипЗнч(СтрокаТаблицыСвойств.Значение) = Тип("Строка")
                И СтрДлина(СтрокаТаблицыСвойств.Значение) > 1024 Тогда
                НоваяСтрока.ТекстоваяСтрока = СтрокаТаблицыСвойств.Значение;
            КонецЕсли;
        КонецЕсли;
        ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицыСвойств, "Свойство,Значение");
    КонецЦикла;
    
    ЕстьДопРеквизиты = ТаблицаДопРеквизитов.Количество() > 0;
    ЕстьДопСведения  = ТаблицаДопСведений.Количество() > 0;
    
    МассивСвойств = СвойстваОбъекта(ВладелецСвойств);
    
    МассивДопРеквизитов = Новый Массив;
    МассивДопСведений = Новый Массив;
    
    Для Каждого ДопСвойство Из МассивСвойств Цикл
        Если ДопСвойство.ЭтоДополнительноеСведение Тогда
            МассивДопСведений.Добавить(ДопСвойство);
        Иначе
            МассивДопРеквизитов.Добавить(ДопСвойство);
        КонецЕсли;
    КонецЦикла;
    
    НачатьТранзакцию();
    Попытка
        Если ЕстьДопРеквизиты Тогда
            ВладелецСвойствОбъект = ВладелецСвойств.ПолучитьОбъект();
РУГАЕТСЯ ТУТ---> ЗаблокироватьДанныеДляРедактирования(ВладелецСвойствОбъект.Ссылка);
            Для Каждого ДопРеквизит Из ТаблицаДопРеквизитов Цикл
                Если МассивДопРеквизитов.Найти(ДопРеквизит.Свойство) = Неопределено Тогда
                    Продолжить;
                КонецЕсли;
                МассивСтрок = ВладелецСвойствОбъект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизит.Свойство));
                Если МассивСтрок.Количество() Тогда
                    СтрокаСвойства = МассивСтрок[0];
                Иначе
                    СтрокаСвойства = ВладелецСвойствОбъект.ДополнительныеРеквизиты.Добавить();
                КонецЕсли;
                ЗаполнитьЗначенияСвойств(СтрокаСвойства, ДопРеквизит, "Свойство,Значение,ТекстоваяСтрока");
            КонецЦикла;
            ВладелецСвойствОбъект.Записать();
        КонецЕсли;
        
        Если ЕстьДопСведения Тогда
            Для Каждого ДопСведение Из ТаблицаДопСведений Цикл
                Если МассивДопСведений.Найти(ДопСведение.Свойство) = Неопределено Тогда
                    Продолжить;
                КонецЕсли;
                
                МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
                
                МенеджерЗаписи.Объект = ВладелецСвойств;
                МенеджерЗаписи.Свойство = ДопСведение.Свойство;
                МенеджерЗаписи.Значение = ДопСведение.Значение;
                
                МенеджерЗаписи.Записать(Истина);
            КонецЦикла;
            
        КонецЕсли;
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение;
    КонецПопытки;
   bfss-732
 
14 - 27.08.20 - 13:31
Выше в коде РУГАЕТСЯ ТУТ---> ЗаблокироватьДанныеДляРедактирования(ВладелецСвойствОбъект.Ссылка);
   bfss-732
 
15 - 27.08.20 - 13:32
Короче ссылка есть, объекта нет
   Ёпрст
 
16 - 27.08.20 - 13:56
(14) как ты передаешь и создаешь ссылку на не записанный документ ?
   bfss-732
 
17 - 27.08.20 - 14:15
(16) Через ...ЗаписатьСвойстваУОбъекта(СсылкаНаОбъект, ...);
   Ёпрст
 
18 - 27.08.20 - 14:25
Да ё.. в каком месте ты использовал код из (7) и где потом передаешь ССылкаНаОбъект ?
   bfss-732
 
19 - 27.08.20 - 14:35
(18) Модуль объекта в     Процедура ЗаполнитьДокументНаОснованииЗаказа(Знач ЗаказКлиента)
   Ёпрст
 
20 - 27.08.20 - 14:45
(19) и ? где сам код то ?
:)
   bfss-732
 
21 - 27.08.20 - 15:13
(20) Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |    ЗаказКлиента.Статус КАК СтатусДокумента,
        |    ЗаказКлиента.Приоритет КАК Приоритет,
        |    ЗаказКлиента.Проведен КАК Проведен,
        |    ЗаказКлиента.Организация КАК Организация,
        |    ЗаказКлиента.Сделка КАК Сделка,
        |    ЗаказКлиента.Склад КАК СкладДокумента,
        |    ЗаказКлиента.Склад.ЭтоГруппа КАК ЭтоГруппа,
        |    ЗаказКлиента.НалогообложениеНДС КАК ЗакупкаПодДеятельность,
        |    ЗаказКлиента.НаправлениеДеятельности КАК НаправлениеДеятельности,
        |    ЗаказКлиента.ГрузовикКонтейнер КАК ГрузовикКонтейнер,
        |    ЗаказКлиента.типДоставки КАК типДоставки
        |ИЗ
        |    Документ.ЗаказКлиента КАК ЗаказКлиента
        |ГДЕ
        |    ЗаказКлиента.Ссылка = &ЗаказКлиента");
        Запрос.УстановитьПараметр("ЗаказКлиента", ЗаказКлиента);
        Реквизиты = Запрос.Выполнить().Выбрать();
        Реквизиты.Следующий();
        
        Документы.ЗаказКлиента.ПроверитьВозможностьВводаНаОсновании(
        ЗаказКлиента,
        Реквизиты.СтатусДокумента,
        НЕ Реквизиты.Проведен,
        Истина);
        
        // Заполнение шапки

        Организация            = Реквизиты.Организация;
        Сделка                 = Реквизиты.Сделка;
        ДокументОснование      = ЗаказКлиента;
        Приоритет              = Реквизиты.Приоритет;
        ЗакупкаПодДеятельность = Реквизиты.ЗакупкаПодДеятельность;
        НаправлениеДеятельности= Реквизиты.НаправлениеДеятельности;
        //++ сгс

        Партнер = Справочники.Партнеры.НайтиПоКоду("00-00000002");
        Соглашение = Справочники.СоглашенияСПоставщиками.НайтиПоНаименованию("БФК");        
        Договор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("04/2019 EUR");
        типДоставки = Реквизиты.типДоставки;
        ГрузовикКонтейнер =   Реквизиты.ГрузовикКонтейнер;

        //-- сгс


        // Заполнение табличной части.

        ПараметрыТаблицыТовары = ОбеспечениеСервер.ПараметрыТаблицыОстатковПоЗаказу();
        ТаблицаТовары          = ОбеспечениеСервер.ТаблицаОстатковКЗаказу(ЗаказКлиента, ПараметрыТаблицыТовары);
        ИспользованиеСкладов = Новый Структура("ИспользуютсяСкладыЗакупки, ИспользуютсяСкладыПродажи",
        ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовЗакупки"),
        ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовПродажи"));
        //++    сгс Дозаполнение на основании ЗаказаКлиента

        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    ЗаказКлиентаТовары.FSC КАК FSC,
        |    ЗаказКлиентаТовары.TSCA КАК TSCA,
        |    ЗаказКлиентаТовары.КубМетровВПачке КАК КубМетровВПачке,
        |    ЗаказКлиентаТовары.КубМетровВсего КАК КубМетровВсего,
        |    ЗаказКлиентаТовары.ЦенаКубМетрЗавод КАК ЦенаКубМетрЗавод,
        |    ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
        |    ЗаказКлиентаТовары.Цена КАК Цена,
        |    ЗаказКлиентаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
        |    ЗаказКлиентаТовары.Сумма КАК Сумма,
        |    ЗаказКлиентаТовары.Характеристика КАК Характеристика
        |ИЗ
        |    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
        |ГДЕ
        |    ЗаказКлиентаТовары.Ссылка = &Ссылка
        |    И НЕ ЗаказКлиентаТовары.Ссылка.ПометкаУдаления
        |    И ЗаказКлиентаТовары.Ссылка.Проведен
        |АВТОУПОРЯДОЧИВАНИЕ";
        
        Запрос.УстановитьПараметр("Ссылка", ЗаказКлиента);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить();
        ТаблицаТовары.Колонки.Добавить("FSC",Новый ОписаниеТипов("Булево"), "FSC");
        ТаблицаТовары.Колонки.Добавить("TSCA",Новый ОписаниеТипов("Булево"), "TSCA");
        ТаблицаТовары.Колонки.Добавить("ЦенаКубМетрЗавод", Новый ОписаниеТипов("Число"), "ЦенаКубМетрЗавод");
        ТаблицаТовары.Колонки.Добавить("КубМетровВПачке", Новый ОписаниеТипов("Число"), "КубМетровВПачке");
        ТаблицаТовары.Колонки.Добавить("КубМетровВсего", Новый ОписаниеТипов("Число"), "КубМетровВсего");
        ТаблицаТовары.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"), "Цена");
        ТаблицаТовары.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"), "Сумма");
        
                
        
        Для Каждого Элемент Из ВыборкаДетальныеЗаписи Цикл
            
            Элемент.Цена = Элемент.ЦенаКубМетрЗавод * Элемент.КубМетровВПачке;
            Элемент.Сумма = Элемент.КоличествоУпаковок * Элемент.Цена;

            нСтрока = ТаблицаТовары.Найти(Элемент.Номенклатура, "Номенклатура");
            Если нСтрока = Неопределено Тогда
                нСтрока = ТаблицаТовары.Добавить()
            КонецЕсли;
            ЗаполнитьЗначенияСвойств(нСтрока, Элемент)
        КонецЦикла;
        
        
            
        //Запрос = Новый Запрос(

        //"ВЫБРАТЬ

        //|    ЗаказКлиента.ГрузовикКонтейнер КАК ГрузовикКонтейнер,

        //|    ЗаказКлиента.типДоставки КАК типДоставки

        //|ИЗ

        //|    Документ.ЗаказКлиента КАК ЗаказКлиента

        //|ГДЕ

        //|    ЗаказКлиента.Ссылка = &ЗаказКлиента");

        //Запрос.УстановитьПараметр("ЗаказКлиента", ЗаказКлиента);

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

        //Реквизиты.Следующий();

        //

        //ДопРеквизитTruckOrContainer = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Truck or Container", Истина);

        //ДопРеквизитТипДоставки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Тип доставки", Истина);

        //Если ЭтоНовый() Тогда

        //    СсылкаНаОбъект = ПолучитьСсылкуНового();

        //    Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект) Тогда

        //        СсылкаНаОбъект = Документы.ЗаказПоставщику.ПолучитьСсылку(); 

        //        УстановитьСсылкуНового(СсылкаНаОбъект);

        //    КонецЕсли;

        //Иначе

        //    СсылкаНаОбъект  = Ссылка;

        //КонецЕсли;

        ////СсылкаНаОбъект = Ссылка.ПолучитьОбъект();

        //МассивСтруктур = Новый Массив;

        //МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитTruckOrContainer, Реквизиты.типДоставки));

        //МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитТипДоставки, Реквизиты.ГрузовикКонтейнер));

        //УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СсылкаНаОбъект, МассивСтруктур);

        //

        
        
        //--   сгс

        
        
        Товары.Загрузить(ТаблицаТовары);
        
        
        Если (ИспользованиеСкладов.ИспользуютсяСкладыЗакупки И ИспользованиеСкладов.ИспользуютсяСкладыПродажи)
            Или (ИспользованиеСкладов.ИспользуютсяСкладыЗакупки И Не ИспользованиеСкладов.ИспользуютсяСкладыПродажи)
            Или (Не ИспользованиеСкладов.ИспользуютсяСкладыЗакупки И Не ИспользованиеСкладов.ИспользуютсяСкладыПродажи) Тогда
            
            Склад = Реквизиты.СкладДокумента;
            
        ИначеЕсли Не ИспользованиеСкладов.ИспользуютсяСкладыЗакупки И ИспользованиеСкладов.ИспользуютсяСкладыПродажи Тогда
            
            МассивСкладов = ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(ТаблицаТовары.ВыгрузитьКолонку("Склад"));
            Если МассивСкладов.Количество() = 1 Тогда
                
                Склад = МассивСкладов[0];
                
            КонецЕсли;
            
        КонецЕсли;
   bfss-732
 
22 - 27.08.20 - 16:16
Короче тема закрыта, добавил реквизиты в конфу, все взлетело за минуты. Допреквизиты ЗЛО!


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