|   |   | 
| 
 | Записать дополнительные реквизиты программно (управляемые формы) | ☑ | ||
|---|---|---|---|---|
| 0
    
        bfss-732 27.08.20✎ 11:41 | 
        Всем привет!
 На основании Заказа Клиента делаю Заказа поставщика, дозаполняю программно дополнительные реквизиты в Заказа поставщика... В модуле объекта Заказа поставщика запросом получаю Реквизиты.типДоставки и Реквизиты.ГрузовикКонтейнер далее пишу ДопРеквизитTruckOrContainer = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Truck or Container", Истина); ДопРеквизитТипДоставки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Тип доставки", Истина); СсылкаНаОбъект = Ссылка.ПолучитьОбъект(); МассивСтруктур = Новый Массив; МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитTruckOrContainer, Реквизиты.типДоставки)); МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитТипДоставки, Реквизиты.ГрузовикКонтейнер)); УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СсылкаНаОбъект, МассивСтруктур); Ошибка "Элемент не выбран!" на строку СсылкаНаОбъект = Ссылка.ПолучитьОбъект(); Что делать? Документ по факту не записан, как получить "ВладелецСвоств" в ЗаписатьСвойстваУОбъекта()? | |||
| 1
    
        bfss-732 27.08.20✎ 11:58 | 
        Понимаю что прежде чем получить объект необходимо иметь на него ссылку, ее по факту нет. Как быть в моем случае с ЗаписатьСвойстваУОбъекта?     | |||
| 2
    
        Галахад гуру 27.08.20✎ 12:10 | 
        А потом записать, когда ссылка появиться не вариант?     | |||
| 3
    
        bfss-732 27.08.20✎ 12:13 | 
        (2) отличное предложение, ща попробую     | |||
| 4
    
        bfss-732 27.08.20✎ 13:08 | 
        (2) В модуле объекта заказ поставщику не прокатывает     | |||
| 5
    
        bfss-732 27.08.20✎ 13:10 | 
        Вообще эти данные надо заполнять в Процедура ЗаполнитьДокументНаОснованииЗаказа(Знач ЗаказКлиента)     | |||
| 6
    
        Ёпрст гуру 27.08.20✎ 13:14 | 
        (0) через установитьссылку нового поиметь ссылку на незаписанный документ, её и использовать в своих доп свойствах.
 В при закрытии проверять, если документ не записан - грохнуть все доп свойства, чтоб не было битых ссылок | |||
| 7
    
        Ёпрст гуру 27.08.20✎ 13:16 | 
        тип того
 Если ЭтоНовый() Тогда СсылкаНаОбъект = ПолучитьСсылкуНового(); Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект) Тогда СсылкаНаОбъект = Документы.НужныйВид.ПолучитьСсылку(); УстановитьСсылкуНового(СсылкаНаОбъект); КонецЕсли; Иначе СсылкаНаОбъект = Ссылка; КонецЕсли; | |||
| 8
    
        bfss-732 27.08.20✎ 13:17 | 
        (7) делал, ошибку выдает "Объект не найден"     | |||
| 9
    
        bfss-732 27.08.20✎ 13:18 | 
        Если ЭтоНовый() И Ссылка.Пустая() Тогда
 ЭтотОбъект.УстановитьСсылкуНового(Документы.ЗаказНаряд.ПолучитьСсылку(Новый УникальныйИдентификатор)); КонецЕсли; НоваяСсылка = ЭтотОбъект.ПолучитьСсылкуНового(); | |||
| 10
    
        bfss-732 27.08.20✎ 13:24 | 
        (7) {ОбщийМодуль.ПодключаемыеКомандыКлиент.Модуль(162)}: Ошибка при вызове метода контекста (ОткрытьФорму)
 ОткрытьФорму(ОписаниеКоманды.ИмяФормы, ПараметрыФормы, Контекст.Форма, Истина); по причине: Ошибка при выполнении обработчика - 'ОбработкаЗаполнения' по причине: {ОбщийМодуль.УправлениеСвойствами.Модуль(1166)}: Значение не является значением объектного типа (Ссылка) ЗаблокироватьДанныеДляРедактирования(ВладелецСвойствОбъект.Ссылка); | |||
| 11
    
        Ёпрст гуру 27.08.20✎ 13:25 | 
        (10) больше кода     | |||
| 12
    
        Ёпрст гуру 27.08.20✎ 13:26 | 
        нам отсюда не видно, че ты там творишь     | |||
| 13
    
        bfss-732 27.08.20✎ 13:30 | 
        В отладчике СсылкаНаОбъект Значение <Объект не найден> (420:afca0050560065c211eae84f14021bdc)
 Далее попадаю в в Общий модуль УправлениеСвойствами.ЗаписатьСвойстваУОбъекта...в Процедура ЗаписатьСвойстваУОбъекта(ВладелецСвойств, ТаблицаСвойствИЗначений) Экспорт ТаблицаДопРеквизитов = Новый ТаблицаЗначений; ТаблицаДопРеквизитов.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения")); ТаблицаДопРеквизитов.Колонки.Добавить("Значение"); ТаблицаДопРеквизитов.Колонки.Добавить("ТекстоваяСтрока"); ТаблицаДопСведений = ТаблицаДопРеквизитов.СкопироватьКолонки(); Для Каждого СтрокаТаблицыСвойств Из ТаблицаСвойствИЗначений Цикл Если СтрокаТаблицыСвойств.Свойство.ЭтоДополнительноеСведение Тогда НоваяСтрока = ТаблицаДопСведений.Добавить(); Иначе НоваяСтрока = ТаблицаДопРеквизитов.Добавить(); Если ТипЗнч(СтрокаТаблицыСвойств.Значение) = Тип("Строка") И СтрДлина(СтрокаТаблицыСвойств.Значение) > 1024 Тогда НоваяСтрока.ТекстоваяСтрока = СтрокаТаблицыСвойств.Значение; КонецЕсли; КонецЕсли; ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицыСвойств, "Свойство,Значение"); КонецЦикла; ЕстьДопРеквизиты = ТаблицаДопРеквизитов.Количество() > 0; ЕстьДопСведения = ТаблицаДопСведений.Количество() > 0; МассивСвойств = СвойстваОбъекта(ВладелецСвойств); МассивДопРеквизитов = Новый Массив; МассивДопСведений = Новый Массив; Для Каждого ДопСвойство Из МассивСвойств Цикл Если ДопСвойство.ЭтоДополнительноеСведение Тогда МассивДопСведений.Добавить(ДопСвойство); Иначе МассивДопРеквизитов.Добавить(ДопСвойство); КонецЕсли; КонецЦикла; НачатьТранзакцию(); Попытка Если ЕстьДопРеквизиты Тогда ВладелецСвойствОбъект = ВладелецСвойств.ПолучитьОбъект(); РУГАЕТСЯ ТУТ---> ЗаблокироватьДанныеДляРедактирования(ВладелецСвойствОбъект.Ссылка); Для Каждого ДопРеквизит Из ТаблицаДопРеквизитов Цикл Если МассивДопРеквизитов.Найти(ДопРеквизит.Свойство) = Неопределено Тогда Продолжить; КонецЕсли; МассивСтрок = ВладелецСвойствОбъект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизит.Свойство)); Если МассивСтрок.Количество() Тогда СтрокаСвойства = МассивСтрок[0]; Иначе СтрокаСвойства = ВладелецСвойствОбъект.ДополнительныеРеквизиты.Добавить(); КонецЕсли; ЗаполнитьЗначенияСвойств(СтрокаСвойства, ДопРеквизит, "Свойство,Значение,ТекстоваяСтрока"); КонецЦикла; ВладелецСвойствОбъект.Записать(); КонецЕсли; Если ЕстьДопСведения Тогда Для Каждого ДопСведение Из ТаблицаДопСведений Цикл Если МассивДопСведений.Найти(ДопСведение.Свойство) = Неопределено Тогда Продолжить; КонецЕсли; МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Объект = ВладелецСвойств; МенеджерЗаписи.Свойство = ДопСведение.Свойство; МенеджерЗаписи.Значение = ДопСведение.Значение; МенеджерЗаписи.Записать(Истина); КонецЦикла; КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; | |||
| 14
    
        bfss-732 27.08.20✎ 13:31 | 
        Выше в коде РУГАЕТСЯ ТУТ---> ЗаблокироватьДанныеДляРедактирования(ВладелецСвойствОбъект.Ссылка);     | |||
| 15
    
        bfss-732 27.08.20✎ 13:32 | 
        Короче ссылка есть, объекта нет     | |||
| 16
    
        Ёпрст гуру 27.08.20✎ 13:56 | 
        (14) как ты передаешь и создаешь ссылку на не записанный документ ?     | |||
| 17
    
        bfss-732 27.08.20✎ 14:15 | 
        (16) Через ...ЗаписатьСвойстваУОбъекта(СсылкаНаОбъект, ...);     | |||
| 18
    
        Ёпрст гуру 27.08.20✎ 14:25 | 
        Да ё.. в каком месте ты использовал код из (7) и где потом передаешь ССылкаНаОбъект ?     | |||
| 19
    
        bfss-732 27.08.20✎ 14:35 | 
        (18) Модуль объекта в     Процедура ЗаполнитьДокументНаОснованииЗаказа(Знач ЗаказКлиента)     | |||
| 20
    
        Ёпрст гуру 27.08.20✎ 14:45 | 
        (19) и ? где сам код то ?
 :) | |||
| 21
    
        bfss-732 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]; КонецЕсли; КонецЕсли; | |||
| 22
    
        bfss-732 27.08.20✎ 16:16 | 
        Короче тема закрыта, добавил реквизиты в конфу, все взлетело за минуты. Допреквизиты ЗЛО!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |