В процессе ведения бухгалтерского учета в конфигурации «Управление производственным предприятием» (УПП) пользователи часто сталкиваются с ситуацией, когда на конец месяца по валютным счетам или счетам в условных единицах (например, 60.31) «зависают» рублевые остатки при нулевом валютном сальдо. Особенно остро эта проблема проявляется, когда платежное поручение и документ Переоценка валютных средств созданы одной датой и даже одной секундой (23:59:59).
В данной статье мы подробно разберем, почему возникает эта ошибка, как работает алгоритм переоценки в 1С и какие шаги необходимо предпринять для исправления ситуации.
Прежде всего, проанализируем специфику счета 60.31. В отличие от счета 60.21, предназначенного для расчетов в «чистой» валюте, счет 60.31 используется для учета расчетов в условных единицах (у.е.). Это означает, что валюта обязательства — иностранная, а валюта платежа — рубли.
Согласно ПБУ 3/2006, такие остатки подлежат переоценке на отчетную дату и на дату совершения операции. В УПП алгоритм переоценки у.е. реализован в процедуре ПереоценитьРасчетыВУсловныхЕдиницахРегл. Система сравнивает рублевый остаток, сформированный по курсу на дату возникновения задолженности (или аванса), с рублевой суммой, рассчитанной по курсу на конец текущего периода.
Рассмотрим ситуацию, описанную пользователем: платежное поручение исходящее и документ переоценки установлены на 23:59:59 последнего дня месяца. На первый взгляд кажется, что система должна учесть платеж, обнулить валюту и не делать переоценку. Однако в 1С существует понятие «Момент времени».
Момент времени включает в себя:
Если два документа имеют одинаковое время 23:59:59, их физический порядок в последовательности определяется тем, какой из них был записан или проведен раньше (по внутреннему индексу). Если документ Переоценка валютных средств в этой невидимой очереди стоит раньше платежного поручения, он «видит» остаток, который был в базе до оплаты. Система считает, что на конец дня есть валютный долг, переоценивает его, создает проводку на курсовую разницу, а затем платежка обнуляет валюту, но «хвост» от переоценки остается в рублях.
Давайте заглянем в программный код. Процедура ПереоценитьРасчетыВУсловныхЕдиницахРегл работает по следующему принципу:
// Упрощенная логика запроса переоценки
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
| ХозрасчетныйОстатки.Субконто2 КАК Договор,
| ХозрасчетныйОстатки.ВалютнаяСуммаОстаток КАК ВалОстаток,
| ХозрасчетныйОстатки.СуммаОстаток КАК РубОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ГраницаОстатков, Счёт = &Счет60_31) КАК ХозрасчетныйОстатки";
Проанализируем ситуацию: если &ГраницаОстатков установлена как МоментВремени документа переоценки, и этот момент наступает до платежа, то запрос вернет ненулевой ВалОстаток. Далее система выполняет расчет:
ВалОстаток на конец дня.КурсыВалют на дату переоценки.РубОстаток.Если вы используете в платежном поручении ручной курс, который отличается от курса в регистре, ситуация усложняется. Система при проведении оплаты должна сама рассчитать разницу, но если документ переоценки «вклинивается» в расчеты из-за времени, данные в оборотно-сальдовой ведомости (ОСВ) неизбежно «поедут».
Самый простой и надежный способ решить проблему без вмешательства в код — это строгое соблюдение регламента установки времени документов. Мы рекомендуем придерживаться следующего правила:
Посмотрим на пример: если мы переставим дату оплаты в платежном поручении на 23:59:50, то при проведении документа Переоценка в 23:59:59 остаток по валюте на счете 60.31 будет уже нулевым, и запрос в коде вернет пустой результат. Переоценка не будет создана, и ОСВ останется корректной.
Проанализируем настройки программы. В УПП существует регистр сведений Счета с особым порядком переоценки. Если вы добавите туда счет 60.31 и укажете способ переоценки «Не переоценивать», система перестанет автоматически создавать проводки по этому счету. Однако это радикальный метод, который может привести к нарушению требований ПБУ, если на счете действительно остаются валютные остатки, требующие оценки по актуальному курсу.
Если бизнес-процессы компании не позволяют менять время документов вручную, можно рассмотреть вариант создания подписки на событие ПередЗаписью для документа ПлатежноеПоручениеИсходящее. Выясним причину, по которой пользователи ставят время в конец дня, и если это происходит массово, добавим следующий код:
Процедура ПередЗаписьюПлатежки(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
// Проверяем, что это последний день месяца
Если Источник.Дата = КонецМесяца(Источник.Дата) Тогда
// Устанавливаем время на одну секунду раньше регламентных операций
Источник.Дата = НачалоДня(Источник.Дата) + (23 * 3600) + (59 * 60) + 58;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот подход гарантирует, что оплата всегда будет «видна» регламентному документу переоценки.
Рассмотрим еще один нюанс, упомянутый в обсуждении: наличие документа Поступление доп. расходов. В УПП этот документ часто делает движения не только по бухгалтерским счетам, но и по регистрам взаиморасчетов. Если платеж и доп. расходы не сошлись по аналитике (например, указаны разные заказы или разные документы расчетов), система может видеть остаток по одной аналитике и «переплату» по другой. В этом случае даже при нулевом общем сальдо программа будет пытаться переоценить каждую аналитику в отдельности.
Рекомендация: Всегда проверяйте детализацию в ОСВ по субконто «Документы расчетов с контрагентами». Если там видны «развернутые» остатки, необходимо выполнить обработку Восстановление последовательности расчетов, чтобы суммы «схлопнулись».
Подводя итог, можно сказать, что проблема «разъезжающейся» оборотки по счету 60.31 — это классический конфликт последовательности документов в одной секунде.
Для решения проблемы мы рекомендуем:
Курсы валют. Если курс указан вручную, убедиться в его корректности.Граница с включением момента времени документа).Следуя этим правилам, вы обеспечите чистоту бухгалтерского учета и корректное отражение курсовых разниц в 1С:УПП.