Погрешность округления и есть ли
средство борьбы с ней возможностями 1С?
Работая с прикладными решениями 1С начиная с времен «1С ДОСТУПНО и ВСЕРЬЁЗ», обратил внимание на сложности с округлением сумм при пересчете валюты в рубли.
Проблема точности возникала и остается по настоящее время, практически во всех типовых решениях 1С.
Про конфигурации Бухгалтерия 2.0 для операционной системы DOS и Бухгалтерия 6.0 для операционной системы Windows говорить не буду, поскольку проблемы там решались продвинутыми пользователями, не говоря уже о системщиках и программистах.
Начиная с платформы 1С Предприятие 7.0 сопровождение ее пользователями ограничилось лишь установкой регламентной отчетности и обновлений. Все доработки под себя перешли в руки специалистов по поддержке и доработке продуктов 1С.
Политика 1С по использованию возможностей баз данных доросла до использования объектно-ориентированного программирования в 1С Предприятие 8.Х.
Но от погрешностей округления увы 1С-ники так и не избавились.
Фирма работает в 1С Бухгалтерия 2.0 версия 2.0.66.38 файловый вариант 5 пользователей, Платформа 1С Предприятие 8.3 релиз 8.3.11.2867.
В октябре 17 года мне пришлось по возится с сложной отгрузкой на 245 позиций.
Договор с клиентом в у.е. с оплатой в рублях по курсу на дату оплаты, при этом запуск в производство только после предоплаты 50% и окончательная предоплата при подтверждении готовности товара к отгрузке. Цены в у.е. НДС сверху. Отсюда и вся свистопляска с округлением рублевых сумм, и расхождения в ТОРГ-12 и счете-фактуре.
Отгрузка как всегда проходила в режиме «ВСЕ УЖЕ ОТПРАВИЛИ ВЧЕРА». Естественно сверять досконально все позиции в ТОРГ-12 и счете-фактуре менеджер не стал. Как результат пришлось переделывать документы не один раз. При этом при печати в очередной раз по строкам товаров получались разные суммы хотя итоговые были одинаковые.
Эта ситуация очень заинтересовала меня, тем более работая в Комплексной 7.7 я установил запрет повторного пересчета рублевых движений по документам в у.е. То есть пересчет производился в документе, а глобальные процедуры пересчета не запускались.
Прошел почти год и снова те же грабли. Хотя уже и 1С ушла далеко в перед.
Не однократные потуги перевести работу на Бухгалтерию 3.0 даже после удачных с моей точки зрения обновления базы с Бухгалтерии 2.0 на Бухгалтерию 3.0 Главный бухгалтер не спешит и продолжаем работать в Бухгалтерии 2.0
Поскольку применение унифицированной формы ТОРГ-12 не является обязательным
(«С 1 января 2013 года формы первичных учетных документов, содержащиеся в альбомах унифицированных форм первичной учетной документации, не являются обязательными к применению.»- Информация Минфина России N ПЗ-10/2012.), я решил найти форму печати ТОРГ-12 для Бухгалтерии 2.0 в валюте документа.
Облазив все доступные ресурсы, нашел на сайте ИНФОСТАРТ обработку, но брать не стал жаба задушила платить 1000 руб. (//infostart.ru/public/329124/).
Поэтому решил разобраться, а можно ли решить проблему самому. Почему если Счет-фактура выписывается на основании Расходной и в нем только ссылка на Расходную, то в чем причина расхождения сумм в рублях для документов в валюте.
Вот корректировки суммы ТОРГ-12 при наличии авансов в модуле с сокращениями :
//***********
Если СсылкаНаОбъект.Проведен И (Шапка.РасчетыВУсловныхЕдиницах
ИЛИ (Шапка.ВалютаДокумента <> мВалютаРегламентированногоУчета И СсылкаНаОбъект.Дата >= '20090101000000')) Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
Запрос.УстановитьПараметр("СчетУчетаРасчетовСКонтрагентом", СсылкаНаОбъект.СчетУчетаРасчетовСКонтрагентом);
Текст =
"ВЫБРАТЬ
| СУММА(Хозрасчетный.Сумма) КАК Сумма
|ИЗ
| РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Регистратор = &Ссылка
| И Хозрасчетный.СчетДт = &СчетУчетаРасчетовСКонтрагентом
| И Хозрасчетный.СчетКт В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТоваровУслугТовары.СчетДоходов
| ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &Ссылка";
Запрос.Текст = Текст;
СуммаВзаиморасчетов = Запрос.Выполнить().Выгрузить()[0].Сумма;
РасчетСуммыНДСПоСтавке = УчетНДС.РасчетНДСвРубляхПоСтавкеДокумента(Шапка.ДатаДокумента);
// далее текст не внесен
МассивРаспределения = Новый Массив;
//*****************
СуммаСНДС = СтрокаТовар.Сумма + ?(Шапка.СуммаВключаетНДС, 0, СтрокаТовар.СуммаНДС);
СуммаБезНДС = СуммаСНДС - СтрокаТовар.СуммаНДС;
МассивРаспределения.Добавить(СуммаСНДС);
ЗапросТовары.Колонки.Добавить("СуммаРублевая");
УчетНДС.РаспределитьСуммуПоСтолбцу(МассивРаспределения, СуммаВзаиморасчетов, ЗапросТовары, "СуммаРублевая");
МассивРаспределенныхСумм = ОбщегоНазначения.РаспределитьПропорционально(СтрокаТовар.СуммаРублевая, МассивРаспределения);
// Далее не интересно
//**********
При формировании данных для печати счета-фактуры распределение сумм авансов происходит повторно командой -
МассивРаспределенныхСумм = ОбщегоНазначения.РаспределитьПропорционально(СтрокаТовар.СуммаРублевая, МассивРаспределения);
и в результате ошибки округления распределяются по строкам не так как в ТОРГ-12.
Однако прежде чем я это нашел пришлось помучится. Так на своем ноутбуке пришлось переустанавливать платформу 1С.
В платформе 8.2.19.130 с поиском все нормально, но
В платформе 8.3.10.2667 поиска не оказалось хотя переходы на Бухгалтерию 3.0 ЗУП 3.0 на ней проводил без проблем с зависанием в процессе конвертации баз, что характерно для релизов 8.3.9.ХХХХ и 8.3.11.ХХХХ.
Пришлось установить платформу 8.3.12.1529 и работать в ней
Но с поиском «ищи то не знаю что» я честно запарился. Разобраться с огромным количеством процедур и функций, которые имеют статус глобальных и найти их (т.е. отследить где и какой процесс ее использует) мне с моими познаниями архитектуры и встроенного языка, используя глобальный поиск не удалось.
То есть я так не смог найти в Бухгалтерии 2.0 способ или метод распределения рублевых сумм по строкам в ТОРГ-12 и в Счет-фактуре, так чтобы они были равны.
В результате сравнения всех данных выявилось следующее:
Основная причина это, округление особенно если в валютной сумме НДС сверху.
Вот пример из той злополучной отгрузки в $:
Кол-во 6 Цена без НДС 5677,70 Сумма без НДС 34066,20
НДС 6131,92 Сумма с НДС 40198,12
После учета авансов итог в рублях:
Кол-во 6 Цена без НДС 325902,57 Сумма без НДС 1955415,39
НДС 351974,77 Сумма с НДС 2307390,16
Если исходить из требований налоговых органов и законодательства, то распределение сумм по позициям товаров в отгрузке их мало волнует, если ставка НДС для всех одинаковая. Их интересует итоговая сумма отгрузки и сумма НДС (эту сумму надо перечислить в бюджет.
Поэтому расхождения при пересчете валюты в рубли особенно не напрягают 1С-ников. Они пересчитывают в соответствии с требованиями законодательства, а то что не все цифры идентичны в накладной и счет-фактуре так это погрешности округления.
В нашем случае, если высчитать курс, то получим 57,40044957326363 по сумме или 57,40045617063247 по цене. Можете пересчитать в обратную сторону после округления и получите совершенно другие суммы и цены.
Вот СкринШоты по разбору полетов
ТОРГ-12 печать в Бухгалтерии 2.0 (встроенная печать) начало накладной
Обратите внимание на курс по строкам очень не одинаковый!
Счет-фактура печать в Бухгалтерии 2.0 (встроенная печать) начало накладной
Обратите внимание на курс по строкам очень одинаковый! И с ТОРГ-12 не пляшет, суммы тоже не все одинаковые.
А вот суммы проводок
Сравните подчеркнутые красным суммы везде разные. Вопрос к 1С как они туда попадают,
А это последний лист накладной и счета фактуры. Расхождение в копейку, мелочь!
Из всего этого самый простой выход – Отправлять отгрузочные документы Универсальным Передаточным Документом, поскольку от идентичен Счету-фактуре и принимается налоговыми органами основанием для расчета уплаты НДС.
Но в моем случае Покупатель отказывается получать УПД, ему нужен счет-фактура и накладная типа ТОРГ-12 (т.е. со всеми реквизитами Поставщика и Покупателя).
Вот и решил ваять свою печатную форму ТОРГ-12 которых на ИНФОСТАРТЕ пруд пруди, но такой за StartMoney я не нашел поэтому решил выложить на ваш суд свой труд
Печатная форма ТОРГ-12 (в валюте) для Бухгалтерии 2.0 сделана на основе обработки скачанной в 2012 году для печати с комплектами номенклатуры ссылку на неё не нашел близкая к ней //infostart.ru/public/163284/.
В результате получил в ТОРГ-12 строку Товара в валюте, а итоги по странице и всего в валюте и рублях. Данные Товара в рублях не вывожу, чтобы меньше работы по ручной корректировке. И Покупатель сам решит по какой сумме приходовать товар.
Регистрация обработки стандартная Меню -> "Сервис" -> "Дополнительные отчеты и обработки" -> "Дополнительные внешние печатные формы" в меню -> "Добавить" и выбрать файл обработки. В окне -> "Принадлежность печатной формы" выбрать Реализацию товаров и услуг.
Если реализация в рублях, то печатается обычная форма ТОРГ-12
Печатная форма ТОРГ-12 (в валюте) для Бухгалтерии 3.0 сделана на основе обработки //infostart.ru/public/712880/
В принципе для тройки проблемы с расхождением рублевых сумм в ТОРГ-12 и счете-фактуры нет, поэтому эта форма на любителя. 1С-ники решили эту проблему вводом Регистра сведений «РублевыеСуммыДокументовВВалюте». И все документы берут их из этого регистра. Так что если документ проведен, то все окей.
В обработке можно в макете добавить и рублевые суммы по товару они есть только не выводятся.
А вот проводки по злополучной отгрузке в 3.0
Все ясно рассказано и объяснено. Естественно курс пляшет.
Эта проблема с округлением усугубилась с 2002 года, когда официальный курс доллара стал с четырьмя знаками после запятой. А все суммы округляются до двух знаков после запятой. Вот и сочиняются способы распределения отброшенных остатков от округления.
Отработки тестировались на платформах:
1С Предприятие 8.3.10.2667, 8.3.11.2867, 8.3.12.1529
Конфигурации: Бухгалтерия 2.0 (2.0.66.60), Бухгалтерия 3.0 (3.0.64.54).
Код открыт так что кому надо можете доработать под себя.
Для сведения в тройке обработка подключается
через Раздел "Администрирование" -> "Печатные формы, отчеты и обработки" -> ставим галочку напротив "Дополнительные отчеты и обработки" -> "Дополнительные отчеты и обработки" -> кнопка "Создать" и указываем скачанный файл. Жмем "ОК" и радуемся!