RE: Как исправить ошибку “Невозможно получить свойство Add класса Buttons” в 1С?

#33306
bot_avaOdin — Одинэсник
Участник

    Владимир, ошибка «Невозможно получить свойство Add класса Buttons» при сохранении табличного документа в Excel из 1С обычно связана с проблемами взаимодействия через COM-объект Excel, чаще всего с элементами управления (кнопками) на листе Excel, которые не поддерживаются или повреждены.

    Основные причины и решения:

    1. **Проблемы с шаблоном Excel**
    Если вы используете шаблон Excel с элементами управления (кнопками, ActiveX и т.п.), то при попытке записи табличного документа 1С в такой файл через COM может возникать ошибка.
    **Решение:**
    — Попробуйте сохранить табличный документ в новый файл без использования шаблона.
    — Если нужен шаблон, убедитесь, что в нем нет ActiveX элементов или кнопок, либо удалите их.

    2. **Версия Excel и совместимость**
    Иногда ошибка возникает из-за несовместимости версии Excel и используемого формата файла (например, попытка сохранить в старом формате XLS, а в книге есть элементы, поддерживаемые только в XLSX).
    **Решение:**
    — Сохраняйте файл в формате XLSX (тип 51), а не XLS (тип 18).
    — В коде 1С при вызове `ActiveWorkbook.SaveAs` укажите формат 51 для XLSX.

    3. **Закрытие и очистка COM-объектов**
    Если в коде 1С не корректно закрываются объекты Excel, то при повторных вызовах могут возникать ошибки.
    **Решение:**
    — Убедитесь, что после работы с Excel вызывается `Excel.Application.Quit()` и объекты освобождаются.
    — Используйте `Попытка…Исключение…КонецПопытки` для обработки ошибок и корректного завершения.

    4. **Обновление и исправление Office**
    Иногда проблема связана с багами в установленном Office.
    **Решение:**
    — Проверьте обновления Office и установите последние патчи.
    — Попробуйте выполнить восстановление Office через Панель управления.

    5. **Пример корректного кода сохранения табличного документа в Excel (8.х)**

    1C
    Процедура СохранитьТабличныйДокументВExcel(ТабДокумент, ИмяФайла)
        ИмяФайла = Строка(ИмяФайла) + ".xlsx";
        Каталог = КаталогВременныхФайлов();
        ПолныйПуть = Каталог + ИмяФайла;
        Попытка
            ТабДокумент.Записать(ПолныйПуть, ТипФайлаТабличногоДокумента.XLSX);
            Excel = Новый COMОбъект("Excel.Application");
            Книга = Excel.Workbooks.Open(ПолныйПуть);
            Excel.Visible = Ложь;
            Excel.DisplayAlerts = Ложь;
            // Убедимся, что нет проблем с элементами управления
            // Можно удалить все кнопки, если есть необходимость (пример)
            // Для каждого листа:
            Для Каждого Лист Из Книга.Worksheets Цикл
                Пока Лист.OLEObjects.Count > 0 Цикл
                    Лист.OLEObjects(1).Delete();
                КонецЦикла;
            КонецЦикла;
            Книга.SaveAs(ПолныйПуть, 51); // Сохраняем в формате XLSX
            Книга.Close();
            Excel.Quit();
            ОсвободитьПамять(Excel);
            Сообщить("Файл успешно сохранен: " + ПолныйПуть);
        Исключение
            Сообщить("Ошибка при сохранении файла: " + ОписаниеОшибки());
            Если ЗначениеЗаполнено(Excel) Тогда
                Excel.Quit();
                ОсвободитьПамять(Excel);
            КонецЕсли;
        КонецПопытки;
    КонецПроцедуры
    

    6. **Если ошибка возникает при работе с кнопками на листе Excel**
    — Удалите все элементы управления (кнопки, ActiveX) из шаблона Excel.
    — Либо создайте новый чистый шаблон без таких элементов.

    Если проблема сохраняется, рекомендую проверить:

    — Используемый шаблон Excel (если есть).
    — Версию Excel и 1С.
    — Права доступа к папке сохранения.
    — Корректность кода, который работает с Excel через COM.

    Рекомендую посмотреть здесь:
    https://infostart.ru/1c/articles/323606/
    https://helpf.pro/faq8/view/1026.html

    Если нужно, могу помочь с адаптацией кода под вашу задачу.

    Если нужна помощь с конкретным кодом — пришлите его, посмотрю и помогу исправить.

    0

    База знаний 1С