Last updated: 10 Feb 23 08:25:47 (UTC)
1C. Параметры в запись документа через доп. свойства и реквизиты формы
В данном примере обработка создает заказ и передает ей таблицу заполнения. Таблица в свою очередь при записи документа сохраняется в отдельном регистре. Регистр фактически фиксирует первоначальные данные документа. И только в случае, если таблица вообще была отправлена документу через параметры.
Модуль формы внешней обработки
&НаСервере Процедура СоздатьЗаказНаСервере(ОбъектФормы) ТаблТовары = Товары.Выгрузить(); ДокОбъект = Документы.ЗаказКлиента.СоздатьДокумент(); ДокОбъект.Товары.Загрузить(ТаблТовары); //ДокОбъект.ДополнительныеСвойства.Вставить("Цены", ТаблТовары); ЗначениеВДанныеФормы(ДокОбъект, ОбъектФормы); КонецПроцедуры &НаКлиенте Процедура СоздатьЗаказ(Команда) СписокЗначенийТоваров = Новый СписокЗначений; Для Каждого Строка Из Товары Цикл СтруктураДанных = Новый Структура; СтруктураДанных.Вставить("Номенклатура", Строка.Номенклатура); СтруктураДанных.Вставить("Цена", Строка.Цена); СписокЗначенийТоваров.Добавить(СтруктураДанных); КонецЦикла; ПараметрыФормы = Новый Структура; //ПараметрыФормы.Вставить("ксЦены", СписокЗначенийТоваров); Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы); ОбьектФорма = Форма.Объект; СоздатьЗаказНаСервере(ОбьектФорма); Форма.СохранитьЦеныВРеквизиты(СписокЗначенийТоваров); КопироватьДанныеФормы(ОбьектФорма, Форма.Объект); Форма.Открыть(); КонецПроцедуры
&НаСервере
Процедура СоздатьЗаказНаСервере(ОбъектФормы)
ТаблТовары = Товары.Выгрузить();
ДокОбъект = Документы.ЗаказКлиента.СоздатьДокумент();
ДокОбъект.Товары.Загрузить(ТаблТовары);
//ДокОбъект.ДополнительныеСвойства.Вставить("Цены", ТаблТовары);
ЗначениеВДанныеФормы(ДокОбъект, ОбъектФормы);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЗаказ(Команда)
СписокЗначенийТоваров = Новый СписокЗначений;
Для Каждого Строка Из Товары Цикл
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Номенклатура", Строка.Номенклатура);
СтруктураДанных.Вставить("Цена", Строка.Цена);
СписокЗначенийТоваров.Добавить(СтруктураДанных);
КонецЦикла;
ПараметрыФормы = Новый Структура;
//ПараметрыФормы.Вставить("ксЦены", СписокЗначенийТоваров);
Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы);
ОбьектФорма = Форма.Объект;
СоздатьЗаказНаСервере(ОбьектФорма);
Форма.СохранитьЦеныВРеквизиты(СписокЗначенийТоваров);
КопироватьДанныеФормы(ОбьектФорма, Форма.Объект);
Форма.Открыть();
КонецПроцедуры
Модуль формы документа
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) МассивДобавляемыхРеквизитов = Новый Массив; МассивДобавляемыхРеквизитов.Добавить( Новый РеквизитФормы("ксЦены", Новый ОписаниеТипов("СписокЗначений"))); ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); Если Параметры.Свойство("ксЦены") Тогда ЭтаФорма["ксЦены"] = Параметры.ксЦены; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ЗначениеЗаполнено(ЭтаФорма["ксЦены"]) Тогда ТекущийОбъект.ДополнительныеСвойства.Вставить("ксЦены", ЭтаФорма["ксЦены"]); КонецЕсли; КонецПроцедуры &НаСервере Процедура СохранитьЦеныВРеквизиты(ксЦены) Экспорт ЭтаФорма["ксЦены"] = ксЦены; КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов.Добавить(
Новый РеквизитФормы("ксЦены",
Новый ОписаниеТипов("СписокЗначений")));
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
Если Параметры.Свойство("ксЦены") Тогда
ЭтаФорма["ксЦены"] = Параметры.ксЦены;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ЗначениеЗаполнено(ЭтаФорма["ксЦены"]) Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("ксЦены", ЭтаФорма["ксЦены"]);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьЦеныВРеквизиты(ксЦены) Экспорт
ЭтаФорма["ксЦены"] = ксЦены;
КонецПроцедуры
Модуль проведения документа
Процедура ОбработкаПроведения(Отказ, РежимПроведения) // регистр ОборотТоваров Движения.ОборотТоваров.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.ОборотТоваров.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Сумма = ТекСтрокаТовары.Цена; КонецЦикла; КонецПроцедуры Процедура ПриЗаписи(Отказ) Если ЭтотОбъект.ДополнительныеСвойства.Свойство("ксЦены") Тогда Для Каждого ЭлементСписка Из ЭтотОбъект.ДополнительныеСвойства["ксЦены"] Цикл ТекСтрока = ЭлементСписка.Значение; СтруктураЦеныEDI = Новый Структура; СтруктураЦеныEDI.Вставить("ЗаказКлиента", Ссылка); СтруктураЦеныEDI.Вставить("Номенклатура", ТекСтрока.Номенклатура); СтруктураЦеныEDI.Вставить("Цена", ТекСтрока.Цена); РегистрыСведений.Цены.Отразить(СтруктураЦеныEDI); КонецЦикла; КонецЕсли; КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// регистр ОборотТоваров
Движения.ОборотТоваров.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОборотТоваров.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Сумма = ТекСтрокаТовары.Цена;
КонецЦикла;
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ЭтотОбъект.ДополнительныеСвойства.Свойство("ксЦены") Тогда
Для Каждого ЭлементСписка Из ЭтотОбъект.ДополнительныеСвойства["ксЦены"] Цикл
ТекСтрока = ЭлементСписка.Значение;
СтруктураЦеныEDI = Новый Структура;
СтруктураЦеныEDI.Вставить("ЗаказКлиента", Ссылка);
СтруктураЦеныEDI.Вставить("Номенклатура", ТекСтрока.Номенклатура);
СтруктураЦеныEDI.Вставить("Цена", ТекСтрока.Цена);
РегистрыСведений.Цены.Отразить(СтруктураЦеныEDI);
КонецЦикла;
КонецЕсли;
КонецПроцедуры