Как исправить ошибку «Справочник.СправкиБЕГАИС.ПустаяСсылка» при печати ценников в 1С:Розница

Пользователь 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

После проведения очередного обновления программного продукта 1С:Розница (особенно часто это происходит при переходе на новые субверсии в редакциях 2.2, 2.3 и 3.0) пользователи могут столкнуться со следующей неприятной ситуацией: при попытке открыть обработку печати ценников или при непосредственной отправке макета на печать система аварийно завершает операцию и выдает сообщение об ошибке: {(16, 12)} неверные параметры: "Справочник.СправкиБЕГАИС.ПустаяСсылка" Значение(Справочник.СправкиБЕГАИС.ПустаяСсылка) КАК СправкаБ. Примечательно, что данная проблема может возникать даже в тех торговых точках, которые никогда не осуществляли продажу алкогольной продукции, а в настройках параметров учета флаг «Алкогольная продукция» полностью отключен.

В рамках данной статьи мы подробно разберем, почему возникает этот сбой, проанализируем внутреннее устройство шаблонов ценников в системе 1С, а также рассмотрим по шагам несколько методов решения — от самых простых пользовательских действий до продвинутых программных способов исправления СКД (Схемы компоновки данных) без потери уникального дизайна ваших ценников.

Выясняем техническую причину возникновения ошибки

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

  1. Рефакторинг метаданных в обновлении. Фирма 1С постоянно развивает интеграцию с государственными информационными системами, включая ЕГАИС. В ходе оптимизации кода и перехода на новые форматы обмена разработчики полностью удалили или реструктурировали старый объект метаданных — справочник СправкиБЕГАИС. Вместо него в конфигурации появились новые справочники (например, Справки1ЕГАИС и Справки2ЕГАИС).
  2. Устаревшие запросы в сохраненных шаблонах. Все пользовательские и отредактированные шаблоны этикеток и ценников хранятся непосредственно в вашей информационной базе в справочнике ХранилищеШаблонов. Каждый элемент этого справочника содержит двоичные данные, в которых упакована Схема компоновки данных (СКД). В этой схеме жестко прописан SQL-подобный текст запроса, который система использует для выборки данных о товарах, ценах, штрихкодах и характеристиках перед выводом на печать. В старых версиях запроса СКД присутствовало обращение к удаленному ныне объекту: ЗНАЧЕНИЕ(Справочник.СправкиБЕГАИС.ПустаяСсылка) КАК СправкаБ.
  3. Конфликт компиляции запроса. Как только пользователь нажимает кнопку «Печать», платформа 1С пытается инициализировать схему компоновки данных и скомпилировать этот встроенный запрос. Обнаружив, что справочника с именем СправкиБЕГАИС в метаданных конфигурации больше физически не существует, компилятор платформы прерывает работу с ошибкой совместимости типов, блокируя весь процесс печати.

Официальная техподдержка 1С подтверждает, что данное поведение не классифицируется разработчиками как ошибка конфигурации. Ответственность за актуализацию пользовательских макетов возлагается на конечного пользователя или обслуживающего ИТ-специалиста. Следовательно, ждать автоматического исправления с новыми патчами бессмысленно — проблему нужно решать самостоятельно.

Способ 1. Простое пересохранение шаблона (для типовых макетов)

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

Выполним по шагам следующие действия в интерфейсе программы:

  1. Перейдем в раздел Администрирование (в некоторых редакциях — Настройки).
  2. Откроем подраздел Печатные формы, отчеты и обработки.
  3. Найдем и выберем пункт Шаблоны этикеток, ценников и чеков ККМ.
  4. В открывшемся списке найдем тот макет, при использовании которого возникает ошибка, и откроем его двойным кликом мыши.
  5. В открывшейся форме карточки шаблона, не внося никаких визуальных изменений, нажмем на кнопку Записать и закрыть.

Во время процедуры записи система инициирует обновление структуры СКД, подтягивая новые правила сопоставления типов метаданных, и очистит некорректную ссылку на удаленный справочник ЕГАИС. После этого обязательно протестируем печать — в большинстве случаев работоспособность восстанавливается.

Способ 2. Обходной путь через изменение группы шаблона

Иногда при попытке выполнить действия из Способа 1 пользователи сталкиваются с тем, что кнопка записи неактивна или программа выдает ошибку прав доступа/структуры данных. Разберем альтернативный алгоритм действий, который заставляет систему принудительно пересохранить параметры объекта:

  1. Откроем нужный шаблон ценника из справочника ХранилищеШаблонов.
  2. Обратим внимание на реквизит Принадлежит группе.
  3. Нажмем на кнопку выбора (три точки) или ссылку Показать все.
  4. Если в вашей базе нет созданных групп для шаблонов, просто выделим корневую папку справочника и нажмем кнопку Выбрать.
  5. После этого визуальный редактор перечитает структуру данных. Теперь нажмем кнопку сохранения. Данное действие обновит кэш и перезапишет СКД шаблона.

Способ 3. Программное обновление СКД (для сложных кастомных шаблонов)

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

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

Для выполнения этой процедуры нам понадобится запустить конфигуратор или использовать обработку «Консоль кода». Напишем и выполним следующий фрагмент кода:


&НаСервере
Процедура ИсправитьСхемуКомпоновкиШаблона(ИмяСломанногоШаблона, ИмяНовогоШаблона)
    
    // Получаем ссылки на сломанный пользовательский шаблон и новый чистый шаблон-донор
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ХранилищеШаблонов.Ссылка КАК Ссылка,
        |	ХранилищеШаблонов.Наименование КАК Наименование
        |ИЗ
        |	Справочник.ХранилищеШаблонов КАК ХранилищеШаблонов
        |ГДЕ
        |	ХранилищеШаблонов.Наименование В (&Имена)";
    
    МассивИмен = Новый Массив;
    МассивИмен.Добавить(ИмяСломанногоШаблона);
    МассивИмен.Добавить(ИмяНовогоШаблона);
    Запрос.УстановитьПараметр("Имена", МассивИмен);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    СломанныйОбъект = Неопределено;
    НовыйОбъект = Неопределено;
    
    Пока Выборка.Следующий() Цикл
        Если Выборка.Наименование = ИмяСломанногоШаблона Тогда
            СломанныйОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ИначеЕсли Выборка.Наименование = ИмяНовогоШаблона Тогда
            НовыйОбъект = Выборка.Ссылка.ПолучитьОбъект();
        КонецЕсли;
    КонецЦикла;
    
    Если СломанныйОбъект <> Неопределено И НовыйОбъект <> Неопределено Тогда
        // Копируем правильную двоичную схему из донора в наш рабочий шаблон
        СломанныйОбъект.СхемаКомпоновкиДанных = Новый ХранилищеЗначения(НовыйОбъект.СхемаКомпоновкиДанных.Получить());
        СломанныйОбъект.Записать();
        Сообщить("Схема компоновки данных успешно восстановлена. Визуальный макет сохранен!");
    Иначе
        Сообщить("Внимание! Проверьте правильность написания наименований шаблонов.");
    КонецЕсли;
    
КонецПроцедуры

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

Способ 4. Корректировка XML-структуры запроса СКД

Для наиболее опытных администраторов и программистов рассмотрим самый элегантный способ — точечное редактирование XML-кода схемы компоновки данных. Этот метод позволяет не перезаписывать схему полностью (как в Способе 3), а лишь удалить или переименовать проблемный участок кода в схеме.

Алгоритм действий выглядит следующим образом:

  1. Программно извлекаем XML-текст схемы из реквизита СхемаКомпоновкиДанных поврежденного элемента справочника ХранилищеШаблонов.
  2. Преобразуем полученные двоичные данные в текстовую строку XML.
  3. С помощью текстовой замены находим вхождение строки Справочник.СправкиБЕГАИС.ПустаяСсылка.
  4. Заменяем ее на актуальный тип метаданных, например, на Справочник.Справки2ЕГАИС.ПустаяСсылка, либо полностью вырезаем это поле из запроса СКД, если учет алкоголя в системе не планируется.
  5. Записываем измененный XML-текст обратно в реквизит шаблона, упаковав его в объект ХранилищеЗначения.

Этот подход гарантирует 100% сохранение всех связей полей, пользовательских настроек компоновки и внешнего вида ценника при минимальном вмешательстве в логику работы системы.

Резюме и рекомендации по предотвращению подобных ошибок

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

← На главную