К статье
Практический материал

Торговля и Склад · 12 мин

Как в 1С сделать три знака после запятой в цене

Пошаговая инструкция: как настроить три знака после запятой в ценах в 1С через типы данных, доработку конфигурации и округление. Риски и проверка результата.

В типовых конфигурациях 1С (Управление торговлей, Комплексная автоматизация, ERP, Бухгалтерия) цены и суммы обычно хранятся с точностью до двух знаков после запятой — до копеек. Однако на практике этого бывает недостаточно: при расчётах за литры топлива, килограммы металлопроката, услуги связи или при работе с валютными курсами и коэффициентами требуется цена с тремя и более знаками после запятой. Если просто ввести в поле цены значение 15,255, программа округлит его до 15,26 или отобразит 15,25 — в зависимости от настроек.

Проблема в том, что точность хранения цены зашита в метаданных конфигурации: реквизит «Цена» документа или регистра имеет тип «Число» с заданным числом знаков дробной части. Изменить это «на лету» в пользовательском режиме нельзя — потребуется либо доработка конфигурации, либо обходные приёмы, которые не трогают структуру данных. Выбор зависит от того, где именно нужна третья цифра: только на экране, в печатной форме, в расчёте суммы или в самой базе данных.

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

Почему в 1С цена по умолчанию с двумя знаками и где это задано

Точность числового реквизита в 1С определяется свойством «Точность» в составе типа «Число». Например, тип Число(15,2) означает: всего 15 разрядов, из них 2 — после запятой. В типовых конфигурациях реквизиты цен и сумм чаще всего объявлены именно как Число(15,2) или через определяемый тип, например «ДенежнаяСуммаЛюбая».

Важно понимать, что реквизит «Цена» существует сразу в нескольких местах: в табличной части документов («Установка цен номенклатуры», «Реализация товаров и услуг», «Счёт на оплату»), в регистрах сведений (например, «Цены номенклатуры»), в регистрах накопления. Если изменить точность только в документе, а регистр оставить с двумя знаками, при проведении цена обрежется до копеек, и расхождения проявятся в отчётах.

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

Способ 1. Изменить точность реквизита в конфигураторе

Это основной и самый надёжный способ, если конфигурация не находится на полной поддержке или вы готовы снять её с поддержки частично. Работа выполняется в режиме «Конфигуратор» и требует прав на изменение конфигурации, а также монопольного доступа для обновления структуры базы данных.

Порядок действий: откройте конфигуратор, найдите нужный объект (например, документ «Установка цен номенклатуры», табличная часть «Товары», реквизит «Цена»). В палитре свойств измените тип с Число(15,2) на Число(15,3). Повторите для всех связанных объектов: регистра сведений «Цены номенклатуры», документов продажи и закупки, где цена хранится и пересчитывается. Затем обновите конфигурацию базы данных (клавиша F7), согласившись с реструктуризацией.

Увеличение точности — безопасная реструктуризация: существующие данные не теряются, к значениям просто добавляется третий нулевой разряд. Обратное изменение (с трёх знаков на два) уже опасно — дробная часть обрежется без предупреждения о потере данных.

Порядок изменения точности цены
  1. 1
    Сделайте резервную копию информационной базы
  2. 2
    Откройте конфигуратор и найдите реквизит «Цена» в нужном документе
  3. 3
    В свойствах установите тип Число(15,3)
  4. 4
    Повторите для регистра цен и всех документов, где цена хранится
  5. 5
    Проверьте определяемые типы — если используется общий тип, измените его один раз
  6. 6
    Обновите конфигурацию базы данных (F7) и согласитесь с реструктуризацией
  7. 7
    Проведите тестовый документ с ценой 15,255 и проверьте сумму

Способ 2. Доработка через расширение конфигурации

Если конфигурация типовая и снимать её с поддержки нежелательно, используйте механизм расширений. Расширение позволяет переопределить часть объектов, не затрагивая основную конфигурацию, что сохраняет простоту обновлений. Однако здесь есть важное ограничение: расширения не умеют изменять тип существующего реквизита — они добавляют свои реквизиты и формы.

Практический подход такой: в расширении добавляется собственный реквизит, например «ЦенаТочная» с типом Число(15,3), который выводится на форму вместо или рядом со штатным. В обработчиках «ПриИзменении» и «ПередЗаписью» прописывается пересчёт: штатная цена заполняется округлённым значением, а точная хранится в добавленном реквизите и используется в печатных формах и отчётах.

Этот вариант требует навыков программирования на встроенном языке 1С, но не ломает обмены и обновления. Он особенно удобен, когда точность нужна только в отдельном процессе — например, для расчёта цены на ГСМ, а в остальных документах достаточно копеек.

Способ 3. Обходные приёмы без доработки конфигурации

Если дорабатывать конфигурацию нельзя совсем (арендованная база, запрет IT-службы), есть классические обходные приёмы. Самый распространённый — указывать цену не за единицу товара, а за 100 или 1000 единиц. Например, вместо цены 0,355 за штуку указывается 355,00 за тысячу штук с соответствующим коэффициентом. Точность сохраняется, а суммы сходятся.

Второй приём — хранение точной цены в дополнительном реквизите или дополнительном сведении номенклатуры. Эти механизмы доступны в пользовательском режиме («Администрирование» → «Общие настройки» → «Дополнительные реквизиты и сведения»). Дополнительный реквизит можно вывести в отчёты через СКД и использовать в произвольных печатных формах, хотя штатные документы его автоматически не подхватят.

Третий вариант — внешняя обработка заполнения табличной части, которая рассчитывает сумму строки по точной цене и подставляет в документ уже готовую сумму, а цену вычисляет обратно как Сумма/Количество. Это работает, но цена в строке будет «рваной» (с округлением до копеек), что не всегда приемлемо для покупателя.

Сравнение способов

Изменение типа в конфигураторе

Полноценное решение, цена везде с тремя знаками. Минус: частичный съём с поддержки, нужна осторожность при обновлениях и обменах.

Расширение конфигурации

Сохраняет поддержку, гибкая логика. Минус: нельзя менять тип штатного реквизита, нужен дублирующий реквизит и код.

Цена за 100/1000 единиц

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

Дополнительный реквизит

Настраивается пользователем. Минус: штатные документы и проведение его не используют, только отчёты и печать.

Как округлять суммы при трёх знаках в цене

Когда цена имеет три знака, а валюта учёта — два, неизбежно возникает вопрос округления суммы строки. В типовых документах сумма рассчитывается как Цена × Количество с округлением до двух знаков. Если вы меняете тип только у цены, а сумма остаётся Число(15,2), стандартный пересчёт продолжит работать корректно: сумма округлится до копеек, а точная цена сохранится.

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

При программном округлении используйте встроенные возможности платформы. Функция Окр() округляет по арифметическим правилам, а форматная строка влияет только на отображение, но не на хранимое значение — это частая причина путаницы.

1c
// Округление суммы до копеек при цене с тремя знаками
СуммаСтроки = Окр(ЦенаТочная * Количество, 2);
// Формат только для вывода на экран/печать, значение не меняет
СтрокаЦены = Формат(ЦенаТочная, "ЧДЦ=3");

Проверка результата и типичные ошибки

После доработки обязательно проверьте цепочку целиком: установка цены → заказ → реализация → отчёт по продажам. Создайте тестовую номенклатуру, назначьте цену 15,255, оформите продажу 3 штук. Ожидаемая сумма строки — 45,77 (при округлении до копеек). Если в отчёте цена показывается как 15,26 или сумма не сходится — где-то остался реквизит или регистр со старой точностью.

Отдельно проверьте печатные формы: в макетах поля могут иметь жёсткий формат «ЧДЦ=2», и тогда в печати цена обрежется, хотя в базе хранится верно. Формат в макете нужно изменить на «ЧДЦ=3» или убрать вовсе, чтобы наследовался формат реквизита.

Контрольные точки

Как проверить результат

Ввод цены 15,255 в документе
Норма

Значение сохраняется как 15,255 после записи и повторного открытия

Тревожный признак

Цена превращается в 15,26 или 15,25 — точность реквизита не изменена

Сумма строки при количестве 3
Норма

Сумма 45,77 (или 45,765, если сумма тоже с тремя знаками)

Тревожный признак

Сумма 45,75 — цена округлилась до расчёта

Печатная форма документа
Норма

Цена выводится с тремя знаками

Тревожный признак

На печати два знака — формат задан в макете

Отчёт по продажам
Норма

Цены и суммы совпадают с документами

Тревожный признак

Расхождения — не изменён регистр, откуда берётся цена

Типичные ошибки
01
Изменили точность только в документе, но не в регистре цен — при проведении цена обрезается
02
Поменяли формат поля на форме вместо типа реквизита — на экране три знака, в базе два
03
Увеличили точность суммы до трёх знаков — расхождения с бухгалтерскими проводками и взаиморасчётами
04
Забыли про обмены: принимающая база ожидает два знака, возникают ошибки загрузки или расхождения сумм
05
Изменили тип в рабочей базе без копии — при ошибке реструктуризации восстановление затруднено

Ограничения и когда лучше привлечь специалиста

Самостоятельное изменение точности оправдано, если база файловая, обменов нет, конфигурация уже дорабатывалась и вы умеете пользоваться конфигуратором. Во всех остальных случаях — клиент-серверная база, обмены с БП, сайтом или ЕГАИС, конфигурация на полной поддержке — разумнее привлечь программиста 1С, который оценит влияние на смежные механизмы.

Учтите, что при обновлении типовой конфигурации изменённые реквизиты могут вызвать конфликты сравнения-объединения. Обычно платформа корректно сохраняет повышенную точность, но каждое обновление нужно проходить внимательно и проверять, не «откатилась» ли точность на типовую.

Перед доработкой уточните, где реально нужна третья цифра. Часто оказывается, что достаточно трёх знаков в цене закупки или в расчёте себестоимости, а в документах для клиентов копеек вполне хватает — тогда объём изменений сокращается в разы.
ПЗ
Практическое замечание
Итог

Что важно запомнить

Три знака в цене задаются типом реквизита (Число с точностью 3) в конфигураторе, а не настройками интерфейса. Менять нужно все связанные объекты: документы, регистры, макеты печати. Сумму и проводки лучше оставить с двумя знаками. Перед изменением — резервная копия и тест на копии базы.

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

Можно ли сделать три знака после запятой без конфигуратора?

Полноценно — нет: точность хранения задаётся в метаданных. Без конфигуратора доступны только обходные варианты: цена за 100 или 1000 единиц товара, дополнительный реквизит для точной цены или внешняя обработка расчёта сумм. Для отображения и печати этого иногда достаточно, но штатный учёт продолжит работать с копейками.

Почему цена с тремя знаками вводится, но после записи округляется?

Значит, тип реквизита остался Число(15,2). Форма может позволить ввести третий знак, но при записи платформа приводит значение к типу реквизита и отбрасывает лишний разряд. Нужно изменить точность в свойствах реквизита в конфигураторе и обновить конфигурацию базы данных.

Пропадут ли данные при изменении точности с двух знаков на три?

Нет. Увеличение точности — безопасная реструктуризация: существующие значения сохраняются, к ним просто добавляется нулевой третий разряд. Опасно обратное изменение (с трёх на два) — дробная часть обрежется. Резервная копия перед реструктуризацией обязательна в любом случае.

Нужно ли менять точность суммы, если цена стала с тремя знаками?

Обычно нет. Рекомендуемая схема: цена — три знака, сумма строки и документа — два знака с округлением. Тогда не будет расхождений с проводками и взаиморасчётами, которые ведутся с точностью до копеек. Трёхзначная сумма нужна только в специальных расчётах, например в нефтепродуктах.

Как вывести три знака только в печатной форме?

Если в базе цена хранится с тремя знаками, а на печати видны два — откройте макет печатной формы и в свойствах параметра измените формат на «ЧДЦ=3» или очистите его. Если же цена хранится с двумя знаками, печать трёх знаков ничего не даст: третий разряд просто неоткуда взять.

Что делать, если конфигурация на поддержке и снимать её нельзя?

Используйте расширение конфигурации: добавьте собственный реквизит «ЦенаТочная» с типом Число(15,3), выведите его на форму и пропишите пересчёт штатной цены и суммы в обработчиках. Основная конфигурация при этом не меняется, обновления проходят штатно, а точная цена доступна в отчётах и печатных формах.