В современных ИТ-ландшафтах предприятий часто возникают ситуации, когда на сервере вместо привычного пакета Microsoft Office установлены альтернативные решения, такие как SoftMaker Office и его табличный редактор PlanMaker. Это создает определенные трудности для разработчиков 1С, привыкших использовать стандартный Excel.Application. В рамках данной статьи мы подробно разберем, как адаптировать ваш код для работы с PlanMaker 2018, проанализируем возможности его COM-интерфейса и рассмотрим альтернативные способы обработки данных, которые предоставляет сама платформа 1С.
Если ваша задача требует именно автоматизации приложения (например, для формирования сложных печатных форм с использованием макросов или специфического форматирования), необходимо использовать механизм OLE Automation. Главная ошибка при переходе с Excel на PlanMaker заключается в попытке использовать старый программный идентификатор. Для PlanMaker 2018 (и более поздних версий) идентификатор объекта в системе отличается.
Рассмотрим процесс инициализации соединения. Вместо привычного создания объекта Excel, мы будем использовать идентификатор PlanMaker.Application. Давайте разберем этот процесс по шагам:
// Инициализация COM-соединения с PlanMaker
Попытка
ПМ = Новый COMОбъект("PlanMaker.Application");
Исключение
Сообщить("Не удалось запустить PlanMaker. Проверьте, установлена ли программа на сервере.");
Возврат;
КонецПопытки;
// Настройка видимости приложения
ПМ.Visible = Истина; // Установите Ложь, если работа должна идти в фоновом режиме
После успешного создания объекта ПМ мы получаем доступ к объектной модели приложения. Она во многом напоминает структуру Microsoft Excel, что значительно облегчает перенос существующего кода. Основная иерархия выглядит следующим образом: Application -> Workbooks -> Workbook -> Sheets -> Sheet -> Cells. Выясним, как создать новый документ или открыть существующий.
// Создание новой книги
Книга = ПМ.Workbooks.Add();
// Или открытие существующего файла
ПутьКФайлу = "C:\Docs\Report.xlsx";
Книга = ПМ.Workbooks.Open(ПутьКФайлу);
// Обращение к активному листу
Лист = ПМ.ActiveSheet;
Для записи или чтения данных в PlanMaker используются знакомые методы Cells и Range. Проанализируем ситуацию, когда нам необходимо заполнить таблицу данными из запроса 1С. Важно отметить, что PlanMaker корректно обрабатывает свойство Value, однако в некоторых специфических случаях может потребоваться использование свойства Contents.
Рассмотрим пример заполнения данных:
// Запись значения в конкретную ячейку по координатам (строка, колонка)
Лист.Cells(1, 1).Value = "Наименование товара";
Лист.Cells(1, 2).Value = "Количество";
// Запись через обращение к диапазону (Range)
Лист.Range("A2").Value = "Смартфон";
Лист.Range("B2").Value = 10;
// Чтение значения из ячейки
ТекЗначение = Лист.Range("A2").Value;
По завершении работы с документом крайне важно правильно освободить ресурсы. В отличие от интерактивной работы, программные процессы могут "зависать" в памяти сервера, если их не закрыть явно. Мы рекомендуем всегда использовать метод Quit() в блоке завершения алгоритма.
// Сохранение файла в нужном формате
Книга.SaveAs("C:\Docs\Result.xlsx");
// Закрытие приложения
ПМ.Quit();
ПМ = Неопределено;
Как мы выяснили из обсуждения, часто использование COM-объекта является избыточным, особенно если на сервере нет Excel, а PlanMaker установлен лишь как средство просмотра. Если ваша цель — просто прочитать данные из файла .xlsx (который является форматом по умолчанию для PlanMaker 2018), платформа 1С предоставляет мощный встроенный инструмент, не требующий наличия стороннего ПО.
Проанализируем преимущества использования ТабличныйДокумент:
Разберем пример кода для быстрого чтения данных из файла PlanMaker:
ТабДок = Новый ТабличныйДокумент;
Попытка
// Используем метод Прочитать, указывая путь к файлу и способ чтения
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
// Теперь данные доступны в объекте ТабДок, и мы можем обходить их в цикле
Для Стр = 1 По ТабДок.ВысотаТаблицы Цикл
Товар = ТабДок.Область(Стр, 1).Текст;
Колво = ТабДок.Область(Стр, 2).Значение;
// Обработка данных...
КонецЦикла;
Исключение
Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
КонецПопытки;
При работе с PlanMaker через COM-соединение следует учитывать несколько важных моментов, которые помогут избежать ошибок в промышленной эксплуатации:
BasicMaker является основным источником информации о методах и свойствах PlanMaker. Практически любой код, написанный для макроса PlanMaker, переносится в 1С простым копированием с заменой синтаксиса присваивания объектов.ТабличныйДокумент.Прочитать() или Записать(), всегда отдавайте предпочтение встроенным средствам 1С.Таким образом, мы рассмотрели два полноценных подхода к решению задачи. Выбор между использованием прямого обращения через COMОбъект("PlanMaker.Application") и встроенными методами платформы 1С должен зависеть от сложности ваших задач по форматированию и наличия лицензионного ПО на сервере приложений.