Форматы в 1С 8.3: числа, даты, макеты печатных форм и обмен XML и JSON

· 9 мин

Содержание

Чтобы создать формат в 1С, откройте в конфигураторе свойство Формат у поля формы или ячейки макета и нажмите кнопку выбора — запустится «Конструктор форматной строки». В коде то же самое делает функция Формат(Значение, "ЧДЦ=2; ЧГ=0"). Форматная строка — это набор параметров через точку с запятой: сколько знаков после запятой, как писать дату, что показывать вместо нуля или пустой даты.

Формат меняет только отображение. Само значение в базе остаётся числом, датой или булевым. Для обмена с другими программами «формат» означает уже другое — структуру файла XML или JSON. Ниже оба смысла, с примерами кода, которые можно вставить в обработку и проверить.

Что такое формат в 1С и где его задают

Форматная строка нужна, когда стандартный вид значения не подходит. Типичные задачи:

  • 💰 сумма в печатной форме без дробной части или ровно с двумя знаками;
  • 📅 дата словами: «7 октября 2026 г.» вместо «07.10.2026 0:00:00»;
  • 🔢 номер с ведущими нулями: «000042»;
  • ✅ «Да/Нет» вместо «Истина/Ложь»;
  • 🧾 число без пробелов-разделителей для выгрузки в файл или банк.

Где форматная строка встречается в конфигурации:

МестоСвойствоЧто форматирует
Поле управляемой формыФормат, ФорматРедактированияПоказ значения и вид при вводе
Ячейка макета табличного документаФормат в палитре свойств ячейкиПараметр в печатной форме
Поле набора данных СКДКолонка «Оформление» → ФорматЗначение в отчёте
Встроенный языкФункция Формат()Любое значение в строку
Условное оформлениеПараметр оформления ФорматЗначение при выполнении условия

Свойство Формат поля формы работает, когда поле не редактируется. Для режима ввода есть отдельное свойство ФорматРедактирования. Если формат «не применяется», проверьте, какое из двух вы заполнили.

Какие бывают форматы: числа, даты, булево и файлы обмена

Форматная строка состоит из пар Параметр=Значение, разделённых ;. Параметры делятся на три группы — по типу значения. Строки форматной строкой не форматируются: для них используют функции СтрШаблон, ВРег, Лев и подобные.

Числа:

ПараметрНазначениеПример
ЧЦВсего знаковЧЦ=10
ЧДЦЗнаков после запятойЧДЦ=2
ЧРДРазделитель дробной частиЧРД=.
ЧРГРазделитель групп разрядовЧРГ=' '
ЧГГруппировка разрядов, ЧГ=0 — без группЧГ=0
ЧНСтрока для нуляЧН=0 или ЧН=-
ЧВНВыводить ведущие нулиЧВН=
ЧССдвиг разрядов (деление на 10ⁿ)ЧС=3 — тысячи
ЧОВид отрицательного числаЧО=1
ЧФШаблон выводаЧФ='Ч руб.'

Даты:

ПараметрНазначениеПример
ДФПроизвольный формат датыДФ=dd.MM.yyyy
ДЛФГотовый локальный форматДЛФ=DD — длинная дата
ДПСтрока для пустой датыДП='не указана'

Булево: БЛ — текст для Ложь, БИ — текст для Истина. Параметр Л задаёт язык: Л=ru_RU.

Отдельная история — форматы файлов обмена: XML, JSON и формат EnterpriseData в типовых конфигурациях. О них — в пятом разделе.

Как создать формат через конструктор в конфигураторе

Конструктор избавляет от запоминания параметров и сразу показывает результат на примере.

  1. Откройте форму или макет в конфигураторе.
  2. Выделите поле формы или ячейку макета, откройте палитру свойств (Alt+Enter).
  3. Найдите свойство Формат и нажмите кнопку с тремя точками справа.
  4. В «Конструкторе форматной строки» выберите вкладку по типу данных: число, дата или булево.
  5. Заполните нужные поля: точность, разделители, вид даты. Внизу видна готовая строка и образец.
  6. Нажмите ОК. Строка попадёт в свойство, например ЧДЦ=2; ЧН=0,00.
  7. Запустите отладку (F5) и проверьте форму или печать на реальных данных.

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

У параметров есть английские имена: NFD вместо ЧДЦ, NG вместо ЧГ, DF вместо ДФ, DLF вместо ДЛФ. Обе записи работают, но в одном модуле держитесь одной — так код легче читать.

Функция Формат() в коде: рабочие примеры

Функция возвращает строку. Ниже пример для обработки, результаты указаны в комментариях:

Сумма = 1234567.891;
Сообщить(Формат(Сумма, "ЧДЦ=2"));                // 1 234 567,89
Сообщить(Формат(Сумма, "ЧДЦ=2; ЧГ=0"));          // 1234567,89
Сообщить(Формат(Сумма, "ЧДЦ=2; ЧРД=.; ЧГ=0"));   // 1234567.89
Сообщить(Формат(Сумма, "ЧДЦ=1; ЧС=3"));          // 1 234,6 (в тысячах)

Номер = 42;
Сообщить(Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0"));     // 000042

Сообщить(Формат(0, "ЧДЦ=2"));                    // пустая строка!
Сообщить(Формат(0, "ЧДЦ=2; ЧН=0,00"));           // 0,00

Д = Дата(2026, 10, 7, 14, 5, 0);
Сообщить(Формат(Д, "ДФ=dd.MM.yyyy"));            // 07.10.2026
Сообщить(Формат(Д, "ДФ='dd MMMM yyyy'"));        // 07 октября 2026
Сообщить(Формат(Д, "ДФ=HH:mm"));                 // 14:05
Сообщить(Формат(Д, "ДЛФ=DD"));                   // 7 октября 2026 г.
Сообщить(Формат(Дата(1, 1, 1), "ДП='—'"));       // —

Сообщить(Формат(Истина, "БЛ=Нет; БИ=Да"));       // Да

Проверим арифметику сдвига: 1 234 567,891 / 1000 = 1 234,567891, с одним знаком — 1 234,6. Совпадает.

Сумму прописью для счёта или платёжки делает отдельная функция:

Текст = ЧислоПрописью(1250.50, "Л=ru_RU; ДП=Истина",
    "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
// Одна тысяча двести пятьдесят рублей 50 копеек

== Буквы в ДФ чувствительны к регистру: MM — месяц, mm — минуты. Перепутаете — в дате появятся минуты вместо месяца. ==

Формат ячеек табличного документа для печатных форм и отчётов

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

Заполнение ячейкиЧто в ячейкеГде задать формат
ТекстПостоянная надписьНе нужен
ПараметрИмя параметра, например СуммаСвойство Формат ячейки
ШаблонТекст с параметрами в квадратных скобкахФормат параметра в шаблоне или подготовка значения в коде

Пошагово для суммы в печатной форме:

  1. Откройте макет, выделите ячейку с параметром Сумма.
  2. В палитре свойств проверьте, что Заполнение = Параметр.
  3. В свойстве Формат через конструктор задайте ЧДЦ=2; ЧН=0,00.
  4. В модуле, где выводится область, передайте число, а не строку: Область.Параметры.Сумма = Строка.Сумма;.

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

Область.Параметры.Заголовок = СтрШаблон("Счёт № %1 от %2",
    Документ.Номер, Формат(Документ.Дата, "ДЛФ=DD"));

Для ширины колонок в отчёте задавайте формат с ЧГ: разделитель групп читается легче. Для выгрузки в Excel или текстовый файл ставьте ЧГ=0 — иначе в числе окажется неразрывный пробел, и Excel примет значение за текст.

Обмен данными: форматы XML и JSON

Когда говорят «настроить формат для обмена», речь о структуре файла, а не о форматной строке. Во встроенном языке 1С 8.3 для этого есть готовые объекты.

JSON

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

Данные = Новый Структура;
Данные.Вставить("inn", "7700000000");
Данные.Вставить("sum", 1250.5);
Данные.Вставить("date", ТекущаяДата());

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(, Символы.Таб));
ЗаписатьJSON(Запись, Данные, Новый НастройкиСериализацииJSON);
ТекстJSON = Запись.Закрыть();

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Результат = ПрочитатьJSON(Чтение, Истина); // Истина — читать в Соответствие
Чтение.Закрыть();

Ссылки на справочники и документы так не запишутся. Передавайте вместо них код, ИНН или уникальный идентификатор строкой: Строка(Ссылка.УникальныйИдентификатор()).

XML

Для XML есть два пути:

  • 📄 «ручная» запись через ЗаписьXML: вы сами пишете элементы и атрибуты — удобно под чужую схему;
  • 📦 сериализация через СериализаторXDTO: объект 1С целиком превращается в XML и обратно — удобно для обмена между базами 1С.
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Exchange\order.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Order");
Запись.ЗаписатьАтрибут("Number", Документ.Номер);
Запись.ЗаписатьАтрибут("Date", XMLСтрока(Документ.Дата));
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();

XMLСтрока() пишет дату в виде 2026-10-07T14:05:00 — его понимают почти все внешние системы. Для обмена не используйте Формат() с русским видом даты: на стороне получателя такую строку придётся разбирать вручную.

Условное оформление: формат, который меняется от данных

Условное оформление позволяет задать формат только для строк, где выполнено условие. Например, показывать просроченные суммы красным или выводить нули прочерком.

В списке на форме (режим пользователя):

  1. В списке нажмите Ещё → Настроить список.
  2. Перейдите на вкладку условного оформления.
  3. Добавьте элемент: в оформлении выберите цвет текста или формат, в условии — поле и значение.
  4. Укажите, к каким полям применять, и нажмите Завершить редактирование.

В конфигураторе для формы: у формы есть свойство УсловноеОформление. Его же можно заполнить в коде при создании формы:

Элемент = УсловноеОформление.Элементы.Добавить();
Поле = Элемент.Поля.Элементы.Добавить();
Поле.Поле = Новый ПолеКомпоновкиДанных("СписокСумма");

Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Сумма");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
Отбор.ПравоеЗначение = 0;

Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
Элемент.Оформление.УстановитьЗначениеПараметра("Формат", "ЧДЦ=2; ЧО=1");

Имя поля в Поля — это имя элемента формы, а в отборе — путь к данным. Перепутаете — оформление молча не сработает.

В отчёте на СКД: в схеме компоновки откройте настройки варианта, вкладку условного оформления, добавьте элемент с параметром Формат. Для поля, которое всегда выводится одинаково, проще задать формат в колонке «Оформление» на вкладке наборов данных.

Диагностика: выберите симптом

Внешние системы: где формат решает больше всего

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

  • 🏦 Банк и платёжные файлы. Разделитель дробной части — точка, без групп разрядов: ЧДЦ=2; ЧРД=.; ЧГ=0. Ноль — явно: добавьте ЧН=0.00.
  • 🌐 HTTP-сервисы и REST. Даты — в ISO 8601 через XMLСтрока() или ЗаписатьДатуJSON. Числа — числами JSON, а не строками с запятой.
  • 📊 CSV для Excel. Разделитель полей ;, дробная часть — запятая, ЧГ=0, кодировка UTF-8 с BOM или Windows-1251 — по договорённости с тем, кто открывает файл.
  • 🔄 Обмен между типовыми конфигурациями. В современных типовых решениях для этого используют формат EnterpriseData. Его версии и правила конвертации задаются на стороне конфигураций; дописывать их стоит только если вы владеете инструментом «Конвертация данных».

Для схемы чужой системы (XSD) удобно загрузить её в конфигурацию как пакет XDTO. Тогда объекты XML будут проверяться по схеме прямо при записи, а ошибки структуры всплывут до отправки файла.

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

Частые вопросы

Можно ли задать формат один раз для всей конфигурации?
Общего глобального формата чисел нет. Есть региональные установки информационной базы, они меняют разделители по умолчанию. Конкретный вид задаётся у каждого поля, ячейки или в вызове Формат().
Почему Формат() возвращает строку и как потом посчитать сумму?
Формат() предназначен только для отображения. Считайте по исходным числам, а форматируйте в самом конце, при выводе.
Как вывести дату в виде «07 октября 2026 года»?
Отформатируйте дату строкой ДФ=‘dd MMMM yyyy’ и допишите слово отдельно: Формат(Д, “ДФ=‘dd MMMM yyyy’”) + " года". Месяц в русской локали выводится в родительном падеже.
Работает ли Формат() в запросе?
Нет, в языке запросов этой функции нет. В запросе выбирайте исходное значение, а оформляйте его в отчёте, на форме или в коде после выполнения запроса.
Как показать сумму в тысячах рублей в отчёте?
Задайте полю в СКД формат с параметром ЧС=3 и нужным ЧДЦ. Значение поделится на 1000 только при выводе, итоги посчитаются по исходным данным.