Как изменить формат выгрузки даты из кассы Атол на Windows 10

Системный администратор Торговля и дистрибуция
← На главную

При обмене данными между кассовым программным обеспечением (например, 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:

  1. Служба обмена данными (например, Frontol Service или служба драйвера Атол) запускается от имени системной учетной записи Local System (SYSTEM), а не от имени текущего авторизованного пользователя.
  2. В операционной системе Windows 10 при установке или обновлении региональные параметры для учетной записи SYSTEM по умолчанию часто настраиваются на американский стандарт (M/d/yyyy и AM/PM).
  3. Кассовое ПО при формировании текстового файла обмена вызывает системные функции Windows API для форматирования даты и времени. По этой причине формат выгружаемых строк напрямую зависит от настроек локали той учетной записи, от имени которой запущен процесс.

Способ 1. Копирование региональных настроек текущего пользователя системной учетной записи

Рассмотрим самый простой и безопасный способ исправления ситуации через графический интерфейс операционной системы Windows 10.

  1. Зайдем в систему под учетной записью администратора и убедимся, что текущий формат даты настроен как dd.MM.yyyy.
  2. Откроем Панель управления и перейдем в раздел Региональные стандарты.
  3. Перейдем на вкладку Административные (или Дополнительно).
  4. В блоке Экран приветствия и учетные записи новых пользователей нажмем кнопку Копировать параметры....
  5. В нижней части появившегося окна установим флажок Экран приветствия и системные учетные записи.
  6. Нажмем ОК для сохранения изменений и перезагрузим ПК или перезапустим кассовую службу.

Способ 2. Изменение настроек в реестре Windows для системного пользователя

Если копирование через интерфейс не привело к желаемому результату, разберем вариант прямого редактирования реестра Windows для профиля по умолчанию .DEFAULT.

  1. Нажмем сочетание клавиш Win + R, введем regedit и нажмем Enter.
  2. Перейдем к ветке реестра: HKEY_USERS\.DEFAULT\Control Panel\International.
  3. Установим или проверим следующие текстовые параметры:
    • sShortDate = dd.MM.yyyy
    • sDate = .
    • sTimeFormat = HH:mm:ss
    • iTime = 1 (включает 24-часовой формат времени)
    • s1159 = (оставим значение пустым)
    • s2359 = (оставим значение пустым)
  4. После внесения изменений перезапустим службу обмена или перезагрузим операционную систему.

Способ 3. Изменение учетной записи для запуска службы обмена

Посмотрим на еще одно эффективное решение — запуск службы обмена от имени локального пользователя, для которого региональные настройки уже корректно заданы.

  1. Нажмем Win + R, введем services.msc и откроем оснастку управления службами.
  2. Найдем в списке службу, отвечающую за обмен данными (например, Frontol Service или службу Атол).
  3. Откроем свойства службы и перейдем на вкладку Вход в систему.
  4. Переключим переключатель с позиции С системной учетной записью на С учетной записью.
  5. Укажем имя локального пользователя (например, Администратор) и его пароль.
  6. Сохраним настройки и перезапустим службу.

Доработка алгоритма загрузки на стороне 1С

Чтобы гарантировать устойчивость обмена независимо от региональных настроек отдельных компьютеров, проанализируем вариант адаптации кода в 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.

← На главную