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