Имя: Пароль:
1C
1С v8
Копирование данных одного документа в новый другого типа
0 Птах
 
10.07.20
16:13
Конфа ЕРП, задача создать коммерческое предложение на основе старого заказа клиента, без изменения механизма ввода на основании и прочей лишней фигни, минимальной кровью. Родилось вот ЭТО. Заполняет, открывает форму, задачу выполняет, но мне прям не по себе от того, что я это породил. Подскажите, как это можно привести в гармонию с природой и системой стандартов.

&НаКлиенте
Процедура Команда1(Команда)
    
    Если ЗначениеЗаполнено(Объект.СсылкаНаОбъект) Тогда
        ВИП_СоздатьКППоЗаказуНаСервере(Объект.СсылкаНаОбъект);
        ФормаКП = ПолучитьФорму("Документ.КоммерческоеПредложениеКлиенту.Форма.ФормаДокумента");
        КопироватьДанныеФормы(ДокументОбъект, ФормаКП.Объект);
        ФормаКП.Открыть();
        ЭтаФорма.Закрыть();
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ВИП_СоздатьКППоЗаказуНаСервере(СсылкаНаЗК)
    ОбъектКП = Документы.КоммерческоеПредложениеКлиенту.СоздатьДокумент();
    ЗаполнитьЗначенияСвойств(ОбъектКП, СсылкаНаЗК);
    Для Каждого СтрокаЗК из СсылкаНаЗК.Товары Цикл
        СтрокаКП = ОбъектКП.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаКП, СтрокаЗК);
    КонецЦикла;
    
    //КопироватьДанныеФормы(СсылкаНаЗК, ОбъектКП);
    ЗначениеВРеквизитФормы(ОбъектКП, "ДокументОбъект");
КонецПроцедуры
1 Птах
 
10.07.20
16:14
//КопироватьДанныеФормы(СсылкаНаЗК, ОбъектКП);
специально оставил, мол, чот пробовал, но не особо понял куда тут это
2 Птах
 
10.07.20
16:17
&НаКлиенте
Процедура Команда1(Команда)
    
    Если ЗначениеЗаполнено(Объект.СсылкаНаОбъект) Тогда
        ВИП_СоздатьКППоЗаказуНаСервере(Объект.СсылкаНаОбъект);
        ФормаКП = ПолучитьФорму("Документ.КоммерческоеПредложениеКлиенту.Форма.ФормаДокумента");
        КопироватьДанныеФормы(ДокументОбъект, ФормаКП.Объект);
        ФормаКП.Открыть();
        ЭтаФорма.Закрыть();
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ВИП_СоздатьКППоЗаказуНаСервере(СсылкаНаЗК)
    ОбъектКП = Документы.КоммерческоеПредложениеКлиенту.СоздатьДокумент();
    ЗаполнитьЗначенияСвойств(ОбъектКП, СсылкаНаЗК);
    Для Каждого СтрокаЗК из СсылкаНаЗК.Товары Цикл
        СтрокаКП = ОбъектКП.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаКП, СтрокаЗК);
    КонецЦикла;
    
    //КопироватьДанныеФормы(СсылкаНаЗК, ОбъектКП);
    ЗначениеВРеквизитФормы(ОбъектКП, "ДокументОбъект");
КонецПроцедуры
3 Timon1405
 
10.07.20
16:18
КопированиеСтрокСервер.СкопироватьТаблицуВБуферОбмена()
4 SadrArt
 
10.07.20
16:22
минимальной кровью - внешняя обработка заполнения на основании
5 Птах
 
10.07.20
16:23
(3) Спасибо, но я даже не о заполнении свойств - скорее о передаче объекта с сервера, потом копировании данных в новый объект формы и только потом открытие. НУ то есть я и пожестче вещи проворачивал в 8.1, но надо же и правильно учиться делать, думал, может кто подскажет.
6 Птах
 
10.07.20
16:24
(4) Ну это она и есть, вызываемая прямо из заказа клиента. Просто выглядит как-то неприятно. Есть идеи как улучшить?
7 lodger
 
10.07.20
18:42
(6) использовать механизм обработки заполнения на основании.
пакуешь нужные данные в структуру и вызываешь целевую форму с этой структурой в качестве параметра "ДанныеЗаполнения".
для разбора параметра "ДанныеЗаполнения" надо заглянуть в Процедуру ОбработкаЗаполнения целевого модуля объекта. (не формы!)
8 Птах
 
12.07.20
15:36
(7) Спасибо, отличный вариант!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.