Копия напечатанного документа или как спрятать документ.

15.04.13

База данных - Журнал регистрации

Возникла необходимость, чтобы при печати определённого документа (даже потом не сохранённого), создавалась его копия, т.е. запись всех напечатанных документов. (В результате чего возникла такая потребность, полагаюсь на вашу фантазию).
В итоге получилось два варианта решения, остановился на втором.

Как всё реализовывал:

I Вариант

  1. Открываем конфигурацию.
  2. Становимся на нужный документ и нажимаем кнопку «Копировать»
  3. Переименовываем получившийся документ, например «СкрытыйДокумент»
  4. В документе убираем галочки (если стоят):
     «Автоматическая нумерация»,
    «Разрешить проведение документа»
    «Бухгалтерский учёт»
  5. Добавляем в шапку реквизиты (при необходимости) например:
    ИсходНомерДок
    ИсходДатаДок
    ИмяКомпа
  6. Журнал у документа ставим «Прочие»
  7. Нажимаем кнопку «Ввод на основании» и убираем все галочки.
  8. Открываем форму документа и удаляем ненужные кнопки «Ок», «Записать» и т.д., если при закрытии отслеживается изменения в документе и спрашивается «Записать документ», тогда убираем это в модуле формы в процедуре «ПриЗакрытии()»
  9. Нужно убрать этот документ из общего журнала…
    открываем «Общий» журнал
    меняем ему тип на «Дополнительный»
    заполняем состав, все документы, кроме нашего созданного
  10. Создаём новый журнал, например «СкрытыйДокумент»
    (можно воспользоваться конструктором)
    сделаем его обычным
    в документах ставим галочку на нашем «СкрытыйДокумент»
    в меню его никому не добавляем
    графы настраиваем как удобно
  11. Чтобы документ не удалили:
    открываем глобальный модуль
    находим процедуру «ПриУдаленииДокумента(Докум, Режим)»
    дописываем код:

[CODE]

                Если Докум.Вид()="СкрытыйДокумент" Тогда

                               СтатусВозврата(0);

                КонецЕсли;

[/CODE]

     12. Теперь в исходном документе в модуле формы в процедуре печати дописываем код:

[CODE]
//*************************      

        ИсхДок=ТекущийДокумент();

        ВидИсхДока=ТекущийДокумент().Вид();

        КопияДока=СоздатьОбъект("Документ.СкрытыйДокумент");

        КопияДока.Новый();

        Для ш=1 по Метаданные.ОбщийРеквизитДокумента() Цикл 

                       Вр=ПолучитьАтрибут(Метаданные.ОбщийРеквизитДокумента(ш));

                       КопияДока.УстановитьАтрибут(Метаданные.ОбщийРеквизитДокумента(ш),вр);

        конецЦикла;

        Для ш=1 по Метаданные.Документ(ВидИсхДока).РеквизитШапки() Цикл 

                       Вр=ПолучитьАтрибут(Метаданные.Документ(ВидИсхДока).РеквизитШапки(ш));

                       КопияДока.УстановитьАтрибут(Метаданные.Документ(ВидИсхДока).РеквизитШапки(ш),вр);

        конецЦикла;

       

        времТЗ=СоздатьОбъект("ТаблицаЗначений");

        ВыгрузитьТабличнуюЧасть(ВремТЗ);

        КопияДока.ЗагрузитьТабличнуюЧасть(ВремТЗ);

 

        КопияДока.ДатаДок=ТекущаяДата();

        ЧЧ="";

        ММ="";

        СС="";

        ТекущееВремя(ЧЧ,ММ,СС);

        КопияДока.АвтоВремяОтключить();

        КопияДока.УстановитьВремя(ЧЧ,ММ,СС);

        КопияДока.ИсходНомерДок=НомерДок;

        КопияДока.ИсходДатаДок=ДатаДок;

        Если ПустоеЗначение(ИсхДок.НомерДок)=1 Тогда

                       КопияДока.НомерДок=НомерДок;

        иначе  

                       КопияДока.НомерДок=ИсхДок.НомерДок;

        КонецЕсли;

        КопияДока.ИмяКомпа=ИмяКомпьютера();

 

        КопияДока.Записать();

 //*************************

 [/CODE]

В итоге получаем полную картину печати всех определённых документов.
Недостаток - если открыт пункт меню «Операции», тогда документ можно увидеть, либо вызвав созданный журнал «СкрытыйДокумент», либо открыв журнал «Полный».

II Вариант решения (который применил)

Из-за того, что, в журнале, если он не основной, не работает отбор, сделал всё по второму варианту:

  1. Создаём справочник с неприметным наименованием, например «СкрытыйДокумент»
  2. Количество уровней выставляем равное 2
  3. Создаём реквизиты справочника, такие же, как и исходного документа реквизиты шапки и табличной части:
    Если это реквизит шапки исходного документа, тогда на закладке «Дополнительные» в свойствах реквизита устанавливаем «Для группы»
    Если это реквизит табличной части исходного документа, тогда на закладке «Дополнительные» в свойствах реквизита устанавливаем «Для элемента»
  4. Создаём нужные нам реквизиты, например:
    ДатаПечати
    ВремяПечати
    ИсходНомерДок
    ИсходДатаДок
  5. Настраиваем у нужных реквизитов сортировку и отбор
  6. Убираем галочку «Одна форма для элемента и группы»
  7. Ставим галочку «Редактировать в диалоге»
  8. Настраиваем форму группы (можно как в исходном документе)
    Добавляем в форму таблицу «ТЗ»
    В модуле формы у таблицы создаём поля, как у табличной части исходного документа
    Добавляем в модуль формы процедуру:

 [CODE]Процедура ПриОткрытии()

                ТЧ=СоздатьОбъект("Справочник.СкрытыйДокумент");

                ТЧ.ИспользоватьРодителя(ТекущийЭлемент());

                Если ТЧ.ВыбратьЭлементы()=1 Тогда

                               Пока ТЧ.ПолучитьЭлемент()=1 Цикл

                                               ТЗ.НоваяСтрока();

                                               ТЗ.НазваниеПоля=ТЧ.НазваниеПоля;

                                               ТЗ.НазваниеПоля1=ТЧ.НазваниеПоля1;

                                               …;

                               КонецЦикла;

                КонецЕсли; [/CODE]

  1. Чтобы никто не поправил элемент, у всех объектов формы в свойствах ставим галочку «Сделать недоступным»
  2. Кнопку «ОК» вообще можно удалить
  3. Настраиваем форму элемента (необязательно, можно оставить пустой)
  4. В модуль исходного документа перед печатью вставляем код (или выделяем его в процедуру)

 [CODE]                ИсхДок=ТекущийДокумент();

                ВидИсхДока=ТекущийДокумент().Вид();

                КопияДока=СоздатьОбъект("Справочник.СкрытыйДокумент");

                КопияДокаТЧ=СоздатьОбъект("Справочник.СкрытыйДокумент");

                КопияДока.НоваяГруппа();

                КопияДока.Наименование=ТекущееВремя();

                Если ПустоеЗначение(ИсхДок.НомерДок)=1 Тогда

                               КопияДока.Код=НомерДок;

                иначе  

                               КопияДока.Код=ИсхДок.НомерДок;

                               КопияДока.СсылкаНаДокумент=ИсхДок;

                КонецЕсли;

    КопияДока.ДатаПечати=ТекущаяДата();

                КопияДока.ВремяПечати=ТекущееВремя();

                КопияДока.ИмяКомпа=ИмяКомпьютера();

 

                КопияДока.ИсходНомерДок=НомерДок;

                КопияДока.ИсходДатаДок=ДатаДок;

               

                Для ш=1 по Метаданные.Документ(ВидИсхДока).РеквизитШапки() Цикл 

                               Вр=ПолучитьАтрибут(Метаданные.Документ(ВидИсхДока).РеквизитШапки(ш));

                               ИдРеквизита=Метаданные.Документ(ВидИсхДока).РеквизитШапки(ш).Идентификатор;

                               Попытка

                                               КопияДока.УстановитьАтрибут(Метаданные.Справочник("СкрытыйДокумент").Реквизит(ИдРеквизита),Вр);

                               Исключение

                               КонецПопытки;

                конецЦикла;

               

                КопияДока.Записать();

   

                КопияДокаТЧ.ИспользоватьРодителя(КопияДока);

               

                ВыбратьСтроки();

                Пока ПолучитьСтроку()=1 Цикл

 

                               КопияДокаТЧ.Новый();

                              

                               Для ш=1 по Метаданные.Документ(ВидИсхДока).РеквизитТабличнойЧасти() Цикл

                                               Вр=ПолучитьАтрибут(Метаданные.Документ(ВидИсхДока).РеквизитТабличнойЧасти(ш));

                                               ИдРеквизита=Метаданные.Документ(ВидИсхДока).РеквизитТабличнойЧасти(ш).Идентификатор;

                                               Попытка

                                                               КопияДокаТЧ.УстановитьАтрибут(Метаданные.Справочник("СкрытыйДокумент").Реквизит(ИдРеквизита),Вр);

                                               Исключение

                                               КонецПопытки;

                               КонецЦикла;

                               КопияДокаТЧ.Записать();

                КонецЦикла; [/CODE]

  1. Чтобы не удалили элементы справочника, в глобальный модуль пишем процедуру

 [CODE]Процедура ПриУдаленииЭлемента(УдалЭлем, Режим)

        Если УдалЭлем.Вид()="СкрытыйДокумент " Тогда

                       СтатусВозврата(0);

        КонецЕсли;

КонецПроцедуры [/CODE]

 

Получили копию документа в виде группы справочника.

См. также

Администрирование СУБД Журнал регистрации Системный администратор Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Прекращена работа программы "1CV7 starter program". Никто не может зайти в 1C 7.7. Апкреш. Что делать? Проверьте, возможно журнал регистрации информационной базы 1С: Предприятия 7.7 поврежден.

17.08.2020    5163    ksnik    3    

4

Журнал регистрации Инструменты администратора БД Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Рассмотрим систему на базе Elasticsearch, Logstash и Kibana (ELK Stack) для анализа логов 1С Предприятие 7.7 с целью визуализации и анализа событий 1С.

22.01.2019    11588    phsin    20    

28

Журнал регистрации Учет рабочего времени Пользователь Платформа 1С v7.7 Абонемент ($m)

Система полной отчетности об использовании рабочего времени пользователями. Все действия пользователей. Сколько времени и на что потрачено. Работает с БД MSSQL, любое количество клиентов

5 стартмани

24.05.2016    17702    4    Art77    2    

6

Журнал регистрации Системный администратор Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Контроль изменения всех реквизитов любых справочников и документов в любой конфигурации

1 стартмани

17.10.2015    16205    24    kras_71    6    

2

Журнал регистрации Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Все, кто работают с 7.7, знают, что журнал регистрации тормозит нещадно, в связи с чем пользы от него очень мало, и её ещё меньше, когда размер журнала превышает хотя бы 50 мегабайт. На Инфостарте, по- моему, даже есть средства для просмотра журнала, может, даже они эффективны, но моей мечтой всегда был sql-доступ к этому журналу, т.к. это просто, наглядно, удобно и, что самое важное, - очень быстро. Кому интересно - добро пожаловать.

11.12.2014    16236    VladC#    8    

7

Журнал регистрации Системный администратор Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Если вы пытаетесь посмотреть журнал регистраций, а у вас неожиданно 1С7.7 спрашивает пароль, хотя вы точно уверены, что пароль на журнал не ставили - поздравляю, у вас испорчен файл 1cv7.mlg

1 стартмани

07.04.2014    20733    27    dima_home    1    

3

Журнал регистрации Email рассылки Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Очень полезно узнавать об ошибках при работе 1С раньше, чем пользователи придут жаловаться на проблемы. Если они вообще придут, а не будут молча ругать "глючную 1С".

1 стартмани

26.03.2014    19045    16    vcv    2    

5

Журнал регистрации Системный администратор Платформа 1С v7.7 Бесплатно (free)

При запуске программы выходило сообщение «Ошибка при запуске журнала регистрации». Дело было не в бабине..

04.10.2013    34995    Alexion    2    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. piloturs 9 12.04.13 20:34 Сейчас в теме
(0)
Если есть у кого варианты, как убрать журнал из списка журналов и убрать документ из полного журнала


> как убрать журнал из списка журналов:
не создавай новый журнал, а назначь для своего документа журнал "(Прочие)"

> убрать документ из полного журнала:
Свои "скрытые" документы записываешь, скажем, на лет 20 назад.
один из общих журналов должен быть назначен полным, чтобы при выборе в меню Операции -> Журналы документов... -> Диалог "Выбор журнала" при выборе пункта (Полный) открывалась конкретная форма журнала.
В этой форме в процедуре ПриОткрытии() используеш УстановитьИнтервал()
в предопределенной процедуре ПриУстановкеИнтервала() контролируешь изменение периода
2. piloturs 9 12.04.13 20:43 Сейчас в теме
а вообще, касаясь задачи сформированной в (0), сохранять надо непосредственно идущее на печать. Т.е. работать на уровне драйвера принтера, а не на уровне базы данных 1С.
4. Dima_ 150 18.04.13 11:56 Сейчас в теме
(2) piloturs, (3) Rad90210,
Вводная:
1. База распределённая (РИБ)
2. Печать в нескольких филиалах (другие населённые пункты)
3. Принтеры все разные
...

Задачи:
1. Копия всех напечатанных документов определённого типа
2. Быстрый визуальный просмотр и анализ
3. Сравнение напечатанных документов с проведёнными по нескольким критериям (дата, контрагент и т.д.)
...

Получаем:
Реализация варианта II
1. Автоматическое сохранение напечатанных документов
2. Автоматическое поступление данных в центр
3. Пишем обработку и получаем любой необходимый анализ.
...

Как-то так.

P.S. ...фантазируем масштабно...
3. Rad90210 13 18.04.13 11:44 Сейчас в теме
В печатной форме нужного документа перед выводом на экран, копию сохраняем в файл. Название файла формируем автоматически с префиксами даты/времени и автора. 3-5 строчек кода. И все копии документов напечатанных - У ВАС.
Сам бы делал как-то так...
5. Rad90210 13 18.04.13 12:19 Сейчас в теме
РИБ ЗЛО. Причем старое зло. 7.7 зло. Причем старое зло. Решение :8.2 - типовое версионирование + закрытие печати не записанных документов.
Чего хотим добиться? чтобы не делали левых документов? ХАХА. А ексель, ксерокс и копии 1С на что? 7.7 - не выдерживает никакой критики по безопасности. А копии документов (печатных) - можно складировать и на фтп и на серваке и де угодно.
Если делать по уму=это чистое версионирование, которое ложит объемами большую базу, а для не большой - не имеет смысла. Если нужен бюджетный вариант - предложите заказчику поставить муляжи видеокамер на филиалах - левака пойдет меньше. А если нужна история - кто выписал этот неправильный счет - просто имя ответственно вставьте в печатную форму. Это не противоречит нормам бух/налог учета, и сразу будет понятно кто виноват.
Если уж на то пошло - без записи и проведения - документы печатать - это больше похоже на работу с екселем.
6. Dima_ 150 18.04.13 12:52 Сейчас в теме
(5) Rad90210,
Выбора нет, что имеем, с тем и работаем....
(Выбор есть всегда: работать или не работать)
Вот и получается, что приходится изобретать почти версионирование на 7.7.
7. Rad90210 13 18.04.13 12:55 Сейчас в теме
Объясните заказчику что это деньги на ветер. В любом случае - создавать копию документа и скрыть его записывать это решение не красивое.
Оставьте свое сообщение