|
Записать дополнительные реквизиты программно (управляемые формы) | ☑ | ||
---|---|---|---|---|
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
|
Короче тема закрыта, добавил реквизиты в конфу, все взлетело за минуты. Допреквизиты ЗЛО!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |