1c внешний отчет зашифрован

Обновлено: 15.07.2024

Для всех типовых конфигурациях 1С, работающих на платформе 8.3, реализованы следующие механизмы, связанные с ЭЦП:

§ Подписание документов и произвольных файлов цифровой подписью

§ Проверка подписанных файлов и документов

§ Выгрузка документов и подписей в файлы

§ Загрузка документов и подписей из файлов

§ Шифрование файлов с возможностью открытия указанному списку лиц

Для начала нужно подготовить компьютер для работы, т.е. выбрать провайдера, скачать дистрибутив программы поддержки криптографии в 1С и заключить договор на получение реальной электронной подписи, получить сертификаты для шифрования 1С. В примере из статьи выбор пал на провайдера КриптоПро, так как он предоставляет тестовые сертификаты и программные продукты криптографии имеют бесплатный период функционирования).

Для получения и установки ЭЦП для 1С необходимо установить программный продукт «КриптоПро CSP 4.0». Продукт можно скачать на сайте программы в разделе «Продукты СКЗИ КриптоПро CSP/TLS/JSP» пункт «Загрузка файлов».

Возможно протестировать механизм ЭЦП бесплатно, для этого разработчики КриптоПро создали тестовый центр сертификации, который создаст вам бесплатный сертификат, но только для тестирования, расшифровать документ с помощью него навряд ли получится, но чтобы что-то зашифровать в 1С и поставить подпись он годится вполне).

В соответствии с вашей операционной системой вы можете скачать нужный вам дистрибутив, пример показан на рисунке ниже.



Рис. Установка КриптоПро

После установки дистрибутива можно получить тестовые сертификаты (далее просто ключи), для этого нужно проделать следующие шаги:

1. скачиваем и устанавливаем программу КриптоПро ЭЦП Browser plug-in;

2. перейти на раздел сайта КриптоПро;

4. при переходе на сайт у вас появится окно — Подтверждение доступа, нужно согласиться.

5. В следующем окне заполняем данные, их можно заполнить как угодно. Далее из выпадающего списка выбираем пункт Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider или Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider (на данный момент алгоритмом шифрования, имеющим юридическую силу, признается последний), далее ставим галочку — “Пометить ключ как экспортируемый” и в последнем пункте пишем имя нашего сертификата.

6. Далее появится окно, в котором нужно в произвольном направлении двигать мышкой что бы у нас произошла генерация случайно последовательности

7. в следующем окне нажимаем на — Установить этот сертификат



Рис. Настройки ключа



Рис. Сохранение ключа, можно в реестре



Рис. Установка ключа



Рис. Успешное завершение сохранения ключа

Далее, чтобы проверить установленные сертификаты в системе нужно:

1. Зайти в КриптоПро через панель управления

2. Открыть вкладку “Сервис”

3. Нажать “Просмотреть сертификаты в контейнере”

4. Нажать копку “Обзор” и смотрим все сертификаты в системе какие есть на данный момент.



Рис. Вызов остнастки КриптоПро



Рис. Проверка, что сертификат установлен

2. Применение ЭЦП в 1С

Рассмотрим использование механизма криптографии в 1С. Для шифрования и подписания документов ЭЦП в 1С нам понадобится включение механизма шифрования, т.е. перейти в “Администрирование”-> “Обмен электронными документами-> Настройки электронной подписи и шифрования“. Также чтобы помимо возможности подписывать документы и иметь возможность шифровать данные нужно установить константу “Использовать шифрование“ , сделать это всегда можно через меню “Все функции”-> “Константы-> Использовать шифрование“ (иначе пункты меню Зашифровать и Расшифровать будут скрыты в программе, а останется лишь опция Подписать).



Рис. Настройки ЭЦП



Рис. Включение опции шифрования 1С

После установки КриптоПро в списке доступных должен появиться провайдер КриптоПро



Рис. Установленные программы криптопровайдеров

Нажимаем на кнопку добавить и добавляем ранее полученный тестовый/рабочий сертификат по кнопке “Добавить”->“Использовать для подписи и шифования”. Далее потребуется ввести пароль, который вы указывали для ключа при его создании. Если по данному сертификату возможна подпись и/или шифрование, то он успешно добавится. Далее можно нажать кнопку “Проверить” , чтобы проверить какие из двух операций по нему доступны.



Рис. Успешно добавленный сертификат



Рис. Успешно добавленный сертификат в списке сертификатов



Рис. Проверка возможностей сертификата

Для проверки работоспособности системы шифрования/расшифрования нужно зайти в справочник Файлы.



Рис. Команда входа в справочник Файлы

Данные в справочнике Файлы мы можем полполнять как вручную файлами из файловой системы, так и, например, посредством массовой рассылки отчетов и писем. Ниже на примере 1С ЗУП 3.1 приводятся настройки формирования отчета Штатное расписание в файлы базы данных.



Рис. Настройка рассылки отчетов в файлы, 1С ЗУП 3 1



Рис. Настройка рассылки отчетов в файлы, 1С ЗУП 3 1 (продолжение)



Рис. Настройка рассылки отчетов в файлы, 1С ЗУП 3 1 (продолжение)

После нажатия “Зашифровать в 1С” из меню появится окно выбора сертификатов, которыми будет производиться шифрование 1С файла.



Рис. Шифрование/расшифрование файла



Рис. Подбор сертификата для шифрования 1С



Рис. Файл успешно зафшифрован

Как видно из рисунка, файл успешно зашифрован и при открытии в 1С для просмотра или редактирования будет автоматически произведена его расшифровка, без расшифровки открытие файла вызовет ошибку.

Подпишем документ Word, это делается практически аналогично шифрованию.



Рис. Подписание файла

Теперь сохраним файл на диск вместе с ЭЦП, выбрав “сохранить вместе с электронной подписью”.



Как видно мы подписали документ отсоединенной подписью. Подпись может быть также и присоединенной к файлу, главное отличие этого формата в том, что когда вы подписываете документ остается того же формата и размера, а после подписания с ним будет идти отдельный файл специального формата (в данном случае.p7s) который будет считаться самой подписью.

3. Проверка корректности ЭЦП в КриптоАРМ

Проверим корректность подписи можно с помощью программы КриптоАрм, тем самым это может служить доказательством, что документ не был кем-то подменен и был отправлен именно тем лицом, от которого мы ожидали его получить. Сначала надо скачать и установить КриптоАРМ, также снова следует обратить внимание, что для запуска необходимо обладать правами администратора.



Рис. Окно установщика КриптоАРМ

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



Рис. КриптоАРМ определил, что ключ является действующим

Далее проведем непосредственно саму проверку ЭЦП, для этого потребуется выбрать файл, к которому относится подпись. В нашем случае это печатная форма Штатное расписание (Т-3 ) в виде pdf , выбираем его и сразу убеждаемся , что подпись верна.



Рис. Окно проверки подписи в КриптоАРМ



Рис. Указываем файл документа/отчета для проверки подписи в КриптоАРМ

Как защитить модуль внешней обработки от "чайника" знают все - поставить на него пароль. А что делать если основную ценность обработки представляет не только модуль но и макет табличного документа содержащий множество различных секций, который Вы рисовали не одну ночь. За примером далеко ходить не надо - посмотрите на любую форму Госкомстата :)

Ну что, поехали - постановка задачи: защитить макет табличного документа внешней обработки.

1). Сохраняем наш супер-макет табличного документа в MXL-файл - МойМакет.mxl

2). Удаляем его из обработки.

3). Архивируем МойМакет.mxl с помощью архиватора в формате ZIP, ОБЯЗАТЕЛЬНО С ПАРОЛЕМ - МойСекретныйПароль, получаем файл МойМакет.zip

4). Добавляем в нашу обработку макет типа Двоичные данные, называем его ШифрованныйМакет и загружаем в него файл МойМакет.zip

5). В форме обработки:

Процедура КнопкаВыполнитьНажатие ( Кнопка )
Печать ( "ШифрованныйМакет" );
КонецПроцедуры

6). Модуль обработки:

Процедура Печать ( ИмяМакета ) экспорт

// Извлекаем файл ZIP из макета и сохраняем во временный файл
ИмяВременногоФайлаZIP = ПолучитьИмяВременногоФайла ( "zip" );
ДвоичныеДанные = ПолучитьМакет ( ИмяМакета );
ДвоичныеДанные . Записать ( ИмяВременногоФайлаZIP );

// Извлекаем из ZIP-архива MXL-файл и сохраняем его во временный файл
ЧтениеZIP = Новый ЧтениеZipФайла ( ИмяВременногоФайлаZIP , "МойСекретныйПароль" );
ЭлементZIPАрхива = ЧтениеZIP . Элементы . Найти ( ИмяMXLфайла );
ЧтениеZIP . Извлечь ( ЭлементZIPАрхива , КаталогВременныхФайлов (), РежимВосстановленияПутейФайловZIP . НеВосстанавливать );
ЧтениеZIP . Закрыть ();

// Получаем макет табличного документа из M X L-файла
Макет = Новый ТабличныйДокумент ;
Макет . Прочитать ( КаталогВременныхФайлов ()+ ИмяMXLфайла );

// Заметаем следы
УдалитьФайлы ( КаталогВременныхФайлов ()+ ИмяMXLфайла );
УдалитьФайлы ( ИмяВременногоФайлаZIP );

// Показываем результирующий табличный документ пользователю
Табличныйдокумент = Новый ТабличныйДокумент ;
ОбластьМакета = Макет . ПолучитьОбласть ( "Область1|Область2" );
Для Счетчик1 = 1 по 10 цикл
Табличныйдокумент . Вывести ( ОбластьМакета );
Для Счетчик2 = 1 по 4 цикл
Табличныйдокумент . Присоединить ( ОбластьМакета );
КонецЦикла;
КонецЦикла;
Табличныйдокумент . Защита = Истина ;
Табличныйдокумент . Показать ();

7). А теперь самое главное: ставим пароль на модуль нашей внешней обработки - МойСекретныйПароль, иначе все наши выкрутасы с шифрованием-дешифрованием - коту под хвост :)

Конечно кто-то скажет, что данную защиту можно взломать, и конечно он окажется прав, потому что взломать можно ЛЮБУЮ ЗАЩИТУ. Идеальной защиты не существует, как впрочем, и ничего идеального .

Наверняка каждый разработчик заботится о том, чтобы его программы были защищены от нелегального распространения. Особенно если эта разработка – коммерческий, тиражируемый продукт.

Создатели системы 1С: Предприятие 8 позаботились о защите кода. К сожалению, пароль на доступ можно установить только на модули объектов, общие модули, модули обработок и отчетов. В том числе и внешних. Но и этого немало, так как можно значимые процедуры и функции разместить в модуле и потом к ним обращаться.

В данной статье я хочу разобраться, как установить защиту и снять её, если Вы забыли пароль.

Установка защиты на модуль 1C

установка пароля на модуль

Программа меня тут же предупредила о том, что нельзя защитить модуль, имеющий директивы препроцессора:

вопрос

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Что же, посмотрим, во что это выльется. Устанавливаем пароль.


Все оказалось хуже, чем я предполагал. Документ полностью не рабочий. Провести его не удалось, постоянно программа ругается на какие-то незаполненные поля, которых ни в шапке формы, ни в таблице нет.

Вывод однозначный: не все модули можно защитить. Однако ничего Вам не мешает вынести функции и процедуры с директивами препроцессора в отдельный модуль.

Осталось проверить обработки. Возьмем для интереса внешнюю. Защита прошла без проблем.

Проверка надежности защиты с помощью декомилятора модулей 1С


выполнение обработки

Пробуем открыть модуль в конфигураторе, и он прекрасно открывается.

На форумах пишут, что иногда нужно запускать 1С от имени администратора, если выходит ошибка.

Теперь осталось проверить, как декомпилятор справится с общими модулями. Сохраняем конфигурацию в файл.

Выбираем в обработке:

выбор конфигурации для декомпилирования


Загружаем конфигурацию из файла и проверяем защиту. Защита полностью снята.

Данный материал предоставлен только в ознакомительных целях с целью обзора механизма защиты платформы 1С. Запрещено использовать данный материал для получения доступа к защищенным авторским правом разработкам.

Рассмотрим создание внешнего отчета в 1с 8 без использования системы компоновки данных. Для создания внешнего отчета будем использовать конфигурацию Бухгалтерия 2.0, исходные данные: “Написать отчет по 62 счету бухгалтерского учета в который будут выводится обороты за указанный период в разрезе Контрагентов и Договоров контрагентов.

1. Создание отчета

В первую очередь создадим файл внешнего отчета, для этого зайдем в 1с 8 в режиме Конфигуратор, перейдем в меню Файл -> Новый, либо нажмем на пиктограмму Новый документ.

Пиктограмма Новый документ

В списке выберем пункт Внешний отчет. После создания внешнего отчета зададим ему Имя(например ПростейшийОтчет) и сохраним его на диск. Также добавим два реквизита: НачалоПериода и КонецПериодатипа Дата, они понадобятся нам для ограничения временного интервала выборки данных при формировании отчета.

Создание реквизитов внешнего отчета

2. Создание макета внешнего отчета

Для формирования отчета в 1с 8 нужен макет, это шаблон для вывода данных в котором задаются все нужные параметры, рисуются таблицы и т.д. Добавим новый макет, для этого в дереве метаданных отчета выберем пункт Макеты и нажмем кнопку Добавить, при создании выберем для макета тип Табличный документ.

Конструктор макета 1С 8

В нашем макете будет 4 области:

Приступим к созданию областей макета. Для того что бы создать область в макете выделите нужное количество строк и нажмите Меню Таблица -> Имена -> Назначить имя(Либо Ctrl + Shift + N). В область Шапканапишем наименование отчета: Обороты 62 счета, нарисуем при помощи инструмента Границы шапку отчета, а так же зададим параметры НачалоПериода и КонецПериода. При помощи параметров в отчет можно выводить нужные данные, мы будем заниматься эти на следующем этапе разработки, а именно при написании программного кода отчета. Что бы создать параметр в макете выберите нужную ячейку, напишите в ней наименование параметра(без пробелов), щелкните по ней правой кнопкой мыши, в открывшемся меню выберите пункт Свойства. В свойствах ячейки на закладке Макет выберите заполнение Параметр.

Получите понятные самоучители по 1С бесплатно:

Создание параметра в макете отчета

После этого, в ячейке имя параметра будет заключено в угловые скобки(”<>“). В итоге область Шапкадолжна выглядеть так:

Область Шапка макета отчета

В области ДанныеКонтрагент создадим параметры для вывода наименования контрагента, а так же для прихода и расхода по 62 счету, при помощи инструмента Границы оформим область в виде строки таблицы.

Область ДанныеКонтрагент макета отчета

В области ДанныеДоговорКонтрагента создадим параметры для вывода наименования договора, а так же для прихода и расхода по 62 счету, при помощи инструмента Границы оформим область в виде строки таблицы. Сделаем небольшой отступ перед параметром ДоговорКонтрагента(это можно сделать при помощи разбиения и объединения ячеек. Правой кнопкой мыши по ячейке -> Объединить или Разбить ячейку), он нужен для того что бы в отчете было видно, что строка по договору находится ниже по иерархии чем строка по контрагенту.

Область ДанныеДоговорКонтрагента макета отчета

В области Подвал создадим параметры для итогов по приходу и расходу.

Область Подвал макета отчета

В итоге мы должны получить такой макет:

Макет отчета по 62 счету

3. Создание формы отчета

Для вывода данных, задания периода формирования и кнопки Сформировать нашему отчету потребуется форма. Для создания формы найдите в дереве метаданных внешнего отчета пункт Формы и нажмите кнопку Добавить. На первой странице конструктора формы не нужно вносить никаких изменений, следует просто нажать кнопку Далее.

Конструктор формы отчета

На следующей странице конструктора выберем оба доступных реквизита(НачалоПериода, КонецПериода) для расположения на форме.

В итоге у нас получится вот такая форма:

Форма отчета 1с 8

Но в таком виде она нас не устраивает, внесем в нее некоторые изменения:

  • Перетащим кнопку Сформировать из нижней панели отчета на верхнюю(так будет удобнее для пользователя);
  • Растянем форму по вертикали и горизонтали;
  • Расположим поля НачалоПериода и КонецПериода по горизонтали;
  • Добавим на форму элемент управления Поле табличного документа(в него и будет выводиться наш отчет), зададим ему имя ТабДок;
  • Создадим кнопку выбора периода(при ее нажатии будет выводиться диалог с удобным выбором нужного периода). Программный код для нее мы писать пока не будем, поэтому просто расположим кнопку рядом с полями периода.

В итоге наша форма будет иметь такой вид:

4. Программирование

После создания формы отчета приступим к программированию. Для начала создадим процедуру вывода диалога выбора периода(кнопку для этого мы уже создали на предыдущем этапе). Щелкнем правой кнопкой мыши на кнопке и выберем пункт меню Свойства, в свойствах кнопки перейдем на закладку События, где при помощи кнопки со значком лупы создадим процедуру Кнопка1Нажатие в модуле формы.

Создание процедуры отрабатывающей нажатие на кнопку

Переключатся между формой и ее модулем можно при помощи закладок внизу формы

Переключение между формой и ее модулем

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

Получим макет внешнего отчета воспользовавшись функцией ПолучитьМакет(<ИмяМакета>), в параметр ему передадим имя макета, и если такой макет существует, то функция его найдет.

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

Очистим поле табличного документа. Это нужно для того что бы при каждом новом формировании отчета старые данные удалялись.

Теперь, когда инициализация переменных закончена, перейдем к поочередному заполнению и выводу областей макета. Начнем с шапки. Если вы помните мы создали в этой области два параметра НачалоПериода и КонецПериода, передадим туда значения периода формирования отчета, для этого воспользуемcя свойством Параметры области макета.

Больше никаких действий с областью Шапка производитель не надо, поэтому выведем ее поле в табличного документа.

Далее займемся написанием запроса к базе данных, при помощи которого возьмем обороты по счету 62 из регистра бухгалтерии Хозрасчетный. Определим переменную, в которой будет находиться наш запрос.

Перед тем как приступить к написанию текста запроса передадим в него нужные параметры. Так как мы пишем запрос по счету 62 бухгалтерского учета, то в первую очередь создадим параметр для него

Так же в запрос необходимо передать период формирования отчета. Не забываем, что для периода формирования у нас есть специальные реквизиты отчета, их и передаем в качестве параметров.

Приступим к написанию текста запроса, делать это будем при помощи конструктора запросов. Во многих учебных пособиях пишут, что нужно уметь писать запрос и вручную и используя конструктор, но на практике это не так. В задачах, которые постоянно встречаются перед программистом 1С, приоритетом является быстрое и качественное написание кода, а при составлении запроса к базе в ручную этого достичь практически невозможно, вы будете тратить кучу драгоценного времени на то, что бы правильно воспроизвести все конструкции запроса, найти опечатки которые вы сделали при написании и т.п.. Поэтому не тратьте зря время на попытки писать запросы вручную, а пользуйтесь конструктором запросом. Он сэкономит ваше время и позволит без особых усилий писать сложные запросы. Что бы начать писать текст запроса напишем в коде:

После этого поставим курсор между кавычками, нажмем правую кнопку мыши и выберем пункт Конструктор запроса. Откроется окно конструктора запроса.

Окно конструктора запроса 1С 8

Теперь необходимо выбрать нужную нам таблицу базы данных 1С 8. Нам необходима виртуальная таблица Обороты регистра бухгалтерии Хозрасчетный. Найдем ее в левой части окна конструктора

Выбор виртуальной таблицы Хозрасчетный.Обороты в конструкторе запроса

Переместим ее в область Таблицы и займемся заполнением параметров. Для всех виртуальных таблиц запроса есть специальный набор параметров, позволяющих выбирать нужные данные из основной таблицы(в нашем случае основная таблица Регистр бухгалтерии Хозрасчетный). Откроем окно параметров виртуальной таблицы.

Открытие окна параметров виртуальной таблицы

Заполним параметры, периода которые мы передали в запрос. Что бы в тексте запроса использовать параметр следует перед его именем писать символ амперсанда(&)

Заполнение параметров периода виртуальной таблицы запроса 1С 8

Осталось заполнить условие по счету бух. учета. Для этого найдем в параметрах виртуальной таблицы строку УсловиеСчета и напишем там

Также можно воспользоваться конструктором составления условий нажав на кнопку с тремя точками.

План счетов счет 62

Поэтому из полей виртуальной таблицы выбираем Субконто1 и Субконто2. Так как нам необходим приход и расход по сумме, то выбираем также поля СуммаОборотДт и СуммаОборотКт

Выбор полей таблицы в конструкторе запросов

Заполним псевдонимы выбранных нами полей, для этого перейдем на закладку Объединения/Псевдонимы и зададим нужные имена полей.

Псевдонимы для полей запроса 1С 8

Так как в нашем отчете данные будут выводиться иерархично(Контрагент на первом уровне, а все его договоры на втором), то настроим вывод данных в иерархии при помощи Итогов. Перейдем в конструкторе на закладку Итоги. В группировочные поля перетащим последовательно Контрагент и ДоговорКонтрагента, а в итоговые Приход и Расход.

Создание итогов в конструкторе запросов 1с 8

На этом работа в конструкторе запроса завершена, нажимаем кнопку ОК и видим, что текст нашего запроса появился в программном коде.

После того как мы закончили написание запроса, приступим к заполнению областей ДанныеКонтрагент, ДанныеДоговорКонтрагент и Подвал. Все эти области мы заполним данными полученными при выполнении запроса. Так как наш запрос содержит группировки(Контрагент и ДоговорКонтрагента) выберем из него данные следующим образом:

Таким образом мы получим записи с итогами по всем контрагентам.

Перед тем как обходить данные выборки при помощи цикла инициализируем переменные предназначенные для подсчета общих итогов по отчету:

Для того чтобы данные отчета выводились с иерархией(и разворотами по ”+“) зададим начало автогруппировки строк табличного документа:

Все приготовления закончены, теперь приступим к обходу результатов запроса. Обход будем осуществлять при помощи цикла Пока

В начале цикла обнулим параметры Приход и Расход области ДанныеКонтрагент. Для чего это нужно? Представим ситуацию, что по контрагенту Дядя Вася, приход 10, а расход 5, а для за ним следующего контрагента Дядя Петя нет ни прихода ни расхода, в таком случае если мы не обнулим параметры Приход и Расход, то по в строке по контрагенту Дядя Петя попадет приход 5 и расход 10.

После этого заполняем область ДанныеКонтрагент данными элемента выборки

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

Теперь для данного контрагента сделаем выборку по его договорам.

Обход будем осуществлять при помощи цикла Пока.

В цикле по договорам контрагентов обнулим параметры Приход и Расход, заполним область ДанныеДоговориз выборки и выведем ее в табличный документ на второй уровень записей.

Также в этом цикле к переменным расчета итоговых значений по приходу и расходу прибавим текущие значения.

На этом вывод данных в области ДанныеКонтрагент, ДанныеДоговорКонтрагент завершен, осталось завершить автогруппировку строк табличного документа.

Полностью циклы отвечающие за вывод данных в области ДанныеКонтрагент и ДанныеДоговорКонтрагент выглядят так:

Осталось вывести итоговые данные в область Подвал и вывести саму область в Табличный документ.

На этом процесс написания внешнего отчета для 1С 8 без использования СКД завершен. Теперь его можно сформировать в режиме 1С:Предприятие 8 и добавить в справочник ВнешниеОбработки Файл отчета рассмотренного в статье вы можете скачать по ссылке.

Смотрите видео по созданию внешней печатной формы для управляемого приложения:

Читайте также: