В процессе эксплуатации конфигураций на управляемых формах (например, «1С:Управление нашей фирмой», «1С:Управление торговлей» или «1С:ERP») пользователи и разработчики иногда сталкиваются с крайне странным визуальным эффектом. В табличных частях документов или отчетах числовые показатели (цены, суммы) начинают выводиться в формате "155,15, RUB". Наличие второй запятой перед международным кодом валюты не только портит внешний вид интерфейса, но и мешает нормальной работе встроенного калькулятора 1С, которым активно пользуются бухгалтеры и менеджеры.
Примечательно, что при переходе в режим непосредственного редактирования ячейки всё отображается корректно: лишняя запятая и обозначение валюты исчезают, оставляя стандартное число 155,15. Попытки восстановить конфигурацию из архивной копии (загрузка файла .cf), перенос базы данных на другой физический компьютер или тестирование и исправление информационной базы зачастую не дают никаких результатов. Давайте детально разберем природу этого поведения платформы «1С:Предприятие» и рассмотрим все возможные пути решения проблемы.
Описанная ситуация не является аппаратным сбоем или повреждением базы данных. Это штатное поведение механизма группировки колонок управляемой формы, на которое накладывается действие определенных функциональных опций и региональных настроек операционной системы.
Проанализируем детально, как устроена эта цепочка взаимодействия:
ГруппаФормы и видом ГруппаКолонок.ОтображатьВОднойЯчейке в значение Истина. Платформа в этом случае берет текстовые представления обоих полей и склеивает их в одну строковую строку для вывода на экран.Разделитель. Если в конфигураторе это поле оставлено пустым, платформа обращается к региональным стандартам операционной системы (на сервере или локальном компьютере пользователя) и берет системный разделитель элементов списка по умолчанию. В русскоязычной локали операционной системы таким разделителем часто выступает запятая с пробелом (, ).155,15, где запятая разделяет дробную часть), добавляет разделитель группы (, ) и текстовое представление валюты (RUB). На выходе мы получаем визуальную строку: 155,15, RUB.Когда пользователь дважды кликает по ячейке, активизируется режим редактирования конкретного элемента — поля ввода числового реквизита. Группировка временно отключается для этой ячейки, и мы видим стандартное число без разделителей группы.
Многие специалисты недоумевают, почему в одной информационной базе все работает отлично, а в другой (абсолютно идентичной по конфигурации) возникает эта проблема. Ответ кроется в механизме функциональных опций.
В конфигурациях 1С видимость колонки с валютой в табличных частях управляется функциональной опцией ИспользоватьНесколькоВалют (или аналогичной константой многовалютного учета):
Поскольку включение функциональной опции — это изменение данных информационной базы (значения константы), а не метаданных конфигурации, загрузка файла .cf из «чистой» базы никак не влияет на эту настройку. Именно поэтому база после переноса сохраняет дефект отображения.
Также неожиданное появление проблемы на рабочих местах может быть связано со сбросом или обновлением языковых стандартов в операционной системе Windows/Linux на сервере 1С или клиентском компьютере, когда системный разделитель списков принудительно переопределяется на запятую.
Если на вашем предприятии учет ведется исключительно в одной национальной валюте (например, только в рублях), самым простым и правильным решением будет отключение ведения учета в нескольких валютах в пользовательском режиме.
Рассмотрим, как это сделать на примере «1С:Управление нашей фирмой»:
После отключения данной опции платформа скроет неиспользуемые колонки валюты из табличных частей документов, и разделитель группы колонок перестанет выводиться автоматически.
Если вашей организации объективно необходим многовалютный учет, отключать функциональную опцию нельзя. В таком случае проблему с разделителем нужно решить на уровне интерфейса формы в конфигураторе.
Разберем этот процесс по шагам:
ГруппаФормы и видом ГруппаКолонок, внутри которой расположены реквизиты суммы и валюты. Обычно такая группа называется схожим образом, например, ГруппаСуммаВалюта.F4).Разделитель один символ пробела (просто нажмите клавишу Space в этой строке свойства). Также можно указать другие эстетичные варианты разделения, например косую черту / .F7).После проделанной операции платформа вместо системной запятой начнет использовать жестко заданный вами разделитель-пробел. Сумма примет аккуратный вид: 155,15 RUB.
Если у вас нет прав на изменение конфигурации или база находится на замке поддержки, решить проблему в конкретной форме может сам пользователь непосредственно в режиме «1С:Предприятие».
Давайте выполним следующую последовательность действий:
Если форм с аналогичной проблемой в конфигурации достаточно много, ручная правка каждой из них в конфигураторе или через «Изменить форму» может отнять колоссальное количество времени. Для разработчиков наиболее эффективным решением будет написание универсального алгоритма общего модуля, который автоматически очистит нежелательные запятые во всех группах колонок при открытии форм.
Нам потребуется перехватить событие создания формы на сервере. Давайте посмотрим на пример реализации такого программного обхода элементов формы:
// Процедура производит обход элементов формы и заменяет запятые в разделителях групп колонок на пробелы
Процедура ОчиститьРазделителиГруппКолонок(Форма) Экспорт
Для Каждого Элемент Из Форма.Элементы Цикл
// Проверяем, является ли элемент группой колонок с отображением в одной ячейке
Если ТипЗнч(Элемент) = Тип("ГруппаФормы")
И Элемент.Вид = ГруппаФормыВид.ГруппаКолонок
И Элемент.ОтображатьВОднойЯчейке Тогда
// Если разделитель пустой (используется системная запятая) или равен запятой
Если ПустаяСтрока(Элемент.Разделитель)
Или Элемент.Разделитель = ","
Или Элемент.Разделитель = ", " Тогда
// Принудительно устанавливаем пробел в качестве разделителя
Элемент.Разделитель = " ";
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Эту процедуру достаточно разместить в любом общем модуле с флагом Сервер и вызывать в конце стандартных обработчиков ПриСозданииНаСервере форм документов или встроить её вызов в общий механизм модификации форм при внедрении БСП (Библиотеки Стандартных Подсистем). Использование свойства Разделитель динамически изменяет визуальное представление данных непосредственно перед отправкой формы клиенту, гарантируя избавление от лишней запятой на любых компьютерах пользователей вне зависимости от их региональных настроек операционной системы.