При обмене данными между кассовым программным обеспечением (например, Frontol или драйвер торгового оборудования Атол) и конфигурациями 1С может возникнуть неприятная ситуация. Вместо привычного формата даты dd.MM.yyyy (например, 23.11.2017) и 24-часового формата времени касса формирует текстовый файл выгрузки с американским форматом даты через слэш MM/dd/yyyy и 12-часовым временем с суффиксами AM/PM (например, 11/24/2017;9:10:23 AM).
Типовые обработки загрузки в 1С не рассчитывают на подобные различия в строковых представлениях даты и выдают ошибку при разборе файла. Разберем, почему возникает эта проблема и как ее правильно решить.
Проанализируем ситуацию: на компьютере кассира в региональных настройках операционной системы Windows 10 установлен русский язык и формат даты с точками dd.MM.yyyy. Однако при автоматической выгрузке данных в файл кассовая программа продолжает использовать слэши и 12-часовой формат времени.
Причина кроется в особенностях работы служб операционной системы Windows:
Local System (SYSTEM), а не от имени текущего авторизованного пользователя.SYSTEM по умолчанию часто настраиваются на американский стандарт (M/d/yyyy и AM/PM).Рассмотрим самый простой и безопасный способ исправления ситуации через графический интерфейс операционной системы Windows 10.
dd.MM.yyyy.Если копирование через интерфейс не привело к желаемому результату, разберем вариант прямого редактирования реестра Windows для профиля по умолчанию .DEFAULT.
Win + R, введем regedit и нажмем Enter.HKEY_USERS\.DEFAULT\Control Panel\International.sShortDate = dd.MM.yyyysDate = .sTimeFormat = HH:mm:ssiTime = 1 (включает 24-часовой формат времени)s1159 = (оставим значение пустым)s2359 = (оставим значение пустым)Посмотрим на еще одно эффективное решение — запуск службы обмена от имени локального пользователя, для которого региональные настройки уже корректно заданы.
Win + R, введем services.msc и откроем оснастку управления службами.Чтобы гарантировать устойчивость обмена независимо от региональных настроек отдельных компьютеров, проанализируем вариант адаптации кода в 1С. Посмотрим на пример функции универсального разбора строки с датой:
Функция РазобратьДатуИзФайла(Знач СтрокаДаты)
// Очищаем строку от лишних пробелов
СтрокаДаты = СокрЛП(СтрокаДаты);
// Определяем разделитель элементов даты
Если Найти(СтрокаДаты, "/") > 0 Тогда
Разделитель = "/";
ИначеЕсли Найти(СтрокаДаты, ".") > 0 Тогда
Разделитель = ".";
Иначе
Возврат Дата(1, 1, 1);
КонецЕсли;
МассивЧастей = СтрРазделить(СтрокаДаты, Разделитель);
Если МассивЧастей.Количество() <> 3 Тогда
Возврат Дата(1, 1, 1);
КонецЕсли;
// Если первый элемент длиннее 2 символов, значит формат YYYY.MM.DD
Если СтрДлина(МассивЧастей[0]) = 4 Тогда
Год = Число(МассивЧастей[0]);
Месяц = Число(МассивЧастей[1]);
День = Число(МассивЧастей[2]);
// Если разделитель слэш, считаем что формат американский MM/DD/YYYY
ИначеЕсли Разделитель = "/" Тогда
Месяц = Число(МассивЧастей[0]);
День = Число(МассивЧастей[1]);
Год = Число(МассивЧастей[2]);
Иначе
День = Число(МассивЧастей[0]);
Месяц = Число(МассивЧастей[1]);
Год = Число(МассивЧастей[2]);
КонецЕсли;
Возврат Дата(Год, Месяц, День);
КонецФункции
Благодаря приведенному коду обработка загрузки в 1С сможет корректно распознавать даты как в формате 23.11.2017, так и в формате 11/24/2017, что сделает систему устойчивой к возможным сбоям системных настроек Windows.