При сопровождении и доработке конфигураций на платформе 1С:Предприятие 7.7 разработчики нередко сталкиваются с ситуацией: в Конфигураторе отредактирован программный код отчета или его печатная форма, изменения сохранены, однако при формировании отчета в режиме «1С:Предприятие» внешний вид и логика работы остаются прежними. Разберем по шагам, почему так происходит, как правильно локализовать исполняемый объект и какие технические особенности платформы 7.7 необходимо учитывать.
В конфигурациях 1С 7.7 один и тот же по смыслу отчет может существовать в нескольких экземплярах. Например, отчет может входить в состав метаданных конфигурации, но при этом пользователи запускают его внешнюю копию (файл с расширением .ert), расположенную в каталоге информационной базы. Если программист открывает ветку «Отчеты» в дереве метаданных и вносит правки туда, а пункт меню обращается к внешнему файлу на диске, пользовательская часть никак не изменится.
Выясним причину и проверим, какой именно объект вызывается из пользовательского меню. Для этого выполним следующие действия:
ОткрытьФорму, например ОткрытьФорму("Отчет", , КаталогИБ() + "ExtForms\ИмяФайла.ert"), то редактировать требуется именно файл на диске через пункт «Файл — Открыть».В отличие от более поздних версий платформы, архитектура 1С 7.7 разделяет сохранение открытого окна и сохранение файла структуры метаданных конфигурации (1Cv7.MD). Если нажать комбинацию клавиш Ctrl+S при активном окне модуля отчета или просто закрыть окно с подтверждением сохранения, изменения останутся во временном буфере Конфигуратора, но в файл базы данных записаны не будут.
Рассмотрим правильный порядок фиксации изменений:
1Cv7.MD заблокирован, конфигуратор выдаст предупреждение о невозможности сохранения.Когда в конфигурации присутствует множество схожих документов, отчетов и внешних обработок, проще всего убедиться в выполнении нужного участка кода с помощью принудительного вывода диагностического сообщения. Добавим вызов модального окна в самое начало процедуры формирования отчета.
Посмотрим на пример размещения контрольной точки в коде процедуры:
Процедура Сформировать()
Предупреждение("Выполняется процедура Сформировать из текущего отчета!");
СоздатьОбъект("Регистр.ДоговорПроект");
СоздатьОбъект("Регистр.АктОбъемРабот");
Таб = СоздатьОбъект("Таблица");
спрОбласть = СоздатьОбъект("Справочник.Области");
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
// Основной алгоритм отчета
Запрос = СоздатьОбъект("Запрос");
// ...
КонецПроцедуры
Если после сохранения метаданных и нажатия кнопки формирования в режиме «1С:Предприятие» окно предупреждения не появилось, значит, открывается совершенно другой объект либо форма переопределена внешним файлом.
Проанализируем программный код вывода печатной формы. Зачастую правки вносятся в макет таблицы (добавляются новые колонки или переименовываются строки), однако в модуле формирование таблицы жестко привязано к исходным именам секций.
Посмотрим на фрагмент кода, отвечающий за вывод данных в результирующую таблицу:
Таб.ВывестиСекцию("Заголовок");
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Банк");
КонецЦикла;
Запрос.Выполнить(ТекстЗапроса);
Пока Запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Область");
Пока Запрос.Группировка(2) = 1 Цикл
Таб.ВывестиСекцию("Заказчик");
Таб.ВывестиСекцию("Шапка");
Пока Запрос.Группировка(3) = 1 Цикл
// Обработка данных и заполнение переменных секции
Таб.ВывестиСекцию("Объект");
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Итог");
КонецЦикла;
Таб.Опции(0);
Таб.Показать();
Обратим внимание на следующие критические моменты:
Таб.ВывестиСекцию("ИмяСекции") обращается строго к именованным областям таблицы. Если в визуальном редакторе была создана новая область, но строка с ее выводом не добавлена в программный код, изменения на печать не попадут.Таб.ИсходнаяТаблица("ИмяФайла"), платформа 1С 7.7 полностью игнорирует встроенный макет отчета и загружает шаблон из внешнего файла формата .mxl. В таком случае визуальные правки необходимо вносить именно в указанный файл таблицы.Чтобы избежать блокировки метаданных и ускорить процесс тестирования, рекомендуется выгружать изменяемый отчет во внешний файл. Разберем этот порядок работы:
.ert в отдельную рабочую папку.