Как найти функцию печати УПД в 1С 7.7, если ее нет в программном коде документа?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

В процессе поддержки старых конфигураций на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с ситуацией, когда в пользовательском интерфейсе (например, в списке выбора печати) пункт меню присутствует, а при попытке найти соответствующий код в конфигураторе поисковик выдает нулевой результат. Особенно часто это случается с УПД (Универсальным передаточным документом), так как этот формат появился значительно позже прекращения активного развития платформы 7.7 и всегда внедрялся как внешняя доработка.

Разберем по шагам, как найти «исчезнувший» код и где могут скрываться функции печати в сильно модифицированных базах.

Шаг 1: Анализ программного кода модуля документа

Первым делом проанализируем процедуру, которая отвечает за вывод списка печатных форм. В нашем примере это процедура ПечатьПоВыбору. Рассмотрим фрагмент кода, предоставленный в обсуждении:


СписокЗнПеч = СоздатьОбъект("СписокЗначений");
СписокЗнПеч.УдалитьВсе();
СписокЗнПеч.ДобавитьЗначение("Расходная накладная");
СписокЗнПеч.ДобавитьЗначение("ТТН");
СписокЗнПеч.ДобавитьЗначение("Счёт-фактура");
СписокЗнПеч.ДобавитьЗначение("Складская накладная"); 
СписокЗнПеч.ДобавитьЗначение("Торг12"); 
СписокЗнПеч.ДобавитьЗначение("ЕГАИС"); 
ЧтоПечатать = "";

Если СписокЗнПеч.ВыбратьЗначение(ЧтоПечатать, "Что печатать?",,,0) > 0 Тогда
    Если ЧтоПечатать = "Расходная накладная" Тогда
        // Вызов внешней формы через список параметров
        СписокПараметров = СоздатьОбъект("СписокЗначений");
        СписокПараметров.ВставитьЗначение(1,"РасходнаяНакладная");
        СписокПараметров.ВставитьЗначение(2,ТекущийДокумент());
        ОткрытьФорму("Отчет",СписокПараметров,КаталогИБ() + "ERT\Сертификаты\ПечатьСертификатов.ert");
    ИначеЕсли ЧтоПечатать = "Счёт-фактура" Тогда
        // Аналогичный вызов для счет-фактуры
        // ...
    КонецЕсли;
КонецЕсли;

Проанализируем ситуацию: в коде выше мы видим жесткое заполнение объекта СписокЗначений. Если пункта «УПД» в методах ДобавитьЗначение нет, но в режиме «Предприятие» пользователь его видит, значит, происходит одно из двух:

  1. Список дополняется динамически в другой части модуля или в Глобальном модуле.
  2. Используется внешняя компонента (например, FormEx), которая подменяет пункты меню.
  3. Код, который вы видите в конфигураторе, не соответствует коду в рабочей базе (редко, но бывает при некорректных динамических обновлениях в 7.7).

Шаг 2: Использование отладчика и замера производительности

Если визуальный поиск не дает результатов, воспользуемся самым надежным инструментом — отладчиком. Посмотрим, как это сделать правильно:

  1. Запустите 1С:Предприятие в режиме отладки.
  2. Откройте нужный документ и дойдите до момента вызова списка печати.
  3. В конфигураторе включите «Замер производительности» (меню Отладка — Замер производительности).
  4. Нажмите кнопку «Печать» и выберите пункт «УПД».
  5. Сразу после формирования печатной формы остановите замер.

В появившемся окне замера мы увидим список всех процедур и функций, которые были выполнены. Обратите внимание на колонку «Объект». Если там указан внешний файл с расширением .ert, значит, логика печати вынесена во внешнюю обработку.

Шаг 3: Поиск во внешних печатных формах

В 1С 7.7 существует стандартный механизм подключения внешних печатных форм, который часто не требует правки модуля самого документа. Проверим настройки в пользовательском режиме:

Перейдем в меню Сервис — Дополнительные возможности или Сервис — Регистрация внешних печатных форм (название зависит от конфигурации). Найдем в списке наш вид документа. Если для него зарегистрирована форма с названием «УПД», мы увидим путь к файлу на диске.

Обычно такие файлы хранятся в подкаталогах основной базы:

Шаг 4: Глобальный поиск по файловой системе

Иногда программисты «старой школы» использовали весьма экзотические способы хранения кода. Выясним причину, по которой поиск в конфигураторе не находит слово «УПД». Конфигуратор ищет только внутри файла 1cv7.md. Если код вынесен во внешние отчеты (.ert), поиск их не «увидит».

Воспользуемся сторонним файловым менеджером (например, Total Commander) или системным поиском Windows для поиска текста внутри файлов:

  1. Укажите путь к каталогу информационной базы.
  2. В строке поиска файлов задайте маску *.ert;*.md.
  3. В поле «С текстом» введите "Универсальный передаточный" или "УПД".
  4. Важно: ищите именно строковые константы, которые выводятся на печать или используются в именах файлов.

Шаг 5: Проверка нестандартных путей (Библиотеки форм)

Как показала практика обсуждения, проблема часто кроется в наследовании инфраструктуры от предыдущих разработчиков. Проанализируем сообщение автора: файлы нашлись в каталоге другой информационной базы. Это происходит, когда в коде прописываются пути, отличные от стандартного КаталогИБ().

Посмотрим на пример опасного кода:


// Пример того, как делать НЕ желательно
ПутьКФормам = "Z:\Common_1C_Files\External_Forms\";
ОткрытьФорму("Отчет", Параметры, ПутьКФормам + "UPD_v2.ert");

Если в вашей базе реализован подобный механизм «библиотеки форм», обязательно проверьте константы и справочники, где могут храниться пути к этим сетевым ресурсам.

Резюме и рекомендации

Для того чтобы эффективно разобраться в структуре печати 1С 7.7, придерживайтесь следующих правил:

  1. Всегда проверяйте Глобальный модуль. В семерке многие функции печати выносились туда для общего доступа из разных журналов и документов.
  2. Изучайте справочник «Внешние печатные формы». Если база типовая или на базе «Торговля и Склад», скорее всего, УПД подключен именно там.
  3. Ищите по ключевым словам в файлах ERT. Файл печатной формы — это полноценный объект с модулем, и именно там скрыта вся математика расчета налогов и вывода строк.
  4. Следите за переменной Конт. Во внешних печатных формах контекст документа передается через переменную Форма.Параметр или напрямую через Контекст. Это поможет понять, какие данные документ передает в УПД.

Помните, что в эпоху 1С 7.7 жесткая привязка к именам пользователей (как упоминавшийся в теме ИмяПользователя() = "Антон") была частым способом разграничения прав «на коленке». Если вы не видите функционал, возможно, ваш текущий интерфейс или имя пользователя просто не попадают под условия видимости данного пункта меню.

← На главную