При работе в 1С:Бухгалтерия предприятия 3.0 пользователи и разработчики часто сталкиваются с ситуацией, когда документ Поступление на расчетный счет записывается и проводится без ошибок, но при нажатии на кнопку просмотра проводок (Дт/Кт) список движений оказывается пустым. На первый взгляд кажется, что все реквизиты заполнены корректно: указан контрагент, договор, сумма и счета расчетов. Однако проблема часто кроется глубже — в скрытых реквизитах табличных частей, которые не всегда отображаются на форме документа.
Рассмотрим подробнее, почему так происходит, и разберем по шагам, как диагностировать и устранить эту ошибку, особенно если документы загружаются в систему программно.
В современных конфигурациях на базе управляемых форм, таких как Бухгалтерия предприятия 3.0, логика хранения данных в банковских документах изменилась. Если раньше основные данные хранились в «шапке» документа, то теперь ключевая информация о суммах, счетах учета и объектах расчетов сосредоточена в табличной части РасшифровкаПлатежа. Даже если в форме документа вы видите только одно поле для ввода суммы, технически это строка в скрытой или свернутой таблице.
Проанализируем ситуацию: когда вы проводите документ, программный код модуля объекта обходит строки этой таблицы. Если система обнаруживает, что ключевой реквизит, такой как СуммаВзаиморасчетов, равен нулю или не заполнен, алгоритм проведения может просто «пропустить» формирование проводок по счетам 60, 62 или 76, считая, что база для распределения платежа отсутствует.
Как отметил автор исходной темы, основной причиной отсутствия проводок часто является незаполненный реквизит СуммаВзаиморасчетов. Это поле часто скрыто от глаз пользователя, если валюта документа совпадает с валютой договора (обычно это рубли). Система автоматически должна приравнивать СуммаВзаиморасчетов к основной сумме платежа, но при программном создании документа (через обработки, обмены или загрузки из Excel/Клиент-Банка) этот механизм автоматического заполнения может не сработать.
Если СуммаВзаиморасчетов остается пустой, 1С считает, что фактического погашения задолженности в валюте договора не происходит, и, следовательно, бухгалтерские записи не формируются, так как нарушается логика работы регистров накопления и бухгалтерии.
Прежде чем приступать к написанию кода для исправления ситуации, давайте посмотрим на данные «глазами программы». Для этого воспользуемся стандартным механизмом платформы:
Поступление на расчетный счет.ГруппаРасшифровкаПлатежа или таблицу РасшифровкаПлатежа.Сумма взаиморасчетов. Установите галочку напротив этого поля.Если вы увидели там пустые значения или нули при заполненной основной сумме — причина найдена.
Если документов много, исправлять их вручную через форму — неэффективно. Рассмотрим пример кода, который поможет правильно заполнить расшифровку платежа при программном создании или программной корректировке документа. Важно помнить, что простого присвоения суммы в шапке недостаточно.
Разберем пример заполнения объекта документа:
// Предположим, ОбъектДокумента уже получен или создан
ОбъектДокумента.ВалютаДокумента = ПараметрыСеанса.ВалютаРегламентированногоУчета;
ОбъектДокумента.СуммаДокумента = НужнаяСумма;
// Очищаем и заново заполняем расшифровку
НоваяСтрока = ОбъектДокумента.РасшифровкаПлатежа.Добавить();
НоваяСтрока.Сумма = НужнаяСумма;
НоваяСтрока.СуммаВзаиморасчетов = НужнаяСумма; // КРИТИЧЕСКИ ВАЖНО
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НоваяСтрока.СуммаНДС = НужнаяСумма * 20 / 120;
// Важно вызвать типовые процедуры заполнения счетов
// Это гарантирует, что счета 62.01, 62.02 будут подставлены корректно
СчетаУчетаРасчетов = БухгалтерскийУчетПереопределяемый.ПолучитьСчетаУчетаРасчетов(ОбъектДокумента.Контрагент, ОбъектДокумента.ДоговорКонтрагента);
НоваяСтрока.СчетУчетаРасчетов = СчетаУчетаРасчетов.СчетРасчетов;
НоваяСтрока.СчетУчетаАвансов = СчетаУчетаРасчетов.СчетАвансов;
ОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);
Проанализируем ситуацию, если вы используете типовые механизмы. В конфигурации БП 3.0 рекомендуется использовать метод ЗаполнитьСчетаУчета(), который инициализирует все необходимые скрытые параметры на основании настроек учетной политики и регистров сведений «Счета учета расчетов с контрагентами».
Помимо незаполненной СуммыВзаиморасчетов, существуют и другие факторы, которые мы должны проверить:
РучнаяКорректировка. Если он включен (значение Истина), но таблица движений пуста, 1С не будет пересчитывать проводки при проведении, ожидая, что пользователь заполнит их вручную.Оплачено. В некоторых версиях и видах операций (например, при интеграции с кассой) отсутствие этого флага блокирует движения по банку.Прочее поступление, система требует явного указания корреспондирующего счета в табличной части. Если счета дебета или кредита не заполнены программно, проводка просто не сможет сформироваться.Для массового исправления уже созданных документов без написания сложного кода можно использовать стандартную обработку «Групповое изменение реквизитов»:
Поступление на расчетный счет.Сумма взаиморасчетов и массово установить в него значения из поля Сумма.Важный момент: в версии 3.0.87.28 и выше механизмы контроля целостности данных стали более жесткими. Любое несоответствие суммы в шапке и суммы в табличной части расшифровки приводит к отказу в формировании проводок. Поэтому всегда следите за тем, чтобы при программном заполнении вызывались соответствующие обработчики событий или заполнялись все реквизиты коллекции РасшифровкаПлатежа.
Таким образом, мы выяснили, что «невидимые» на форме реквизиты играют ключевую роль в формировании движений документа. Тщательная проверка табличных частей и использование типовых методов заполнения счетов учета позволяют избежать подобных проблем при автоматизации учета в 1С.