Да, надо перебирать атрибуты.
Примерно, алгоритм выглядит так:
Код |
---|
Реализация=СоздатьОбъект("Документ.Реализация");
Копия=СоздатьОбъект("Документ.Реализация");
КопияТабличнойЧасти=СоздатьОбъект("ТаблицаЗначений");
Реализация.ВыбратьДокументы(ДатаНачала,ДатаОкончания);
Пока Реализация.ПолучитьДокумент()=1 Цикл
Копия.Новый();
Копия.ДатаДок=НоваяДата;
Копия.УстановитьНовыйНомер();
Копия.АвтовремяКонецДня();
Для i=1 Метаданные.ОбщийРеквизитДокумента() Цикл
ИдРеквизита=Метаданные.ОбщийРеквизитДокумента(i).Идентификатор;
Копия.УстановитьАтрибут(ИдРеквизита, Реализация.ПолучитьАтрибут(ИдРеквизита));
КонецЦикла;
Для i=1 Метаданные.Документ("Реализация").РеквизитШапки() Цикл
ИдРеквизита=Метаданные.Документ("Реализация").РеквизитШапки(i).Идентификатор;
Копия.УстановитьАтрибут(ИдРеквизита, Реализация.ПолучитьАтрибут(ИдРеквизита));
КонецЦикла;
Реализация.ВыгрузитьТабличнуюЧасть(КопияТабличнойЧасти);
Копия.ЗагрузитьТабличнуюЧасть(КопияТабличнойЧасти);
Копия.Записать();
КонецЦикла;
|
Но! Есть куча нюансов.
1. ТС не написал что у него за конфигурация, поэтому непонятно как происходит нумерация документов с префиксом или нет, поэтому, конструкция
Код |
---|
Копия.УстановитьНовыйНомер();
|
возможно, должна выглядеть иначе.
2. Среди реквизитов могут попасться такие, для которых на уровне конфигуратора указан тип = <Неопределенный> или тип=Справочник, но его вид неизвестен. Перед тем как писать значения в такие реквизиты, надо явно указывать что то вроде НазначитьТип() или НазначитьВид(), иначе туда ничего и не попадет.
3. Среди реквизитов могут попасться ссылки на документы, например, если у нас Реализация вида "Возврат поставщику" (если так сделано в конфигурации), то в нем может быть ссылка на документ-основание и алгоритм сделан так, что имеется смысловая связь с документом-основанием и, поскольку, создаваемый документ является копией какого то раннего, который по данной ситуации уже отработал, то непонятно как по ней же отработает копия.
4. Среди реквизитов (в том числе реквизитов табличной части) есть такие, которые явно ссылаются на какой нибудь справочник Партий и при проведении система будет снова пытаться с них что то списать в то время, когда по ним, возможно, уже ничего и не осталось после проведения первичного документа, поэтому значения в таком реквизите в копии, скорее всего, надо чистить.
5. Как поступать с создаваемыми документами? Просто записывать их в базу или сразу пытаться проводить? Но это Реализация и если это реализация товаров, то проведение может и не получиться если их нет в наличии. Да даже если это и реализация услуг, то оно тоже может не получиться, т.к. существуют механизмы контроля размера кредита покупателю или просрочки платежа.