Почему суммы в 1С отображаются с лишней запятой и валютой (например, "155,15, RUB") и как это исправить?

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

В процессе эксплуатации конфигураций на управляемых формах (например, «1С:Управление нашей фирмой», «1С:Управление торговлей» или «1С:ERP») пользователи и разработчики иногда сталкиваются с крайне странным визуальным эффектом. В табличных частях документов или отчетах числовые показатели (цены, суммы) начинают выводиться в формате "155,15, RUB". Наличие второй запятой перед международным кодом валюты не только портит внешний вид интерфейса, но и мешает нормальной работе встроенного калькулятора 1С, которым активно пользуются бухгалтеры и менеджеры.

Примечательно, что при переходе в режим непосредственного редактирования ячейки всё отображается корректно: лишняя запятая и обозначение валюты исчезают, оставляя стандартное число 155,15. Попытки восстановить конфигурацию из архивной копии (загрузка файла .cf), перенос базы данных на другой физический компьютер или тестирование и исправление информационной базы зачастую не дают никаких результатов. Давайте детально разберем природу этого поведения платформы «1С:Предприятие» и рассмотрим все возможные пути решения проблемы.

Выясняем техническую причину возникновения эффекта «двух запятых»

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

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

  1. Группа колонок на форме. Для экономии экранного пространства разработчики типовых решений часто объединяют поле суммы (числовой реквизит) и поле валюты (ссылочный реквизит) в единый визуальный элемент. В конфигураторе это реализуется созданием элемента формы с типом ГруппаФормы и видом ГруппаКолонок.
  2. Свойство «Отображать в одной ячейке». У созданной группы колонок устанавливается флаг ОтображатьВОднойЯчейке в значение Истина. Платформа в этом случае берет текстовые представления обоих полей и склеивает их в одну строковую строку для вывода на экран.
  3. Системный разделитель. Для разделения склеиваемых полей платформа использует свойство Разделитель. Если в конфигураторе это поле оставлено пустым, платформа обращается к региональным стандартам операционной системы (на сервере или локальном компьютере пользователя) и берет системный разделитель элементов списка по умолчанию. В русскоязычной локали операционной системы таким разделителем часто выступает запятая с пробелом (, ).
  4. Результат склейки. Платформа берет представление числа (например, 155,15, где запятая разделяет дробную часть), добавляет разделитель группы (, ) и текстовое представление валюты (RUB). На выходе мы получаем визуальную строку: 155,15, RUB.

Когда пользователь дважды кликает по ячейке, активизируется режим редактирования конкретного элемента — поля ввода числового реквизита. Группировка временно отключается для этой ячейки, и мы видим стандартное число без разделителей группы.

Почему проблема проявляется «неожиданно» и не лечится загрузкой CF-файла?

Многие специалисты недоумевают, почему в одной информационной базе все работает отлично, а в другой (абсолютно идентичной по конфигурации) возникает эта проблема. Ответ кроется в механизме функциональных опций.

В конфигурациях 1С видимость колонки с валютой в табличных частях управляется функциональной опцией ИспользоватьНесколькоВалют (или аналогичной константой многовалютного учета):

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

Также неожиданное появление проблемы на рабочих местах может быть связано со сбросом или обновлением языковых стандартов в операционной системе Windows/Linux на сервере 1С или клиентском компьютере, когда системный разделитель списков принудительно переопределяется на запятую.


Способ 1. Отключение функциональной опции многовалютного учета

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

Рассмотрим, как это сделать на примере «1С:Управление нашей фирмой»:

  1. Перейдите в раздел Настройки (или «Компания»).
  2. Найдите пункт Еще больше возможностей.
  3. В подразделе, отвечающем за деньги или закупки/продажи, найдите флаг «Используется несколько валют» (или аналогичный флаг мультивалютного учета).
  4. Снимите этот флажок и сохраните настройки.

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


Способ 2. Корректировка разделителя группы колонок в Конфигураторе

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

Разберем этот процесс по шагам:

  1. Откройте информационную базу в режиме Конфигуратор.
  2. Найдите в дереве метаданных форму документа или справочника, в которой наблюдается проблема с суммами, и откройте её.
  3. В окне элементов формы (левая верхняя часть редактора формы) найдите табличную часть и разверните её структуру.
  4. Найдите элемент с типом ГруппаФормы и видом ГруппаКолонок, внутри которой расположены реквизиты суммы и валюты. Обычно такая группа называется схожим образом, например, ГруппаСуммаВалюта.
  5. Выделите эту группу и откройте её палитру свойств (нажатием клавиши F4).
  6. Найдите свойство Разделитель. Обратите внимание: по умолчанию оно может быть пустым.
  7. Установите в поле Разделитель один символ пробела (просто нажмите клавишу Space в этой строке свойства). Также можно указать другие эстетичные варианты разделения, например косую черту / .
  8. Сохраните форму и обновите конфигурацию базы данных (клавиша F7).

После проделанной операции платформа вместо системной запятой начнет использовать жестко заданный вами разделитель-пробел. Сумма примет аккуратный вид: 155,15 RUB.


Способ 3. Пользовательская настройка формы без Конфигуратора

Если у вас нет прав на изменение конфигурации или база находится на замке поддержки, решить проблему в конкретной форме может сам пользователь непосредственно в режиме «1С:Предприятие».

Давайте выполним следующую последовательность действий:

  1. Откройте форму документа, где отображается некорректная сумма.
  2. В правом верхнем углу формы нажмите кнопку Ещё и выберите пункт меню Изменить форму....
  3. В открывшемся дереве элементов формы найдите группу колонок, объединяющую сумму и валюту.
  4. Вы можете решить проблему несколькими путями:
    • Вариант А: Выделите элемент «Валюта» внутри группы и снимите с него флажок видимости, если отображение валюты в каждой строчке для вас избыточно.
    • Вариант Б: Выделите элемент «Валюта» и с помощью синих стрелок «Вверх»/«Вниз» на панели инструментов перетащите его за пределы родительской группы колонок. В этом случае валюта будет выводиться в отдельном, независимом столбце таблицы, и запятая между ними исчезнет.
    • Вариант В: Выберите саму группу колонок и в правой панели свойств снимите галочку со свойства Отображать в одной ячейке. Колонка разделится на две стандартные вертикальные или горизонтальные ячейки без слияния строк.
  5. Нажмите кнопку Применить, а затем ОК для сохранения персональных настроек отображения формы.

Способ 4. Универсальное программное решение проблемы

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

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


// Процедура производит обход элементов формы и заменяет запятые в разделителях групп колонок на пробелы
Процедура ОчиститьРазделителиГруппКолонок(Форма) Экспорт

    Для Каждого Элемент Из Форма.Элементы Цикл
        // Проверяем, является ли элемент группой колонок с отображением в одной ячейке
        Если ТипЗнч(Элемент) = Тип("ГруппаФормы") 
            И Элемент.Вид = ГруппаФормыВид.ГруппаКолонок 
            И Элемент.ОтображатьВОднойЯчейке Тогда
            
            // Если разделитель пустой (используется системная запятая) или равен запятой
            Если ПустаяСтрока(Элемент.Разделитель) 
                Или Элемент.Разделитель = "," 
                Или Элемент.Разделитель = ", " Тогда
                
                // Принудительно устанавливаем пробел в качестве разделителя
                Элемент.Разделитель = " ";
                
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

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

← На главную