Можно ли легально использовать базовую версию 1С:Деньги как клиентское приложение для сторонней SQL-базы?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В среде разработчиков 1С часто возникает вопрос: как минимизировать затраты на лицензирование при создании небольших учетных систем или интерфейсов для работы с внешними данными. Одной из самых амбициозных идей является использование максимально дешевых базовых конфигураций, таких как 1С:Деньги, в качестве программной оболочки (клиента) для работы со сторонними базами данных на SQL. Разберем подробно технические и юридические нюансы такого подхода, опираясь на официальные разъяснения правообладателя и практический опыт реализации гибридных систем.

Юридическая чистота: позиция компании 1С

Ключевым вопросом при реализации подобных «гибридов» является соблюдение Лицензионного соглашения. Проанализируем ответ линии консультаций по лицензированию (lic@1c.ru). Основное требование звучит следующим образом: если на каждом рабочем месте установлена отдельная информационная база 1С:Предприятия с конфигурацией 1С:Деньги, к которой осуществляется монопольный доступ, и при этом на каждом компьютере активирована уникальная лицензия с собственным регистрационным номером, то прямого нарушения лицензионного соглашения нет.

Важно понимать, что в данном случае 1С выступает лишь как среда исполнения кода и визуализации интерфейса. Юридические препятствия отсутствуют до тех пор, пока мы не пытаемся использовать базовую версию для многопользовательской работы в одной файловой базе или не пытаемся обойти механизм защиты программного продукта. Таким образом, использование встроенных инструментов 1С для обращения к сторонним серверам (SQL, Web-сервисы) является легальным способом расширения функционала программы.

Технические ограничения базовых версий и их преодоление

Прежде чем приступить к разработке, проанализируем ограничения, накладываемые платформой на базовые версии (в частности, на «1С:Деньги»):

  1. Невозможность изменения конфигурации: Вы не можете добавить новые объекты метаданных (справочники, документы) непосредственно в дерево конфигурации.
  2. Отсутствие поддержки COM-соединения и Automation-сервера: Вы не сможете подключиться к этой базе извне как к OLE-объекту.
  3. Работа только в файловом режиме: Базовая версия не работает с сервером приложений 1С.
  4. Ограничение на количество записей: В некоторых учебных версиях есть лимиты, но в коммерческой базовой версии «1С:Деньги» лимиты на программное чтение внешних данных отсутствуют.

Рассмотрим, как обойти ограничение на изменение конфигурации. Единственный эффективный путь — использование внешних обработок (.epf). Весь прикладной код, формы и логика взаимодействия с SQL должны быть вынесены во внешние файлы. Пользователь запускает стандартную «1С:Деньги», открывает внешнюю обработку, которая и становится основным рабочим интерфейсом.

Архитектура гибридного решения: 1С + SQL

Рассмотрим схему, при которой 1С отвечает за «красивые картинки» и бизнес-логику на стороне клиента, а MySQL или PostgreSQL — за надежное хранение данных и многопользовательский доступ. Это позволяет создать систему, где данные доступны одновременно и через 1С-клиент, и, например, через веб-сайт на PHP/Python.

Для реализации этой схемы нам необходимо организовать подключение через объект ADODB.Connection. Разберем пример кода для инициализации соединения с внешней базой данных:


&НаКлиенте
Процедура ПодключитьсяКSQL()
    // Создаем объект соединения
    Соединение = Новый COMОбъект("ADODB.Connection");
    
    // Формируем строку подключения (пример для MySQL)
    ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Port=3306;Database=my_custom_db;User=admin;Password=strong_pass;Option=3;";
    
    Попытка
        Соединение.Open(ConnectionString);
        Сообщить("Связь с SQL-сервером установлена успешно!");
    Исключение
        Сообщить("Ошибка подключения: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

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

Реализация объектов «Справочник» и «Документ» на стороне SQL

Поскольку мы не можем создавать объекты в метаданных 1С, нам придется эмулировать их структуру в SQL. Рассмотрим пример создания таблицы для хранения документов:


CREATE TABLE doc_orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    doc_date DATETIME,
    doc_number VARCHAR(20),
    client_name VARCHAR(255),
    total_amount DECIMAL(15, 2),
    posted TINYINT(1) DEFAULT 0
);

В 1С мы создаем управляемую форму внешней обработки, где размещаем таблицу значений. При открытии формы выполняем SQL-запрос SELECT * FROM doc_orders и заполняем таблицу значений 1С. Для обеспечения производительности при больших объемах данных необходимо реализовать пагинацию (постраничный вывод), так как стандартный динамический список 1С не сможет работать напрямую с таким источником.

Бизнес-логика и проведение документов

Самый ответственный этап — имитация «проведения» документа. В классической 1С это запись в регистры. В нашем гибриде мы должны реализовать транзакционную запись в SQL-таблицы остатков. Разберем по шагам алгоритм проведения:

  1. Открываем транзакцию в SQL через метод BeginTrans() объекта соединения.
  2. Проверяем наличие остатков (SQL-запрос SELECT с блокировкой строк).
  3. Записываем движения в таблицу оборотов/остатков.
  4. Обновляем статус документа в основной таблице (поле posted = 1).
  5. При возникновении ошибки 1С или отказа SQL выполняем RollbackTrans(), иначе — CommitTrans().

Рассмотрим пример кода для записи данных в SQL:


&НаСервереБезКонтекста
Процедура ЗаписатьДанныеВSQL(СтруктураДанных)
    Соединение = Новый COMОбъект("ADODB.Connection");
    Соединение.Open(ПолучитьСтрокуПодключения());
    
    ТекстЗапроса = "INSERT INTO doc_orders (doc_date, doc_number, client_name, total_amount) 
                   |VALUES ('" + Формат(СтруктураДанных.Дата, "ДФ=yyyy-MM-dd") + "', 
                   | '" + СтруктураДанных.Номер + "', 
                   | '" + СтруктураДанных.Клиент + "', 
                   | " + СтрЗаменить(Строка(СтруктураДанных.Сумма), ",", ".") + ")";
                   
    Соединение.Execute(ТекстЗапроса);
    Соединение.Close();
КонецПроцедуры

Преимущества и недостатки подхода

Преимущества:

Риски и сложности:

Заключение

Использование 1С:Деньги в качестве клиента к сторонней базе данных — это вполне рабочая и, что немаловажно, юридически чистая стратегия для специфических задач автоматизации. Мы проанализировали ситуацию и выяснили, что такая архитектура идеально подходит для создания «переходных» систем, когда бизнес хочет получить преимущества структурированного хранения данных в SQL, сохраняя привычный для многих бухгалтеров и менеджеров интерфейс 1С. Рассмотрим этот путь как создание собственного фреймворка на базе мощной платформы, позволяющего за минимальные деньги получить профессиональный инструмент учета.

← На главную