Каждый практикующий специалист по 1С или бухгалтер рано или поздно сталкивается с загадочным поведением программы при формировании печатных форм. Представьте ситуацию: в системе зарегистрирован счет-фактура на аванс с номером 12АВ. При выводе документа на печать или при формировании Книги продаж программа упорно выводит вместо этого номера просто АВ, отсекая первые две цифры. При этом аналогичные документы с номерами 13АВ, 14АВ выводятся абсолютно корректно и без каких-либо искажений. Если вручную изменить номер на любое другое значение — проблема исчезает.
В рамках этой статьи мы подробно разберем, почему платформа «1С:Предприятие 8» ведет себя подобным образом, какие внутренние механизмы конфигурации «Бухгалтерия предприятия 3.0» (БП 3.0) за это отвечают, а также рассмотрим пошаговое руководство по устранению этой проблемы раз и навсегда.
Для того чтобы понять логику программы, заглянем «под капот» конфигурации. По стандартам разработки фирмы 1С, внутренние префиксы информационных баз и организаций не должны выводиться в печатных формах документов (таких как счета-фактуры, товарные накладные, УПД). Это логично: название организации уже присутствует в шапке документа, и дублировать его буквенный код в номере не имеет смысла.
За преобразование внутреннего номера документа в понятный для пользователя формат отвечает функция ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(). Давайте проанализируем алгоритм, по которому система определяет, что именно нужно удалить из номера:
БП-000001). Система ищет этот дефис. Если он найден, все символы слева от него (включая сам дефис) признаются префиксом и безвозвратно удаляются, а из оставшейся правой части убираются лидирующие нули. На печать выводится чистый номер 1.12АВ или переносе исторических данных из старых баз), система запускает альтернативный алгоритм. Она обращается к свойствам организации, указанной в документе, и считывает значения реквизитов «Префикс» и скрытого реквизита «Префикс БП 2.0» (ПрефиксБП20).12, то в номере 12АВ первые символы распознаются как префикс и удаляются, оставляя на печать только АВ. В то же время номер 13АВ не совпадает с префиксом 12, поэтому алгоритм оставляет его нетронутым.Пример упрощенной логики этого процесса можно представить следующим кодом:
Функция ПолучитьНомерНаПечать(Знач ВходящийНомер, ПрефиксОрганизации)
// Удаляем стандартные префиксы БП 3.0 с дефисом
ПозицияДефиса = Найти(ВходящийНомер, "-");
Если ПозицияДефиса > 0 Тогда
Возврат Сред(ВходящийНомер, ПозицияДефиса + 1);
КонецЕсли;
// Проверяем совпадение с префиксом организации без дефиса
ДлинаПрефикса = СтрДлина(ПрефиксОрганизации);
Если ДлинаПрефикса > 0 И Лев(ВходящийНомер, ДлинаПрефикса) = ПрефиксОрганизации Тогда
Возврат Сред(ВходящийНомер, ДлинаПрефикса + 1);
КонецЕсли;
Возврат ВходящийНомер;
КонецФункции
Многие пользователи и даже начинающие разработчики сталкиваются с тем, что изменение видимого префикса в карточке организации (например, замена 12 на БП) не решает проблему сразу. Номера продолжают обрезаться. Почему так происходит?
Дело в том, что в справочнике Организации существует служебный реквизит ПрефиксБП20. Он предназначен для обеспечения обратной совместимости при переходе со старой редакции программы «Бухгалтерия предприятия 2.0» на актуальную версию 3.0. В старой редакции использовались трехсимвольные префиксы без дефисов. При конвертации базы этот префикс автоматически записывается в скрытое поле, которое разработчики скрыли с формы карточки организации. Пользователь его не видит, но программные модули печати продолжают его считывать и использовать для обрезки номеров.
Даже после успешного удаления префиксов изменения могут не отобразиться на экране мгновенно. Этому способствуют два важных фактора:
Журнал учета счетов-фактур (поле ПредставлениеНомера). Данные туда записываются в момент проведения документа. Если вы просто поменяли настройки организации, старые документы нужно обязательно перепровести, чтобы они обновили свои записи в регистре по новым правилам.Использование числовых префиксов (12, 03, 99) — критическая ошибка проектирования учета. Настоятельно рекомендуем использовать исключительно буквенные обозначения (например, МСК, СПБ, ОП) по следующим причинам:
Перейдем к практическим действиям. Чтобы исправить некорректный вывод номеров, выполним следующие шаги:
Поскольку реквизит ПрефиксБП20 скрыт от обычного редактирования, нам понадобится встроенная обработка изменения реквизитов.
ПрефиксБП20) и строку Префикс.Чтобы изменения применились в оперативной памяти платформы, выполним простое действие: закроем программу 1С у всех пользователей, которые работают с данной организацией, и зайдем в систему заново. В случае работы в клиент-серверном варианте и при отсутствии результата может потребоваться перезапуск службы сервера «1С:Предприятие».
После очистки префиксов и перезапуска программы нам необходимо обновить кэшированные номера в регистрах документов.
После выполнения этих действий откроем печатную форму счета-фактуры или сформируем Книгу продаж. Номер 12АВ теперь будет выводиться полностью, красиво и без искажений, так как система больше не видит в нем префикса организации.