Один из способов, как защитить программный код в 1С.
Приветствую Вас, уважаемый читатель нашего блога SoftMaker.kz! Ни для кого не секрет, что иногда нужно защищать свои разработки от недобросовестных заказчиков. Здесь, на этом сайте некоторое время назад были опубликованы статьи, как объединить две таблицы значений или как отобразить флажок в строках табличного поля. Сегодня мы посмотрим, как можно защитить подобного рода программный код. Итак, приступим!
Для начала при разработке проекта, необходимо создать новый общий модуль в конфигурации, куда будем записывать свои процедуры и функции. Добавим новый общий модуль, нажав правой кнопкой мыши на узле «Общие модули»: «Дерево конфигурации — Общие — Общие модули».
Например, общий модуль называется «Расчет». В нём напишем функцию «ПолучитьСумму». То, что записано в самой процедуре представляет для нас ценность. Поэтому нужно предпринять шаги, чтобы защитить код.
В стандартной конфигурации «1С:Бухгалтерия» существует справочник «ВнешниеОбработки». Он содержит список произвольных внешних обработок. Мы можем также добавлять в него свои обработки. Мы будем использовать этот справочник для хранения в нем нашей обработки, чтобы вызывать из нее необходимые процедуры и функции. Если нужно, удалим нашу обработку из справочника.
Открыть справочник «ВнешниеОбработки» можно: «Сервис — Внешние печатные формы, отчеты и обработки — Внешние обработки». В общем модуле «Расчет» напишем функцию для поиска внешней обработки в справочнике «ВнешниеОбработки».
// С помощью этой функции получаем форму внешней обработки для работы с ней Функция ОбработкаРасчет() Экспорт НайденнаяСсылка = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Расчет"); Если НайденнаяСсылка = Справочники.ВнешниеОбработки.ПустаяСсылка() Тогда Предупреждение("Обработка удалена!",3); Иначе ИмяФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанные = НайденнаяСсылка.ХранилищеВнешнейОбработки.Получить(); // В реквизите ХранилищеВнешнейОбработки - // тип ХранилищеЗначения, хранится наша обработка ДвоичныеДанные.Записать(ИмяФайла); Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла); УдалитьФайлы(ИмяФайла); // Проверяем, пришло ли время удалить обработку из справочника Форма.Проверить(); Возврат Форма; КонецЕсли; КонецФункции // ОбработкаРасчет()
Создадим свою внешнюю обработку. В Конфигураторе выберем пункт меню: «Файл — Новый — Внешняя обработка». Сохраним как «Расчет.epf». Добавим в неё форму. Теперь откроем эту форму на вкладке модуль. В модуль формы обработки скопируем процедуру «ПолучитьСумму» из общего модуля «Расчет». Также в модуль формы обработки добавим процедуру «Проверить»:
Процедура Проверить() Экспорт Если Дата(2012,02,01) <= ТекущаяДата() Тогда НайденнаяСсылка = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Расчет"); Если НайденнаяСсылка <> Справочники.ВнешниеОбработки.ПустаяСсылка() Тогда Объект = НайденнаяСсылка.ПолучитьОбъект(); Объект.Удалить(); КонецЕсли; КонецЕсли; КонецПроцедуры
Процедура «Проверить» удаляет обработку из справочника, в указанную в ней дату. Теперь заменим тело процедуры «ПолучитьСумму» следующим кодом:
Функция ПолучитьСумму() Экспорт // Получаем форму обработки ФормаОбработки = ОбработкаРасчетТарифов(); Если ТипЗнч(ФормаОбработки) = Тип("Форма") Тогда // Если форма найдена вызываем одноимённую функцию Возврат ФормаОбработки.ПолучитьСумму(); КонецЕсли; КонецФункции // ПолучитьСумму()
Итак, в теле процедур и функций общего модуля прописываем вызовы одноимённых процедур и функций внешней обработки, а когда нужно остановить работу этих процедур и функций удаляем обработку из справочника. Сохраняем изменения во внешней обработке «Расчет.epf». Запускаем 1С в режиме Предприятие и добавляем нашу внешнюю обработку в справочник «ВнешниеОбработки»: «Сервис — Внешние печатные формы, отчеты и обработки — Внешние обработки».
Насколько я понимаю код обработки при этом все равно остается открытым… + к тому же если в конторе делаются бэкапы инф. баз, то в бэкапах будут сохранены и сами обработки… а следовательно любой более и менее разбирающийся человек сможем восстановить удаленную обработку и подправить ее таким образом чтобы она не удалялась..
Согласен, но если бэкапы не делаются?
А если нет такого человека и сразу не найдешь его? Зависит от ситуации, а значит по ситуации используем, тот или иной вариант защиты. Это один из них.