Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Копирование данных одного документа в новый другого типа

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

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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.