При отладке программного кода или реализации выгрузки отчетов в файлы разработчики 1С иногда сталкиваются с ошибкой: «Обращение к процедуре объекта как к функции (записать)». Разберем причин возникновения этой ошибки и выясним, как правильно вызывать процедуры выгрузки и корректно отлаживать их исполнение.
Рассмотрим, почему платформа 1С выдает такое сообщение. Все методы объектов во встроенном языке 1С строго разделены на два типа:
Ошибка Обращение к процедуре объекта как к функции возникает в ситуациях, когда платформа ожидает получить значение, а вызываемый метод является процедурой. Проанализируем основные сценарии:
ТабДокумент.Записать(...) в «Табло» (Watch) или нажать Shift+F9, отладчик попытается вычислить и показать возвращаемый результат. Поскольку метод Записать() у объекта ТабличныйДокумент — это процедура, отладчик возвращает ошибку {(1)}Обращение к процедуре объекта как к функции (записать).Результат = ТабДокумент.Записать(...)) или использовать её в логическом условии (Если ТабДокумент.Записать(...) Тогда).Выясним, как корректно вызывать выгрузку табличного документа в файл. Метод Записать() должен вызываться исключительно как отдельная инструкция программы.
Обратим внимание на параметры метода Записать() объекта ТабличныйДокумент: в качестве первого параметра необходимо передавать полный путь к файлу, включающий имя и расширение, а не только имя каталога.
Рассмотрим пример правильного кода:
ТабДокумент = Новый ТабличныйДокумент;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(РезультатОбработкиДокументов);
Построитель.Вывести(ТабДокумент);
// Формируем полный путь к файлу с именем и расширением
ПутьКФайлу = КаталогВыгрузки + "\Результат от " + Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd") + ".xls";
// Вызываем процедуру Записать как отдельную команду
ТабДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);
Проанализируем правильный порядок отладки процедур записи и выгрузки файлов в 1С:
F10 — шаг без захода в процедуры, F11 — шаг с заходом).Записать().Рассмотрим дополнительные практические советы по выгрузке табличных документов:
Попытка ... Исключение для обработки возможных проблем с правами доступа или несуществующими путями:
Попытка
ТабДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
Исключение
Сообщить("Не удалось сохранить файл: " + ОписаниеОшибки());
КонецПопытки;
ТипФайлаТабличногоДокумента.XLS ограничен 65 536 строками. Для отчетов с большим объемом данных предпочтительнее указывать ТипФайлаТабличногоДокумента.XLSX.