Почему в 1С:УПП некорректно работает переоценка на счете 60.31 при совпадении времени документов?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет
← На главную

В процессе ведения бухгалтерского учета в конфигурации «Управление производственным предприятием» (УПП) пользователи часто сталкиваются с ситуацией, когда на конец месяца по валютным счетам или счетам в условных единицах (например, 60.31) «зависают» рублевые остатки при нулевом валютном сальдо. Особенно остро эта проблема проявляется, когда платежное поручение и документ Переоценка валютных средств созданы одной датой и даже одной секундой (23:59:59).

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

Особенности счета 60.31 и расчетов в условных единицах

Прежде всего, проанализируем специфику счета 60.31. В отличие от счета 60.21, предназначенного для расчетов в «чистой» валюте, счет 60.31 используется для учета расчетов в условных единицах (у.е.). Это означает, что валюта обязательства — иностранная, а валюта платежа — рубли.

Согласно ПБУ 3/2006, такие остатки подлежат переоценке на отчетную дату и на дату совершения операции. В УПП алгоритм переоценки у.е. реализован в процедуре ПереоценитьРасчетыВУсловныхЕдиницахРегл. Система сравнивает рублевый остаток, сформированный по курсу на дату возникновения задолженности (или аванса), с рублевой суммой, рассчитанной по курсу на конец текущего периода.

Разбор проблемы «одной секунды» и момента времени

Рассмотрим ситуацию, описанную пользователем: платежное поручение исходящее и документ переоценки установлены на 23:59:59 последнего дня месяца. На первый взгляд кажется, что система должна учесть платеж, обнулить валюту и не делать переоценку. Однако в 1С существует понятие «Момент времени».

Момент времени включает в себя:

  1. Дату документа.
  2. Время документа до секунды.
  3. Ссылку на сам документ (уникальный идентификатор в базе данных).

Если два документа имеют одинаковое время 23:59:59, их физический порядок в последовательности определяется тем, какой из них был записан или проведен раньше (по внутреннему индексу). Если документ Переоценка валютных средств в этой невидимой очереди стоит раньше платежного поручения, он «видит» остаток, который был в базе до оплаты. Система считает, что на конец дня есть валютный долг, переоценивает его, создает проводку на курсовую разницу, а затем платежка обнуляет валюту, но «хвост» от переоценки остается в рублях.

Анализ алгоритма процедуры переоценки

Давайте заглянем в программный код. Процедура ПереоценитьРасчетыВУсловныхЕдиницахРегл работает по следующему принципу:


// Упрощенная логика запроса переоценки
Запрос.Текст = "ВЫБРАТЬ
|   ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
|   ХозрасчетныйОстатки.Субконто2 КАК Договор,
|   ХозрасчетныйОстатки.ВалютнаяСуммаОстаток КАК ВалОстаток,
|   ХозрасчетныйОстатки.СуммаОстаток КАК РубОстаток
|ИЗ
|   РегистрБухгалтерии.Хозрасчетный.Остатки(&ГраницаОстатков, Счёт = &Счет60_31) КАК ХозрасчетныйОстатки";

Проанализируем ситуацию: если &ГраницаОстатков установлена как МоментВремени документа переоценки, и этот момент наступает до платежа, то запрос вернет ненулевой ВалОстаток. Далее система выполняет расчет:

  1. Берется ВалОстаток на конец дня.
  2. Умножается на курс из регистра сведений КурсыВалют на дату переоценки.
  3. Полученная величина сравнивается с текущим РубОстаток.
  4. Разница фиксируется как курсовая (суммовая) разница.

Если вы используете в платежном поручении ручной курс, который отличается от курса в регистре, ситуация усложняется. Система при проведении оплаты должна сама рассчитать разницу, но если документ переоценки «вклинивается» в расчеты из-за времени, данные в оборотно-сальдовой ведомости (ОСВ) неизбежно «поедут».

Способ 1: Корректировка времени документов (Лучшая практика)

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

Посмотрим на пример: если мы переставим дату оплаты в платежном поручении на 23:59:50, то при проведении документа Переоценка в 23:59:59 остаток по валюте на счете 60.31 будет уже нулевым, и запрос в коде вернет пустой результат. Переоценка не будет создана, и ОСВ останется корректной.

Способ 2: Использование регистра «Счета с особым порядком переоценки»

Проанализируем настройки программы. В УПП существует регистр сведений Счета с особым порядком переоценки. Если вы добавите туда счет 60.31 и укажете способ переоценки «Не переоценивать», система перестанет автоматически создавать проводки по этому счету. Однако это радикальный метод, который может привести к нарушению требований ПБУ, если на счете действительно остаются валютные остатки, требующие оценки по актуальному курсу.

Способ 3: Программная корректировка (для разработчиков)

Если бизнес-процессы компании не позволяют менять время документов вручную, можно рассмотреть вариант создания подписки на событие ПередЗаписью для документа ПлатежноеПоручениеИсходящее. Выясним причину, по которой пользователи ставят время в конец дня, и если это происходит массово, добавим следующий код:


Процедура ПередЗаписьюПлатежки(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
        // Проверяем, что это последний день месяца
        Если Источник.Дата = КонецМесяца(Источник.Дата) Тогда
             // Устанавливаем время на одну секунду раньше регламентных операций
             Источник.Дата = НачалоДня(Источник.Дата) + (23 * 3600) + (59 * 60) + 58;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Этот подход гарантирует, что оплата всегда будет «видна» регламентному документу переоценки.

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

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

Рекомендация: Всегда проверяйте детализацию в ОСВ по субконто «Документы расчетов с контрагентами». Если там видны «развернутые» остатки, необходимо выполнить обработку Восстановление последовательности расчетов, чтобы суммы «схлопнулись».

Резюме и выводы

Подводя итог, можно сказать, что проблема «разъезжающейся» оборотки по счету 60.31 — это классический конфликт последовательности документов в одной секунде.

Для решения проблемы мы рекомендуем:

  1. Проверить курсы в платежном поручении и в регистре Курсы валют. Если курс указан вручную, убедиться в его корректности.
  2. Изменить время документа оплаты на 1-2 секунды раньше времени переоценки (например, на 23:59:57).
  3. Перед формированием итоговой переоценки обязательно запускать обработку проведения регламентных операций по взаиморасчетам.
  4. Если вы анализируете проблему через консоль запросов, всегда проверяйте параметры границы времени (используйте тип Граница с включением момента времени документа).

Следуя этим правилам, вы обеспечите чистоту бухгалтерского учета и корректное отражение курсовых разниц в 1С:УПП.

← На главную