1с округляет копейки как исправить
Перейти к содержимому

1с округляет копейки как исправить

  • автор:

Странное округление,расхождения в копейках,Excel и калькулятор считают верно — 1с нет

Столкнулся с непонятной проблемой. Есть Бухгалтерия предприятия, редакция 3.0 (3.0.43.260),1С:Предприятие 8.3 (8.3.8.1652).
Но данная ситуация проявилась и на других конфигурациях и платформах.
Есть реализация на сумму 2401354,00(НДС в сумме), в т.ч. НДС 366308,28. Вот тут-то и не правильно. Из-за этого проблемы у бухгалтерии с контрагентами. Если на калькуляторе посчитать 2401354,00*18/118 = 366308,24. То есть реально сумма НДС на 4 копейки меньше должна быть. И такие расхождения во многих документах. Системности не выявил. Далее я вывел ТЧ с товарами в список и скопировал оттуда колонку СУММА, вставил в EXCEL и рассчитал суммы НДС с помощью него, и результат получился верный — 366308,24. Странно дело. Потом решил вывести ТЧ в список и скопировал оттуда колону СУММАНДС. Вставил в EXCEL и посчитал общий итог по скопированной колонке — но итоговый НДС получился неверный, как в 1с — 366308,28. Причем суммы в обоих колонках (в Экселе) абсолютно одинаковы!Как так?Никаких округлений в ТЧ документа я не нашел, просто СУММАНДС пересчитывается и все. У реквизита СуммаНДС тип данных число 15,2. Все как обычно. Обработкой экспериментировал с функцией ОКР(Число,2,тип округления), но ничего не менялось. Ситуация изменилась когда я создал Таблицу Значений с одной колонкой «СуммаНДС» и заполнял ее в цикле

. Если не округлять то получается длинное число с большой разрядностью. Так вот потом вывел итог по колонке Табличной Части и получил сумму верную — 366308,24.

Если кто дочитал до конца, то спрошу у вас — что такое происходит с округлением, были ли такие проблемы?Как бороться.У меня мыслей нет даже. Это расхождение нервирует бухгалтерию , а теперь и меня. Прилагаю файл со всеми цифрами и колонками.

Общие приемы и механизмы решения задач – Тема № 12:
Что такое «Проблема копеек» и как ее решить

Упоминание о существовании некой «проблемы копеек» встречается в требованиях к экзамену в списке наиболее частых ошибок, характерных для любой учетной задачи:

Рисунок 1 – Фрагмент из списка часто встречающихся ошибок

Что же такое «проблема копеек»?

В задачах списания товаров «проблема копеек» выражается в следующем: при полном списании товара по количеству его себестоимость не списывается в «ноль». Остается несколько копеек. Связано это с округлениями при расчете себестоимости списания.

Пример: на остатке есть 3 ручки общей стоимостью 100,00 руб. Спишем 3 ручки. Расчет себестоимости списания выполним по средней.

Формула: Себестоимость Остаток / Количество Остаток * Количество Списания

Себестоимость единицы товара составит 100 / 3 = 33,33 руб.

Себестоимость списания согласно формуле составит 33,33 * 3 = 99,99 руб.

Итого после списания останется 0 шт по количеству и 1 копейка по стоимости.

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

Вычисления система будет выполнять последовательно:

Ресурсы для хранения показателей в денежном выражении имеют точность два знака после запятой. При записи значения в ресурс регистра произойдет округление по математическим правилам. Записано будет 100,00 руб.

Казалось бы, все хорошо. Но в таком варианте на экзамене «проблема копеек» будет считаться нерешенной. Почему? Из-за тех самых 99.999999. Правильный результат в данном случае был получен в результате автоматического округления.

Как решить «проблему копеек»?

Если на результат влияет порядок операндов, давайте его изменим.

Вариант формулы № 2: Количество списания / Количество остаток x Сумма остаток

Себестоимость списания трех ручек из примера составит 3 / 3 * 100 = 1 * 100 = 100 руб.

Вариант формулы № 3: Сумма остаток x Количество списания / Количество остаток.

На данных из примера получается: 100 * 3 / 3 = 300 / 3 = 100.

Видим, что в обоих случаях автоматическое округление при записи в регистр выполняться не будет.

Означает ли это, что, поменяв местами операнды, мы решили «проблему копеек»?

Ответ: не во всех случаях. Есть ограничение – «проблема копеек» будет решена только в том случае, если на последнем списании значения переменных КоличествоОстаток и КоличествоСписания будут равны. Тогда на последнем списании формула № 2 превращается в вариант:

Количество остаток / Количество остаток x Сумма остаток = 1 * Сумма остаток = Сумма остаток.

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

Далее при разборе практического примера увидим, что с определением момента последнего списания не всегда все так просто.

Надежный способ решения «проблемы копеек»

Суть метода проста: при последнем списании товара списываем весь остаток стоимости, не применяя формулу для расчета суммы списания.

Именно этот метод рекомендуется использовать на аттестации.

Как определить, что списание последнее? При последнем списании количество остатка совпадет с количеством списания.

Усовершенствованная формула для расчета себестоимости списания будет выглядеть так:

Будем называть эту формулу формулой с учетом последнего списания.

Как обстоят дела с использованием этой формулы? Просто везде и всегда в алгоритме вставляем ее и считаем, что «проблема копеек» у нас теперь заведомо решена?

Нет. Есть все тот же нюанс в определении момента последнего списания. Но в этой формуле ничто не мешает вставить в конструкцию «Если…» другое условие для определения момента последнего списания.

Практический пример расчета себестоимости по средней с решением «проблемы копеек»

Складской учет товаров не ведется. Приход товаров оформляется документом «Приходная накладная». Расход товаров оформляется документом «Расходная накладная». Себестоимость списания определяется как средняя по номенклатурной позиции».

Нам понадобятся объекты метаданных:

  • справочник «Номенклатура»
  • документ «Приходная накладная»
  • документ «Расходная накладная».

Эти объекты в каркасной конфигурации уже есть. Для решения задачи они полностью подходят.

Для расчета себестоимости списания номенклатуры нужно знать остаток себестоимости и остаток по количеству. Для этих целей понадобится регистр накопления. Вид регистра – «Остатки», т.к. интересуют именно остатки стоимости и количества. В регистре должно быть одно измерение Номенклатура, т.к. остатки нужны в разрезе номенклатуры. И должно быть два числовых ресурса – Количество и Сумма.

В каркасной конфигурации есть РН «ОстаткиНоменклатуры».

Измерение «Номенклатура» в нем есть, установим для него свойство Запрет незаполненных значений в истину, т.к. движения по регистру с пустой номенклатурой не имеют смысла.

Ресурс Количество есть. Добавим ресурс Сумма (Число 12, 2):

Рисунок 2 – Структура РН «Остатки номенклатуры»

  • «Приходная накладная»
  • «Расходная накладная»:

Рисунок 3 – Регистраторы РН «Остатки номенклатуры

Обработка проведения для документа «Приходная накладная»

С помощью конструктора движений необходимо сформировать движения документа «Приходная накладная» по регистру накопления «Остатки номенклатуры» с видом Приход. Как это сделать, подробно рассмотрено в главе 6. Как реализовать поступление товаров в компанию.

Обработка проведения для документа «Расходная накладная»

Для документа «Расходная накладная» обойтись возможностями конструктора движений не получится, потому что данных из табличной части документа недостаточно для формирования движений по списанию товаров. Понадобятся еще данные об остатках количества и себестоимости по РН «Остатки номенклатуры».

Создадим процедуру ОбработкаПроведения в модуле объекта и заполним ее вручную.

Листинг обработки проведения:

В коде преднамеренно закомментированы некоторые строки. Позже разберем последствия.

Разберем ключевые точки алгоритма

Подготовка регистров к работе (п. 1, 2)
  1. Очищаем движения, чтобы при перепроведении документа не учитывались старые движения документа. Это происходит, когда дата документа при перепроведении сдвигается вперед. Для очистки старых движений документа используем принудительную запись пустого набора. В этом случае при чтении данных из регистра старые движения документа в расчет виртуальных таблиц не попадут.
  2. Устанавливаем маркер записи движений в значение Истина, чтобы при проведении документа записались сформированные в обработке проведения движения. В этом случае в конце процедуры обработки проведения использовать метод Движения.Записать() не нужно.
Запрос получения данных для расчета себестоимости (п. 3)

Первый запрос пакета – это получение данных из табличной части документа.

  • Внимание: группировка строк по номенклатуре закомментирована преднамеренно! Позже разберем, к чему это приведет.
  • В списке полей выбора оставляем только Номенклатуру и Количество. Для расчета себестоимости списания нужны только они. Представление номенклатуры не выводим, т.к. не планируем выводить его в сообщениях и т.п.
  • Устанавливаем отбор по Ссылке для отбора данных только по нашему документу.
  • Для оптимизации производительности индексируем поле Номенклатура. Далее по нему будем соединяться с другой таблицей.
  • Результат помещаем во временную таблицу ТЧСписокНоменклатуры.

Второй запрос пакета

Источниками данных для второго запроса послужат:

  • Временная таблица ТЧСписокНоменклатуры, подготовленная первым запросом
  • Виртуальная таблица остатков РН «ОстаткиНоменклатуры» (ОстаткиНоменклатурыОстатки).

Будем использовать следующие параметры виртуальной таблицы остатков:

  • Период – это значение параметра МоментВремени
  • Условие – ограничиваем выборку только номенклатурой из временной таблицы ТЧСписокНоменклатуры. Интересуют остатки только по этой номенклатуре:

Рисунок 4 – Параметры виртуальной таблицы остатков
РН «Остатки номенклатуры»

Временную таблицу ТЧСписокНоменклатуры соединяем с таблицей ОстаткиНоменклатурыОстатки по полю Номенклатура. Используем левое соединение на случай, если соответствующих записей в таблице остатков не будет. По этой же причине используем функцию ЕстьNULL() применительно к полям выбора из регистра остатков.

Заполнение параметров запроса (п. 4)

Для заполнения параметра Момент времени будем использовать момент времени документа.

Цикл по выборке из запроса (п. 5)

Обходим выборку из результата запроса и на каждую строку выборки создаем движение по расходу по РН «Остатки номенклатуры». Внутри цикла выполняем расчет себестоимости.

Расчет себестоимости и формирование движений (п. 6)

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

Применение формулы, рекомендуемой на экзамене (п. 7)

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

Проверка результата в режиме «1С:Предприятие»

Создадим документ «Приходная накладная»:

Рисунок 5 – Документ «Приходная накладная № 1»

Проверим движения по РН «Остатки номенклатуры»:

Рисунок 6 – Движения документа «Приходная накладная № 1»

Приход сформирован. Займемся списанием товаров.

Создадим документ «Расходная накладная». Выполним в нем списание всех трех ручек, которые имеются на остатке.

Рисунок 7 – Документ «Расходная накладная № 1»

При проведении получим следующие сообщения:

Рисунок 8 – Сообщения при проведении документа «Расходная накладная № 1»

Полученные результаты вполне ожидаемы и подтверждают теоретические изыскания.

Если заглянуть в движения по РН «Остатки номенклатуры», то там тоже все отлично – никаких копеек:

Рисунок 9 – Движения по РН «Остатки номенклатуры»

Подведем итоги

Мы выяснили, что скрывается под названием «проблема копеек», разобрали методы ее решения, проверили их на практике, решив пример с расчетом себестоимости списания по средней.

Осталось выяснить, в чем может быть нюанс с определением момента последнего списания, о котором упоминали при разборе формул. Сделаем это в следующем блоке материалов.

Округление зарплаты при выплате в программе 1С: Бухгалтерия предприятия, ред. 3.0

Нередко от пользователей программы 1С:Бухгалтерия предприятия поступают вопросы о том, как настроить округление при выплате зарплаты или аванса. Такая возможность есть, да на первый взгляд она не очевидна, ведь она не вынесена ни в документ ведомости, ни в раздел «Зарплата и кадры». Если в зарплатной конфигурации все настройки связанные с округлением выплат представлены в ведомости прям перед табличной частью, то тут они запрятаны в справочник. Добраться к которому можно через все функции.

1.jpg

В случае, когда повторили те же манипуляции, что представлены выше, но не увидели пункта «Все функции». Следует в параметрах, находящихся в настройках, включить ее отображение

2.jpg

После снова нажимаем «Сервис и настройки» и выбираем появившуюся команду «Все функции». Далее в открывшемся окне, чтобы ускорить процесс поиска нужного нам справочника, а именно в справочнике хранится настройка округления, в поисковой строке вводим «способы. »

3.jpg

В справочнике «Способы выплаты зарплаты» мы можем настроить выплату как зарплаты, так и аванса, а еще с релиза 3.0.77 и договора подряда. Про договор подряда есть другая подробная статья, в которой описан весь новый функционал

4.jpg

Как можно заметить, список способов округления достаточно большой, настройка очень гибкая, причем сам способ внутри тоже можно еще настраивать. Когда в него «провалитесь», увидите еще дополнительную настройку

5.jpg

Пользователю доступно изменение точности и правил округления индивидуально для каждого способа, в этом случае стоит не забывать, что этот способ может быть установлен и для других выплат. Вспомним как выглядели ведомости в банк по умолчанию без округления

6.jpg

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

7.jpg

В программе 1С: Бухгалтерия предприятия есть много возможностей и настроек, но некоторые мы просто не видим, про другие просто не знаем. Главное разобраться с этим, когда появится необходимость. Как видите, пользователю доступно много, нужно просто найти, где все это скрывается.

Добавить комментарий

Ваш адрес email не будет опубликован.