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