Как всё реализовывал:
I Вариант
- Открываем конфигурацию.
- Становимся на нужный документ и нажимаем кнопку «Копировать»
- Переименовываем получившийся документ, например «СкрытыйДокумент»
- В документе убираем галочки (если стоят):
«Автоматическая нумерация»,
«Разрешить проведение документа»
«Бухгалтерский учёт» - Добавляем в шапку реквизиты (при необходимости) например:
ИсходНомерДок
ИсходДатаДок
ИмяКомпа - Журнал у документа ставим «Прочие»
- Нажимаем кнопку «Ввод на основании» и убираем все галочки.
- Открываем форму документа и удаляем ненужные кнопки «Ок», «Записать» и т.д., если при закрытии отслеживается изменения в документе и спрашивается «Записать документ», тогда убираем это в модуле формы в процедуре «ПриЗакрытии()»
- Нужно убрать этот документ из общего журнала…
открываем «Общий» журнал
меняем ему тип на «Дополнительный»
заполняем состав, все документы, кроме нашего созданного - Создаём новый журнал, например «СкрытыйДокумент»
(можно воспользоваться конструктором)
сделаем его обычным
в документах ставим галочку на нашем «СкрытыйДокумент»
в меню его никому не добавляем
графы настраиваем как удобно - Чтобы документ не удалили:
открываем глобальный модуль
находим процедуру «ПриУдаленииДокумента(Докум, Режим)»
дописываем код:
[CODE]
Если Докум.Вид()="СкрытыйДокумент" Тогда
СтатусВозврата(0);
КонецЕсли;
[/CODE]
12. Теперь в исходном документе в модуле формы в процедуре печати дописываем код:
[CODE]
//*************************
ИсхДок=ТекущийДокумент();
ВидИсхДока=ТекущийДокумент().Вид();
КопияДока=СоздатьОбъект("Документ.СкрытыйДокумент");
КопияДока.Новый();
Для ш=1 по Метаданные.ОбщийРеквизитДокумента() Цикл
Вр=ПолучитьАтрибут(Метаданные.ОбщийРеквизитДокумента(ш));
КопияДока.УстановитьАтрибут(Метаданные.ОбщийРеквизитДокумента(ш),вр);
конецЦикла;
Для ш=1 по Метаданные.Документ(ВидИсхДока).РеквизитШапки() Цикл
Вр=ПолучитьАтрибут(Метаданные.Документ(ВидИсхДока).РеквизитШапки(ш));
КопияДока.УстановитьАтрибут(Метаданные.Документ(ВидИсхДока).РеквизитШапки(ш),вр);
конецЦикла;
времТЗ=СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ВремТЗ);
КопияДока.ЗагрузитьТабличнуюЧасть(ВремТЗ);
КопияДока.ДатаДок=ТекущаяДата();
ЧЧ="";
ММ="";
СС="";
ТекущееВремя(ЧЧ,ММ,СС);
КопияДока.АвтоВремяОтключить();
КопияДока.УстановитьВремя(ЧЧ,ММ,СС);
КопияДока.ИсходНомерДок=НомерДок;
КопияДока.ИсходДатаДок=ДатаДок;
Если ПустоеЗначение(ИсхДок.НомерДок)=1 Тогда
КопияДока.НомерДок=НомерДок;
иначе
КопияДока.НомерДок=ИсхДок.НомерДок;
КонецЕсли;
КопияДока.ИмяКомпа=ИмяКомпьютера();
КопияДока.Записать();
//*************************
[/CODE]
В итоге получаем полную картину печати всех определённых документов.
Недостаток - если открыт пункт меню «Операции», тогда документ можно увидеть, либо вызвав созданный журнал «СкрытыйДокумент», либо открыв журнал «Полный».
II Вариант решения (который применил)
Из-за того, что, в журнале, если он не основной, не работает отбор, сделал всё по второму варианту:
- Создаём справочник с неприметным наименованием, например «СкрытыйДокумент»
- Количество уровней выставляем равное 2
- Создаём реквизиты справочника, такие же, как и исходного документа реквизиты шапки и табличной части:
Если это реквизит шапки исходного документа, тогда на закладке «Дополнительные» в свойствах реквизита устанавливаем «Для группы»
Если это реквизит табличной части исходного документа, тогда на закладке «Дополнительные» в свойствах реквизита устанавливаем «Для элемента» - Создаём нужные нам реквизиты, например:
ДатаПечати
ВремяПечати
ИсходНомерДок
ИсходДатаДок - Настраиваем у нужных реквизитов сортировку и отбор
- Убираем галочку «Одна форма для элемента и группы»
- Ставим галочку «Редактировать в диалоге»
- Настраиваем форму группы (можно как в исходном документе)
Добавляем в форму таблицу «ТЗ»
В модуле формы у таблицы создаём поля, как у табличной части исходного документа
Добавляем в модуль формы процедуру:
[CODE]Процедура ПриОткрытии()
ТЧ=СоздатьОбъект("Справочник.СкрытыйДокумент");
ТЧ.ИспользоватьРодителя(ТекущийЭлемент());
Если ТЧ.ВыбратьЭлементы()=1 Тогда
Пока ТЧ.ПолучитьЭлемент()=1 Цикл
ТЗ.НоваяСтрока();
ТЗ.НазваниеПоля=ТЧ.НазваниеПоля;
ТЗ.НазваниеПоля1=ТЧ.НазваниеПоля1;
…;
КонецЦикла;
КонецЕсли; [/CODE]
- Чтобы никто не поправил элемент, у всех объектов формы в свойствах ставим галочку «Сделать недоступным»
- Кнопку «ОК» вообще можно удалить
- Настраиваем форму элемента (необязательно, можно оставить пустой)
- В модуль исходного документа перед печатью вставляем код (или выделяем его в процедуру)
[CODE] ИсхДок=ТекущийДокумент();
ВидИсхДока=ТекущийДокумент().Вид();
КопияДока=СоздатьОбъект("Справочник.СкрытыйДокумент");
КопияДокаТЧ=СоздатьОбъект("Справочник.СкрытыйДокумент");
КопияДока.НоваяГруппа();
КопияДока.Наименование=ТекущееВремя();
Если ПустоеЗначение(ИсхДок.НомерДок)=1 Тогда
КопияДока.Код=НомерДок;
иначе
КопияДока.Код=ИсхДок.НомерДок;
КопияДока.СсылкаНаДокумент=ИсхДок;
КонецЕсли;
КопияДока.ДатаПечати=ТекущаяДата();
КопияДока.ВремяПечати=ТекущееВремя();
КопияДока.ИмяКомпа=ИмяКомпьютера();
КопияДока.ИсходНомерДок=НомерДок;
КопияДока.ИсходДатаДок=ДатаДок;
Для ш=1 по Метаданные.Документ(ВидИсхДока).РеквизитШапки() Цикл
Вр=ПолучитьАтрибут(Метаданные.Документ(ВидИсхДока).РеквизитШапки(ш));
ИдРеквизита=Метаданные.Документ(ВидИсхДока).РеквизитШапки(ш).Идентификатор;
Попытка
КопияДока.УстановитьАтрибут(Метаданные.Справочник("СкрытыйДокумент").Реквизит(ИдРеквизита),Вр);
Исключение
КонецПопытки;
конецЦикла;
КопияДока.Записать();
КопияДокаТЧ.ИспользоватьРодителя(КопияДока);
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
КопияДокаТЧ.Новый();
Для ш=1 по Метаданные.Документ(ВидИсхДока).РеквизитТабличнойЧасти() Цикл
Вр=ПолучитьАтрибут(Метаданные.Документ(ВидИсхДока).РеквизитТабличнойЧасти(ш));
ИдРеквизита=Метаданные.Документ(ВидИсхДока).РеквизитТабличнойЧасти(ш).Идентификатор;
Попытка
КопияДокаТЧ.УстановитьАтрибут(Метаданные.Справочник("СкрытыйДокумент").Реквизит(ИдРеквизита),Вр);
Исключение
КонецПопытки;
КонецЦикла;
КопияДокаТЧ.Записать();
КонецЦикла; [/CODE]
- Чтобы не удалили элементы справочника, в глобальный модуль пишем процедуру
[CODE]Процедура ПриУдаленииЭлемента(УдалЭлем, Режим)
Если УдалЭлем.Вид()="СкрытыйДокумент " Тогда
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры [/CODE]
Получили копию документа в виде группы справочника.