Торговля и Склад · 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Сделайте резервную копию информационной базы
- 2Откройте конфигуратор и найдите реквизит «Цена» в нужном документе
- 3В свойствах установите тип Число(15,3)
- 4Повторите для регистра цен и всех документов, где цена хранится
- 5Проверьте определяемые типы — если используется общий тип, измените его один раз
- 6Обновите конфигурацию базы данных (F7) и согласитесь с реструктуризацией
- 7Проведите тестовый документ с ценой 15,255 и проверьте сумму
Способ 2. Доработка через расширение конфигурации
Если конфигурация типовая и снимать её с поддержки нежелательно, используйте механизм расширений. Расширение позволяет переопределить часть объектов, не затрагивая основную конфигурацию, что сохраняет простоту обновлений. Однако здесь есть важное ограничение: расширения не умеют изменять тип существующего реквизита — они добавляют свои реквизиты и формы.
Практический подход такой: в расширении добавляется собственный реквизит, например «ЦенаТочная» с типом Число(15,3), который выводится на форму вместо или рядом со штатным. В обработчиках «ПриИзменении» и «ПередЗаписью» прописывается пересчёт: штатная цена заполняется округлённым значением, а точная хранится в добавленном реквизите и используется в печатных формах и отчётах.
Этот вариант требует навыков программирования на встроенном языке 1С, но не ломает обмены и обновления. Он особенно удобен, когда точность нужна только в отдельном процессе — например, для расчёта цены на ГСМ, а в остальных документах достаточно копеек.
Способ 3. Обходные приёмы без доработки конфигурации
Если дорабатывать конфигурацию нельзя совсем (арендованная база, запрет IT-службы), есть классические обходные приёмы. Самый распространённый — указывать цену не за единицу товара, а за 100 или 1000 единиц. Например, вместо цены 0,355 за штуку указывается 355,00 за тысячу штук с соответствующим коэффициентом. Точность сохраняется, а суммы сходятся.
Второй приём — хранение точной цены в дополнительном реквизите или дополнительном сведении номенклатуры. Эти механизмы доступны в пользовательском режиме («Администрирование» → «Общие настройки» → «Дополнительные реквизиты и сведения»). Дополнительный реквизит можно вывести в отчёты через СКД и использовать в произвольных печатных формах, хотя штатные документы его автоматически не подхватят.
Третий вариант — внешняя обработка заполнения табличной части, которая рассчитывает сумму строки по точной цене и подставляет в документ уже готовую сумму, а цену вычисляет обратно как Сумма/Количество. Это работает, но цена в строке будет «рваной» (с округлением до копеек), что не всегда приемлемо для покупателя.
Сравнение способов
Полноценное решение, цена везде с тремя знаками. Минус: частичный съём с поддержки, нужна осторожность при обновлениях и обменах.
Сохраняет поддержку, гибкая логика. Минус: нельзя менять тип штатного реквизита, нужен дублирующий реквизит и код.
Без доработок вообще. Минус: неудобно в документах для клиента, требует дисциплины при вводе.
Настраивается пользователем. Минус: штатные документы и проведение его не используют, только отчёты и печать.
Как округлять суммы при трёх знаках в цене
Когда цена имеет три знака, а валюта учёта — два, неизбежно возникает вопрос округления суммы строки. В типовых документах сумма рассчитывается как Цена × Количество с округлением до двух знаков. Если вы меняете тип только у цены, а сумма остаётся Число(15,2), стандартный пересчёт продолжит работать корректно: сумма округлится до копеек, а точная цена сохранится.
Если же сумма тоже переводится на три знака, проверьте, как это отразится на взаиморасчётах и бухгалтерском учёте: в регламентированном учёте суммы обычно фиксируются до копеек, и трёхзначные суммы создадут копеечные расхождения между управленческими и регламентированными данными. Оптимальная схема: цена — три знака, сумма документа и проводки — два знака.
При программном округлении используйте встроенные возможности платформы. Функция Окр() округляет по арифметическим правилам, а форматная строка влияет только на отображение, но не на хранимое значение — это частая причина путаницы.
// Округление суммы до копеек при цене с тремя знаками
СуммаСтроки = Окр(ЦенаТочная * Количество, 2);
// Формат только для вывода на экран/печать, значение не меняет
СтрокаЦены = Формат(ЦенаТочная, "ЧДЦ=3");Проверка результата и типичные ошибки
После доработки обязательно проверьте цепочку целиком: установка цены → заказ → реализация → отчёт по продажам. Создайте тестовую номенклатуру, назначьте цену 15,255, оформите продажу 3 штук. Ожидаемая сумма строки — 45,77 (при округлении до копеек). Если в отчёте цена показывается как 15,26 или сумма не сходится — где-то остался реквизит или регистр со старой точностью.
Отдельно проверьте печатные формы: в макетах поля могут иметь жёсткий формат «ЧДЦ=2», и тогда в печати цена обрежется, хотя в базе хранится верно. Формат в макете нужно изменить на «ЧДЦ=3» или убрать вовсе, чтобы наследовался формат реквизита.
Как проверить результат
Значение сохраняется как 15,255 после записи и повторного открытия
Цена превращается в 15,26 или 15,25 — точность реквизита не изменена
Сумма 45,77 (или 45,765, если сумма тоже с тремя знаками)
Сумма 45,75 — цена округлилась до расчёта
Цена выводится с тремя знаками
На печати два знака — формат задан в макете
Цены и суммы совпадают с документами
Расхождения — не изменён регистр, откуда берётся цена
Ограничения и когда лучше привлечь специалиста
Самостоятельное изменение точности оправдано, если база файловая, обменов нет, конфигурация уже дорабатывалась и вы умеете пользоваться конфигуратором. Во всех остальных случаях — клиент-серверная база, обмены с БП, сайтом или ЕГАИС, конфигурация на полной поддержке — разумнее привлечь программиста 1С, который оценит влияние на смежные механизмы.
Учтите, что при обновлении типовой конфигурации изменённые реквизиты могут вызвать конфликты сравнения-объединения. Обычно платформа корректно сохраняет повышенную точность, но каждое обновление нужно проходить внимательно и проверять, не «откатилась» ли точность на типовую.
Перед доработкой уточните, где реально нужна третья цифра. Часто оказывается, что достаточно трёх знаков в цене закупки или в расчёте себестоимости, а в документах для клиентов копеек вполне хватает — тогда объём изменений сокращается в разы.
Что важно запомнить
Три знака в цене задаются типом реквизита (Число с точностью 3) в конфигураторе, а не настройками интерфейса. Менять нужно все связанные объекты: документы, регистры, макеты печати. Сумму и проводки лучше оставить с двумя знаками. Перед изменением — резервная копия и тест на копии базы.
Частые вопросы
Можно ли сделать три знака после запятой без конфигуратора?
Полноценно — нет: точность хранения задаётся в метаданных. Без конфигуратора доступны только обходные варианты: цена за 100 или 1000 единиц товара, дополнительный реквизит для точной цены или внешняя обработка расчёта сумм. Для отображения и печати этого иногда достаточно, но штатный учёт продолжит работать с копейками.
Почему цена с тремя знаками вводится, но после записи округляется?
Значит, тип реквизита остался Число(15,2). Форма может позволить ввести третий знак, но при записи платформа приводит значение к типу реквизита и отбрасывает лишний разряд. Нужно изменить точность в свойствах реквизита в конфигураторе и обновить конфигурацию базы данных.
Пропадут ли данные при изменении точности с двух знаков на три?
Нет. Увеличение точности — безопасная реструктуризация: существующие значения сохраняются, к ним просто добавляется нулевой третий разряд. Опасно обратное изменение (с трёх на два) — дробная часть обрежется. Резервная копия перед реструктуризацией обязательна в любом случае.
Нужно ли менять точность суммы, если цена стала с тремя знаками?
Обычно нет. Рекомендуемая схема: цена — три знака, сумма строки и документа — два знака с округлением. Тогда не будет расхождений с проводками и взаиморасчётами, которые ведутся с точностью до копеек. Трёхзначная сумма нужна только в специальных расчётах, например в нефтепродуктах.
Как вывести три знака только в печатной форме?
Если в базе цена хранится с тремя знаками, а на печати видны два — откройте макет печатной формы и в свойствах параметра измените формат на «ЧДЦ=3» или очистите его. Если же цена хранится с двумя знаками, печать трёх знаков ничего не даст: третий разряд просто неоткуда взять.
Что делать, если конфигурация на поддержке и снимать её нельзя?
Используйте расширение конфигурации: добавьте собственный реквизит «ЦенаТочная» с типом Число(15,3), выведите его на форму и пропишите пересчёт штатной цены и суммы в обработчиках. Основная конфигурация при этом не меняется, обновления проходят штатно, а точная цена доступна в отчётах и печатных формах.