При разработке собственных решений с нуля у разработчиков часто возникает соблазн перенести готовые, отлаженные алгоритмы и структуры метаданных из типовых решений фирмы «1С» (например, из 1С:Зарплата и Управление Персоналом). Разберем правовые нормы, правила лицензирования вендора и технические особенности использования фрагментов чужого кода в заказных разработках.
Проанализируем правовой статус типовой конфигурации в рамках Гражданского кодекса РФ (часть IV):
Рассмотрим официальные правила лицензирования вендора в отношении конфигураций, содержащих заимствованные фрагменты типовых программ:
1С:Зарплата и Управление Персоналом, имеет действующий договор информационно-технологического сопровождения (КП/ИТС) и клиентские лицензии на платформу 1С:Предприятие 8, сотрудники этой организации вправе использовать доработанную или собранную из фрагментов конфигурацию для автоматизации собственных процессов.1С:ЗУП), а также необходимое количество клиентских лицензий платформы.Чтобы избежать лицензионных рисков и упростить последующее сопровождение базы, рассмотрим рекомендуемые архитектурные подходы:
.cfe): Если требуется доработать функциональность типовой 1С:ЗУП под специфические требования, правильнее вынести уникальные доработки в расширение, оставив типовую конфигурацию на стандартной поддержке вендора.1С:ЗУП, а обмен данными с новой самописной базой организовать через HTTP-сервисы, Web-сервисы или формат EnterpriseData.Разберем пример кода на стороне 1С:ЗУП для передачи расчетных данных в самописную конфигурацию по запросу через HTTP-сервис без нарушения целостности и условий лицензирования:
Функция ПолучитьДанныеСотрудника(ЗапросHTTP)
ПараметрыЗапроса = ЗапросHTTP.ПараметрыЗапроса;
ТабельныйНомер = ПараметрыЗапроса.Получить("ТабельныйНомер");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК ФизЛицо,
| ФизическиеЛица.ФИО КАК ФИО
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|ГДЕ
| ФизическиеЛица.Код = &ТабельныйНомер";
Запрос.УстановитьПараметр("ТабельныйНомер", ТабельныйНомер);
РезультатЗапроса = Запрос.Выполнить();
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
СтруктураОтвета = Новый Структура;
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
СтруктураОтвета.Вставить("Статус", "Успешно");
СтруктураОтвета.Вставить("ФИО", Выборка.ФИО);
Иначе
СтруктураОтвета.Вставить("Статус", "НеНайдено");
КонецЕсли;
ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
ОтветHTTP = Новый HTTPСервисОтвет(200);
ОтветHTTP.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
ОтветHTTP.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Возврат ОтветHTTP;
КонецФункции
Подведем итог: перенос фрагментов кода в собственную базу законен исключительно для внутреннего использования на предприятии, владеющем официальной лицензией на 1С:ЗУП. Передача решения третьим лицам требует обязательного наличия основной поставки конфигурации-донора у каждого конечного пользователя.