При обновлении конфигурации 1С:Бухгалтерия КОРП до новых релизов, например, до версии 3.0.102.11, пользователи и разработчики часто сталкиваются с ситуацией, когда ранее работавшие внешние печатные формы (ВПФ) перестают запускаться и выдают ошибку вида "Поле объекта не обнаружено (ДоступенВыводНаДругихЯзыках)". Эта проблема указывает на то, что типовая конфигурация была изменена, и в ее коде теперь ожидается наличие определенного реквизита, который отсутствует в структуре данных, формируемых вашей внешней печатной формой. Давайте подробно разберем, почему возникает эта ошибка и как ее эффективно устранить.
Прежде чем перейти к решению, нам важно понять, что представляет собой реквизит ДоступенВыводНаДругихЯзыках. Этот элемент конфигурации относится к функционалу мультиязычности в 1С:Предприятии 8.3. Его основное назначение — управление возможностью вывода печатных форм на различных языках, поддерживаемых системой. Если конфигурация работает в мультиязычном режиме, или были добавлены соответствующие механизмы, то типовые печатные формы могут использовать этот реквизит для определения, следует ли предлагать пользователю выбор языка для печати или формировать документ в соответствии с настройками по умолчанию.
Таким образом, когда мы видим ошибку "Поле объекта не обнаружено (ДоступенВыводНаДругихЯзыках)", это означает, что где-то в коде конфигурации (или в коде вашей ВПФ, если она была доработана с учетом мультиязычности) происходит обращение к полю с таким именем, но в текущем контексте данных (например, в коллекции, которая передается для формирования макета) его попросту нет.
Для того чтобы эффективно устранить проблему, давайте рассмотрим, почему она возникает в контексте внешних печатных форм после обновления конфигурации:
Изменение структуры типовой конфигурации: При каждом обновлении 1С разработчики могут вносить изменения в структуру данных и логику работы различных механизмов. В нашем случае, обновление конфигурации 1С:Бухгалтерия КОРП до версии 3.0.102.11, скорее всего, привело к появлению или более активному использованию реквизита ДоступенВыводНаДругихЯзыках в типовом функционале печати. Теперь, когда система пытается сформировать печатную форму, она ожидает, что этот реквизит будет доступен в коллекции параметров.
Интеграция функционала мультиязычности: Появление реквизита ДоступенВыводНаДругихЯзыках является прямым следствием развития или более глубокой интеграции мультиязычного функционала в типовые решения. Этот реквизит позволяет управлять поведением печати в зависимости от выбранного языка интерфейса или необходимости вывода документа на иностранном языке.
Несоответствие версий внешней печатной формы и типовой конфигурации: Внешние печатные формы, в отличие от встроенных в конфигурацию, не обновляются автоматически при обновлении основной базы. Они являются внешними объектами и продолжают работать по своим старым правилам, разработанным для предыдущих версий конфигурации. Если типовой функционал печати начинает ожидать наличие нового реквизита, а внешняя печатная форма его не предоставляет, возникает ошибка "Поле объекта не обнаружено". Это происходит, потому что ваша ВПФ формирует коллекцию параметров для печати по старому шаблону, в котором нет поля ДоступенВыводНаДругихЯзыках, а новый типовой код пытается к нему обратиться.
Таким образом, суть проблемы сводится к тому, что внешняя печатная форма "не знает" о новых требованиях типовой конфигурации и не передает необходимый реквизит для корректной работы механизма печати.
Решение этой проблемы достаточно прямолинейно и заключается в адаптации вашей внешней печатной формы к новым требованиям конфигурации. Нам потребуется внести изменения непосредственно в код ВПФ.
Прежде всего, мы убеждаемся, что ошибка действительно возникает во внешней печатной форме, а не во встроенной. Как правило, об этом свидетельствует сообщение об ошибке, указывающее на модуль внешней обработки/отчета, а также тот факт, что стандартные печатные формы продолжают работать корректно.
Запустите проблемную печатную форму, чтобы вызвать ошибку.
Внимательно изучите текст ошибки. Если в стеке вызовов или в описании ошибки упоминается путь к внешнему файлу (.epf или .erf) или имя внешней обработки/отчета, это подтверждает, что проблема именно в ВПФ.
Нам необходимо получить доступ к исходному коду вашей внешней печатной формы для внесения изменений.
Откройте конфигуратор 1С:Предприятие.
Перейдите в меню "Файл" -> "Открыть..." и выберите файл вашей внешней печатной формы (файл с расширением .epf для обработок или .erf для отчетов).
После открытия ВПФ в конфигураторе, найдите дерево объектов обработки/отчета. Нам нужен модуль объекта. Обычно это либо "Модуль объекта", либо "Основная схема компоновки данных" (если это отчет) и связанный с ней модуль.
Откройте Модуль объекта (или соответствующий модуль), где содержится логика формирования печатной формы.
Внутри модуля объекта нам необходимо найти место, где формируется коллекция параметров, которая затем передается для дальнейшей обработки и вывода печатной формы. В большинстве внешних печатных форм этот механизм реализуется через объект КоллекцияПечатныхФорм, который является таблицей значений или похожим объектом, куда добавляются данные для каждой печатаемой строки или раздела.
Мы ищем процедуру или функцию, которая отвечает за инициализацию этой коллекции и добавление в нее колонок. Чаще всего это одна из следующих процедур:
Печать()
СформироватьПечатнуюФорму()
Процедура, вызываемая из стандартного механизма формирования печатных форм (например, из общего модуля конфигурации).
Используйте поиск по модулю (Ctrl+F) по словам "КоллекцияПечатныхФорм", "Колонки.Добавить". Нам нужно найти место, где уже добавляются колонки в эту коллекцию.
После того как мы нашли подходящее место, где инициализируется КоллекцияПечатныхФорм и добавляются ее колонки, мы должны добавить новую колонку с именем ДоступенВыводНаДругихЯзыках.
Пример типичной структуры процедуры Печать и место для вставки кода:
Процедура Печать(МассивОбъектов, ОбъектыПечати, ПараметрыПечати, КоллекцияПечатныхФорм, АдресаФайловПечати, ДополнительныеПараметры) Экспорт
// Проверяем, существует ли уже колонка, чтобы избежать повторного добавления
Если КоллекцияПечатныхФорм.Колонки.Найти("ДоступенВыводНаДругихЯзыках") = Неопределено Тогда
КоллекцияПечатныхФорм.Колонки.Добавить("ДоступенВыводНаДругихЯзыках");
КонецЕсли;
// Далее идет основной код формирования строк коллекции и вывода макета
// ...
// Пример добавления строки в коллекцию
// НоваяСтрока = КоллекцияПечатныхФорм.Добавить();
// НоваяСтрока.ИмяМакета = "МойМакет";
// НоваяСтрока.ДоступенВыводНаДругихЯзыках = Ложь; // Или Истина, в зависимости от логики
// ...
КонецПроцедуры
Критически важная строка, которую мы добавляем или ищем, если она уже есть, выглядит так:
КоллекцияПечатныхФорм.Колонки.Добавить("ДоступенВыводНаДругихЯзыках");
Эту строку следует разместить в процедуре Печать (или аналогичной), где происходит инициализация КоллекцияПечатныхФорм, желательно после ее создания, но до первого обращения к колонке ДоступенВыводНаДругихЯзыках в дальнейшем коде. Если вы не знаете, какое значение должно быть у этого реквизита, вы можете установить его в Ложь по умолчанию, если только вам не требуется явная поддержка мультиязычности для этой конкретной формы.
Разберем работу кода:
КоллекцияПечатныхФорм: это переменная, которая представляет собой табличный объект (например, ТаблицаЗначений), предназначенный для сбора информации о печатных формах, которые необходимо вывести.
.Колонки: это свойство табличного объекта, которое предоставляет доступ к коллекции колонок этой таблицы.
.Добавить("ДоступенВыводНаДругихЯзыках"): это метод, который добавляет новую колонку в коллекцию колонок. Мы передаем в качестве параметра имя новой колонки – "ДоступенВыводНаДругихЯзыках". Это гарантирует, что при дальнейшем обращении к этой колонке в типовом коде системы, она будет существовать, и ошибка "Поле объекта не обнаружено" не возникнет.
Мы рекомендуем добавить проверку на существование колонки (как в примере выше: Если КоллекцияПечатныхФорм.Колонки.Найти("ДоступенВыводНаДругихЯзыках") = Неопределено Тогда), чтобы избежать ошибок при повторном добавлении, если код ВПФ будет вызываться несколько раз или если колонка уже была добавлена в другом месте.
После внесения изменений сохраните внешнюю печатную форму (Ctrl+S).
Закройте конфигуратор.
Запустите 1С:Предприятие в пользовательском режиме и проверьте работу исправленной внешней печатной формы. Ошибка "Поле объекта не обнаружено (ДоступенВыводНаДругихЯзыках)" должна исчезнуть, и форма должна сформироваться корректно.
Помимо прямого исправления кода, существуют общие рекомендации, которые помогают управлять внешними печатными формами и предотвращать подобные проблемы в будущем:
Актуализация внешних печатных форм: Мы рекомендуем регулярно проверять и обновлять внешние печатные формы. Если ваша ВПФ основана на типовой форме, но была модифицирована, рассмотрите возможность переноса ваших доработок на актуальную версию типовой формы. Это поможет минимизировать проблемы совместимости при будущих обновлениях. Если у вас есть доступ к исходным типовым ВПФ, вы можете использовать их как основу для своих доработок, обновляя их вместе с конфигурацией.
Проверка целостности базы и очистка кэша: Иногда кажущиеся "поле объекта не обнаружено" ошибки могут быть вызваны проблемами с кэшем 1С или повреждением информационной базы. Мы советуем регулярно выполнять следующие действия:
Очистка кэша: Удалите содержимое папок кэша 1С. Эти папки обычно находятся по путям, аналогичным C:\Users\[ИмяПользователя]\AppData\Roaming\1C\1CE\ и C:\Users\[ИмяПользователя]\AppData\Local\1C\1CE\. Закройте все сеансы 1С перед очисткой кэша.
Тестирование и исправление информационной базы: В конфигураторе используйте меню "Администрирование" -> "Тестирование и исправление". Запустите проверку физической целостности базы данных и другие рекомендуемые проверки.
Конвертация ВПФ: Если внешняя печатная форма была создана для очень старых версий платформы 1С или конфигурации, возможно, потребуется ее полная конвертация. Это означает открытие ВПФ в текущей версии конфигуратора и сохранение ее в актуальном формате. В некоторых случаях это может решить более глубокие проблемы совместимости.
Обращение к разработчику: Если внешняя печатная форма является сложной доработкой, имеет множество взаимосвязей с другими частями системы или вы не уверены в своих действиях, мы настоятельно рекомендуем обратиться к специалистам по 1С. Профессиональный разработчик сможет провести аудит ВПФ, адаптировать ее к новым реалиям конфигурации и предложить оптимальные решения для долгосрочной поддержки.
Внешние печатные формы являются мощным инструментом для кастомизации системы 1С, но их использование требует внимательности при обновлении типовых конфигураций. Мы всегда должны помнить, что они не обновляются автоматически и нуждаются в ручной адаптации под изменения, происходящие в основной конфигурации. После выполнения описанных шагов, вы сможете успешно восстановить работоспособность ваших внешних печатных форм и продолжить работу с 1С:Бухгалтерией КОРП.