Решение:
- Для хранения сведений о условиях кредита заведем регистр сведений "ПараметрыКредита",Измерение -"Контрагент", ресурсы "Дней" и "сумма кредита".
- Добавим новый регистр накопления "Взаиморасчеты" (со знаком "+" будут отражатся отгрузки, со знаком "-" оплаты).
- Измерения: "Контрагент", "Реализация", ресурс "Сумма".
- Добавим новый документ "Приход денег" с ТЧ "СуммыПрихода", реквизиты ТЧ "Контрагент" и "Сумма оплаты". Этот документ как и "Расходная накладная" будет регистратором регистра "Взаиморасчеты".
Потребуется  прописать обработку проведения 3-х документов.
1) Приходная накладная. 
Тут все стандартно, движения в регистр "Остатки номенклатуры"
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
 СуммаПоДокументу = СписокНоменклатуры.Итог("Сумма");
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, Режим)
 Движения.ОстаткиНоменклатуры.Записывать = Истина;
 Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
  Движение = Движения.ОстаткиНоменклатуры.Добавить();
  Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
  Движение.Период = Дата;
  Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
  Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
  Движение.Сумма = ТекСтрокаСписокНоменклатуры.Сумма;
 КонецЦикла;
КонецПроцедуры
2) Приход денег.
Здесь необходимо "закрыть" накладные если они есть, всю оставшуюся сумму "закинуть" на предоплату. (движением с пустым измерением "реализация").
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
 Движения.Взаиморасчеты.Записывать = Истина;
 Движения.Взаиморасчеты.Очистить();
 Движения.Взаиморасчеты.Записать();
 Блокировка = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
 ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
 ЭлементБлокировки.ИсточникДанных = СуммыПриходов;
 ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Контрагент", "Контрагент");
 Блокировка.Заблокировать();
 Запрос = Новый("Запрос");
 Запрос.Текст = "ВЫБРАТЬ
 | ПриходДенегСуммыПриходов.Контрагент,
 | СУММА(ПриходДенегСуммыПриходов.СуммаОплаты) КАК СуммаОплаты
 |ПОМЕСТИТЬ ДокТЧ
 |ИЗ
 | Документ.ПриходДенег.СуммыПриходов КАК ПриходДенегСуммыПриходов
 |ГДЕ
 | ПриходДенегСуммыПриходов.Ссылка = &Ссылка
 |
 |СГРУППИРОВАТЬ ПО
 | ПриходДенегСуммыПриходов.Контрагент
 |;
 |
 |////////////////////////////////////////////////////////////////////////////////
 |ВЫБРАТЬ
 | ДокТЧ.Контрагент КАК Контрагент,
 | ВзаиморасчетыОстатки.Реализация,
 | ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаОстаток, 0) КАК Долг,
 | ДокТЧ.СуммаОплаты КАК Оплата
 |ИЗ
 | ДокТЧ КАК ДокТЧ
 |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Взаиморасчеты.Остатки(
 |    &ТочкаИтогов,
 |    Контрагент В
 |     (ВЫБРАТЬ
 |      ДокТЧ.Контрагент
 |     ИЗ
 |      ДокТЧ)) КАК ВзаиморасчетыОстатки
 |  ПО ДокТЧ.Контрагент = ВзаиморасчетыОстатки.Контрагент
 |
 |УПОРЯДОЧИТЬ ПО
 | ВзаиморасчетыОстатки.Реализация.Дата
 |ИТОГИ
 | СУММА(Долг),
 | МАКСИМУМ(Оплата)
 |ПО
 | Контрагент";
 Запрос.УстановитьПараметр("Ссылка", Ссылка); 
 Запрос.УстановитьПараметр("ТочкаИтогов", Новый Граница(МоментВремени(),ВидГраницы.Исключая));
 ВыборкаИтоги = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Контрагент");
 Пока ВыборкаИтоги.Следующий() Цикл
  Оплачено = ВыборкаИтоги.Оплата;
  Выборка = ВыборкаИтоги.Выбрать();
  Пока Выборка.Следующий() Цикл
   Если Не ЗначениеЗаполнено(Выборка.Реализация) Тогда
    Продолжить;
   КонецЕсли;
  Если  Оплачено>0    и Выборка.Долг>0 Тогда
    Списываем = Мин(Выборка.Долг, Оплачено);
    Движение = Движения.Взаиморасчеты.ДобавитьРасход();
    ЗаполнитьЗначенияСвойств(Движение, Выборка);
    Движение.Период = Дата;
    Движение.Сумма =Списываем;
    Оплачено = Оплачено - Списываем;
   КонецЕсли;
  КонецЦикла;
  //предоплата
  Если Оплачено > 0 Тогда
   Движение = Движения.Взаиморасчеты.ДобавитьРасход();
   Движение.Контрагент = ВыборкаИтоги.контрагент;
   Движение.Период = Дата;
   Движение.Сумма =Оплачено;  
  КонецЕсли;
 КонецЦикла;
КонецПроцедуры
3) Расходная накладная.
При проведении сначала проверим возможность проведения с учетом долга контрагента и его кредита, затем проверим хватает ли вообще списываемого товара.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
 СуммаПоДокументу =СписокНоменклатуры.Итог("Сумма");
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
 Движения.ОстаткиНоменклатуры.Записывать = Истина;
 Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записать();
 Движения.Взаиморасчеты.Записывать = Истина;
 Движения.Взаиморасчеты.Очистить();
 Движения.Взаиморасчеты.Записать();
 Блокировка = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
 ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
 ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
 ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
 Блокировка.Заблокировать();
 Блокировка2 = Новый БлокировкаДанных;
 ЭлементБлокировки2 = Блокировка2.Добавить("РегистрНакопления.Взаиморасчеты");
 ЭлементБлокировки2.УстановитьЗначение("Контрагент", Контрагент);
 ЭлементБлокировки2.Режим = РежимБлокировкиДанных.Исключительный;
 Блокировка2.Заблокировать();
 Запрос = Новый("Запрос");
 Запрос.Текст ="ВЫБРАТЬ
 | ВзаиморасчетыОстатки.Контрагент КАК Контрагент,
 | -ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
 | ВзаиморасчетыОстатки.Реализация,
 | ЕСТЬNULL(ПараметрыКредитов.Дней, 0) КАК ДнейКредита,
 | ЕСТЬNULL(ПараметрыКредитов.СуммаКредита, 0) КАК СуммаКредита,
 | ЕСТЬNULL(РАЗНОСТЬДАТ(КОНЕЦПЕРИОДА(ВзаиморасчетыОстатки.Реализация.Дата, ДЕНЬ), &НаДату, ДЕНЬ), 0) КАК ПрошлоДней
 |ИЗ
 | РегистрНакопления.Взаиморасчеты.Остатки(&НаДату, Контрагент = &Контрагент) КАК ВзаиморасчетыОстатки
 |  ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыКредитов КАК ПараметрыКредитов
 |  ПО ВзаиморасчетыОстатки.Контрагент = ПараметрыКредитов.Контрагент
 |ГДЕ
 | ПараметрыКредитов.Контрагент = &Контрагент
 |ИТОГИ
 | СУММА(СуммаОстаток),
 | МАКСИМУМ(ДнейКредита),
 | МАКСИМУМ(СуммаКредита),
 | МАКСИМУМ(ПрошлоДней)
 |ПО
 | Контрагент";
 Запрос.УстановитьПараметр("Контрагент", Контрагент);
 Запрос.УстановитьПараметр("НаДату", КонецДня(Дата));
 ДопустимаяСуммаОтгрузки =0;
 Результат = Запрос.Выполнить();
 Если Не Результат.Пустой() Тогда
  ВыборкаИтоги = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Контрагент");
  ВыборкаИтоги.Следующий(); 
  ДопустимаяСуммаОтгрузки =ВыборкаИтоги.СуммаКредита+ВыборкаИтоги.СуммаОстаток; 
  Если ВыборкаИтоги.ПрошлоДней>ВыборкаИтоги.ДнейКредита Тогда
   Сообщение = Новый("СообщениеПользователю");
   Сообщение.Текст = "Превыышение по сроку кредита на "+ (ВыборкаИтоги.ПрошлоДней-ВыборкаИтоги.ДнейКредита) +" дней.";
   Сообщение.Сообщить();
   Отказ = Истина;
  КонецЕсли;
 КонецЕсли;
 ПревышениеПоСумме = СуммаПоДокументу-ДопустимаяСуммаОтгрузки ;
 Если ПревышениеПоСумме>0 Тогда
  Сообщение = Новый("СообщениеПользователю");
  Сообщение.Текст = "Превыышение по максимально допустимой сумме кредита на "+ ПревышениеПоСумме;
  Сообщение.Сообщить();
  Отказ = Истина;
 КонецЕсли;
 Если Не Отказ Тогда
  Движение = Движения.Взаиморасчеты.ДобавитьПриход();
  Движение.Период = Дата;
  Движение.Реализация = Ссылка;
  Движение.Контрагент = Контрагент;
  Движение.Сумма = СуммаПоДокументу;
 КонецЕсли;
 Если Не Отказ Тогда
  Запрос = Новый("Запрос");
  МВТ = Запрос.МенеджерВременныхТаблиц;
  Запрос.Текст ="ВЫБРАТЬ
  | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
  | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
  | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
  | РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Дата КАК Период
  |ПОМЕСТИТЬ ДокТЧ
  |ИЗ
  | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
  |ГДЕ
  | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
  |
  |СГРУППИРОВАТЬ ПО
  | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
  | РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Дата
  |;
  |
  |////////////////////////////////////////////////////////////////////////////////
  |ВЫБРАТЬ
  | ДокТЧ.Номенклатура,
  | ДокТЧ.Количество,
  | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК ОстатокСум,
  | ВЫБОР
  |  КОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) <> 0
  |   ТОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) / ОстаткиНоменклатурыОстатки.КоличествоОстаток
  |  ИНАЧЕ 0
  | КОНЕЦ КАК Себестоимость,
  | ДокТЧ.Период,
  | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК ОстатокКол
  |ИЗ
  | ДокТЧ КАК ДокТЧ,
  | РегистрНакопления.ОстаткиНоменклатуры.Остатки(
  |   &ТочкаИтогов,
  |   Номенклатура В
  |    (ВЫБРАТЬ
  |     ДокТЧ.Номенклатура
  |    ИЗ
  |     ДокТЧ)) КАК ОстаткиНоменклатурыОстатки";
  Запрос.УстановитьПараметр("Ссылка", Ссылка);
  Запрос.УстановитьПараметр("ТочкаИтогов", Новый Граница(МоментВремени(),ВидГраницы.Исключая));
  Выборка = Запрос.Выполнить().Выбрать();
  Пока Выборка.Следующий() Цикл
   Если Выборка.Количество > Выборка.ОстатокКол Тогда
    Сообщение = Новый("СообщениеПользователю");
    Сообщение.Текст = "Недостаточно товара  "+ Выборка.номенклатура + " надо еще "+(Выборка.Количество - Выборка.ОстатокКол);
    Сообщение.Сообщить();
    Отказ = Истина; 
   Иначе
    Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
    ЗаполнитьЗначенияСвойств(Движение, Выборка);
    Движение.Сумма = Выборка.Себестоимость * Выборка.Количество;
   КонецЕсли;
  КонецЦикла;
 КонецЕсли;
КонецПроцедуры
И на десерт "Отчет".
Текст запроса:
ВЫБРАТЬ
 ВзаиморасчетыОстаткиИОбороты.Контрагент,
 ВЫБОР
  КОГДА ВзаиморасчетыОстаткиИОбороты.Реализация = ЗНАЧЕНИЕ(Документ.РасходнаяНакладная.ПустаяСсылка)
   ТОГДА "Предоплата"
  ИНАЧЕ ВзаиморасчетыОстаткиИОбороты.Реализация
 КОНЕЦ КАК Реализация,
 ВзаиморасчетыОстаткиИОбороты.СуммаПриход КАК Отгрузка,
 ВзаиморасчетыОстаткиИОбороты.СуммаРасход КАК Оплата,
 ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток КАК НачальныйОстаток,
 ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток КАК КонечныйОстаток
ИЗ
 РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, , , ) КАК ВзаиморасчетыОстаткиИОбороты

 
УПОРЯДОЧИТЬ ПО
ОтветитьУдалить| ВзаиморасчетыОстатки.Реализация.Дата (МоментВремени)
должно быть ни через дату, а через момент времени
Как будто ссылка на расчетную задачу
ОтветитьУдалить