Здравствуйте!
Создал внешнюю печатную форму для документа "Заказ покупателя" в УТ 10.3.
В эту печатную форму добавил функцию для вывода остатка по договору:

```1c
    Функция ДолгКонтрагента() Экспорт

    Остаток = ";
    СуммаДолга = УправлениеВзаиморасчетами.ТекущийДолг(СсылкаНаОбъект.ДоговорКонтрагента,,СсылкаНаОбъект);
    Остаток = Строка(СуммаДолга)+ " " + СсылкаНаОбъект.ДоговорКонтрагента.ВалютаВзаиморасчетов;

    Возврат Остаток;
    КонецФункции;
```

Но возникла проблема.
Если в договоре указано в поле "Взаиморасчеты ведутся" значение "По договору в целом", то функция срабатывает и долг на печатной форме отображается.
Если же в этом же поле выбран параметр "По заказам", то не срабатывает. Почему так, подскажите, пожалуйста?
Спасибо.
---
На основании заказа покупателя вводятся документы прихода дс или/и реализации.
Исправил таким образом:

```1c
    Функция ДолгКонтрагента() Экспорт

    Остаток = ";
    СуммаДолга = УправлениеВзаиморасчетами.ТекущийДолг(СсылкаНаОбъект.ДоговорКонтрагента,СсылкаНаОбъект,СсылкаНаОбъект);
    Остаток = Строка(СуммаДолга)+ " " + СсылкаНаОбъект.ДоговорКонтрагента.ВалютаВзаиморасчетов;

    Возврат Остаток;
    КонецФункции;
```

Вроде бы работает корректно.
---
А какую сумму долга ты считаешь программа должна показать?
---
Когда взаиморасчеты ведутся по заказам, то выводится долг по сделке, то есть, по заказу. Если по заказу еще не выведена реализация и не проведена оплата, то в заказе надпись "по сделке с покупателем нет долга". Соответственно, если есть задолженность, то ее покажет, но именно в разрезе заказа.
---
Соответственно, то же самое получаете во внешней обработке. Вот код функции:

```1c
    Функция ТекущийДолг(Договор, Сделка = Неопределено, СсылкаДокумент) Экспорт

    ТекущийДолг = 0;
    СтруктураОтбора = Новый Структура(); // для отбора остатков взаиморасчетов
    СтруктураОтбора.Вставить("ДоговорКонтрагента", Договор);
    СтруктураОтбора.Вставить("Контрагент", Договор.Владелец);

    Если ЗначениеЗаполнено(Договор) Тогда
    Если Договор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом Тогда
    ТекущийДолг = РегистрыНакопления.ВзаиморасчетыСКонтрагентами.Остатки(,
    СтруктураОтбора,"ДоговорКонтрагента","СуммаВзаиморасчетов").Итог("СуммаВзаиморасчетов");

    Иначе // Взаиморасчеты ведутся по сделкам
    Если ЗначениеЗаполнено(Сделка) Тогда
    СтруктураОтбора.Вставить("Сделка", Сделка);
    ТекущийДолг = РегистрыНакопления.ВзаиморасчетыСКонтрагентами.Остатки(,
    СтруктураОтбора,"ДоговорКонтрагента,Сделка","СуммаВзаиморасчетов").Итог("СуммаВзаиморасчетов");
    КонецЕсли;
    КонецЕсли;

    КонецЕсли;

    Возврат ТекущийДолг;

    КонецФункции // ТекущийДолг()
```
---
Если необходимо вывести в любом случае долг в разрезе договора, я бы взяла из этого модуля. Например, так:

```1c
    Функция ДолгКонтрагента() Экспорт

    ТекущийДолг = 0;
    ТекДоговор = СсылкаНаОбъект.ДоговорКонтрагента;
    СтруктураОтбора = Новый Структура(); // для отбора остатков взаиморасчетов
    СтруктураОтбора.Вставить("ДоговорКонтрагента", ТекДоговор);
    СтруктураОтбора.Вставить("Контрагент", ТекДоговор.Владелец);

    ТекущийДолг = РегистрыНакопления.ВзаиморасчетыСКонтрагентами.Остатки(,
    СтруктураОтбора,"ДоговорКонтрагента","СуммаВзаиморасчетов").Итог("СуммаВзаиморасчетов");

    Возврат ТекущийДолг;
    КонецФункции;
```

Но логика программы такова, что раз Вы выбираете детализацию взаиморасчетов по заказам, то Вы и получаете по заказам, а не по договору в целом.
---
На основании заказа покупателя вводятся документы прихода дс или/и реализации.
Исправил таким образом:

```1c
    Функция ДолгКонтрагента() Экспорт

    Остаток = ";
    СуммаДолга = УправлениеВзаиморасчетами.ТекущийДолг(СсылкаНаОбъект.ДоговорКонтрагента,СсылкаНаОбъект,СсылкаНаОбъект);
    Остаток = Строка(СуммаДолга)+ " " + СсылкаНаОбъект.ДоговорКонтрагента.ВалютаВзаиморасчетов;

    Возврат Остаток;
    КонецФункции;
```

Вроде бы работает корректно.