Как в отчете на СКД привязать оплату к счету в 1С:Бухгалтерия 3.0?

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

При разработке внешних отчетов на системе компоновки данных (СКД) в конфигурации 1С:Бухгалтерия предприятия 3.0 программисты часто сталкиваются с задачей вывода информации об оплате конкретных счетов. Казалось бы, задача тривиальная: достаточно связать документ СчетНаОплатуПокупателю с документом ПоступлениеНаРасчетныйСчет. Однако на практике стандартная связь через реквизит ДокументОснование часто не срабатывает, и поле оплаты в отчете остается пустым.

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

Выясним причину: почему простая связь не работает?

Проанализируем ситуацию, с которой столкнулся автор темы. В большинстве случаев разработчики пытаются соединить таблицы в конструкторе запроса СКД следующим образом:


ВЫБРАТЬ
    Счет.Ссылка КАК Счет,
    Поступление.Ссылка КАК ДокументОплаты
ИЗ
    Документ.СчетНаОплатуПокупателю КАК Счет
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеНаРасчетныйСчет КАК Поступление
    ПО Счет.Ссылка = Поступление.ДокументОснование

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

В результате в структуре подчиненности связь может отображаться (если задействованы другие механизмы), но прямой запрос по реквизиту ДокументОснование выдаст пустой результат. Рассмотрим более продвинутые методы решения этой задачи.

Решение №1: Использование регистра «Состояние оплаты счетов на оплату»

В современных версиях «1С:Бухгалтерия предприятия 3.0» реализован специальный механизм отслеживания статусов счетов. Для этого используется регистр сведений СостояниеОплатыСчетовНаОплату. Этот регистр — самый надежный источник информации, так как система записывает туда данные независимо от того, каким способом была зафиксирована связь оплаты со счетом.

Разберем по шагам, как построить запрос к этому регистру в СКД:

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

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

Решение №2: Связь через табличную часть «Оплата по счетам»

В документах ПоступлениеНаРасчетныйСчет и ПоступлениеНаличных в БП 3.0 существует табличная часть ОплатаПоСчетам. Именно в ней хранится информация о том, какие счета погашает данный платеж. Это особенно актуально, когда одной платежкой оплачиваются сразу несколько счетов.

Рассмотрим пример запроса, который объединяет банк и кассу по табличным частям:


ВЫБРАТЬ
    Счет.Ссылка КАК СчетНаОплату,
    ОплатаБанк.Ссылка КАК ДокументОплаты
ИЗ
    Документ.СчетНаОплатуПокупателю КАК Счет
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеНаРасчетныйСчет.ОплатаПоСчетам КАК ОплатаБанк
    ПО Счет.Ссылка = ОплатаБанк.СчетНаОплату

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Счет.Ссылка,
    ОплатаКасса.Ссылка
ИЗ
    Документ.СчетНаОплатуПокупателю КАК Счет
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеНаличных.ОплатаПоСчетам КАК ОплатаКасса
    ПО Счет.Ссылка = ОплатаКасса.СчетНаОплату

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

Решение №3: Анализ через регистры расчетов (Взаиморасчеты)

Если в вашей информационной базе включена глубокая детализация расчетов, можно использовать регистр накопления РасчетыСКонтрагентами или специализированные регистры БП 3.0, такие как ВзаиморасчетыПоДокументам.

Этот способ сложнее, но он позволяет увидеть оплаты, которые прошли не напрямую по счету, а через цепочку: Счет -> Реализация -> Оплата. Часто бывает так, что счет сам по себе не содержит ссылки на оплату, но он указан в документе РеализацияТоваровУслуг, а реализация, в свою очередь, закрыта платежным поручением.

Для реализации такой логики в СКД рекомендуется использовать вложенные запросы или несколько наборов данных, связанных между собой по полям Контрагент, Договор и Сделка.

Настройка ресурсов СКД: Вывод нескольких оплат в одной строке

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

Для этого воспользуемся функциями языка выражений СКД на вкладке «Ресурсы». Для поля ДокументОплаты (или его представления) пропишем следующее выражение:


СоединитьСтроки(ТаблицаЗначений(ВычислитьВыражениеТаблицей("Представление(ДокументОплаты)", "ДокументОплаты")), ", ")

Разберем, что делает эта конструкция:

  1. ВычислитьВыражениеТаблицей — собирает все значения документов оплаты по данной группировке (по счету или по номенклатуре) в виртуальную таблицу.
  2. ТаблицаЗначений — преобразует результат в формат, с которым могут работать агрегатные функции.
  3. СоединитьСтроки — склеивает все названия документов в одну строку, разделяя их запятой.

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

Дополнительные рекомендации

При работе с оплатами важно помнить о следующих нюансах:

Таким образом, мы рассмотрели комплексный подход к решению проблемы привязки оплаты к счету. Комбинируя использование правильных таблиц (регистры состояний и табличные части документов) с мощными инструментами ресурсов СКД, вы сможете создать информативный и точный отчет, который будет корректно отображать данные даже при неидеальном заполнении документов пользователями.

← На главную