Часто при работе с 1С:Предприятие разработчики сталкиваются с ситуацией, когда код, годами работавший корректно, вдруг начинает «портить» данные при выгрузке. Одной из наиболее типичных проблем является внезапное появление разделителей групп разрядов (например, запятых или пробелов) в числах при записи их в CSV-файл. Рассмотрим, почему это происходит и как раз и навсегда застраховать свои интеграции от подобных «сюрпризов».
Когда вы формируете текстовый файл в 1С, например, через ЗаписьТекста, платформа выполняет преобразование типов данных. Если вы передаете число в метод записи без явного указания формата, 1С обращается к региональным настройкам операционной системы, под которой запущена сессия 1С или служба сервера.
На разных серверах могут быть установлены разные локали. Если на новом сервере в настройках Windows («Региональные стандарты») включено использование разделителя групп разрядов, то при автоматическом приведении числа к строке 1С добавит эти самые разделители. В итоге число 1784.04 превращается в 1,784.04, что часто приводит к ошибкам при последующем чтении такого файла сторонними программами.
Чтобы данные всегда выгружались в едином формате, независимо от того, на каком сервере выполняется код, необходимо явно задавать правила форматирования. В 1С для этого используется встроенная функция Формат().
Рассмотрим, как это работает на практике. Вместо того чтобы просто передавать число, оберните его в функцию:
// Пример использования функции Формат
СтрокаЧисла = Формат(ЧислоДляВыгрузки, "ЧГ=0; ЧДР=.");
Разберем детально параметры, которые мы использовали:
Вы можете попробовать изменить региональные настройки в «Панели управления» на сервере, однако это не всегда дает результат. Причины тому следующие:
USR1CV8), у которого настройки профиля могут отличаться от настроек текущего администратора.Поэтому лучшая практика — это «программируемая независимость». Когда вы сами описываете формат строки в коде, вы становитесь независимыми от конфигурации ОС.
Для того чтобы ваши выгрузки в CSV были стабильными и предсказуемыми, придерживайтесь этих простых правил:
Формат() для преобразования чисел в строку перед записью в файл.ЧГ=0, чтобы избежать нежелательного форматирования разрядов.ЧДР, чтобы избежать разночтений в разных системах.Используя этот подход, вы навсегда забудете о проблеме «волшебного» появления лишних символов в ваших файлах выгрузки!