#Область ОписаниеПеременных
&НаКлиенте
Перем ПараметрыОжидания;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Параметры.ОбъектРасчетов) = Тип("Массив")
И ОбщегоНазначенияКлиентСервер.СвернутьМассив(Параметры.ОбъектРасчетов).Количество() = 1 Тогда
ОбъектРасчетов = Параметры.ОбъектРасчетов[0];
ИначеЕсли ТипЗнч(Параметры.ОбъектРасчетов) <> Тип("СправочникСсылка.ОбъектыРасчетов") Тогда
ОбъектРасчетов = ОбъектыРасчетовСервер.ПолучитьОбъектРасчетовПоСсылке(Параметры.ОбъектРасчетов, Параметры.Организация, Параметры.ТипРасчетов);
Иначе
ОбъектРасчетов = Параметры.ОбъектРасчетов;
КонецЕсли;
Если Параметры.Свойство("Документ") Тогда
Документ = Параметры.Документ;
КонецЕсли;
Если Параметры.Свойство("ПартнерДокумента") Тогда
ПартнерДокумента = Параметры.ПартнерДокумента;
КонецЕсли;
Если Параметры.Свойство("ИмяТЧРасшифровкаПлатежа") Тогда
ИмяТЧРасшифровкаПлатежа = Параметры.ИмяТЧРасшифровкаПлатежа;
КонецЕсли;
Если Параметры.Свойство("ПорядокРасчетов") Тогда
ПорядокРасчетов = Параметры.ПорядокРасчетов;
КонецЕсли;
СписокОбъектов = Новый СписокЗначений;
Если Параметры.Свойство("ПутьКОбъектамЗачета") И Параметры.ПутьКОбъектамЗачета <> "" Тогда
Подстроки = СтрРазделить(Параметры.ПутьКОбъектамЗачета,".");
Запрос = Новый Запрос("
|ВЫБРАТЬ &ИмяПоля КАК Объект
|ИЗ &Путь КАК Таблица
|ГДЕ Таблица.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Документ);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Путь", "Документ." + Документ.Метаданные().Имя + "."+Подстроки[0]);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяПоля", "Таблица." + Подстроки[1]);
МассивОбъектов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Объект");
СписокОбъектов.ЗагрузитьЗначения(МассивОбъектов);
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.АдресРасшифровкаПлатежа) Тогда
РасшифровкаПлатежа.Загрузить(ПолучитьИзВременногоХранилища(Параметры.АдресРасшифровкаПлатежа));
УдалитьИзВременногоХранилища(Параметры.АдресРасшифровкаПлатежа);
КонецЕсли;
Если Параметры.ОткрытиеПоКомандеОбработки Тогда
НайденныйОбъектРасчетов = ОбъектыРасчетовСервер.ОбъектРасчетовИзСсылки(Параметры.Документ);
Если ТипЗнч(НайденныйОбъектРасчетов) = Тип("Массив")
И НайденныйОбъектРасчетов.Количество() > 0 Тогда
ОбъектРасчетов = НайденныйОбъектРасчетов[0];
ИначеЕсли ТипЗнч(НайденныйОбъектРасчетов) = Тип("СправочникСсылка.ОбъектыРасчетов") Тогда
ОбъектРасчетов = НайденныйОбъектРасчетов;
КонецЕсли;
РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.Документ, "Партнер, ПорядокРасчетов");
ПартнерДокумента = РеквизитыДокумента.Партнер;
Если Не ЗначениеЗаполнено(ОбъектРасчетов) Тогда
ТекстИсключения = НСтр("ru = 'Зачет оплаты не предусмотрен для данного заказа.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ПорядокРасчетов = РеквизитыДокумента.ПорядокРасчетов;
Если ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоЗаказамНакладным Тогда
СуммаВзаиморасчетов = СуммаАвансовЗаказа(Параметры.Документ);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ОбъектРасчетов) Тогда
ТекстИсключения = НСтр("ru = 'Не предусмотрено непосредственное открытие формы обработки.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ИспользоватьПартнеровКакКонтрагентов = ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровКакКонтрагентов");
ИспользоватьНесколькоОрганизаций = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций");
НоваяАрхитектураВзаиморасчетов = ПолучитьФункциональнуюОпцию("НоваяАрхитектураВзаиморасчетов");
Если Параметры.Свойство("СуммаКОплате") Тогда
СуммаВзаиморасчетов = Параметры.СуммаКОплате;
СуммаВзаиморасчетовВПараметрах = СуммаВзаиморасчетов <> 0;
КонецЕсли;
ПолучитьРеквизитыРасчетовСПартнером();
ВалютаРегламентированногоУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
ВалютаУправленческогоУчета = ЗначениеНастроекПовтИсп.ВалютаУправленческогоУчета();
ЗаполнитьТаблицуПоРасчетамСПартнерами();
УправлениеЭлементамиФормы();
Если Не ПраваПользователяПовтИсп.ЗачетОплаты() Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
Если ИсправлениеДокументов.ЕстьИсправлениеИлиСторно(Документ) Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
УстановитьОтборПоДоговорам();
СформироватьИнформационнуюНадписьОтборы();
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ПринудительноЗакрытьФорму ИЛИ ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
СтруктураПоиска = Новый Структура("ДанныеИзменены", Истина);
МассивТаблиц = Новый Массив;
МассивТаблиц.Добавить("Авансы");
МассивТаблиц.Добавить("Оплаты");
МассивТаблиц.Добавить("Зачтено");
Для Каждого ИмяТаблицы Из МассивТаблиц Цикл
МассивСтрок = ЭтаФорма[ИмяТаблицы].НайтиСтроки(СтруктураПоиска);
Если МассивСтрок.Количество() > 0 Тогда
Отказ = Истина;
ПоказатьВопрос(
Новый ОписаниеОповещения("ПередЗакрытиемВопросЗавершение", ЭтотОбъект),
НСтр("ru = 'Данные зачета оплаты были изменены. Сохранить изменения?'"),
РежимДиалогаВопрос.ДаНетОтмена);
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытиемВопросЗавершение(ОтветНаВопрос, ДополнительныеПараметры) Экспорт
Если ОтветНаВопрос = КодВозвратаДиалога.Да Тогда
СохранитьРезультатЗачетаОплатыИЗакрыть();
ИначеЕсли ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
РазблокироватьДокументыДляРедактирования();
ПринудительноЗакрытьФорму = Истина;
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если НЕ АвансыРассчитаны И НЕ НоваяАрхитектураВзаиморасчетов Тогда
ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 0.1, Истина);
КонецЕсли;
УстановитьСтраницуАвансов();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПоВсемДоговорамПриИзменении(Элемент)
УстановитьОтборПоДоговорам();
КонецПроцедуры
&НаКлиенте
Процедура ОплатыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "ОплатыДокумент" Тогда
СтрокаТаблицы = Элементы.Оплаты.ТекущиеДанные;
Если СтрокаТаблицы <> Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.Документ) Тогда
ПоказатьЗначение(Неопределено, СтрокаТаблицы.Документ);
КонецЕсли;
Иначе
СтрокаТаблицы = Элементы.Оплаты.ТекущаяСтрока;
МассивСтрок = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтрокаТаблицы);
ЗачестьПлатежДляВыбранныхСтрок(МассивСтрок);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура АвансыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "АвансыЗаказ" Тогда
СтрокаТаблицы = Элементы.Авансы.ТекущиеДанные;
Если СтрокаТаблицы <> Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов) Тогда
ПоказатьЗначение(Неопределено, СтрокаТаблицы.ОбъектРасчетов);
КонецЕсли;
Иначе
СтрокаТаблицы = Элементы.Авансы.ТекущаяСтрока;
МассивСтрок = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтрокаТаблицы);
ЗачестьАвансДляВыбранныхСтрок(МассивСтрок);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЗачтено
&НаКлиенте
Процедура ЗачтеноВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтрокаТаблицы = Элементы.Зачтено.ТекущиеДанные;
Если СтрокаТаблицы <> Неопределено Тогда
Если Поле.Имя = "ЗачтеноЗаказ" Тогда
Если ЗначениеЗаполнено(СтрокаТаблицы.Документ) Тогда
ПоказатьЗначение(Неопределено, СтрокаТаблицы.Документ);
ИначеЕсли ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов) Тогда
ПоказатьЗначение(Неопределено, СтрокаТаблицы.ОбъектРасчетов);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗачтеноПередНачаломИзменения(Элемент, Отказ)
ТекущиеДанные = Элементы.Зачтено.ТекущиеДанные;
СуммаПередРедактированием = ТекущиеДанные.СуммаЗачтено;
КонецПроцедуры
&НаКлиенте
Процедура ЗачтеноПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекущиеДанные = Элементы.Зачтено.ТекущиеДанные;
Если ТекущиеДанные.СуммаЗачтено <> СуммаПередРедактированием Тогда
ОчиститьСообщения();
Отказ = Ложь;
ИзменениеСуммы = СуммаПередРедактированием - ТекущиеДанные.СуммаЗачтено;
Если ИзменениеСуммы < 0 Тогда
ТекущиеДанные.СуммаЗачтено = СуммаПередРедактированием;
ТекстПредупреждения = НСтр("ru = 'Зачтенная сумма может быть только уменьшена'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
КонецЕсли;
СтрокаТаблицы = Элементы.Зачтено.ТекущаяСтрока;
СоответствиеСписания = Новый Соответствие;
СоответствиеСписания.Вставить(СтрокаТаблицы, ИзменениеСуммы);
ОтменитьЗачетНаСервере(СоответствиеСписания, , Отказ);
Если Отказ Тогда
ТекущиеДанные.СуммаЗачтено = СуммаПередРедактированием;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗачтеноПриАктивизацииСтроки(Элемент)
ДоступноИсправлениеПревышения = Ложь;
Для Каждого Идентификатор Из Элементы.Зачтено.ВыделенныеСтроки Цикл
СтрокаТаблицы = Зачтено.НайтиПоИдентификатору(Идентификатор);
Если СтрокаТаблицы.ДоступноРедактирование Тогда
ДоступноИсправлениеПревышения = Истина;
КонецЕсли;
КонецЦикла;
Если Элементы.ИсправитьПревышение.Доступность <> ДоступноИсправлениеПревышения Тогда
Элементы.ИсправитьПревышение.Доступность = ДоступноИсправлениеПревышения;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Обновить(Команда)
ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 0.1, Истина);
ОбновитьДанныеНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьПлатеж(Команда)
МассивСтрок = Элементы.Оплаты.ВыделенныеСтроки;
Если МассивСтрок.Количество() > 0 Тогда
ЗачестьПлатежДляВыбранныхСтрок(МассивСтрок);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьАванс(Команда)
МассивСтрок = Элементы.Авансы.ВыделенныеСтроки;
Если МассивСтрок.Количество() > 0 Тогда
ЗачестьАвансДляВыбранныхСтрок(МассивСтрок);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьЗачет(Команда)
МассивСтрок = Элементы.Зачтено.ВыделенныеСтроки;
Если МассивСтрок.Количество() > 0 Тогда
ОчиститьСообщения();
СоответствиеСписания = Новый Соответствие;
Для Каждого Строка Из МассивСтрок Цикл
СоответствиеСписания.Вставить(Строка, 0);
КонецЦикла;
ОтменитьЗачетНаСервере(СоответствиеСписания, Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсправитьПревышение(Команда)
ОчиститьСообщения();
Отказ = Ложь;
ИсправитьПревышениеНаСервере(Отказ);
Если Не Отказ И Превышение > 0 Тогда
ТекстПредупреждения = НСтр("ru = 'Не удалось полностью исправить превышение. Возможно документы не доступны для редактирования.'");
ПоказатьПредупреждение(, ТекстПредупреждения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьОплатуИЗакрыть(Команда)
СохранитьРезультатЗачетаОплатыИЗакрыть();
КонецПроцедуры
&НаКлиенте
Процедура Показать(Команда)
Элементы.ГруппаУправлениеПодвалом.ТекущаяСтраница = Элементы.СтраницаСкрытьПодвал;
Элементы.ГруппаЗачтено.Видимость = Истина;
КонецПроцедуры
&НаКлиенте
Процедура Скрыть(Команда)
Элементы.ГруппаУправлениеПодвалом.ТекущаяСтраница = Элементы.СтраницаПоказатьПодвал;
Элементы.ГруппаЗачтено.Видимость = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьПодарочныйСертификат(Команда)
Если Валюта <> ВалютаРегламентированногоУчета Тогда
ТекстСообщения = НСтр("ru = 'Оплачивать подарочными сертификатами можно только документы в валюте регл. учета.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
Если ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета Тогда
ТекстСообщения = НСтр("ru = 'Оплачивать подарочными сертификатами можно только документы, валютой взаиморасчетов которых является валюта регл. учета.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
СуммаЗачтеннаяПодарочнымиСертификатами = 0;
АдресТаблицыЗачтенныхПодарочныхСертификатов = АдресТаблицыЗачтенныхПодарочныхСертификатов(СуммаЗачтеннаяПодарочнымиСертификатами);
Если Недостает <= 0 И СуммаЗачтеннаяПодарочнымиСертификатами = 0 Тогда
ТекстСообщения = НСтр("ru = 'Зачитываемые суммы полностью подобраны.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
АдресТаблицыТоваровДляАнализаВозможностиОплаты = ПодарочныеСертификатыВызовСервера.АдресТабличнойЧастиТоварыДляАнализаВозможностиОплатыПодарочнымиСертификатами(Документ, УникальныйИдентификатор);
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("Организация", Организация);
ПараметрыПодбора.Вставить("Валюта", ВалютаРегламентированногоУчета);
ПараметрыПодбора.Вставить("АдресВХранилище", АдресТаблицыЗачтенныхПодарочныхСертификатов);
Если ЗначениеЗаполнено(АдресТаблицыТоваровДляАнализаВозможностиОплаты) Тогда
ПараметрыПодбора.Вставить("АдресВХранилищеТовары", АдресТаблицыТоваровДляАнализаВозможностиОплаты);
КонецЕсли;
ПараметрыПодбора.Вставить("Доплатить", Недостает);
ПараметрыПодбора.Вставить("ПоказыватьИтогОсталосьДоплатить", Истина);
ПараметрыПодбора.Вставить("РегистрироватьНовые", Ложь);
ПараметрыПодбора.Вставить("ОписаниеОповещенияОЗакрытии", Новый ОписаниеОповещения("ПодобратьПодарочныйСертификатЗавершение", ЭтотОбъект));
ПараметрыПодбора.Вставить("Отбор", Новый Структура);
СтатусыДляОтбора = Новый Массив;
СтатусыДляОтбора.Добавить(ПредопределенноеЗначение("Перечисление.СтатусыПодарочныхСертификатов.Активирован"));
СтатусыДляОтбора.Добавить(ПредопределенноеЗначение("Перечисление.СтатусыПодарочныхСертификатов.ЧастичноПогашен"));
ПараметрыПодбора.Отбор.Вставить("Организация", Организация);
ПараметрыПодбора.Отбор.Вставить("Валюта", ВалютаРегламентированногоУчета);
ПараметрыПодбора.Отбор.Вставить("Статус", СтатусыДляОтбора);
ПараметрыПодбора.Отбор.Вставить("УчетПодарочныхСертификатов2_5", Истина);
ПараметрыПодбора.Отбор.Вставить("ТолькоНеНулевыеОстатки", Истина);
СтруктураДляОпределенияТипаОперации = Новый Структура("Ссылка", ПредопределенноеЗначение("Документ.ВзаимозачетЗадолженности.ПустаяСсылка"));
ПараметрыПодбора.Отбор.Вставить("ТипОперации", ПодарочныеСертификатыКлиентСервер.ТипОперацииПоПодарочнымСертификатам(СтруктураДляОпределенияТипаОперации));
ПодарочныеСертификатыКлиент.ОткрытьФормуПодбораПодарочныхСертификатов(ЭтотОбъект, ПараметрыПодбора);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПодобратьПодарочныйСертификатЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если ЭтоАдресВременногоХранилища(Результат) Тогда
ЗачестьПодарочныеСертификатыНаСервере(Результат);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция АдресТаблицыЗачтенныхПодарочныхСертификатов(СуммаЗачтеннаяПодарочнымиСертификатами)
СуммаЗачтеннаяПодарочнымиСертификатами = 0;
ТаблицаЗачтенныхПодарочныхСертификатов = Новый ТаблицаЗначений;
ТаблицаЗачтенныхПодарочныхСертификатов.Колонки.Добавить("ПодарочныйСертификат", Новый ОписаниеТипов("СправочникСсылка.ПодарочныеСертификаты"));
ТаблицаЗачтенныхПодарочныхСертификатов.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Для Каждого СтрокаЗачтено Из Зачтено Цикл
Если ТипЗнч(СтрокаЗачтено.Объект) = Тип("СправочникСсылка.ПодарочныеСертификаты")
И Не ЗначениеЗаполнено(СтрокаЗачтено.Документ) Тогда
НоваяСтрока = ТаблицаЗачтенныхПодарочныхСертификатов.Добавить();
НоваяСтрока.ПодарочныйСертификат = СтрокаЗачтено.Объект;
НоваяСтрока.Сумма = СтрокаЗачтено.СуммаЗачтено;
СуммаЗачтеннаяПодарочнымиСертификатами = СуммаЗачтеннаяПодарочнымиСертификатами + СтрокаЗачтено.СуммаЗачтено;
КонецЕсли;
КонецЦикла;
Возврат ПоместитьВоВременноеХранилище(ТаблицаЗачтенныхПодарочныхСертификатов, УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура ЗачестьПодарочныеСертификатыНаСервере(АдресТабличнойЧастиПодарочныеСертификаты)
ПодобранныеПодарочныеСертификаты = ПолучитьИзВременногоХранилища(АдресТабличнойЧастиПодарочныеСертификаты);
ПодобранныеПодарочныеСертификаты.Колонки.Добавить("СуммаВВалютеПлатежа");
РаспределитьОстаток = (Недостает > 0);
МассивСтрокДляУдаления = Новый Массив;
Для Каждого СтрокаЗачтено Из Зачтено Цикл
Если Не ЗначениеЗаполнено(СтрокаЗачтено.Документ)
И ТипЗнч(СтрокаЗачтено.Объект) = Тип("СправочникСсылка.ПодарочныеСертификаты") Тогда
СтруктураПоиска = Новый Структура("ПодарочныйСертификат", СтрокаЗачтено.Объект);
Если ПодобранныеПодарочныеСертификаты.НайтиСтроки(СтруктураПоиска).Количество()=0 Тогда
МассивСтрокДляУдаления.Добавить(СтрокаЗачтено);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаДляУдаления Из МассивСтрокДляУдаления Цикл
Зачтено.Удалить(СтрокаДляУдаления);
КонецЦикла;
СтруктураПоиска = Новый Структура("Объект, Партнер");
СтруктураПоиска.Вставить("ОбъектРасчетов");
Для Каждого СтрокаТаблицы Из ПодобранныеПодарочныеСертификаты Цикл
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТаблицы);
СтруктураПоиска.Объект = СтрокаТаблицы.ПодарочныйСертификат;
ЗачтенныеСтроки = Зачтено.НайтиСтроки(СтруктураПоиска);
Если ЗачтенныеСтроки.Количество() = 0 Тогда
СтрокаЗачета = Зачтено.Добавить();
СтрокаЗачета.Организация = Организация;
СтрокаЗачета.Валюта = Валюта;
СтрокаЗачета.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
СтрокаЗачета.Объект = СтрокаТаблицы.ПодарочныйСертификат;
ЗаполнитьЗначенияСвойств(СтрокаЗачета, СтрокаТаблицы, , "СуммаВВалютеПлатежа");
СтрокаЗачета.ДоступноРедактирование = Ложь;
Иначе
СтрокаЗачета = ЗачтенныеСтроки[0];
КонецЕсли;
СтрокаТаблицы.СуммаВВалютеПлатежа = СтрокаТаблицы.Сумма;
СтрокаЗачета.ДанныеИзменены = Истина;
СтрокаЗачета.СуммаЗачтено = СтрокаТаблицы.Сумма;
СтрокаЗачета.СуммаВВалютеПлатежа = СтрокаТаблицы.СуммаВВалютеПлатежа;
СтрокаЗачета.СуммаРегл = СтрокаТаблицы.СуммаВВалютеПлатежа;
СтрокаЗачета.СуммаУпр = СтрокаТаблицы.СуммаВВалютеПлатежа;
Если ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета Тогда
СтрокаЗачета.СуммаРегл = РаботаСКурсамиВалютУТ.ПересчитатьСуммуДокументаВВалюту(
СтрокаТаблицы.СуммаВВалютеПлатежа, ВалютаВзаиморасчетов, ВалютаРегламентированногоУчета, ДатаДокумента, ВалютаРегламентированногоУчета);
КонецЕсли;
Если ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета Тогда
СтрокаЗачета.СуммаУпр = РаботаСКурсамиВалютУТ.ПересчитатьСуммуДокументаВВалюту(
СтрокаТаблицы.СуммаВВалютеПлатежа, ВалютаВзаиморасчетов, ВалютаУправленческогоУчета, ДатаДокумента, ВалютаРегламентированногоУчета);
КонецЕсли;
КонецЦикла;
Зачтено.Сортировать("Организация, РасшифровкаОбъектаРасчетов ВОЗР");
РассчитатьСуммуЗачета();
РасчитатьКоличествоСтрок();
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаЗачтено.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаРегл.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаУпр.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.ДоступноРедактирование");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Оплаты.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оплаты.ДоступноРедактирование");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Зачтено.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.ДоступноРедактирование");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОплатыПартнер.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оплаты.Партнер");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Партнер");
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтличающейсяСтрокиДокумента);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АвансыПартнер.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Авансы.Партнер");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Партнер");
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтличающейсяСтрокиДокумента);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АвансыЗаказ.Имя);
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Авансы.ОбъектРасчетов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРасчетов");
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Авансы.ОбъектРасчетов.Объект");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Договор");
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтличающейсяСтрокиДокумента);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноДокумент.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.Документ");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Будет создан документ ""Взаимозачет задолженности"">'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НовыеДокументы);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.АвансыДокумент.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Авансы.Документ");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноЗаказ.Имя);
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.Документ");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.Объект");
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.ОбъектРасчетов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектРасчетов");
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаРегл.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.СуммаРегл");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Будет рассчитана автоматически>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗачтеноСуммаУпр.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Зачтено.СуммаУпр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Будет рассчитана автоматически>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент);
Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
КонецПроцедуры
#Область УправлениеЭлементамиФормы
&НаСервере
Процедура УправлениеЭлементамиФормы()
НесколькоОрганизаций = ДоступныеОрганизации.Количество() > 1;
Элементы.ОплатыОрганизация.Видимость = НесколькоОрганизаций;
Элементы.АвансыОрганизация.Видимость = НесколькоОрганизаций;
Элементы.ЗачтеноОрганизация.Видимость = НесколькоОрганизаций;
Элементы.ОплатыПартнер.Видимость = (Партнер <> Справочники.Партнеры.НашеПредприятие);
Элементы.АвансыДоговор.Видимость = ИспользоватьДоговоры;
Элементы.ПоВсемДоговорам.Видимость = ИспользоватьДоговоры;
Если ИспользоватьДоговоры Тогда
Элементы.ПояснениеКТаблицеОплаты.Заголовок = НСтр("ru = 'Список нераспределенных платежей и документов оплаты, отнесенных на выбранный договор. Сумма будет распределена на зачитываемый объект расчетов.'");
Иначе
Элементы.ПояснениеКТаблицеОплаты.Заголовок = НСтр("ru = 'Список нераспределенных платежей и документов оплаты. Сумма будет распределена на зачитываемый объект расчетов.'");
КонецЕсли;
Если ИспользоватьДоговоры Тогда
Элементы.ПояснениеКТаблицеАвансы.Заголовок = НСтр("ru = 'Остатки авансов по договорам контрагента. Для зачета/переноса аванса будет создан документ ""Взаимозачет задолженности"".'");
Иначе
Элементы.ПояснениеКТаблицеАвансы.Заголовок = НСтр("ru = 'Остатки авансов. Для зачета/переноса аванса будет создан документ ""Взаимозачет задолженности"".'");
КонецЕсли;
Элементы.ОплатыДоступноКЗачету.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Доступно (%1)'"),
Строка(ВалютаВзаиморасчетов));
Элементы.АвансыДоступноКЗачету.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Доступно (%1)'"),
Строка(ВалютаВзаиморасчетов));
Элементы.ЗачтеноСуммаЗачтено.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Зачтено (%1)'"),
Строка(ВалютаВзаиморасчетов));
Заголовок = НСтр("ru = 'Зачет оплат по:'") + " " + Строка(ОбъектРасчетов);
Элементы.ЗачтеноСуммаРегл.Видимость = ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета;
Элементы.ЗачтеноСуммаУпр.Видимость = ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета;
Элементы.АвансыСуммаРегл.Видимость = ВалютаВзаиморасчетов <> ВалютаРегламентированногоУчета;
Элементы.АвансыСуммаУпр.Видимость = ВалютаВзаиморасчетов <> ВалютаУправленческогоУчета;
Элементы.ПодобратьПодарочныйСертификат.Видимость = (НоваяАрхитектураВзаиморасчетов
И ПолучитьФункциональнуюОпцию("ИспользоватьПодарочныеСертификаты")
И ПодарочныеСертификатыСервер.ТипРазрешенДляЗачетаОплатыПодарочнымиСертификатами(ТипЗнч(Документ)));
КонецПроцедуры
#КонецОбласти
#Область ЗаполнениеТаблицыРасчетовСПартнерами
&НаСервере
Процедура ЗаполнитьТаблицуПоРасчетамСПартнерами()
Оплаты.Очистить();
Авансы.Очистить();
Зачтено.Очистить();
Запрос = ИнициализироватьЗапросПоРасчетам();
Если ЕстьРасчетыСКлиентами Тогда
Запрос.Текст = ТекстЗапросаПоРасчетамСКлиентами();
Иначе
Запрос.Текст = ТекстЗапросаПоРасчетамСПоставщиками();
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
КоличествоЗапросов = Результат.ВГраница();
ВыборкаОплаты = Результат[КоличествоЗапросов].Выбрать();
Пока ВыборкаОплаты.Следующий() Цикл
НоваяСтрока = Оплаты.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаОплаты);
НоваяСтрока.ВерсияДанных = ВерсияДанныхДокумента(ВыборкаОплаты.Документ);
Если ВалютаВзаиморасчетов <> ВыборкаОплаты.ВалютаВзаиморасчетов Тогда
НоваяСтрока.ДоступноКЗачету = ПересчитатьСуммуВВалютуВзаиморасчетов(
ВыборкаОплаты.СуммаВВалютеПлатежа, ВыборкаОплаты.Валюта, ВыборкаОплаты.Дата);
КонецЕсли;
КонецЦикла;
ТаблицаОплат = Оплаты.Выгрузить();
ТаблицаОплат.Свернуть("Организация, Документ, ВерсияДанных, СуммаДокумента, Валюта, Партнер, ДанныеИзменены, Дата, ДоступноРедактирование, РасшифровкаОбъектаРасчетов, ОбъектРасчетов", "ДоступноКЗачету, СуммаВВалютеПлатежа");
Оплаты.Загрузить(ТаблицаОплат);
ТаблицаЗачтено = Результат[КоличествоЗапросов-2].Выгрузить();
Для Каждого СтрокаЗачтено Из ТаблицаЗачтено Цикл
НоваяСтрока = Зачтено.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗачтено);
НоваяСтрока.ВерсияДанных = ВерсияДанныхДокумента(СтрокаЗачтено.Документ);
КонецЦикла;
Если НоваяАрхитектураВзаиморасчетов Тогда
АвансыРассчитаны = Истина;
Иначе
КлючиАналитики.ЗагрузитьЗначения(Запрос.МенеджерВременныхТаблиц.Таблицы["ВтАналитикаУчетаПоПартнерам"].ПолучитьДанные().Выгрузить().ВыгрузитьКолонку("КлючАналитики"));
АвансыРассчитаны = НЕ ЕстьЗаданияКРаспределениюВзаиморасчетов(ЕстьРасчетыСКлиентами, КлючиАналитики);
КонецЕсли;
ЗаполнитьТаблицуАвансов(Запрос);
ПериодАктуальныхДанных = Неопределено;
Если НоваяАрхитектураВзаиморасчетов Тогда
ИспользуемыеОбъектыРасчетов = Новый Массив;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИспользуемыеОбъектыРасчетов, Оплаты.Выгрузить( ,
"ОбъектРасчетов").ВыгрузитьКолонку("ОбъектРасчетов"));
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИспользуемыеОбъектыРасчетов, Авансы.Выгрузить( ,
"ОбъектРасчетов").ВыгрузитьКолонку("ОбъектРасчетов"));
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИспользуемыеОбъектыРасчетов, Зачтено.Выгрузить( ,
"ОбъектРасчетов").ВыгрузитьКолонку("ОбъектРасчетов"));
ИспользуемыеОбъектыРасчетов = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ИспользуемыеОбъектыРасчетов);
ПериодАктуальныхДанных = РегистрыСведений.ЗаданияКРаспределениюВзаиморасчетов.АктуальныйПериодРассчитанныхДанныхПоВзаиморасчетам(
Неопределено, ИспользуемыеОбъектыРасчетов);
Если ПериодАктуальныхДанных <> Неопределено Тогда
ОбщегоНазначения.СообщитьПользователю(
ВзаиморасчетыСервер.ТекстПредупрежденияЗаданияРаспределенияВзаиморасчетов());
КонецЕсли;
КонецЕсли;
Если ПериодАктуальныхДанных = Неопределено Тогда
Элементы.НадписьПериодАктуальныхДанных.Видимость = Ложь;
Иначе
Если ЗначениеЗаполнено(ПериодАктуальныхДанных) Тогда
ТекстНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Данные по взаиморасчетам актуальны на %1'", ОбщегоНазначения.КодОсновногоЯзыка()),
Формат(ПериодАктуальныхДанных, "ДЛФ=DT;"));
Иначе
ТекстНадписи = НСтр("ru = 'Данные по взаиморасчетам неактуальны'",
ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
Элементы.НадписьПериодАктуальныхДанных.Заголовок = ТекстНадписи;
Элементы.НадписьПериодАктуальныхДанных.Видимость = Истина;
КонецЕсли;
РассчитатьСуммуЗачета();
РасчитатьКоличествоСтрок();
КонецПроцедуры
&НаСервере
Функция ПолучитьСуммуКОплате()
Если ТипОбъектаРасчетов = Перечисления.ТипыОбъектовРасчетов.Договор
И ТипЗнч(Договор) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
ОтборРегистратор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор,"ГрафикИсполненияДоговора");
Иначе
ОтборРегистратор = Документ;
КонецЕсли;
Если ТипОбъектаРасчетов = Перечисления.ТипыОбъектовРасчетов.Договор
И НЕ ЗначениеЗаполнено(ОтборРегистратор) Тогда
КОплатеОстатокПоДоговору = Истина;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| -РасчетыСПоставщиками.КОплатеОстаток КАК КОплате
|ИЗ
| РегистрНакопления.РасчетыСПоставщиками.Остатки(,ОбъектРасчетов = &ОбъектРасчетов
| И АналитикаУчетаПоПартнерам.Партнер = &ПартнерДокумента
| И АналитикаУчетаПоПартнерам.Организация = (&Организация)) КАК РасчетыСПоставщиками
|ГДЕ
| ОбъектРасчетов.ТипРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыРасчетовСПартнерами.РасчетыСПоставщиком)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасчетыСКлиентами.КОплатеОстаток КАК КОплате
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(,ОбъектРасчетов = &ОбъектРасчетов
| И АналитикаУчетаПоПартнерам.Партнер = &ПартнерДокумента
| И АналитикаУчетаПоПартнерам.Организация В (&Организация)) КАК РасчетыСКлиентами
|ГДЕ
| ОбъектРасчетов.ТипРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыРасчетовСПартнерами.РасчетыСКлиентом)
|
|");
Запрос.УстановитьПараметр("ОбъектРасчетов",ОбъектРасчетов);
Запрос.УстановитьПараметр("ПартнерДокумента",ПартнерДокумента);
Запрос.УстановитьПараметр("Организация",Организация);
Иначе
КОплатеОстатокПоДоговору = Ложь;
КОплатеОстатокПоДоговору = Ложь;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| СУММА(ВЫБОР КОГДА РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА РасчетыСПоставщиками.КОплате
| ИНАЧЕ -РасчетыСПоставщиками.КОплате
| КОНЕЦ) КАК КОплате
|ИЗ
| РегистрНакопления.РасчетыСПоставщиками КАК РасчетыСПоставщиками
|ГДЕ
| РасчетыСПоставщиками.Регистратор = &Регистратор
| И РасчетыСПоставщиками.ОбъектРасчетов = &ОбъектРасчетов
| И РасчетыСПоставщиками.Активность
| И РасчетыСПоставщиками.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПереносАванса)
|ИМЕЮЩИЕ
| СУММА(ВЫБОР КОГДА РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА РасчетыСПоставщиками.КОплате
| ИНАЧЕ -РасчетыСПоставщиками.КОплате
| КОНЕЦ) > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СУММА(ВЫБОР КОГДА РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА -РасчетыСКлиентами.КОплате
| ИНАЧЕ РасчетыСКлиентами.КОплате
| КОНЕЦ) КАК КОплате
|ИЗ
| РегистрНакопления.РасчетыСКлиентами КАК РасчетыСКлиентами
|ГДЕ
| РасчетыСКлиентами.Регистратор = &Регистратор
| И РасчетыСКлиентами.ОбъектРасчетов = &ОбъектРасчетов
| И РасчетыСКлиентами.Активность
| И РасчетыСКлиентами.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПереносАванса)
| И РасчетыСКлиентами.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РезервированиеАвансаКлиента)
|ИМЕЮЩИЕ
| СУММА(ВЫБОР КОГДА РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА -РасчетыСКлиентами.КОплате
| ИНАЧЕ РасчетыСКлиентами.КОплате
| КОНЕЦ) > 0
|");
Запрос.УстановитьПараметр("Регистратор", ОтборРегистратор);
Запрос.УстановитьПараметр("ОбъектРасчетов", ОбъектРасчетов);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Если Выборка.Следующий() Тогда
КОплате = Выборка.КОплате;
Иначе
КОплате = 0;
КонецЕсли;
Возврат КОплате;
КонецФункции
&НаСервере
Функция СуммаАвансовЗаказа(СсылкаНаЗаказ)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", СсылкаНаЗаказ);
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(СУММА(ЗаказКлиентаЭтапыГрафикаОплаты.СуммаПлатежа + ЗаказКлиентаЭтапыГрафикаОплаты.СуммаЗалогаЗаТару), 0) КАК Сумма
|ИЗ
| Документ.ЗаказКлиента.ЭтапыГрафикаОплаты КАК ЗаказКлиентаЭтапыГрафикаОплаты
|ГДЕ
| ЗаказКлиентаЭтапыГрафикаОплаты.Ссылка = &Ссылка
| И (ЗаказКлиентаЭтапыГрафикаОплаты.ВариантОплаты = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроляОплатыКлиентом.ПредоплатаДоОтгрузки)
| ИЛИ ЗаказКлиентаЭтапыГрафикаОплаты.ВариантОтсчета = ЗНАЧЕНИЕ(Перечисление.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки))";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Сумма;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
&НаСервере
Процедура ПолучитьРеквизитыРасчетовСПартнером()
Реквизиты = "Организация, Контрагент, Партнер, ВалютаВзаиморасчетов, Валюта, СуммаВзаиморасчетов, Сумма,
| Дата, ТипРасчетов, Состояние, ТипОбъектаРасчетов, Договор, НаправлениеДеятельности";
СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектРасчетов, Реквизиты);
ДатаДокумента = СтруктураРеквизитов.Дата;
Организация = СтруктураРеквизитов.Организация;
Контрагент = СтруктураРеквизитов.Контрагент;
Партнер = СтруктураРеквизитов.Партнер;
ВалютаВзаиморасчетов = СтруктураРеквизитов.ВалютаВзаиморасчетов;
Валюта = СтруктураРеквизитов.Валюта;
Договор = СтруктураРеквизитов.Договор;
НаправлениеДеятельности = СтруктураРеквизитов.НаправлениеДеятельности;
ТипРасчетов = СтруктураРеквизитов.ТипРасчетов;
Состояние = СтруктураРеквизитов.Состояние;
ТипОбъектаРасчетов = СтруктураРеквизитов.ТипОбъектаРасчетов;
ЕстьРасчетыСПоставщиками = ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком;
ЕстьРасчетыСКлиентами = ТипРасчетов = Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом;
ЕстьРасчетыМеждуОрганизациями = Партнер = Справочники.Партнеры.НашеПредприятие;
РазрешаетсяПередачаОплатМеждуФилиалами = Истина;
Если ЗначениеЗаполнено(Договор) И НЕ ЕстьРасчетыМеждуОрганизациями Тогда
РеквизитыДоговора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Договор, "РазрешаетсяПередачаОплатМеждуФилиалами,РазрешенаРаботаСДочернимиПартнерами");
РазрешаетсяПередачаОплатМеждуФилиалами = РеквизитыДоговора.РазрешаетсяПередачаОплатМеждуФилиалами;
КонецЕсли;
Если Не СуммаВзаиморасчетовВПараметрах Тогда
Если Состояние = 1 ИЛИ ТипОбъектаРасчетов = Перечисления.ТипыОбъектовРасчетов.Договор Тогда
СуммаВзаиморасчетов = ПолучитьСуммуКОплате();
Иначе
Если СтруктураРеквизитов.СуммаВзаиморасчетов = 0 Тогда
Если СтруктураРеквизитов.Валюта = СтруктураРеквизитов.ВалютаВзаиморасчетов Тогда
СуммаВзаиморасчетов = СтруктураРеквизитов.Сумма;
Иначе
СуммаВзаиморасчетов = РаботаСКурсамиВалютУТ.ПересчитатьВВалюту(
СтруктураРеквизитов.Сумма,
ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(СтруктураРеквизитов.Организация),
СтруктураРеквизитов.Валюта,
СтруктураРеквизитов.ВалютаВзаиморасчетов,
СтруктураРеквизитов.Дата,
ОбъектРасчетов);
КонецЕсли;
Иначе
СуммаВзаиморасчетов = СтруктураРеквизитов.СуммаВзаиморасчетов;
КонецЕсли;
КонецЕсли;
КонецЕсли;
МассивОрганизаций = Новый Массив;
ГоловнаяОрганизация = Организация;
Если ПолучитьФункциональнуюОпцию("ИспользоватьОбособленныеПодразделенияВыделенныеНаБаланс")
И (ЕстьРасчетыСКлиентами Или ЕстьРасчетыСПоставщиками) Тогда
Запрос = Новый Запрос("
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Организации.ГоловнаяОрганизация КАК Ссылка
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| Организации.Ссылка = &Организация
| И Организации.ДопускаютсяВзаиморасчетыЧерезГоловнуюОрганизацию
| И Организации.ОбособленноеПодразделение");
Запрос.УстановитьПараметр("Организация", Организация);
МассивОрганизаций = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Если МассивОрганизаций.Количество() > 0 Тогда
ГоловнаяОрганизация = МассивОрганизаций[0];
КонецЕсли;
Филиалы = Справочники.Организации.ФилиалыСРасчетамиЧерезГоловнуюОрганизацию(ГоловнаяОрганизация);
Если РазрешаетсяПередачаОплатМеждуФилиалами ИЛИ Организация = ГоловнаяОрганизация Тогда
Для Каждого Филиал Из Филиалы Цикл
МассивОрганизаций.Добавить(Филиал);
КонецЦикла;
КонецЕсли;
КонецЕсли;
МассивОрганизаций.Добавить(Организация);
ДоступныеОрганизации.ЗагрузитьЗначения(МассивОрганизаций);
МассивПартнеров = Новый Массив;
Если Партнер <> Справочники.Партнеры.НеизвестныйПартнер Тогда
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ДанныеРегистра.Родитель КАК Партнер
|ПОМЕСТИТЬ втГоловной
|ИЗ
| РегистрСведений.ИерархияПартнеров КАК ДанныеРегистра
|ГДЕ
| ДанныеРегистра.Партнер = &Партнер
|;
|
|ВЫБРАТЬ
| &Партнер КАК Партнер
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Головной.Партнер КАК Партнер
|ИЗ
| втГоловной КАК Головной
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДанныеРегистра.Партнер КАК Партнер
|ИЗ
| РегистрСведений.ИерархияПартнеров КАК ДанныеРегистра
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ втГоловной КАК Головной
| ПО ДанныеРегистра.Родитель = Головной.Партнер");
Запрос.УстановитьПараметр("Партнер", Партнер);
МассивПартнеров = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Партнер");
КонецЕсли;
МассивПартнеров.Добавить(Справочники.Партнеры.НеизвестныйПартнер);
ДоступныеПартнеры.ЗагрузитьЗначения(МассивПартнеров);
Если (ЕстьРасчетыСКлиентами И ПолучитьФункциональнуюОпцию("ИспользоватьДоговорыСКлиентами")
Или (ЕстьРасчетыСПоставщиками И ПолучитьФункциональнуюОпцию("ИспользоватьДоговорыСПоставщиками"))) Тогда
ИспользоватьДоговоры = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ИнициализироватьЗапросПоРасчетам()
Запрос = Новый Запрос;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Организация", ДоступныеОрганизации);
Запрос.УстановитьПараметр("Партнер", Партнер);
Запрос.УстановитьПараметр("ПартнерДокумента", ПартнерДокумента);
Запрос.УстановитьПараметр("ДоступныеПартнеры", ДоступныеПартнеры);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Договор", Договор);
Запрос.УстановитьПараметр("НаправлениеДеятельности", НаправлениеДеятельности);
Запрос.УстановитьПараметр("Документ", Документ);
Запрос.УстановитьПараметр("ВалютаВзаиморасчетов", ВалютаВзаиморасчетов);
Запрос.УстановитьПараметр("ОбъектРасчетов", ОбъектРасчетов);
Запрос.УстановитьПараметр("ДатаДокумента", НачалоДня(ДатаДокумента));
Запрос.УстановитьПараметр("ТекущийМесяц", НачалоМесяца(ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("РасшифровкаПлатежа", РасшифровкаПлатежа.Выгрузить());
Запрос.УстановитьПараметр("ОбъектРасчетовНакладная", ТипОбъектаРасчетов = Перечисления.ТипыОбъектовРасчетов.Накладная);
Запрос.УстановитьПараметр("ВалютаРеглУчета", ВалютаРегламентированногоУчета);
Запрос.УстановитьПараметр("НоваяАрхитектураВзаиморасчетов", ПолучитьФункциональнуюОпцию("НоваяАрхитектураВзаиморасчетов"));
Запрос.УстановитьПараметр("ЭтоУправленческаяОрганизация", Организация = Справочники.Организации.УправленческаяОрганизация);
Запрос.УстановитьПараметр("ЗачетСЗаказовДоговора", СписокОбъектов.Количество() > 0);
Запрос.УстановитьПараметр("СписокОбъектов", СписокОбъектов);
Запрос.УстановитьПараметр("ТипОперацияЯндексКасса", Тип("Неопределено"));
Запрос.УстановитьПараметр("ТипОперацияЯндексКасса", Тип("ДокументСсылка.ОперацияПоЯндексКассе"));
ТекстВременныеТаблицы = ТекстВременныеТаблицы();
Если ЕстьРасчетыСКлиентами Тогда
Запрос.Текст = ТекстВременныеТаблицы + ВременныеТаблицыПоРасчетамСКлиентами();
Иначе
Запрос.Текст = ТекстВременныеТаблицы + ВременныеТаблицыПоРасчетамСПоставщиками();
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
Возврат Запрос;
КонецФункции
&НаСервере
Процедура ЗаполнитьТаблицуАвансов(ЗНАЧ Запрос = Неопределено)
Авансы.Очистить();
Если Запрос = Неопределено Тогда
Запрос = ИнициализироватьЗапросПоРасчетам();
Если ЕстьРасчетыСКлиентами Тогда
Запрос.Текст = ТекстЗапросаПоРасчетамСКлиентами();
Иначе
Запрос.Текст = ТекстЗапросаПоРасчетамСПоставщиками();
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.ВыполнитьПакет();
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если ЕстьРасчетыСПоставщиками Тогда
Запрос.Текст = ТекстЗапросаАвансыПоРасчетамСПоставщиками(Запрос);
Иначе
Запрос.Текст = ТекстЗапросаАвансыПоРасчетамСКлиентами(Запрос);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
ВыборкаАвансы = Результат.Выбрать();
Пока ВыборкаАвансы.Следующий() Цикл
НоваяСтрока = Авансы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаАвансы);
НоваяСтрока.СуммаВВалютеПлатежа = НоваяСтрока.ДоступноКЗачету;
Если ВалютаВзаиморасчетов <> ВыборкаАвансы.ВалютаВзаиморасчетов Тогда
Если ВалютаВзаиморасчетов = ВалютаРегламентированногоУчета Тогда
НоваяСтрока.ДоступноКЗачету = ВыборкаАвансы.СуммаРегл;
ИначеЕсли ВалютаВзаиморасчетов = ВалютаУправленческогоУчета Тогда
НоваяСтрока.ДоступноКЗачету = ВыборкаАвансы.СуммаУпр;
Иначе
НоваяСтрока.ДоступноКЗачету = ПересчитатьСуммуВВалютуВзаиморасчетов(
ВыборкаАвансы.ДоступноКЗачету, ВыборкаАвансы.ВалютаВзаиморасчетов, ВыборкаАвансы.Дата);
КонецЕсли;
КонецЕсли;
КонецЦикла;
РасчитатьКоличествоСтрок();
УстановитьСтраницуАвансов();
КонецПроцедуры
&НаСервере
Функция ТекстВременныеТаблицы()
ТекстЗапроса = "
|ВЫБРАТЬ
| АналитикаПоПартнерам.КлючАналитики КАК КлючАналитики,
| АналитикаПоПартнерам.Партнер КАК Партнер,
| АналитикаПоПартнерам.Организация КАК Организация,
| АналитикаПоПартнерам.Контрагент КАК Контрагент,
| АналитикаПоПартнерам.Договор КАК Договор,
| АналитикаПоПартнерам.Партнер = &ПартнерДокумента КАК ЭтоПартнерДокумента
|
|ПОМЕСТИТЬ ВтАналитикаУчетаПоПартнерам
|ИЗ
| РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаПоПартнерам
|ГДЕ
| (АналитикаПоПартнерам.Организация В (&Организация))
| И (АналитикаПоПартнерам.Партнер В (&Партнер)
| ИЛИ АналитикаПоПартнерам.Партнер В (&ДоступныеПартнеры) И ЕСТЬNULL(АналитикаПоПартнерам.Договор.РазрешенаРаботаСДочернимиПартнерами, ИСТИНА))
| И АналитикаПоПартнерам.Контрагент = &Контрагент
|ИНДЕКСИРОВАТЬ ПО
| КлючАналитики
|;
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаРасшифровкаПлатежаНакладная.Партнер КАК Партнер,
| ТаблицаРасшифровкаПлатежаНакладная.ОбъектРасчетов КАК ОбъектРасчетов,
| ТаблицаРасшифровкаПлатежаНакладная.Контрагент КАК Контрагент,
| ТаблицаРасшифровкаПлатежаНакладная.Договор КАК Договор,
| ТаблицаРасшифровкаПлатежаНакладная.Организация КАК Организация,
| ТаблицаРасшифровкаПлатежаНакладная.Валюта КАК Валюта,
| ТаблицаРасшифровкаПлатежаНакладная.Сумма КАК Сумма,
| ТаблицаРасшифровкаПлатежаНакладная.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов
|ПОМЕСТИТЬ ТаблицаРасшифровкаПлатежаНакладная
|ИЗ &РасшифровкаПлатежа КАК ТаблицаРасшифровкаПлатежаНакладная
|;";
Возврат ТекстЗапроса;
КонецФункции
&НаСервере
Функция ТекстНедоступныеДляЗаписиДокументы()
ТекстЗапроса = "
|ВЫБРАТЬ
| НЕОПРЕДЕЛЕНО КАК Документ
|ПОМЕСТИТЬ ВтНедоступныеДляЗаписиДокументы
|";
Возврат ТекстЗапроса;
КонецФункции
&НаСервере
Функция ТекстНераспределенныеПлатежи()
ТекстЗапроса = "
|
|ВЫБРАТЬ *
|ПОМЕСТИТЬ ВтДоступныеНераспределенныеПлатежи
|ИЗ ВтНераспределенныеПлатежи КАК Т
|ГДЕ НЕ (Т.Документ В (ВЫБРАТЬ Вт.Документ ИЗ ВтНедоступныеДляЗаписиДокументы КАК Вт)
| И НЕ Т.РасшифровкаОбъектаРасчетов)
| И НЕ (&Документ В (ВЫБРАТЬ Вт.Документ ИЗ ВтНедоступныеДляЗаписиДокументы КАК Вт)
| И Т.РасшифровкаОбъектаРасчетов)
|
|;
|
|ВЫБРАТЬ *
|ИЗ ВтДоступныеНераспределенныеПлатежи КАК Т
|ГДЕ Т.ДоступноКЗачету > 0
|
|УПОРЯДОЧИТЬ ПО
| Т.Организация,
| Т.Дата
|;";
Возврат ТекстЗапроса;
КонецФункции
#Область РасчетыСПоставщиками
&НаСервере
Функция ТекстЗапросаПоРасчетамСПоставщиками()
ТекстыЗапроса = Новый Массив;
ТекстыЗапроса.Добавить("
|ВЫБРАТЬ
| РасчетыСПоставщиками.Валюта КАК ВалютаВзаиморасчетов,
| ВЫБОР
| КОГДА РасчетыСПоставщиками.КорОбъектРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат)
| И НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
| ТОГДА РасчетыСПоставщиками.КорОбъектРасчетов.Объект
| ИНАЧЕ РасчетыСПоставщиками.Регистратор
| КОНЕЦ КАК Документ,
| ВЫБОР КОГДА РасчетыСПоставщиками.КорАналитикаУчетаПоПартнерам <> ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаПоПартнерам.ПустаяСсылка)
| ТОГДА РасчетыСПоставщиками.КорАналитикаУчетаПоПартнерам.Организация
| ИНАЧЕ ОбъектыРасчетов.Организация
| КОНЕЦ КАК Организация,
| ОбъектыРасчетов.Контрагент КАК Контрагент,
| ОбъектыРасчетов.Партнер КАК Партнер,
| ВЫБОР
| КОГДА РасчетыСПоставщиками.КорОбъектРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат)
| И НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
| ТОГДА РасчетыСПоставщиками.КорОбъектРасчетов.Дата
| ИНАЧЕ ОбъектыРасчетов.Дата
| КОНЕЦ КАК Дата,
| ОбъектыРасчетов.Сумма КАК СуммаДокумента,
| ОбъектыРасчетов.Валюта КАК Валюта,
| РасчетыСПоставщиками.КорОбъектРасчетов КАК ОбъектРасчетов,
| ЕСТЬNULL(РасчетыСПоставщиками.КорОбъектРасчетов.Объект, Неопределено) КАК Объект,
| ОбъектыРасчетов.Договор КАК Договор,
|
| ВЫБОР
| КОГДА РасчетыСПоставщиками.Сумма < 0 И РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА -РасчетыСПоставщиками.Сумма
| КОГДА РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА РасчетыСПоставщиками.Сумма
| КОГДА РасчетыСПоставщиками.Сумма > 0 И РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.КорректировкаПриобретения
| ТОГДА -РасчетыСПоставщиками.Сумма
| ИНАЧЕ 0
| КОНЕЦ КАК СуммаЗачтено,
| ВЫБОР
| КОГДА РасчетыСПоставщиками.Сумма < 0 И РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА -РасчетыСПоставщиками.Сумма
| КОГДА РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА РасчетыСПоставщиками.Сумма
| КОГДА РасчетыСПоставщиками.Сумма > 0 И РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.КорректировкаПриобретения
| ТОГДА -РасчетыСПоставщиками.Сумма
| ИНАЧЕ 0
| КОНЕЦ *
| ВЫБОР КОГДА ОбъектыРасчетов.Сумма <> 0 И ОбъектыРасчетов.СуммаВзаиморасчетов <> 0
| ТОГДА ОбъектыРасчетов.СуммаВзаиморасчетов/ОбъектыРасчетов.Сумма
| ИНАЧЕ 1
| КОНЕЦ КАК СуммаВВалютеПлатежа,
| ЕСТЬNULL(РаспределенныеРасчеты.СуммаРегл, 0) КАК СуммаРегл,
| ЕСТЬNULL(РаспределенныеРасчеты.СуммаУпр, 0) КАК СуммаУпр,
|
| НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.КорректировкаПриобретения
| И НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.КорректировкаЗадолженности
| И НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.ВводОстатков
| И НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.ВводОстатковВзаиморасчетов
| И НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.Сторно
| И НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.Бронирование
| И НЕ (РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.ВозвратТоваровПоставщику И ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Договор))
| И НЕ (РасчетыСПоставщиками.Сумма < 0 И РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности)
| И НЕ (РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности И ВЫРАЗИТЬ(РасчетыСПоставщиками.Регистратор КАК Документ.ВзаимозачетЗадолженности).Валюта = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК ДоступноРедактирование,
| РасчетыСПоставщиками.Регистратор = &Документ КАК РасшифровкаОбъектаРасчетов,
| 1 КАК Порядок
|ПОМЕСТИТЬ Зачтено
|ИЗ
| РегистрНакопления.РасчетыСПоставщиками КАК РасчетыСПоставщиками
| ЛЕВОЕ СОЕДИНЕНИЕ РаспределенныеРасчеты КАК РаспределенныеРасчеты
| ПО ВЫБОР
| КОГДА РасчетыСПоставщиками.КорОбъектРасчетов <> Неопределено
| И НЕ РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
| ТОГДА РасчетыСПоставщиками.КорОбъектРасчетов.Объект
| ИНАЧЕ РасчетыСПоставщиками.Регистратор
| КОНЕЦ = РаспределенныеРасчеты.Регистратор
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ПО РасчетыСПоставщиками.ОбъектРасчетов = ОбъектыРасчетов.Ссылка
| И РасчетыСПоставщиками.АналитикаУчетаПоПартнерам.Организация = ОбъектыРасчетов.Организация
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ПО РасчетыСПоставщиками.АналитикаУчетаПоПартнерам = ВтАналитикаУчетаПоПартнерам.КлючАналитики
|ГДЕ
| РасчетыСПоставщиками.ОбъектРасчетов = &ОбъектРасчетов
| И ВтАналитикаУчетаПоПартнерам.ЭтоПартнерДокумента
| И ВЫБОР
| КОГДА РасчетыСПоставщиками.Сумма < 0 И РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА -РасчетыСПоставщиками.Сумма
| КОГДА РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА РасчетыСПоставщиками.Сумма
| КОГДА РасчетыСПоставщиками.Сумма > 0 И РасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И РасчетыСПоставщиками.Регистратор ССЫЛКА Документ.КорректировкаПриобретения
| ТОГДА -РасчетыСПоставщиками.Сумма
| ИНАЧЕ 0
| КОНЕЦ <> 0
| И РасчетыСПоставщиками.Активность
| И РасчетыСПоставщиками.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.УдержаниеВознагражденияКомитентом)
| И РасчетыСПоставщиками.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ОтчетКомитенту)
| И НЕ (РасчетыСПоставщиками.Сторно
| И РасчетыСПоставщиками.СвязанныйДокумент = &Документ)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасшифровкаПлатежа.Валюта КАК ВалютаВзаиморасчетов,
| РасшифровкаПлатежа.ОбъектРасчетов.Объект КАК Документ,
| РасшифровкаПлатежа.ОбъектРасчетов.Организация КАК Организация,
| РасшифровкаПлатежа.ОбъектРасчетов.Контрагент КАК Контрагент,
| РасшифровкаПлатежа.ОбъектРасчетов.Партнер КАК Партнер,
| РасшифровкаПлатежа.ОбъектРасчетов.Дата КАК Дата,
| РасшифровкаПлатежа.ОбъектРасчетов.Сумма КАК СуммаДокумента,
| РасшифровкаПлатежа.ОбъектРасчетов.Валюта КАК Валюта,
| РасшифровкаПлатежа.ОбъектРасчетов КАК ОбъектРасчетов,
| РасшифровкаПлатежа.ОбъектРасчетов.Объект КАК Объект,
| РасшифровкаПлатежа.Договор КАК Договор,
|
| РасшифровкаПлатежа.СуммаВзаиморасчетов КАК СуммаЗачтено,
| РасшифровкаПлатежа.Сумма КАК СуммаВВалютеПлатежа,
| 0 КАК СуммаРегл,
| 0 КАК СуммаУпр,
|
| ИСТИНА КАК ДоступноРедактирование,
| ИСТИНА КАК РасшифровкаОбъектаРасчетов,
| 1 КАК Порядок
|ИЗ
| ТаблицаРасшифровкаПлатежаНакладная КАК РасшифровкаПлатежа
|ГДЕ
| РасшифровкаПлатежа.ОбъектРасчетов <> &ОбъектРасчетов
| И РасшифровкаПлатежа.ОбъектРасчетов <> ЗНАЧЕНИЕ(Справочник.ОбъектыРасчетов.ПустаяСсылка)
| И &Документ <> РасшифровкаПлатежа.ОбъектРасчетов.Объект
|;
|ВЫБРАТЬ
| Взаимозачет.Ссылка КАК Ссылка,
| МАКСИМУМ(Взаимозачет.ОбъектРасчетов) КАК ОбъектРасчетов,
| МАКСИМУМ(Взаимозачет.ОбъектРасчетов.Объект) КАК Объект,
| NULL КАК СуммаРегл,
| NULL КАК СуммаУпр
|
|ПОМЕСТИТЬ ВтВзаимозачетыЗадолженности
|ИЗ Документ.ВзаимозачетЗадолженности.ДебиторскаяЗадолженность КАК Взаимозачет
|ГДЕ НЕ &НоваяАрхитектураВзаиморасчетов
| И Взаимозачет.Ссылка В (ВЫБРАТЬ Т.Документ ИЗ Зачтено КАК Т)
|СГРУППИРОВАТЬ ПО
| Взаимозачет.Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РасчетыПоСрокам.ДокументРегистратор КАК Ссылка,
| РасчетыПоСрокам.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыПоСрокам.ОбъектРасчетов.Объект КАК Объект,
| СУММА(РасчетыПоСрокам.ДолгРегл + РасчетыПоСрокам.ПредоплатаРегл) КАК СуммаРегл,
| СУММА(РасчетыПоСрокам.ДолгУпр + РасчетыПоСрокам.ПредоплатаУпр) КАК СуммаУпр
|
|
|ИЗ РегистрНакопления.РасчетыСПоставщикамиПоСрокам КАК РасчетыПоСрокам
|ГДЕ &НоваяАрхитектураВзаиморасчетов
| И РасчетыПоСрокам.ДокументРегистратор В (ВЫБРАТЬ Т.Документ ИЗ Зачтено КАК Т)
| И РасчетыПоСрокам.ОбъектРасчетовПриемник = &ОбъектРасчетов
| И РасчетыПоСрокам.ДокументРегистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
|СГРУППИРОВАТЬ ПО
| РасчетыПоСрокам.ДокументРегистратор,
| РасчетыПоСрокам.ОбъектРасчетов
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка,
| ОбъектРасчетов
|;
|ВЫБРАТЬ
| АналитикаПоПартнерам.КлючАналитики КАК КлючАналитики
|ИЗ
| ВтАналитикаУчетаПоПартнерам КАК АналитикаПоПартнерам
|;
|ВЫБРАТЬ
| Зачтено.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| Зачтено.Документ КАК Документ,
| Зачтено.Организация КАК Организация,
| Зачтено.Контрагент КАК Контрагент,
| Зачтено.Партнер КАК Партнер,
| Зачтено.Дата КАК Дата,
| Зачтено.СуммаДокумента КАК СуммаДокумента,
| Зачтено.Валюта КАК Валюта,
| Зачтено.Договор КАК Договор,
|
| СУММА(Зачтено.СуммаЗачтено) КАК СуммаЗачтено,
| СУММА(Зачтено.СуммаВВалютеПлатежа) КАК СуммаВВалютеПлатежа,
| МАКСИМУМ(ЕСТЬNULL(Взаимозачет.СуммаРегл,Зачтено.СуммаРегл)) КАК СуммаРегл,
| МАКСИМУМ(ЕСТЬNULL(Взаимозачет.СуммаУпр,Зачтено.СуммаУпр)) КАК СуммаУпр,
|
| Зачтено.ДоступноРедактирование КАК ДоступноРедактирование,
| Зачтено.РасшифровкаОбъектаРасчетов КАК РасшифровкаОбъектаРасчетов,
| Зачтено.Порядок КАК Порядок,
| МАКСИМУМ(ЕСТЬNULL(Взаимозачет.ОбъектРасчетов,Зачтено.ОбъектРасчетов)) КАК ОбъектРасчетов,
| МАКСИМУМ(ЕСТЬNULL(Взаимозачет.ОбъектРасчетов.Объект,Зачтено.Объект)) КАК Объект
|ИЗ
| Зачтено КАК Зачтено
| ЛЕВОЕ СОЕДИНЕНИЕ ВтВзаимозачетыЗадолженности КАК Взаимозачет
| ПО Взаимозачет.Ссылка = Зачтено.Документ
| И (Взаимозачет.ОбъектРасчетов = Зачтено.ОбъектРасчетов
| ИЛИ НЕ &НоваяАрхитектураВзаиморасчетов)
|СГРУППИРОВАТЬ ПО
| Зачтено.ВалютаВзаиморасчетов,
| Зачтено.Документ,
| Зачтено.ОбъектРасчетов,
| Зачтено.Организация,
| Зачтено.Контрагент,
| Зачтено.Партнер,
| Зачтено.Дата,
| Зачтено.СуммаДокумента,
| Зачтено.Валюта,
| Зачтено.Договор,
| Зачтено.ДоступноРедактирование,
| Зачтено.РасшифровкаОбъектаРасчетов,
| Зачтено.Порядок
|УПОРЯДОЧИТЬ ПО
| Организация,
| Дата
|;");
ТекстыЗапроса.Добавить(ТекстНераспределенныеПлатежи());
Возврат СтрСоединить(ТекстыЗапроса);
КонецФункции
&НаСервере
Функция ВременныеТаблицыПоРасчетамСПоставщиками()
ТекстыЗапроса = Новый Массив;
ТекстыЗапроса.Добавить("
|ВЫБРАТЬ
| РасчетыСПоставщиками.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСПоставщиками.Валюта КАК ВалютаВзаиморасчетов,
| ОбъектыРасчетов.Объект КАК Документ,
| РасчетыСПоставщиками.АналитикаУчетаПоПартнерам КАК КлючАналитики,
| ОбъектыРасчетов.Организация КАК Организация,
| ОбъектыРасчетов.Партнер КАК Партнер,
| ОбъектыРасчетов.Контрагент КАК Контрагент,
| ОбъектыРасчетов.Дата КАК Дата,
| ОбъектыРасчетов.Сумма КАК СуммаДокумента,
| ОбъектыРасчетов.Валюта КАК Валюта,
| РасчетыСПоставщиками.СуммаОстаток - ЕСТЬNULL(Расшифровка.Сумма,0) КАК ДоступноКЗачету,
| ВЫБОР КОГДА ОбъектыРасчетов.Сумма <> 0 И ОбъектыРасчетов.СуммаВзаиморасчетов <> 0
| ТОГДА (РасчетыСПоставщиками.СуммаОстаток - ЕСТЬNULL(Расшифровка.Сумма,0)) * ОбъектыРасчетов.СуммаВзаиморасчетов/ОбъектыРасчетов.Сумма
| ИНАЧЕ РасчетыСПоставщиками.СуммаОстаток - ЕСТЬNULL(Расшифровка.Сумма,0)
| КОНЕЦ КАК СуммаВВалютеПлатежа,
| ИСТИНА КАК ДоступноРедактирование,
| &ОбъектРасчетовНакладная
| И (&ЗачетСЗаказовДоговора
| И (ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Заказ)
| ИЛИ ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Договор))
| ИЛИ (ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат)
| И НАЧАЛОПЕРИОДА(ОбъектыРасчетов.Дата,ДЕНЬ) < &ДатаДокумента)
| ИЛИ (&ЭтоУправленческаяОрганизация
| И ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Накладная))
| ) КАК РасшифровкаОбъектаРасчетов
|ПОМЕСТИТЬ ВтНераспределенныеПлатежи
|ИЗ
| РегистрНакопления.РасчетыСПоставщиками.Остатки(,
| АналитикаУчетаПоПартнерам В (
| ВЫБРАТЬ
| ВтАналитикаУчетаПоПартнерам.КлючАналитики КАК КлючАналитики
| ИЗ
| ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| )) КАК РасчетыСПоставщиками
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ПО
| ОбъектыРасчетов.Ссылка = РасчетыСПоставщиками.ОбъектРасчетов
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРасшифровкаПлатежаНакладная КАК Расшифровка
| ПО Расшифровка.ОбъектРасчетов = РасчетыСПоставщиками.ОбъектРасчетов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ПО РасчетыСПоставщиками.АналитикаУчетаПоПартнерам = ВтАналитикаУчетаПоПартнерам.КлючАналитики
|
|ГДЕ
| НЕ (ОбъектыРасчетов.Объект ССЫЛКА Документ.ПервичныйДокумент
| И (ОбъектыРасчетов.Дата >= &ДатаДокумента И &ОбъектРасчетовНакладная
| ИЛИ ОбъектыРасчетов.Договор В (ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)
| ,ЗНАЧЕНИЕ(Справочник.ДоговорыМеждуОрганизациями.ПустаяСсылка))))
| И (ОбъектыРасчетов.Договор = &Договор
| ИЛИ НЕ (ОбъектыРасчетов.Дата < &ДатаДокумента И &ОбъектРасчетовНакладная)
| И ОбъектыРасчетов.Договор В (ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)
| ,ЗНАЧЕНИЕ(Справочник.ДоговорыМеждуОрганизациями.ПустаяСсылка))
| ИЛИ (&ЭтоУправленческаяОрганизация
| И ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Накладная)))
| И ВтАналитикаУчетаПоПартнерам.ЭтоПартнерДокумента
| И ОбъектыРасчетов.НаправлениеДеятельности = &НаправлениеДеятельности
| И ОбъектыРасчетов.ВалютаВзаиморасчетов = &ВалютаВзаиморасчетов
| И РасчетыСПоставщиками.СуммаОстаток > 0
| И (&ОбъектРасчетовНакладная
| И (ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат)
| ИЛИ ОбъектыРасчетов.Объект В (&СписокОбъектов)
| И (ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Заказ)
| ИЛИ ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Договор))
| ИЛИ &ЭтоУправленческаяОрганизация
| И НАЧАЛОПЕРИОДА(ОбъектыРасчетов.Дата,ДЕНЬ) <= &ДатаДокумента
| )
| ИЛИ НЕ &ОбъектРасчетовНакладная
| И &ДатаДокумента < НАЧАЛОПЕРИОДА(ОбъектыРасчетов.Дата,ДЕНЬ)
| И ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат))
|
|;
|
|
|ВЫБРАТЬ
| РасчетыПоДокументам.Регистратор КАК Регистратор,
| СУММА(РасчетыПоДокументам.ПредоплатаРегл + РасчетыПоДокументам.ДолгРегл) КАК СуммаРегл,
| СУММА(РасчетыПоДокументам.ПредоплатаУпр + РасчетыПоДокументам.ДолгУпр) КАК СуммаУпр
|ПОМЕСТИТЬ РаспределенныеРасчеты
|ИЗ
| РегистрНакопления.РасчетыСПоставщикамиПоДокументам КАК РасчетыПоДокументам
|ГДЕ
| НЕ &НоваяАрхитектураВзаиморасчетов
| И РасчетыПоДокументам.АналитикаУчетаПоПартнерам В (ВЫБРАТЬ КлючАналитики ИЗ ВтАналитикаУчетаПоПартнерам)
| И &ОбъектРасчетов = РасчетыПоДокументам.ЗаказПоставщику
| И РасчетыПоДокументам.Активность
|СГРУППИРОВАТЬ ПО
| РасчетыПоДокументам.Регистратор
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасчетыПоСрокам.РасчетныйДокумент КАК Регистратор,
| СУММА(РасчетыПоСрокам.ПредоплатаРегл) КАК СуммаРегл,
| СУММА(РасчетыПоСрокам.ПредоплатаУпр) КАК СуммаУпр
|ИЗ
| РегистрНакопления.РасчетыСПоставщикамиПоСрокам КАК РасчетыПоСрокам
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ПО РасчетыПоСрокам.АналитикаУчетаПоПартнерам = ВтАналитикаУчетаПоПартнерам.КлючАналитики
|ГДЕ
| &НоваяАрхитектураВзаиморасчетов
| И ВтАналитикаУчетаПоПартнерам.ЭтоПартнерДокумента
| И &ОбъектРасчетов = РасчетыПоСрокам.ОбъектРасчетов
| И РасчетыПоСрокам.Активность
| И РасчетыПоСрокам.Предоплата <> 0
| И РасчетыПоСрокам.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И РасчетыПоСрокам.ОбъектРасчетов.ТипОбъектаРасчетов В (
| ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Накладная),
| ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат))
| И НЕ РасчетыПоСрокам.ДокументРегистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
|СГРУППИРОВАТЬ ПО
| РасчетыПоСрокам.РасчетныйДокумент
|
| ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасчетыПоСрокам.ДокументРегистратор КАК Регистратор,
| СУММА(РасчетыПоСрокам.ПредоплатаРегл + РасчетыПоСрокам.ДолгРегл) КАК СуммаРегл,
| СУММА(РасчетыПоСрокам.ПредоплатаУпр + РасчетыПоСрокам.ДолгУпр) КАК СуммаУпр
|ИЗ
| РегистрНакопления.РасчетыСПоставщикамиПоСрокам КАК РасчетыПоСрокам
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ПО РасчетыПоСрокам.АналитикаУчетаПоПартнерам = ВтАналитикаУчетаПоПартнерам.КлючАналитики
|ГДЕ
| &НоваяАрхитектураВзаиморасчетов
| И ВтАналитикаУчетаПоПартнерам.ЭтоПартнерДокумента
| И &ОбъектРасчетов = РасчетыПоСрокам.ОбъектРасчетов
| И РасчетыПоСрокам.Активность
| И РасчетыПоСрокам.ОбъектРасчетов.ТипОбъектаРасчетов В (
| ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Договор),
| ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Заказ))
| И РасчетыПоСрокам.ДокументРегистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
|СГРУППИРОВАТЬ ПО
| РасчетыПоСрокам.ДокументРегистратор
|;");
ТекстыЗапроса.Добавить(ТекстНедоступныеДляЗаписиДокументы());
Возврат СтрСоединить(ТекстыЗапроса);
КонецФункции
&НаСервере
Функция ТекстЗапросаАвансыПоРасчетамСПоставщиками(Запрос)
Если НЕ ПолучитьФункциональнуюОпцию("НоваяАрхитектураВзаиморасчетов") Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| РасчетыСПоставщиками.АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам,
| РасчетыСПоставщиками.ЗаказПоставщику.Партнер КАК Партнер,
| РасчетыСПоставщиками.ЗаказПоставщику.Организация КАК Организация,
| РасчетыСПоставщиками.ЗаказПоставщику.Контрагент КАК Контрагент,
| РасчетыСПоставщиками.ЗаказПоставщику.Договор КАК Договор,
| РасчетыСПоставщиками.ЗаказПоставщику.НаправлениеДеятельности КАК НаправлениеДеятельности,
| РасчетыСПоставщиками.ЗаказПоставщику КАК ОбъектРасчетов,
| РасчетыСПоставщиками.Валюта КАК Валюта,
| РасчетыСПоставщиками.ПредоплатаОстаток КАК СуммаАванса,
| РасчетыСПоставщиками.ПредоплатаРеглОстаток КАК СуммаРегл,
| РасчетыСПоставщиками.ПредоплатаУпрОстаток КАК СуммаУпр,
| РасчетыСПоставщиками.ЗаказПоставщику.Дата КАК Дата
|
|ПОМЕСТИТЬ ТаблицаОстатковПоДокументам
|ИЗ
| РегистрНакопления.РасчетыСПоставщикамиПоДокументам.Остатки(,
| АналитикаУчетаПоПартнерам В (
| ВЫБРАТЬ
| ВтАналитикаУчетаПоПартнерам.КлючАналитики КАК КлючАналитики
| ИЗ
| ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ГДЕ
| ВтАналитикаУчетаПоПартнерам.Организация В (&Организация)
| )
| И ЗаказПоставщику <> &ОбъектРасчетов
| ) КАК РасчетыСПоставщиками
|
|ГДЕ
| РасчетыСПоставщиками.ПредоплатаОстаток > 0
| И (ТИПЗНАЧЕНИЯ(РасчетыСПоставщиками.ЗаказПоставщику.Объект) <> ТИП(Документ.ПриобретениеТоваровУслуг)
| ИЛИ &ЭтоУправленческаяОрганизация)
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаПоПартнерам,
| ЗаказПоставщику,
| Валюта
|;";
Иначе
ТекстЗапроса = "
|ВЫБРАТЬ
| РасчетыСПоставщиками.АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам,
| РасчетыСПоставщиками.АналитикаУчетаПоПартнерам.Партнер КАК Партнер,
| РасчетыСПоставщиками.ОбъектРасчетов.Организация КАК Организация,
| РасчетыСПоставщиками.ОбъектРасчетов.Контрагент КАК Контрагент,
| РасчетыСПоставщиками.ОбъектРасчетов.Договор КАК Договор,
| РасчетыСПоставщиками.ОбъектРасчетов.НаправлениеДеятельности КАК НаправлениеДеятельности,
| РасчетыСПоставщиками.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСПоставщиками.ОбъектРасчетов.Объект КАК Объект,
| РасчетыСПоставщиками.Валюта КАК Валюта,
| РасчетыСПоставщиками.ПредоплатаОстаток КАК СуммаАванса,
| РасчетыСПоставщиками.ПредоплатаРеглОстаток КАК СуммаРегл,
| РасчетыСПоставщиками.ПредоплатаУпрОстаток КАК СуммаУпр,
| РасчетыСПоставщиками.ОбъектРасчетов.Дата КАК Дата
|
|ПОМЕСТИТЬ ТаблицаОстатковПоДокументам
|ИЗ
| РегистрНакопления.РасчетыСПоставщикамиПоСрокам.Остатки(,
| АналитикаУчетаПоПартнерам В (
| ВЫБРАТЬ
| ВтАналитикаУчетаПоПартнерам.КлючАналитики КАК КлючАналитики
| ИЗ
| ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ГДЕ
| ВтАналитикаУчетаПоПартнерам.Организация В (&Организация)
| )
| И (ОбъектРасчетов <> &ОбъектРасчетов
| ИЛИ АналитикаУчетаПоПартнерам.Партнер <> &ПартнерДокумента)
| ) КАК РасчетыСПоставщиками
|
|ГДЕ
| РасчетыСПоставщиками.ПредоплатаОстаток > 0
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаПоПартнерам,
| ОбъектРасчетов,
| Валюта
|;";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаОстатковПоДокументам.ОбъектРасчетов КАК ОбъектРасчетов,
| ТаблицаОстатковПоДокументам.Валюта КАК ВалютаВзаиморасчетов,
| ТаблицаОстатковПоДокументам.Организация КАК Организация,
| ТаблицаОстатковПоДокументам.Партнер КАК Партнер,
| ТаблицаОстатковПоДокументам.Контрагент КАК Контрагент,
| ТаблицаОстатковПоДокументам.Договор КАК Договор,
| СУММА(ТаблицаОстатковПоДокументам.СуммаАванса) КАК ДоступноКЗачету,
| СУММА(ТаблицаОстатковПоДокументам.СуммаРегл) КАК СуммаРегл,
| СУММА(ТаблицаОстатковПоДокументам.СуммаУпр) КАК СуммаУпр,
| ВЫБОР
| КОГДА ТаблицаОстатковПоДокументам.Договор = &Договор ТОГДА
| 1
| ИНАЧЕ
| 2
| КОНЕЦ КАК Порядок,
| ТаблицаОстатковПоДокументам.Дата КАК Дата
|ИЗ
| ТаблицаОстатковПоДокументам КАК ТаблицаОстатковПоДокументам
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДоступныеНераспределенныеПлатежи КАК НераспределенныеПлатежи
| ПО НераспределенныеПлатежи.ОбъектРасчетов = ТаблицаОстатковПоДокументам.ОбъектРасчетов
|ГДЕ
| НераспределенныеПлатежи.ОбъектРасчетов ЕСТЬ NULL
|
|СГРУППИРОВАТЬ ПО
| ТаблицаОстатковПоДокументам.ОбъектРасчетов,
| ТаблицаОстатковПоДокументам.Валюта,
| ТаблицаОстатковПоДокументам.Организация,
| ТаблицаОстатковПоДокументам.Партнер,
| ТаблицаОстатковПоДокументам.Контрагент,
| ТаблицаОстатковПоДокументам.Договор,
| ТаблицаОстатковПоДокументам.Дата
|
|УПОРЯДОЧИТЬ ПО
| Организация,
| Порядок,
| Дата,
| ОбъектРасчетов,
| Партнер
|";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область РасчетыСКлиентами
&НаСервере
Функция ТекстЗапросаПоРасчетамСКлиентами()
ТекстыЗапроса = Новый Массив;
ТекстыЗапроса.Добавить("
|ВЫБРАТЬ
| РасчетыСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
| ВЫБОР
| КОГДА ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат)
| И НЕ РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
| ТОГДА ОбъектыРасчетов.Объект
| ИНАЧЕ РасчетыСКлиентами.Регистратор
| КОНЕЦ КАК Документ,
| ВЫБОР КОГДА РасчетыСКлиентами.КорАналитикаУчетаПоПартнерам <> ЗНАЧЕНИЕ(Справочник.КлючиАналитикиУчетаПоПартнерам.ПустаяСсылка)
| ТОГДА РасчетыСКлиентами.КорАналитикаУчетаПоПартнерам.Организация
| ИНАЧЕ ОбъектыРасчетов.Организация
| КОНЕЦ КАК Организация,
| ОбъектыРасчетов.Контрагент КАК Контрагент,
| ОбъектыРасчетов.Партнер КАК Партнер,
| ВЫБОР
| КОГДА ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат)
| И НЕ РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
| ТОГДА РасчетыСКлиентами.КорОбъектРасчетов.Дата
| ИНАЧЕ ОбъектыРасчетов.Дата
| КОНЕЦ КАК Дата,
| ОбъектыРасчетов.Сумма КАК СуммаДокумента,
| ОбъектыРасчетов.Валюта КАК Валюта,
| РасчетыСКлиентами.КорОбъектРасчетов КАК ОбъектРасчетов,
| ЕСТЬNULL(РасчетыСКлиентами.КорОбъектРасчетов.Объект, Неопределено) КАК Объект,
| ОбъектыРасчетов.Договор КАК Договор,
|
| ВЫБОР
| КОГДА РасчетыСКлиентами.Сумма < 0 И РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА -РасчетыСКлиентами.Сумма
| КОГДА РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА РасчетыСКлиентами.Сумма
| КОГДА РасчетыСКлиентами.Сумма > 0 И РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И РасчетыСКлиентами.Регистратор ССЫЛКА Документ.КорректировкаРеализации
| ТОГДА -РасчетыСКлиентами.Сумма
| ИНАЧЕ 0
| КОНЕЦ КАК СуммаЗачтено,
| ВЫБОР
| КОГДА РасчетыСКлиентами.Сумма < 0 И РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА -РасчетыСКлиентами.Сумма
| КОГДА РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА РасчетыСКлиентами.Сумма
| КОГДА РасчетыСКлиентами.Сумма > 0 И РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И РасчетыСКлиентами.Регистратор ССЫЛКА Документ.КорректировкаРеализации
| ТОГДА -РасчетыСКлиентами.Сумма
| ИНАЧЕ 0
| КОНЕЦ *
| ВЫБОР КОГДА ОбъектыРасчетов.Сумма <> 0 И ОбъектыРасчетов.СуммаВзаиморасчетов <> 0
| ТОГДА ОбъектыРасчетов.СуммаВзаиморасчетов/ОбъектыРасчетов.Сумма
| ИНАЧЕ 1
| КОНЕЦ КАК СуммаВВалютеПлатежа,
| ЕСТЬNULL(РаспределенныеРасчеты.СуммаРегл, 0) КАК СуммаРегл,
| ЕСТЬNULL(РаспределенныеРасчеты.СуммаУпр, 0) КАК СуммаУпр,
|
| НЕ РасчетыСКлиентами.Регистратор ССЫЛКА Документ.КорректировкаРеализации
| И НЕ РасчетыСКлиентами.Регистратор ССЫЛКА Документ.КорректировкаЗадолженности
| И НЕ РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ВводОстатков
| И НЕ РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ВводОстатковВзаиморасчетов
| И НЕ РасчетыСКлиентами.Регистратор ССЫЛКА Документ.Сторно
| И НЕ ТИПЗНАЧЕНИЯ(РасчетыСКлиентами.Регистратор) = &ТипОперацияЯндексКасса
| И НЕ (РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ВозвратТоваровОтКлиента И ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Договор))
| И НЕ (РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И РасчетыСКлиентами.Сумма < 0 И РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности)
| И НЕ (РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности И ВЫРАЗИТЬ(РасчетыСКлиентами.Регистратор КАК Документ.ВзаимозачетЗадолженности).Валюта = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК ДоступноРедактирование,
| РасчетыСКлиентами.Регистратор = &Документ КАК РасшифровкаОбъектаРасчетов,
| 1 КАК Порядок
|ПОМЕСТИТЬ Зачтено
|ИЗ
| РегистрНакопления.РасчетыСКлиентами КАК РасчетыСКлиентами
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ПО РасчетыСКлиентами.ОбъектРасчетов = ОбъектыРасчетов.Ссылка
| И РасчетыСКлиентами.АналитикаУчетаПоПартнерам.Организация = ОбъектыРасчетов.Организация
| ЛЕВОЕ СОЕДИНЕНИЕ РаспределенныеРасчеты КАК РаспределенныеРасчеты
| ПО ВЫБОР
| КОГДА РасчетыСКлиентами.КорОбъектРасчетов <> Неопределено
| И НЕ РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
| ТОГДА РасчетыСКлиентами.КорОбъектРасчетов.Объект
| ИНАЧЕ РасчетыСКлиентами.Регистратор
| КОНЕЦ = РаспределенныеРасчеты.Регистратор
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ПО РасчетыСКлиентами.АналитикаУчетаПоПартнерам = ВтАналитикаУчетаПоПартнерам.КлючАналитики
|ГДЕ
| РасчетыСКлиентами.ОбъектРасчетов = &ОбъектРасчетов
| И ВтАналитикаУчетаПоПартнерам.ЭтоПартнерДокумента
| И ВЫБОР
| КОГДА РасчетыСКлиентами.Сумма < 0 И РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА -РасчетыСКлиентами.Сумма
| КОГДА РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА РасчетыСКлиентами.Сумма
| КОГДА РасчетыСКлиентами.Сумма > 0 И РасчетыСКлиентами.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И РасчетыСКлиентами.Регистратор ССЫЛКА Документ.КорректировкаРеализации
| ТОГДА -РасчетыСКлиентами.Сумма
| ИНАЧЕ 0
| КОНЕЦ <> 0
| И РасчетыСКлиентами.Активность
| И РасчетыСКлиентами.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.УдержаниеВознагражденияКомиссионера)
| И РасчетыСКлиентами.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ОтчетКомиссионера)
| И НЕ (РасчетыСКлиентами.Регистратор ССЫЛКА Документ.ОтчетКомитентуОЗакупках
| И РасчетыСКлиентами.Регистратор = &Документ
| И РасчетыСКлиентами.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.КорректировкаЗадолженности))
| И НЕ (РасчетыСКлиентами.Сторно
| И РасчетыСКлиентами.СвязанныйДокумент = &Документ)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасшифровкаПлатежа.Валюта КАК ВалютаВзаиморасчетов,
| РасшифровкаПлатежа.ОбъектРасчетов.Объект КАК Документ,
| РасшифровкаПлатежа.Организация КАК Организация,
| РасшифровкаПлатежа.Контрагент КАК Контрагент,
| РасшифровкаПлатежа.ОбъектРасчетов.Партнер КАК Партнер,
| РасшифровкаПлатежа.ОбъектРасчетов.Дата КАК Дата,
| РасшифровкаПлатежа.ОбъектРасчетов.Сумма КАК СуммаДокумента,
| РасшифровкаПлатежа.ОбъектРасчетов.Валюта КАК Валюта,
| РасшифровкаПлатежа.ОбъектРасчетов КАК ОбъектРасчетов,
| РасшифровкаПлатежа.ОбъектРасчетов.Объект КАК Объект,
| РасшифровкаПлатежа.Договор КАК Договор,
|
| РасшифровкаПлатежа.СуммаВзаиморасчетов КАК СуммаЗачтено,
| РасшифровкаПлатежа.Сумма КАК СуммаВВалютеПлатежа,
| 0 КАК СуммаРегл,
| 0 КАК СуммаУпр,
|
| ИСТИНА КАК ДоступноРедактирование,
| ИСТИНА КАК РасшифровкаОбъектаРасчетов,
| 1 КАК Порядок
|ИЗ
| ТаблицаРасшифровкаПлатежаНакладная КАК РасшифровкаПлатежа
|ГДЕ
| РасшифровкаПлатежа.ОбъектРасчетов <> &ОбъектРасчетов
| И РасшифровкаПлатежа.ОбъектРасчетов <> ЗНАЧЕНИЕ(Справочник.ОбъектыРасчетов.ПустаяСсылка)
| И &Документ <> РасшифровкаПлатежа.ОбъектРасчетов.Объект
|;
|ВЫБРАТЬ
| Взаимозачет.Ссылка КАК Ссылка,
| МАКСИМУМ(Взаимозачет.ОбъектРасчетов) КАК ОбъектРасчетов,
| МАКСИМУМ(Взаимозачет.ОбъектРасчетов.Объект) КАК Объект,
| NULL КАК СуммаРегл,
| NULL КАК СуммаУпр
|
|ПОМЕСТИТЬ ВтВзаимозачетыЗадолженности
|ИЗ Документ.ВзаимозачетЗадолженности.КредиторскаяЗадолженность КАК Взаимозачет
|ГДЕ НЕ &НоваяАрхитектураВзаиморасчетов
| И Взаимозачет.Ссылка В (ВЫБРАТЬ Т.Документ ИЗ Зачтено КАК Т)
|СГРУППИРОВАТЬ ПО
| Взаимозачет.Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РасчетыПоСрокам.ДокументРегистратор КАК Ссылка,
| РасчетыПоСрокам.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыПоСрокам.ОбъектРасчетов.Объект КАК Объект,
| СУММА(РасчетыПоСрокам.ДолгРегл + РасчетыПоСрокам.ПредоплатаРегл) КАК СуммаРегл,
| СУММА(РасчетыПоСрокам.ДолгУпр + РасчетыПоСрокам.ПредоплатаУпр) КАК СуммаУпр
|
|
|ИЗ РегистрНакопления.РасчетыСКлиентамиПоСрокам КАК РасчетыПоСрокам
|ГДЕ &НоваяАрхитектураВзаиморасчетов
| И РасчетыПоСрокам.ДокументРегистратор В (ВЫБРАТЬ Т.Документ ИЗ Зачтено КАК Т)
| И РасчетыПоСрокам.ОбъектРасчетовПриемник = &ОбъектРасчетов
| И РасчетыПоСрокам.ДокументРегистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
|СГРУППИРОВАТЬ ПО
| РасчетыПоСрокам.ДокументРегистратор,
| РасчетыПоСрокам.ОбъектРасчетов
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка,
| ОбъектРасчетов
|;
|ВЫБРАТЬ
| ВтАналитикаУчетаПоПартнерам.КлючАналитики КАК КлючАналитики
|ИЗ
| ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
|;
|
|ВЫБРАТЬ
| Зачтено.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| Зачтено.Документ КАК Документ,
| Зачтено.Организация КАК Организация,
| Зачтено.Контрагент КАК Контрагент,
| Зачтено.Партнер КАК Партнер,
| Зачтено.Дата КАК Дата,
| Зачтено.СуммаДокумента КАК СуммаДокумента,
| Зачтено.Валюта КАК Валюта,
| Зачтено.Договор КАК Договор,
|
| СУММА(Зачтено.СуммаЗачтено) КАК СуммаЗачтено,
| СУММА(Зачтено.СуммаВВалютеПлатежа) КАК СуммаВВалютеПлатежа,
| МАКСИМУМ(ЕСТЬNULL(Взаимозачет.СуммаРегл,Зачтено.СуммаРегл)) КАК СуммаРегл,
| МАКСИМУМ(ЕСТЬNULL(Взаимозачет.СуммаУпр,Зачтено.СуммаУпр)) КАК СуммаУпр,
|
| Зачтено.ДоступноРедактирование КАК ДоступноРедактирование,
| Зачтено.РасшифровкаОбъектаРасчетов КАК РасшифровкаОбъектаРасчетов,
| Зачтено.Порядок КАК Порядок,
| МАКСИМУМ(ЕСТЬNULL(Взаимозачет.ОбъектРасчетов,Зачтено.ОбъектРасчетов)) КАК ОбъектРасчетов,
| МАКСИМУМ(ЕСТЬNULL(Взаимозачет.ОбъектРасчетов.Объект,Зачтено.Объект)) КАК Объект
|ИЗ
| Зачтено КАК Зачтено
| ЛЕВОЕ СОЕДИНЕНИЕ ВтВзаимозачетыЗадолженности КАК Взаимозачет
| ПО Взаимозачет.Ссылка = Зачтено.Документ
| И (Взаимозачет.ОбъектРасчетов = Зачтено.ОбъектРасчетов
| ИЛИ НЕ &НоваяАрхитектураВзаиморасчетов)
|СГРУППИРОВАТЬ ПО
| Зачтено.ВалютаВзаиморасчетов,
| Зачтено.Документ,
| Зачтено.ОбъектРасчетов,
| Зачтено.Организация,
| Зачтено.Контрагент,
| Зачтено.Партнер,
| Зачтено.Дата,
| Зачтено.СуммаДокумента,
| Зачтено.Валюта,
| Зачтено.Договор,
| Зачтено.ДоступноРедактирование,
| Зачтено.РасшифровкаОбъектаРасчетов,
| Зачтено.Порядок
|УПОРЯДОЧИТЬ ПО
| Организация,
| Дата
|;");
ТекстыЗапроса.Добавить(ТекстНераспределенныеПлатежи());
Возврат СтрСоединить(ТекстыЗапроса);
КонецФункции
&НаСервере
Функция ВременныеТаблицыПоРасчетамСКлиентами()
ТекстыЗапроса = Новый Массив;
ТекстыЗапроса.Добавить("
|ВЫБРАТЬ
| РасчетыСКлиентами.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
| ОбъектыРасчетов.Объект КАК Документ,
| РасчетыСКлиентами.АналитикаУчетаПоПартнерам КАК КлючАналитики,
| ОбъектыРасчетов.Организация КАК Организация,
| ОбъектыРасчетов.Партнер КАК Партнер,
| ОбъектыРасчетов.Контрагент КАК Контрагент,
| ОбъектыРасчетов.Дата КАК Дата,
| ОбъектыРасчетов.Сумма КАК СуммаДокумента,
| ОбъектыРасчетов.Валюта КАК Валюта,
| -РасчетыСКлиентами.СуммаОстаток - ЕСТЬNULL(Расшифровка.Сумма,0) КАК ДоступноКЗачету,
| ВЫБОР КОГДА ОбъектыРасчетов.Сумма <> 0 И ОбъектыРасчетов.СуммаВзаиморасчетов <> 0
| ТОГДА -(РасчетыСКлиентами.СуммаОстаток - ЕСТЬNULL(Расшифровка.Сумма,0)) * ОбъектыРасчетов.СуммаВзаиморасчетов/ОбъектыРасчетов.Сумма
| ИНАЧЕ -РасчетыСКлиентами.СуммаОстаток - ЕСТЬNULL(Расшифровка.Сумма,0)
| КОНЕЦ КАК СуммаВВалютеПлатежа,
| ИСТИНА КАК ДоступноРедактирование,
| &ОбъектРасчетовНакладная
| И (&ЗачетСЗаказовДоговора
| И (ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Заказ)
| ИЛИ ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Договор))
| ИЛИ (ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат)
| И НАЧАЛОПЕРИОДА(ОбъектыРасчетов.Дата,ДЕНЬ) < &ДатаДокумента)
| ИЛИ (&ЭтоУправленческаяОрганизация
| И ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Накладная))
| ) КАК РасшифровкаОбъектаРасчетов
|ПОМЕСТИТЬ ВтНераспределенныеПлатежи
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(,
| АналитикаУчетаПоПартнерам В (
| ВЫБРАТЬ
| ВтАналитикаУчетаПоПартнерам.КлючАналитики КАК КлючАналитики
| ИЗ
| ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| )
| ) КАК РасчетыСКлиентами
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| Справочник.ОбъектыРасчетов КАК ОбъектыРасчетов
| ПО
| ОбъектыРасчетов.Ссылка = РасчетыСКлиентами.ОбъектРасчетов
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРасшифровкаПлатежаНакладная КАК Расшифровка
| ПО Расшифровка.ОбъектРасчетов = РасчетыСКлиентами.ОбъектРасчетов
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ПО РасчетыСКлиентами.АналитикаУчетаПоПартнерам = ВтАналитикаУчетаПоПартнерам.КлючАналитики
|
|ГДЕ
| НЕ (ОбъектыРасчетов.Объект ССЫЛКА Документ.ПервичныйДокумент
| И (ОбъектыРасчетов.Дата >= &ДатаДокумента И &ОбъектРасчетовНакладная
| ИЛИ ОбъектыРасчетов.Договор В (ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)
| ,ЗНАЧЕНИЕ(Справочник.ДоговорыМеждуОрганизациями.ПустаяСсылка))
| И ОбъектыРасчетов.Организация <> ЗНАЧЕНИЕ(Справочник.Организации.УправленческаяОрганизация)))
| И (ОбъектыРасчетов.Договор = &Договор
| ИЛИ НЕ (ОбъектыРасчетов.Дата < &ДатаДокумента И &ОбъектРасчетовНакладная)
| И ОбъектыРасчетов.Договор В (ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)
| ,ЗНАЧЕНИЕ(Справочник.ДоговорыМеждуОрганизациями.ПустаяСсылка))
| ИЛИ (&ЭтоУправленческаяОрганизация
| И ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Накладная)))
| И ВтАналитикаУчетаПоПартнерам.ЭтоПартнерДокумента
| И ОбъектыРасчетов.НаправлениеДеятельности = &НаправлениеДеятельности
| И ОбъектыРасчетов.ВалютаВзаиморасчетов = &ВалютаВзаиморасчетов
| И РасчетыСКлиентами.СуммаОстаток < 0
| И (&ОбъектРасчетовНакладная
| И (ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат)
| ИЛИ ОбъектыРасчетов.Объект В (&СписокОбъектов)
| И (ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Заказ)
| ИЛИ ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Договор))
| ИЛИ &ЭтоУправленческаяОрганизация
| И НАЧАЛОПЕРИОДА(ОбъектыРасчетов.Дата,ДЕНЬ) <= &ДатаДокумента
| )
| ИЛИ НЕ &ОбъектРасчетовНакладная
| И &ДатаДокумента < НАЧАЛОПЕРИОДА(ОбъектыРасчетов.Дата,ДЕНЬ)
| И ОбъектыРасчетов.ТипОбъектаРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат))
| И НЕ (ОбъектыРасчетов.Объект ССЫЛКА Справочник.ПодарочныеСертификаты)
|;
|
|
|ВЫБРАТЬ
| РасчетыПоДокументам.Регистратор КАК Регистратор,
| СУММА(РасчетыПоДокументам.ПредоплатаРегл + РасчетыПоДокументам.ДолгРегл) КАК СуммаРегл,
| СУММА(РасчетыПоДокументам.ПредоплатаУпр + РасчетыПоДокументам.ДолгУпр) КАК СуммаУпр
|ПОМЕСТИТЬ РаспределенныеРасчеты
|ИЗ
| РегистрНакопления.РасчетыСКлиентамиПоДокументам КАК РасчетыПоДокументам
|ГДЕ
| НЕ &НоваяАрхитектураВзаиморасчетов
| И РасчетыПоДокументам.АналитикаУчетаПоПартнерам В (ВЫБРАТЬ КлючАналитики ИЗ ВтАналитикаУчетаПоПартнерам)
| И &ОбъектРасчетов = РасчетыПоДокументам.ЗаказКлиента
| И РасчетыПоДокументам.Активность
|СГРУППИРОВАТЬ ПО
| РасчетыПоДокументам.Регистратор
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасчетыПоСрокам.РасчетныйДокумент КАК Регистратор,
| СУММА(РасчетыПоСрокам.ПредоплатаРегл) КАК СуммаРегл,
| СУММА(РасчетыПоСрокам.ПредоплатаУпр) КАК СуммаУпр
|ИЗ
| РегистрНакопления.РасчетыСКлиентамиПоСрокам КАК РасчетыПоСрокам
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ПО РасчетыПоСрокам.АналитикаУчетаПоПартнерам = ВтАналитикаУчетаПоПартнерам.КлючАналитики
|ГДЕ
| &НоваяАрхитектураВзаиморасчетов
| И ВтАналитикаУчетаПоПартнерам.ЭтоПартнерДокумента
| И &ОбъектРасчетов = РасчетыПоСрокам.ОбъектРасчетов
| И РасчетыПоСрокам.Активность
| И РасчетыПоСрокам.Предоплата <> 0
| И РасчетыПоСрокам.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И РасчетыПоСрокам.ОбъектРасчетов.ТипОбъектаРасчетов В (
| ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Накладная),
| ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.ПлатежВозврат))
| И НЕ РасчетыПоСрокам.ДокументРегистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
|СГРУППИРОВАТЬ ПО
| РасчетыПоСрокам.РасчетныйДокумент
|
| ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасчетыПоСрокам.ДокументРегистратор КАК Регистратор,
| СУММА(РасчетыПоСрокам.ПредоплатаРегл + РасчетыПоСрокам.ДолгРегл) КАК СуммаРегл,
| СУММА(РасчетыПоСрокам.ПредоплатаУпр + РасчетыПоСрокам.ДолгУпр) КАК СуммаУпр
|ИЗ
| РегистрНакопления.РасчетыСКлиентамиПоСрокам КАК РасчетыПоСрокам
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ПО РасчетыПоСрокам.АналитикаУчетаПоПартнерам = ВтАналитикаУчетаПоПартнерам.КлючАналитики
|ГДЕ
| &НоваяАрхитектураВзаиморасчетов
| И ВтАналитикаУчетаПоПартнерам.ЭтоПартнерДокумента
| И &ОбъектРасчетов = РасчетыПоСрокам.ОбъектРасчетов
| И РасчетыПоСрокам.Активность
| И РасчетыПоСрокам.ОбъектРасчетов.ТипОбъектаРасчетов В (
| ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Договор),
| ЗНАЧЕНИЕ(Перечисление.ТипыОбъектовРасчетов.Заказ))
| И РасчетыПоСрокам.ДокументРегистратор ССЫЛКА Документ.ВзаимозачетЗадолженности
|СГРУППИРОВАТЬ ПО
| РасчетыПоСрокам.ДокументРегистратор
|;");
ТекстыЗапроса.Добавить(ТекстНедоступныеДляЗаписиДокументы());
Возврат СтрСоединить(ТекстыЗапроса);
КонецФункции
&НаСервере
Функция ТекстЗапросаАвансыПоРасчетамСКлиентами(Запрос)
Если НЕ ПолучитьФункциональнуюОпцию("НоваяАрхитектураВзаиморасчетов") Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| РасчетыСКлиентами.АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам,
| РасчетыСКлиентами.ЗаказКлиента.Партнер КАК Партнер,
| РасчетыСКлиентами.ЗаказКлиента.Организация КАК Организация,
| РасчетыСКлиентами.ЗаказКлиента.Контрагент КАК Контрагент,
| РасчетыСКлиентами.ЗаказКлиента.Договор КАК Договор,
| РасчетыСКлиентами.ЗаказКлиента.НаправлениеДеятельности КАК НаправлениеДеятельности,
| РасчетыСКлиентами.ЗаказКлиента КАК ОбъектРасчетов,
| РасчетыСКлиентами.Валюта КАК Валюта,
| РасчетыСКлиентами.ПредоплатаОстаток КАК СуммаАванса,
| РасчетыСКлиентами.ПредоплатаРеглОстаток КАК СуммаРегл,
| РасчетыСКлиентами.ПредоплатаУпрОстаток КАК СуммаУпр,
| РасчетыСКлиентами.ЗаказКлиента.Дата КАК Дата
|
|ПОМЕСТИТЬ ТаблицаОстатковПоДокументам
|ИЗ
| РегистрНакопления.РасчетыСКлиентамиПоДокументам.Остатки(,
| АналитикаУчетаПоПартнерам В (
| ВЫБРАТЬ
| ВтАналитикаУчетаПоПартнерам.КлючАналитики КАК КлючАналитики
| ИЗ
| ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ГДЕ
| ВтАналитикаУчетаПоПартнерам.Организация В (&Организация)
| )
| И ЗаказКлиента <> &ОбъектРасчетов
| ) КАК РасчетыСКлиентами
|
|ГДЕ
| РасчетыСКлиентами.ПредоплатаОстаток < 0
| И (ТИПЗНАЧЕНИЯ(РасчетыСКлиентами.ЗаказКлиента.Объект) <> ТИП(Документ.РеализацияТоваровУслуг)
| ИЛИ &ЭтоУправленческаяОрганизация)
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаПоПартнерам,
| ОбъектРасчетов,
| Валюта
|;
|
|";
Иначе
ТекстЗапроса = "
|ВЫБРАТЬ
| РасчетыСКлиентами.АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам,
| РасчетыСКлиентами.АналитикаУчетаПоПартнерам.Партнер КАК Партнер,
| РасчетыСКлиентами.ОбъектРасчетов.Организация КАК Организация,
| РасчетыСКлиентами.ОбъектРасчетов.Контрагент КАК Контрагент,
| РасчетыСКлиентами.ОбъектРасчетов.Договор КАК Договор,
| РасчетыСКлиентами.ОбъектРасчетов.НаправлениеДеятельности КАК НаправлениеДеятельности,
| РасчетыСКлиентами.ОбъектРасчетов КАК ОбъектРасчетов,
| РасчетыСКлиентами.ОбъектРасчетов.Объект КАК Объект,
| РасчетыСКлиентами.Валюта КАК Валюта,
| -РасчетыСКлиентами.ПредоплатаОстаток КАК СуммаАванса,
| -РасчетыСКлиентами.ПредоплатаРеглОстаток КАК СуммаРегл,
| -РасчетыСКлиентами.ПредоплатаУпрОстаток КАК СуммаУпр,
| РасчетыСКлиентами.ОбъектРасчетов.Дата КАК Дата
|
|ПОМЕСТИТЬ ТаблицаОстатковПоДокументам
|ИЗ
| РегистрНакопления.РасчетыСКлиентамиПоСрокам.Остатки(,
| АналитикаУчетаПоПартнерам В (
| ВЫБРАТЬ
| ВтАналитикаУчетаПоПартнерам.КлючАналитики КАК КлючАналитики
| ИЗ
| ВтАналитикаУчетаПоПартнерам КАК ВтАналитикаУчетаПоПартнерам
| ГДЕ
| ВтАналитикаУчетаПоПартнерам.Организация В (&Организация)
| )
| И (ОбъектРасчетов <> &ОбъектРасчетов
| ИЛИ АналитикаУчетаПоПартнерам.Партнер <> &ПартнерДокумента)
| ) КАК РасчетыСКлиентами
|
|ГДЕ
| РасчетыСКлиентами.ПредоплатаОстаток > 0
| И РасчетыСКлиентами.ОбъектРасчетов.Объект <> НЕОПРЕДЕЛЕНО
| И НЕ РасчетыСКлиентами.ОбъектРасчетов.Объект ССЫЛКА Справочник.ПодарочныеСертификаты
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаПоПартнерам,
| ОбъектРасчетов,
| Валюта
|;";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаОстатковПоДокументам.ОбъектРасчетов КАК ОбъектРасчетов,
| ТаблицаОстатковПоДокументам.Валюта КАК ВалютаВзаиморасчетов,
| ТаблицаОстатковПоДокументам.Организация КАК Организация,
| ТаблицаОстатковПоДокументам.Партнер КАК Партнер,
| ТаблицаОстатковПоДокументам.Контрагент КАК Контрагент,
| ТаблицаОстатковПоДокументам.Договор КАК Договор,
| СУММА(-ТаблицаОстатковПоДокументам.СуммаАванса) КАК ДоступноКЗачету,
| СУММА(-ТаблицаОстатковПоДокументам.СуммаРегл) КАК СуммаРегл,
| СУММА(-ТаблицаОстатковПоДокументам.СуммаУпр) КАК СуммаУпр,
| ТаблицаОстатковПоДокументам.Дата КАК Дата,
| ВЫБОР
| КОГДА ТаблицаОстатковПоДокументам.Договор = &Договор ТОГДА
| 1
| ИНАЧЕ
| 2
| КОНЕЦ КАК Порядок
|ИЗ
| ТаблицаОстатковПоДокументам КАК ТаблицаОстатковПоДокументам
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДоступныеНераспределенныеПлатежи КАК НераспределенныеПлатежи
| ПО НераспределенныеПлатежи.ОбъектРасчетов = ТаблицаОстатковПоДокументам.ОбъектРасчетов
|ГДЕ
| НераспределенныеПлатежи.ОбъектРасчетов ЕСТЬ NULL
|
|СГРУППИРОВАТЬ ПО
| ТаблицаОстатковПоДокументам.ОбъектРасчетов,
| ТаблицаОстатковПоДокументам.Валюта,
| ТаблицаОстатковПоДокументам.Организация,
| ТаблицаОстатковПоДокументам.Партнер,
| ТаблицаОстатковПоДокументам.Контрагент,
| ТаблицаОстатковПоДокументам.Договор,
| ТаблицаОстатковПоДокументам.Дата
|
|УПОРЯДОЧИТЬ ПО
| Организация,
| Порядок,
| Дата,
| ОбъектРасчетов,
| Партнер
|";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
&НаСервере
Функция ВерсияДанныхДокумента(ДокументСсылка)
Если ДокументСсылка = Неопределено Тогда
Возврат " ";
КонецЕсли;
ИмяДокумента = Метаданные.НайтиПоТипу(ТипЗнч(ДокументСсылка)).Имя;
ТекстЗапроса = "
|ВЫБРАТЬ
| ДанныеДокумента.ВерсияДанных КАК ВерсияДанных
|ИЗ
| &ИмяДокумента КАК ДанныеДокумента
|ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка
|";
Запрос = Новый Запрос;
Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ИмяДокумента", "Документ." + ИмяДокумента);
Если НЕ ОбщегоНазначения.ЭтоДокумент(ДокументСсылка.Метаданные()) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ", "Справочник");
КонецЕсли;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Если Выборка.Следующий() Тогда
ВерсияДанных = Выборка.ВерсияДанных;
Иначе
ВерсияДанных = " ";
КонецЕсли;
Возврат ВерсияДанных;
КонецФункции
&НаСервере
Функция СостояниеФоновогоЗаданияВзаиморасчетов()
Отбор = Новый Структура();
Отбор.Вставить("Ключ", Ключ);
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Если Задания.Количество() > 0 Тогда
Если Задания[0].Состояние = СостояниеФоновогоЗадания.Активно Тогда
Возврат "Активно";
ИначеЕсли Задания[0].Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
Возврат "Ошибка";
Иначе
Возврат "Завершено";
КонецЕсли;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ФоновоеЗаданиеПроверитьНаКлиенте()
Состояние = СостояниеФоновогоЗаданияВзаиморасчетов();
Если Состояние = Неопределено ИЛИ Состояние = "Завершено" Тогда
АвансыРассчитаны = НЕ ЕстьЗаданияКРаспределениюВзаиморасчетов(ЕстьРасчетыСКлиентами, КлючиАналитики) ИЛИ НоваяАрхитектураВзаиморасчетов;
Если НЕ АвансыРассчитаны Тогда
Ключ = Новый УникальныйИдентификатор();
СтруктураРасчетов = Новый Структура("АналитикиУчетаПоПартнерам, Организации",КлючиАналитики.ВыгрузитьЗначения(), Неопределено);
Если ЕстьРасчетыСКлиентами Тогда
РаспределениеВзаиморасчетовВызовСервера.РаспределитьРасчетыФоновымЗаданием(,СтруктураРасчетов,"РасчетыСКлиентами",Ключ);
Иначе
РаспределениеВзаиморасчетовВызовСервера.РаспределитьРасчетыФоновымЗаданием(,СтруктураРасчетов,"РасчетыСПоставщиками",Ключ);
КонецЕсли;
ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 0.1, Истина);
Иначе
Ключ = Неопределено;
ЗаполнитьТаблицуАвансов();
КонецЕсли;
ИначеЕсли Состояние = "Активно" Тогда
ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 0.1, Истина);
Иначе
ТекстСообщения = НСтр("ru = 'Во время распределения расчетов по документам произошла ошибка. Подробности см. в Журнале регистрации.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
АвансыРассчитаны = Истина;
Авансы.Очистить();
УстановитьСтраницуАвансов();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПроведениеЗачетов
&НаКлиенте
Процедура ЗачестьПлатежДляВыбранныхСтрок(МассивСтрок)
ОчиститьСообщения();
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПолучитьПодтверждениеЗачетаПлатежа",
ЭтаФорма,
МассивСтрок);
Если Недостает <= 0 Тогда
Режим = Новый СписокЗначений;
Текст = НСтр("ru = 'Продолжить'");
Режим.Добавить(КодВозвратаДиалога.Да, Текст);
Режим.Добавить(КодВозвратаДиалога.Отмена);
Если ПорядокРасчетов = ПредопределенноеЗначение("Перечисление.ПорядокРасчетов.ПоЗаказамНакладным")
И ТипОбъектаРасчетов = ПредопределенноеЗначение("Перечисление.ТипыОбъектовРасчетов.Заказ") Тогда
ТекстВопроса = НСтр("ru = 'Сумма аванса полностью зачтена.'");
Иначе
ТекстВопроса = НСтр("ru = 'Сумма к оплате полностью зачтена.'");
КонецЕсли;
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Режим);
Возврат;
КонецЕсли;
ВыполнитьОбработкуОповещения(ОписаниеОповещения, КодВозвратаДиалога.Да);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьПодтверждениеЗачетаПлатежа(Результат, МассивСтрок) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ЗачестьНаСервере(МассивСтрок, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗачестьАвансДляВыбранныхСтрок(МассивСтрок)
ОчиститьСообщения();
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПолучитьПодтверждениеЗачетаАванса",
ЭтаФорма,
МассивСтрок);
Если Недостает <= 0 Тогда
Режим = Новый СписокЗначений;
Текст = НСтр("ru = 'Продолжить'");
Режим.Добавить(КодВозвратаДиалога.Да, Текст);
Режим.Добавить(КодВозвратаДиалога.Отмена);
Если ПорядокРасчетов = ПредопределенноеЗначение("Перечисление.ПорядокРасчетов.ПоЗаказамНакладным")
И ТипОбъектаРасчетов = ПредопределенноеЗначение("Перечисление.ТипыОбъектовРасчетов.Заказ") Тогда
ТекстВопроса = НСтр("ru = 'Сумма аванса полностью зачтена.'");
Иначе
ТекстВопроса = НСтр("ru = 'Сумма к оплате полностью зачтена.'");
КонецЕсли;
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Режим);
Возврат;
КонецЕсли;
ВыполнитьОбработкуОповещения(ОписаниеОповещения, КодВозвратаДиалога.Да);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьПодтверждениеЗачетаАванса(Результат, МассивСтрок) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ЗачестьНаСервере(МассивСтрок, Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗачестьНаСервере(МассивСтрок, ЭтоОплата)
Если ЭтоОплата И Не ЗаблокироватьДокументыДляРедактирования(МассивСтрок, "Оплаты") Тогда
Возврат;
КонецЕсли;
ТаблицаФормы = ЭтаФорма[?(ЭтоОплата, "Оплаты", "Авансы")];
РаспределитьОстаток = (Недостает > 0);
СписокСтрок = Новый СписокЗначений;
ОбъектыРасчетовСпискаСтрок = Новый Массив;
Для Каждого НомерСтроки Из МассивСтрок Цикл
СтрокаТаблицы = ТаблицаФормы.НайтиПоИдентификатору(НомерСтроки);
Если СтрокаТаблицы <> Неопределено Тогда
СписокСтрок.Добавить(СтрокаТаблицы, ТаблицаФормы.Индекс(СтрокаТаблицы));
Если ОбъектыРасчетовСпискаСтрок.Найти(СтрокаТаблицы.ОбъектРасчетов) = Неопределено Тогда
ОбъектыРасчетовСпискаСтрок.Добавить(СтрокаТаблицы.ОбъектРасчетов);
КонецЕсли;
КонецЕсли;
КонецЦикла;
СписокСтрок.СортироватьПоПредставлению();
СтруктураПоиска = Новый Структура("Объект, Партнер");
Если НЕ ЭтоОплата Тогда
СтруктураПоиска.Вставить("ОбъектРасчетов");
КонецЕсли;
Замер = ОценкаПроизводительности.НачатьЗамерДлительнойОперации(
"Обработка.ПомощникЗачетаОплат.Форма.Форма.ЗачестьНаСервере");
ЗначенияРеквизитаОбъект = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ОбъектыРасчетовСпискаСтрок, "Объект");
КоличествоОбработанныхДанных = 0;
Для Каждого Строка Из СписокСтрок Цикл
СтрокаТаблицы = Строка.Значение;
Если ЭтоОплата И НЕ СтрокаТаблицы.ДоступноРедактирование Тогда
Продолжить;
КонецЕсли;
КоличествоОбработанныхДанных = КоличествоОбработанныхДанных + 1;
СуммаКЗачету = СтрокаТаблицы.ДоступноКЗачету;
СуммаВВалютеПлатежа = СтрокаТаблицы.СуммаВВалютеПлатежа;
ОбъектОбъектаРасчетов = ЗначенияРеквизитаОбъект[СтрокаТаблицы.ОбъектРасчетов];
ОбъектРасчетовПодарочныйСертификат = ТипЗнч(ОбъектОбъектаРасчетов) = Тип("СправочникСсылка.ПодарочныеСертификаты");
Если РаспределитьОстаток И Не ОбъектРасчетовПодарочныйСертификат Тогда
СуммаБазиса = СтрокаТаблицы.ДоступноКЗачету;
СуммаКЗачету = ВзаиморасчетыСервер.СписатьСумму(СтрокаТаблицы.ДоступноКЗачету, Недостает);
СуммаВВалютеПлатежа = ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаТаблицы.СуммаВВалютеПлатежа,
СуммаКЗачету,
СуммаБазиса);
Если НЕ ЭтоОплата Тогда
СуммаРегл= ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаТаблицы.СуммаРегл,
СуммаКЗачету,
СуммаБазиса);
СуммаУпр = ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаТаблицы.СуммаУпр,
СуммаКЗачету,
СуммаБазиса);
Иначе
Если НЕ ЭтоОплата Тогда
СуммаРегл = 0;
СуммаУпр = 0;
КонецЕсли;
КонецЕсли;
Иначе
СтрокаТаблицы.ДоступноКЗачету = 0;
Если НЕ ЭтоОплата Тогда
СуммаРегл = СтрокаТаблицы.СуммаРегл;
СуммаУпр = СтрокаТаблицы.СуммаУпр;
КонецЕсли;
КонецЕсли;
Если СуммаКЗачету = 0 Тогда
Прервать;
КонецЕсли;
Если НЕ ЭтоОплата Тогда
СтруктураПоиска = Новый Структура("ОбъектРасчетов, Документ", СтрокаТаблицы.ОбъектРасчетов, СтрокаТаблицы.Документ);
ИначеЕсли СтрокаТаблицы.РасшифровкаОбъектаРасчетов Тогда
СтруктураПоиска = Новый Структура("ОбъектРасчетов", СтрокаТаблицы.ОбъектРасчетов);
Иначе
СтруктураПоиска = Новый Структура("Документ", СтрокаТаблицы.Документ);
КонецЕсли;
ЗачтенныеСтроки = Зачтено.НайтиСтроки(СтруктураПоиска);
Если ЗачтенныеСтроки.Количество() = 0 Тогда
СтрокаЗачета = Зачтено.Добавить();
Если НЕ ЭтоОплата Тогда
ЗаполнитьЗначенияСвойств(СтрокаЗачета, СтрокаТаблицы, , "СуммаВВалютеПлатежа, СуммаУпр, СуммаРегл");
ИначеЕсли СтрокаТаблицы.РасшифровкаОбъектаРасчетов Тогда
ЗаполнитьЗначенияСвойств(СтрокаЗачета, СтрокаТаблицы, , "СуммаВВалютеПлатежа, Документ");
СтрокаЗачета.Документ = Документ;
Иначе
ЗаполнитьЗначенияСвойств(СтрокаЗачета, СтрокаТаблицы, , "СуммаВВалютеПлатежа");
КонецЕсли;
СтрокаЗачета.ДоступноРедактирование = Истина;
Иначе
СтрокаЗачета = ЗачтенныеСтроки[0];
КонецЕсли;
СтрокаЗачета.СуммаЗачтено = СтрокаЗачета.СуммаЗачтено + СуммаКЗачету;
СтрокаЗачета.СуммаВВалютеПлатежа = СтрокаЗачета.СуммаВВалютеПлатежа + СуммаВВалютеПлатежа;
Если НЕ ЭтоОплата Тогда
СтрокаЗачета.СуммаРегл = СтрокаЗачета.СуммаРегл + СуммаРегл;
СтрокаЗачета.СуммаУпр = СтрокаЗачета.СуммаУпр + СуммаУпр;
КонецЕсли;
СтрокаЗачета.ДанныеИзменены = Истина;
Если ОбъектРасчетовПодарочныйСертификат Тогда
РазблокироватьДанныеДляРедактирования(СтрокаЗачета.Документ, УникальныйИдентификатор);
СтрокаЗачета.ВерсияДанных = ВерсияДанныхДокумента(СтрокаЗачета.Документ);
СтрокаЗачета.Объект = ОбъектОбъектаРасчетов;
СтрокаЗачета.ДанныеИзменены = Ложь;
КонецЕсли;
Если СтрокаТаблицы.ДоступноКЗачету = 0 Тогда
ТаблицаФормы.Удалить(СтрокаТаблицы);
Иначе
СтрокаТаблицы.ДанныеИзменены = Ложь;
КонецЕсли;
КонецЦикла;
ОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(Замер, КоличествоОбработанныхДанных);
Зачтено.Сортировать("Организация, РасшифровкаОбъектаРасчетов ВОЗР");
РассчитатьСуммуЗачета();
РасчитатьКоличествоСтрок();
КонецПроцедуры
&НаСервере
Процедура ОтменитьЗачетНаСервере(СоответствиеСтрок, СуммаСтрокиИзменена = Истина, Отказ = Ложь)
МассивСтрок = Новый Массив;
Для Каждого ЭлементСтроки Из СоответствиеСтрок Цикл
МассивСтрок.Добавить(ЭлементСтроки.Ключ);
КонецЦикла;
Если Не ЗаблокироватьДокументыДляРедактирования(МассивСтрок, "Зачтено") Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Для Каждого ЭлементСтроки Из СоответствиеСтрок Цикл
СтрокаТаблицы = Зачтено.НайтиПоИдентификатору(ЭлементСтроки.Ключ);
Если СтрокаТаблицы = Неопределено Или
(Не СтрокаТаблицы.ДоступноРедактирование
И ТипЗнч(СтрокаТаблицы.Объект) <> Тип("СправочникСсылка.ПодарочныеСертификаты")
И ТипЗнч(СтрокаТаблицы.Документ) <> Тип("ДокументСсылка.ВзаимозачетЗадолженности")) Тогда
Продолжить;
КонецЕсли;
СуммаКОтмене = ЭлементСтроки.Значение;
СуммаБазиса = СтрокаТаблицы.СуммаЗачтено + ?(СуммаСтрокиИзменена, СуммаКОтмене, 0);
Если СуммаКОтмене = 0 Тогда
СуммаКОтмене = СтрокаТаблицы.СуммаЗачтено;
СтрокаТаблицы.СуммаЗачтено = 0;
ИначеЕсли Не СуммаСтрокиИзменена Тогда
СтрокаТаблицы.СуммаЗачтено = СтрокаТаблицы.СуммаЗачтено - СуммаКОтмене;
КонецЕсли;
ЭтоОтменаАвансаПодобраннымПодарочнымСертификатом = (Не ЗначениеЗаполнено(СтрокаТаблицы.Документ)
И ТипЗнч(СтрокаТаблицы.Объект) = Тип("СправочникСсылка.ПодарочныеСертификаты"));
Если Не ЭтоОтменаАвансаПодобраннымПодарочнымСертификатом Тогда
ЭтоОтменаНеиспользованногоАванса = Не ЗначениеЗаполнено(СтрокаТаблицы.Документ)
Или ТипЗнч(СтрокаТаблицы.Документ) = Тип("ДокументСсылка.ВзаимозачетЗадолженности");
Если ЭтоОтменаНеиспользованногоАванса ИЛИ СтрокаТаблицы.РасшифровкаОбъектаРасчетов Тогда
СтруктураПоиска = Новый Структура("Документ, Партнер, ОбъектРасчетов");
Иначе
СтруктураПоиска = Новый Структура("Документ, Партнер");
КонецЕсли;
Если ЭтоОтменаНеиспользованногоАванса Тогда
ТаблицаПоиска = Авансы;
СуммаКОтменеРегл = ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаТаблицы.СуммаРегл,
СуммаКОтмене,
СуммаБазиса);
СуммаКОтменеУпр = ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаТаблицы.СуммаУпр,
СуммаКОтмене,
СуммаБазиса);
Иначе
ТаблицаПоиска = Оплаты;
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТаблицы);
НайденныеСтроки = ТаблицаПоиска.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() = 0 Тогда
СтрокаОплаты = ТаблицаПоиска.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаОплаты, СтрокаТаблицы, , "СуммаВВалютеПлатежа");
Если ЭтоОтменаНеиспользованногоАванса Тогда
СтрокаОплаты.СуммаРегл = СуммаКОтменеРегл;
СтрокаОплаты.СуммаУпр = СуммаКОтменеУпр;
КонецЕсли;
Если СтрокаТаблицы.РасшифровкаОбъектаРасчетов Тогда
СтрокаОплаты.Документ = СтрокаТаблицы.Объект;
КонецЕсли;
Иначе
СтрокаОплаты = НайденныеСтроки[0];
Если ЭтоОтменаНеиспользованногоАванса Тогда
СтрокаОплаты.СуммаРегл = СтрокаОплаты.СуммаРегл + СуммаКОтменеРегл;
СтрокаОплаты.СуммаУпр = СтрокаОплаты.СуммаУпр + СуммаКОтменеУпр;
КонецЕсли;
КонецЕсли;
Если СтрокаТаблицы.СуммаВВалютеПлатежа > 0 Тогда
СуммаКОтменеВВалютеПлатежа = ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаТаблицы.СуммаВВалютеПлатежа,
СуммаКОтмене,
СуммаБазиса);
Иначе
СуммаКОтменеВВалютеПлатежа = СтрокаОплаты.СуммаВВалютеПлатежа / СуммаБазиса * СуммаКОтмене;
КонецЕсли;
СтрокаОплаты.СуммаВВалютеПлатежа = СтрокаОплаты.СуммаВВалютеПлатежа + СуммаКОтменеВВалютеПлатежа;
СтрокаОплаты.ДоступноКЗачету = СтрокаОплаты.ДоступноКЗачету + СуммаКОтмене;
Если НЕ ЭтоОтменаНеиспользованногоАванса
И СтрокаОплаты.РасшифровкаОбъектаРасчетов <> СтрокаТаблицы.РасшифровкаОбъектаРасчетов Тогда
СтрокаОплаты.РасшифровкаОбъектаРасчетов = СтрокаТаблицы.РасшифровкаОбъектаРасчетов;
КонецЕсли;
КонецЕсли;
СтрокаОплаты.НесохраненныеДанные = Истина;
Если СтрокаТаблицы.СуммаЗачтено = 0 Тогда
Зачтено.Удалить(СтрокаТаблицы);
СтрокаОплаты.ДанныеИзменены = Истина;
Иначе
СтрокаТаблицы.ДанныеИзменены = Истина;
СтрокаОплаты.ДанныеИзменены = Ложь;
Если ЭтоОтменаНеиспользованногоАванса Тогда
СтрокаОплаты.Документ = Неопределено;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Оплаты.Сортировать("Организация, Дата");
Авансы.Сортировать("Организация, Порядок");
РассчитатьСуммуЗачета();
РасчитатьКоличествоСтрок();
КонецПроцедуры
&НаСервере
Процедура ИсправитьПревышениеНаСервере(Отказ)
СуммаКРаспределению = Превышение;
СоответствиеСписания = Новый Соответствие;
РазмерТаблицы = Зачтено.Количество();
Для Сч = 1 По РазмерТаблицы Цикл
СтрокаТаблицы = Зачтено[РазмерТаблицы - Сч];
Если Не СтрокаТаблицы.ДоступноРедактирование Тогда
Продолжить;
КонецЕсли;
Если СтрокаТаблицы.СуммаЗачтено < 0 Тогда
Продолжить;
КонецЕсли;
СуммаКОтмене = Мин(СтрокаТаблицы.СуммаЗачтено, СуммаКРаспределению);
СуммаКРаспределению = СуммаКРаспределению - СуммаКОтмене;
СоответствиеСписания.Вставить(СтрокаТаблицы.ПолучитьИдентификатор(), СуммаКОтмене);
Если СуммаКРаспределению = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ОтменитьЗачетНаСервере(СоответствиеСписания, Ложь, Отказ);
КонецПроцедуры
&НаСервере
Функция ЗаблокироватьДокументыДляРедактирования(МассивСтрок, ИмяТаблицы)
Отказ = Ложь;
УстановитьПривилегированныйРежим(Истина);
ТаблицаФормы = ЭтаФорма[ИмяТаблицы];
Для Каждого ИдентификаторСтроки Из МассивСтрок Цикл
СтрокаТаблицы = ТаблицаФормы.НайтиПоИдентификатору(ИдентификаторСтроки);
ИндексСтроки = ТаблицаФормы.Индекс(СтрокаТаблицы);
Если СтрокаТаблицы = Неопределено
Или СтрокаТаблицы.ДанныеИзменены Или Не ЗначениеЗаполнено(СтрокаТаблицы.Документ) Тогда
Продолжить;
КонецЕсли;
Если СтрокаТаблицы.ВерсияДанных <> ВерсияДанныхДокумента(СтрокаТаблицы.Документ) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось заблокировать %1. Данные были изменены или удалены другим пользователем.'"),
СтрокаТаблицы.Документ);
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
,
ИмяТаблицы + "[" + (ИндексСтроки) + "].Документ");
Отказ = Истина;
Продолжить;
КонецЕсли;
Если ТипОбъектаРасчетов = Перечисления.ТипыОбъектовРасчетов.Накладная
И СтрокаТаблицы.Дата < ДатаДокумента
ИЛИ СписокОбъектов.Количество() > 0 Тогда
ИзменениеЗапрещено = ДатыЗапретаИзменения.ИзменениеЗапрещено(
ОбщегоНазначения.ИмяТаблицыПоСсылке(Документ),
Документ, Ложь);
ДокументСообщения=Документ;
Иначе
ИзменениеЗапрещено = ДатыЗапретаИзменения.ИзменениеЗапрещено(
ОбщегоНазначения.ИмяТаблицыПоСсылке(СтрокаТаблицы.Документ),
СтрокаТаблицы.Документ, Ложь);
ДокументСообщения = СтрокаТаблицы.Документ
КонецЕсли;
Если ИзменениеЗапрещено Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось изменить %1. Документ находится в запрещенном для изменения периоде.'"),
ДокументСообщения);
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
,
ИмяТаблицы + "[" + (ИндексСтроки) + "].Документ");
Отказ = Истина;
Продолжить;
КонецЕсли;
Если ДокументСообщения <> Документ Тогда
Попытка
ЗаблокироватьДанныеДляРедактирования(
ДокументСообщения,
,
УникальныйИдентификатор);
Исключение
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось заблокировать %1. %2'"),
СтрокаТаблицы.Документ,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки,
,
ИмяТаблицы + "[" + (ИндексСтроки) + "].Документ");
Отказ = Истина;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Возврат Не Отказ;
КонецФункции
#КонецОбласти
#Область ЗаписьИзменений
&НаКлиенте
Процедура СохранитьРезультатЗачетаОплатыИЗакрыть()
Перем МассивОбработанныхДокументов;
ОчиститьСообщения();
Отказ = Ложь;
ЗаписатьИзмененияНаСервере(МассивОбработанныхДокументов, Отказ);
Если ЕстьРасчетыМеждуОрганизациями И МассивОбработанныхДокументов.Количество() > 0
И НЕ СоответствуютЗеркальнымПлатежам(МассивОбработанныхДокументов) Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("МассивОбработанныхДокументов", МассивОбработанныхДокументов);
ДополнительныеПараметры.Вставить("Документ", Документ);
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Провести зачет'"));
СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отказаться'"));
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменен зачет оплат на стороне %1.
|Провести зачет аналогичных платежей на стороне %2?'"), Организация ,Партнер);
ПоказатьВопрос(Новый ОписаниеОповещения("ВыполнитьЗеркальныеИзмененияДокументовЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ТекстВопроса, СписокКнопок);
КонецЕсли;
ОповеститьОРезультатеЗачетаОплаты(МассивОбработанныхДокументов);
Оповестить("ЗачтенаОплата", Документ);
Если Не Отказ Тогда
ПринудительноЗакрытьФорму = Истина;
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьИзмененияНаСервере(МассивОбработанныхДокументов, Отказ)
МассивОбработанныхДокументов = Новый Массив;
УстановитьПривилегированныйРежим(Истина);
МассивТаблиц = Новый Массив;
МассивТаблиц.Добавить("Авансы");
МассивТаблиц.Добавить("Оплаты");
МассивТаблиц.Добавить("Зачтено");
Для Каждого ИмяТаблицы Из МассивТаблиц Цикл
ТаблицаФормы = ЭтаФорма[ИмяТаблицы];
МассивДляЗачетаВНакладную = Новый Массив;
Для Каждого СтрокаТаблицы Из ТаблицаФормы Цикл
Если Не СтрокаТаблицы.ДанныеИзменены Тогда
Продолжить;
КонецЕсли;
НачатьТранзакцию();
Попытка
ИндексСтроки = ТаблицаФормы.Индекс(СтрокаТаблицы);
ПолеОшибки = ИмяТаблицы + "[" + (ИндексСтроки) + "].Документ";
ДанныеДокумента = Новый Структура("Организация, Партнер, Валюта");
ДанныеКор = Новый Структура;
ДанныеКор.Вставить("Партнер");
ДанныеКор.Вставить("ОбъектРасчетов");
ДанныеКор.Вставить("ВалютаВзаиморасчетов");
ДанныеКор.Вставить("Организация");
ДанныеКор.Вставить("Объект");
ДанныеКор.Вставить("Документ");
Суммы = Новый Структура;
Суммы.Вставить("СуммаЗачтено");
Суммы.Вставить("СуммаВВалютеПлатежа");
Суммы.Вставить("СуммаРегл");
Суммы.Вставить("СуммаУпр");
ЗаполнитьЗначенияСвойств(ДанныеДокумента, СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(ДанныеКор, СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(Суммы, СтрокаТаблицы);
ТекстОшибки = "";
Если ИмяТаблицы = "Оплаты"
И НЕ ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов) И НЕ СтрокаТаблицы.РасшифровкаОбъектаРасчетов Тогда
Суммы.СуммаЗачтено = 0;
ОтразитьЗачетОплатыВДокументе(
СтрокаТаблицы.Документ,
ДанныеДокумента,
Суммы,
ПолеОшибки,
ТекстОшибки);
ИначеЕсли ИмяТаблицы = "Авансы" Тогда
Если ЗначениеЗаполнено(СтрокаТаблицы.Документ) Тогда
Суммы.СуммаЗачтено = 0;
ПолеОшибки = ИмяТаблицы + "[" + (ИндексСтроки) + "].ОбъектРасчетов";
ОтразитьЗачетАвансаВДокументе(
СтрокаТаблицы.Документ,
ДанныеКор,
Суммы,
ПолеОшибки,
ТекстОшибки);
КонецЕсли;
ИначеЕсли Не ЗначениеЗаполнено(СтрокаТаблицы.Документ) Тогда
СоздатьВзаимозачетЗадолженности(ДанныеКор, Суммы, ПолеОшибки, ТекстОшибки);
СтрокаТаблицы.Документ = ДанныеКор.Документ;
ИначеЕсли ТипЗнч(СтрокаТаблицы.Документ) = Тип("ДокументСсылка.ВзаимозачетЗадолженности") Тогда
Если ТипЗнч(СтрокаТаблицы.Объект) = Тип("СправочникСсылка.ПодарочныеСертификаты") Тогда
ДанныеКор.Вставить("Партнер", ПредопределенноеЗначение("Справочник.Партнеры.РозничныйПокупатель"));
КонецЕсли;
ОтразитьЗачетАвансаВДокументе(
СтрокаТаблицы.Документ,
ДанныеКор,
Суммы,
ПолеОшибки,
ТекстОшибки);
Иначе
Если ИмяТаблицы = "Оплаты" Тогда
Суммы.СуммаЗачтено = 0;
КонецЕсли;
Если ТипОбъектаРасчетов = Перечисления.ТипыОбъектовРасчетов.Накладная
И ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов)
И СтрокаТаблицы.РасшифровкаОбъектаРасчетов Тогда
ДанныеДляЗачетаВНакладную = Новый Структура("ДанныеДокумента, Суммы, ОбъектРасчетов",
ДанныеДокумента,
Суммы,
СтрокаТаблицы.ОбъектРасчетов);
МассивДляЗачетаВНакладную.Добавить(ДанныеДляЗачетаВНакладную);
Иначе
ОтразитьЗачетОплатыВДокументе(
СтрокаТаблицы.Документ,
ДанныеДокумента,
Суммы,
ПолеОшибки,
ТекстОшибки);
КонецЕсли;
КонецЕсли;
МассивОбработанныхДокументов.Добавить(СтрокаТаблицы.Документ);
ЗафиксироватьТранзакцию();
Исключение
ТекстОшибки = ТекстОшибки + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,ПолеОшибки,,Отказ);
ОтменитьТранзакцию();
КонецПопытки;
КонецЦикла;
Если МассивДляЗачетаВНакладную.Количество() > 0 Тогда
НачатьТранзакцию();
Попытка
ДокументОбъект = Документ.ПолучитьОбъект();
ТекстОшибки = "";
Для Каждого ДанныеДляЗачетаВНакладную Из МассивДляЗачетаВНакладную Цикл
ОтразитьЗачетОплатыВДокументе(Документ,
ДанныеДляЗачетаВНакладную.ДанныеДокумента,
ДанныеДляЗачетаВНакладную.Суммы,
"",
ТекстОшибки,
ДанныеДляЗачетаВНакладную.ОбъектРасчетов,
ДокументОбъект);
КонецЦикла;
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.ДополнительныеСвойства.Вставить("ЗачетОплаты",Истина);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось записать документ %1'"),
Документ);
ВызватьИсключение(ТекстОшибки);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ТекстОшибки = ТекстОшибки + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,,Отказ);
ОтменитьТранзакцию();
КонецПопытки;
КонецЕсли;
КонецЦикла;
Если ТекстОшибки = "" Тогда
Для Каждого Стр Из Зачтено Цикл
Стр.ДанныеИзменены = Ложь;
КонецЦикла;
Для Каждого Стр Из Оплаты Цикл
Стр.ДанныеИзменены = Ложь;
Стр.НесохраненныеДанные = Ложь;
КонецЦикла;
Для Каждого Стр Из Авансы Цикл
Стр.ДанныеИзменены = Ложь;
Стр.НесохраненныеДанные = Ложь;
КонецЦикла;
КонецЕсли;
Если НЕ НоваяАрхитектураВзаиморасчетов и ТекстОшибки = "" Тогда
Запрос = Новый Запрос("
|ВЫБРАТЬ
| АналитикаПоПартнерам.КлючАналитики КАК КлючАналитики
|ИЗ
| РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаПоПартнерам
|ГДЕ
| АналитикаПоПартнерам.Организация В (&Организация)
| И АналитикаПоПартнерам.Партнер В (&Партнер)
| И АналитикаПоПартнерам.Контрагент = &Контрагент
|");
Запрос.УстановитьПараметр("Организация", ДоступныеОрганизации);
Запрос.УстановитьПараметр("Партнер", ДоступныеПартнеры);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
ТаблицаАналитик = Запрос.Выполнить().Выгрузить();
МассивАналитикУчетаПоПартнерам = ТаблицаАналитик.ВыгрузитьКолонку("КлючАналитики");
Если ЕстьРасчетыСКлиентами И МассивАналитикУчетаПоПартнерам.Количество() > 0 Тогда
КонецРасчета = КонецМесяца(ТекущаяДатаСеанса())+1;
АналитикиРасчета = РаспределениеВзаиморасчетовВызовСервера.АналитикиРасчета();
АналитикиРасчета.АналитикиУчетаПоПартнерам = МассивАналитикУчетаПоПартнерам;
РаспределениеВзаиморасчетовВызовСервера.РаспределитьВсеРасчетыСКлиентами(КонецРасчета, АналитикиРасчета);
КонецЕсли;
Если ЕстьРасчетыСПоставщиками И МассивАналитикУчетаПоПартнерам.Количество() > 0 Тогда
КонецРасчета = КонецМесяца(ТекущаяДатаСеанса())+1;
АналитикиРасчета = РаспределениеВзаиморасчетовВызовСервера.АналитикиРасчета();
АналитикиРасчета.АналитикиУчетаПоПартнерам = МассивАналитикУчетаПоПартнерам;
РаспределениеВзаиморасчетовВызовСервера.РаспределитьВсеРасчетыСПоставщиками(КонецРасчета, АналитикиРасчета);
КонецЕсли;
КонецЕсли;
РазблокироватьДокументыДляРедактирования();
Модифицированность = Ложь;
КонецПроцедуры
&НаСервере
Процедура ОтразитьЗачетОплатыВДокументе(ДокументСсылка, ДанныеДокумента, СтруктураСумм, ПолеОшибки, ТекстОшибки, ОбъектРасчетовЗачета = Неопределено, ДокументОбъект = Неопределено)
Если ОбъектРасчетовЗачета = Неопределено Тогда
ОбъектРасчетовЗачета = ОбъектРасчетов;
ЗачетВНакладную = Ложь;
Иначе
ЗачетВНакладную = Истина;
КонецЕсли;
Если ДокументОбъект = Неопределено Тогда
ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
КонецЕсли;
ЭтоАвансовыйОтчет = (ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.АвансовыйОтчет"));
ЭтоВводОстатков = (ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ВводОстатков"));
ЭтоВводОстатковВзаиморасчетов = (ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ВводОстатковВзаиморасчетов"));
Если ЭтоАвансовыйОтчет Тогда
ИмяТабличнойЧасти = "ОплатаПоставщикам";
ИначеЕсли ЭтоВводОстатковВзаиморасчетов Тогда
ИмяТабличнойЧасти = "РасчетыСПартнерами";
ИначеЕсли ЭтоВводОстатков Тогда
Если ЕстьРасчетыМеждуОрганизациями Тогда
ИмяТабличнойЧасти = "РасчетыМеждуОрганизациями";
Иначе
ИмяТабличнойЧасти = "РасчетыСПартнерами";
КонецЕсли;
ИначеЕсли ЗачетВНакладную Тогда
ИмяТабличнойЧасти = ИмяТЧРасшифровкаПлатежа;
Иначе
ИмяТабличнойЧасти = "РасшифровкаПлатежа";
КонецЕсли;
ТаблицаРасшифровкаПлатежа = ДокументОбъект[ИмяТабличнойЧасти].Выгрузить();
Колонки = ТаблицаРасшифровкаПлатежа.Колонки;
Если ТаблицаРасшифровкаПлатежа.Количество() = 0 И ТипОбъектаРасчетов = Перечисления.ТипыОбъектовРасчетов.Накладная Тогда
ЕстьСуммаВзаиморасчетов = ОбщегоНазначения.ЕстьРеквизитОбъекта("СуммаВзаиморасчетов", ДокументОбъект.Метаданные());
Если ДокументОбъект.Проведен Тогда
СуммаВзаиморасчетовДляРасшифровки = ?(ЕстьСуммаВзаиморасчетов, ДокументОбъект.СуммаВзаиморасчетов, ДокументОбъект.СуммаДокумента);
Иначе
СуммаВзаиморасчетовДляРасшифровки = СуммаВзаиморасчетов;
КонецЕсли;
ВзаиморасчетыСервер.ЗаполнитьСуммыРасшифровкиНакладной(ДокументОбъект.СуммаДокумента,
СуммаВзаиморасчетовДляРасшифровки,
ТаблицаРасшифровкаПлатежа,
ОбъектРасчетов);
КонецЕсли;
Если Колонки.Найти("СуммаВзаиморасчетов") = Неопределено Тогда
Колонки.Добавить("СуммаВзаиморасчетов", Новый ОписаниеТипов("Число"));
КонецЕсли;
Если Колонки.Найти("ОбъектРасчетов") = Неопределено Тогда
Колонки.Добавить("ОбъектРасчетов");
КонецЕсли;
Если ЭтоВводОстатков Или ЭтоВводОстатковВзаиморасчетов Тогда
МассивОбъектовРасчетов = ТаблицаРасшифровкаПлатежа.ВыгрузитьКолонку("ОбъектРасчетов");
ТаблицаРасшифровкаПлатежа.ЗагрузитьКолонку(МассивОбъектовРасчетов, "ОбъектРасчетов");
МассивСумм = ТаблицаРасшифровкаПлатежа.ВыгрузитьКолонку("Сумма");
ТаблицаРасшифровкаПлатежа.ЗагрузитьКолонку(МассивСумм, "СуммаВзаиморасчетов");
КонецЕсли;
ЕстьКолонкаПартнер = Ложь;
ЕстьКолонкаПоставщик = Ложь;
СтруктураОтбор = Новый Структура;
Если Колонки.Найти("Партнер") <> Неопределено И (Партнер <> Справочники.Партнеры.НашеПредприятие) Тогда
СтруктураОтбор.Вставить("Партнер", ДанныеДокумента.Партнер);
ЕстьКолонкаПартнер = Истина;
КонецЕсли;
Если Колонки.Найти("Поставщик") <> Неопределено Тогда
СтруктураОтбор.Вставить("Поставщик", ДанныеДокумента.Партнер);
ЕстьКолонкаПоставщик = Истина;
КонецЕсли;
Если Колонки.Найти("Контрагент") <> Неопределено И ТипЗнч(Контрагент) <> Тип("СправочникСсылка.Организации") Тогда
СтруктураОтбор.Вставить("Контрагент", Контрагент);
КонецЕсли;
Если ЭтоВводОстатков Или ЭтоВводОстатковВзаиморасчетов Тогда
СтруктураОтбор.Вставить("ВалютаВзаиморасчетов", ДанныеДокумента.Валюта);
КонецЕсли;
ЕстьОснованиеПлатежа = (Колонки.Найти("ОснованиеПлатежа") <> Неопределено);
Если СтруктураОтбор.Количество() = 0 Тогда
МассивСтрок = Новый Массив;
Для каждого СтрокаРасшифровки Из ТаблицаРасшифровкаПлатежа Цикл
МассивСтрок.Добавить(СтрокаРасшифровки);
КонецЦикла;
Иначе
МассивСтрок = ТаблицаРасшифровкаПлатежа.НайтиСтроки(СтруктураОтбор);
КонецЕсли;
ДанныеИзменены = Ложь;
ПересчитыватьСуммуНДС = (ТаблицаРасшифровкаПлатежа.Колонки.Найти("СуммаНДС") <> Неопределено);
Для Каждого СтрокаДокумента Из МассивСтрок Цикл
Если СтруктураСумм.СуммаЗачтено = 0 Тогда
Если СтрокаДокумента.ОбъектРасчетов = ОбъектРасчетовЗачета Тогда
СтрокаДокумента.ОбъектРасчетов = Неопределено;
Если ЕстьОснованиеПлатежа Тогда
СтрокаДокумента.ОснованиеПлатежа = Неопределено;
КонецЕсли;
Если ПересчитыватьСуммуНДС Тогда
СтрокаДокумента.СтавкаНДС = Неопределено;
СтрокаДокумента.СуммаНДС = 0;
КонецЕсли;
ДанныеИзменены = Истина;
КонецЕсли;
ИначеЕсли СтрокаДокумента.ОбъектРасчетов = ОбъектРасчетовЗачета
Или СтрокаДокумента.ОбъектРасчетов = Договор
Или Не ЗначениеЗаполнено(СтрокаДокумента.ОбъектРасчетов)
Или СтрокаДокумента.ОбъектРасчетов = ОбъектРасчетов И ЗачетВНакладную
Или ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаДокумента.ОбъектРасчетов, "Объект") = ДокументСсылка Тогда
СуммаСтрокиДокумента = СтрокаДокумента.Сумма;
Списано = ВзаиморасчетыСервер.СписатьСуммуПропорционально(СтрокаДокумента.Сумма, СтруктураСумм.СуммаЗачтено, СтрокаДокумента.СуммаВзаиморасчетов);
Если ЗачетВНакладную
ИЛИ ВалютаВзаиморасчетов = СтрокаДокумента.ВалютаВзаиморасчетов Тогда
СписаноВВалютеВзаиморасчетов = ВзаиморасчетыСервер.СписатьСумму(
СтрокаДокумента.СуммаВзаиморасчетов,
СтруктураСумм.СуммаЗачтено);
Иначе
ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаДокумента.СуммаВзаиморасчетов,
Списано,
СуммаСтрокиДокумента);
СписаноВВалютеВзаиморасчетов = СтруктураСумм.СуммаЗачтено;
КонецЕсли;
ДанныеИзменены = Истина;
Если ПересчитыватьСуммуНДС Тогда
СписаноНДС = ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаДокумента.СуммаНДС,
Списано,
СуммаСтрокиДокумента);
КонецЕсли;
Если ЭтоВводОстатков Или ЭтоВводОстатковВзаиморасчетов Тогда
СуммаСписаноРегл = ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаДокумента.СуммаРегл,
Списано,
СуммаСтрокиДокумента);
СуммаСписаноУпр = ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаДокумента.СуммаУпр,
Списано,
СуммаСтрокиДокумента);
КонецЕсли;
Если СуммаСтрокиДокумента <= Списано Тогда
СтрокаОплаты = СтрокаДокумента;
Иначе
СтрокаОплаты = ТаблицаРасшифровкаПлатежа.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаОплаты, СтрокаДокумента);
Если СтрокаДокумента.ОбъектРасчетов = ОбъектРасчетовЗачета Тогда
СтрокаДокумента.ОбъектРасчетов = Справочники.ОбъектыРасчетов.ПустаяСсылка();
Если ЕстьОснованиеПлатежа Тогда
СтрокаДокумента.ОснованиеПлатежа = Неопределено;
КонецЕсли;
КонецЕсли;
ДанныеИзменены = Истина;
КонецЕсли;
СтрокаОплаты.Сумма = Списано;
СтрокаОплаты.СуммаВзаиморасчетов = СписаноВВалютеВзаиморасчетов;
Если ПересчитыватьСуммуНДС Тогда
СтрокаОплаты.СуммаНДС = СписаноНДС;
КонецЕсли;
Если ЭтоВводОстатков Или ЭтоВводОстатковВзаиморасчетов Тогда
СтрокаОплаты.СуммаРегл = СуммаСписаноРегл;
СтрокаОплаты.СуммаУпр = СуммаСписаноУпр;
КонецЕсли;
Если НЕ ЗачетВНакладную
И СтрокаОплаты.ВалютаВзаиморасчетов <> ВалютаВзаиморасчетов Тогда
СтрокаОплаты.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
ДанныеИзменены = Истина;
КонецЕсли;
Если СтрокаОплаты.ОбъектРасчетов <> ОбъектРасчетовЗачета Тогда
СтрокаОплаты.ОбъектРасчетов = ОбъектРасчетовЗачета;
ДанныеИзменены = Истина;
КонецЕсли;
Если ДанныеДокумента.Партнер <> Партнер Тогда
Если ЕстьКолонкаПартнер Тогда
СтрокаОплаты.Партнер = Партнер;
ДанныеИзменены = Истина;
КонецЕсли;
Если ЕстьКолонкаПоставщик Тогда
СтрокаОплаты.Поставщик = Партнер;
ДанныеИзменены = Истина;
КонецЕсли;
КонецЕсли;
Если ЕстьОснованиеПлатежа И Не ЗначениеЗаполнено(СтрокаОплаты.ОснованиеПлатежа) Тогда
СтрокаОплаты.ОснованиеПлатежа = СтрокаОплаты.ОбъектРасчетов;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ДанныеИзменены Тогда
ИменаКолонок = "";
МассивИсключаемыхКолонок = Новый Массив;
МассивИсключаемыхКолонок.Добавить("НомерСтроки");
МассивИсключаемыхКолонок.Добавить("ИдентификаторСтроки");
МассивИсключаемыхКолонок.Добавить("Сумма");
МассивИсключаемыхКолонок.Добавить("СуммаВзаиморасчетов");
МассивИсключаемыхКолонок.Добавить("СуммаРегл");
Для Каждого Колонка Из Колонки Цикл
Если МассивИсключаемыхКолонок.Найти(Колонка.Имя) = Неопределено Тогда
ИменаКолонок = ИменаКолонок + Колонка.Имя + ",";
КонецЕсли;
КонецЦикла;
ИменаКолонок = Лев(ИменаКолонок, СтрДлина(ИменаКолонок) - 1);
ИменаКолонокСуммирования = "Сумма, СуммаВзаиморасчетов";
Если ЭтоВводОстатков Или ЭтоВводОстатковВзаиморасчетов Тогда
ИменаКолонокСуммирования = ИменаКолонокСуммирования + ", СуммаРегл";
КонецЕсли;
ТаблицаРасшифровкаПлатежа.Свернуть(ИменаКолонок, ИменаКолонокСуммирования);
ТаблицаРасшифровкаПлатежа.Сортировать("ОбъектРасчетов");
Если ЭтоВводОстатков Или ЭтоВводОстатковВзаиморасчетов Тогда
МассивОбъектовРасчетов = ТаблицаРасшифровкаПлатежа.ВыгрузитьКолонку("ОбъектРасчетов");
ТаблицаРасшифровкаПлатежа.ЗагрузитьКолонку(МассивОбъектовРасчетов, "ОбъектРасчетов");
МассивСумм = ТаблицаРасшифровкаПлатежа.ВыгрузитьКолонку("СуммаВзаиморасчетов");
ТаблицаРасшифровкаПлатежа.ЗагрузитьКолонку(МассивСумм, "Сумма");
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектРасчетовЗачета, "Дата, Номер");
Для Каждого СтрокаТаблицы Из ТаблицаРасшифровкаПлатежа Цикл
Если ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов)
И Не ЗначениеЗаполнено(СтрокаТаблицы.НомерРасчетногоДокумента) Тогда
СтрокаТаблицы.НомерРасчетногоДокумента = ЗначенияРеквизитов.Номер;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов)
И Не ЗначениеЗаполнено(СтрокаТаблицы.ДатаРасчетногоДокумента) Тогда
СтрокаТаблицы.ДатаРасчетногоДокумента = ЗначенияРеквизитов.Дата;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаТаблицы.ОбъектРасчетов) Тогда
СтрокаТаблицы.НомерРасчетногоДокумента = "";
СтрокаТаблицы.ДатаРасчетногоДокумента = Дата(1,1,1);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ДокументОбъект[ИмяТабличнойЧасти].Загрузить(ТаблицаРасшифровкаПлатежа);
Если Не ЗачетВНакладную Тогда
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.ДополнительныеСвойства.Вставить("ЗачетОплаты",Истина);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось записать документ %1'"),
ДокументСсылка);
ВызватьИсключение(ТекстОшибки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОтразитьЗачетАвансаВДокументе(ДокументВзаимозачета, ДанныеКор, СтруктураСумм, ПолеОшибки, ТекстОшибки)
ДокументОбъект = ДокументВзаимозачета.ПолучитьОбъект();
КорСтруктураСумм = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтруктураСумм);
ОтборЗачета = Новый Структура;
ОтборЗачета.Вставить("ТипРасчетов",
?(ЕстьРасчетыСКлиентами,
Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом,
Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком));
ОтборЗачета.Вставить("Партнер", Партнер);
ОтборЗачета.Вставить("ОбъектРасчетов", ОбъектРасчетов);
ОтборАванса = Новый Структура;
ОтборАванса.Вставить("ТипРасчетов", ОтборЗачета.ТипРасчетов);
ОтборАванса.Вставить("Партнер", ДанныеКор.Партнер);
ОтборАванса.Вставить("ОбъектРасчетов", ДанныеКор.ОбъектРасчетов);
ДебиторскаяЗадолженность = ДокументОбъект.ДебиторскаяЗадолженность.Выгрузить();
МассивСтрок = ДебиторскаяЗадолженность.НайтиСтроки(?(ЕстьРасчетыСКлиентами, ОтборЗачета, ОтборАванса));
Списано = 0;
СуммаРасчетов = 0;
Для Каждого СтрокаДокумента Из МассивСтрок Цикл
Если СтруктураСумм.СуммаЗачтено = 0 Тогда
ДебиторскаяЗадолженность.Удалить(СтрокаДокумента);
Иначе
Если СтруктураСумм.СуммаЗачтено < СтрокаДокумента.СуммаВзаиморасчетов Тогда
Списано = Списано + (СтрокаДокумента.СуммаВзаиморасчетов - СтруктураСумм.СуммаЗачтено);
СтрокаДокумента.СуммаВзаиморасчетов = СтрокаДокумента.СуммаВзаиморасчетов - Списано;
СуммаРасчетов = СуммаРасчетов + СтрокаДокумента.СуммаВзаиморасчетов ;
СтрокаДокумента.СуммаРегл = СтруктураСумм.СуммаРегл;
СтрокаДокумента.СуммаУпр = СтруктураСумм.СуммаУпр;
КонецЕсли;
Если ЕстьРасчетыСКлиентами Тогда
СтрокаДокумента.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
КонецЕсли;
СтруктураСумм.СуммаЗачтено = СтруктураСумм.СуммаЗачтено - СтрокаДокумента.СуммаВзаиморасчетов;
СтруктураСумм.СуммаРегл = СтруктураСумм.СуммаРегл - СтрокаДокумента.СуммаРегл;
СтруктураСумм.СуммаУпр = СтруктураСумм.СуммаУпр - СтрокаДокумента.СуммаУпр;
КонецЕсли;
КонецЦикла;
КредиторскаяЗадолженность = ДокументОбъект.КредиторскаяЗадолженность.Выгрузить();
МассивСтрок = КредиторскаяЗадолженность.НайтиСтроки(?(ЕстьРасчетыСКлиентами, ОтборАванса, ОтборЗачета));
Для Каждого СтрокаДокумента Из МассивСтрок Цикл
Если КорСтруктураСумм.СуммаЗачтено = 0 Тогда
КредиторскаяЗадолженность.Удалить(СтрокаДокумента);
Иначе
СуммаРегл = КорСтруктураСумм.СуммаРегл;
Если КорСтруктураСумм.СуммаРегл < СтрокаДокумента.СуммаРегл Тогда
ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаДокумента.СуммаВзаиморасчетов,
СтрокаДокумента.СуммаРегл - СуммаРегл,
СтрокаДокумента.СуммаРегл);
СтрокаДокумента.СуммаРегл = КорСтруктураСумм.СуммаРегл;
СтрокаДокумента.СуммаУпр = КорСтруктураСумм.СуммаУпр;
Иначе
ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаДокумента.СуммаВзаиморасчетов,
Списано,
СуммаРасчетов);
ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаДокумента.СуммаРегл,
Списано,
СуммаРасчетов);
ВзаиморасчетыСервер.СписатьСуммуПропорционально(
СтрокаДокумента.СуммаУпр,
Списано,
СуммаРасчетов);
КонецЕсли;
КорСтруктураСумм.СуммаРегл = КорСтруктураСумм.СуммаРегл - СтрокаДокумента.СуммаРегл;
КорСтруктураСумм.СуммаУпр = КорСтруктураСумм.СуммаУпр - СтрокаДокумента.СуммаУпр;
ВзаиморасчетыСервер.СписатьСуммуПропорционально(
КорСтруктураСумм.СуммаЗачтено,
СуммаРегл - КорСтруктураСумм.СуммаРегл,
СуммаРегл);
КонецЕсли;
КонецЦикла;
ДокументОбъект.ДебиторскаяЗадолженность.Загрузить(ДебиторскаяЗадолженность);
ДокументОбъект.КредиторскаяЗадолженность.Загрузить(КредиторскаяЗадолженность);
ДокументОбъект.СуммаРегл = ДебиторскаяЗадолженность.Итог("СуммаРегл");
ДокументОбъект.СуммаУпр = ДебиторскаяЗадолженность.Итог("СуммаУпр");
Если КредиторскаяЗадолженность.Количество() = 0
Или ДебиторскаяЗадолженность.Количество() = 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось записать документ %1.'"),
ДокументВзаимозачета);
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
ДокументОбъект.УстановитьПометкуУдаления(Истина);
ТекстОшибки = "";
ИначеЕсли ДокументОбъект.ПроверитьЗаполнение() Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось записать документ %1.'"),
ДокументВзаимозачета);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ТекстОшибки = "";
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось записать документ %1'"),
ДокументВзаимозачета);
ВызватьИсключение(ТекстОшибки);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьВзаимозачетЗадолженности(ДанныеКор, СтруктураСумм, ПолеОшибки, ТекстОшибки)
Сумма = СтруктураСумм.СуммаЗачтено;
ДокументОбъект = Документы.ВзаимозачетЗадолженности.СоздатьДокумент();
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("СправочникСсылка.ДоговорыКонтрагентов"));
МассивТипов.Добавить(Тип("СправочникСсылка.ДоговорыМеждуОрганизациями"));
МассивТипов.Добавить(Тип("ДокументСсылка.ЗаказПоставщику"));
МассивТипов.Добавить(Тип("ДокументСсылка.ЗаказКлиента"));
Если МассивТипов.Найти(ТипЗнч(Документ)) = Неопределено Тогда
ДокументОбъект.Дата = КонецДня(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ, "Дата"));
Иначе
ДокументОбъект.Дата = ТекущаяДатаСеанса();
КонецЕсли;
ДокументОбъект.ДокументОснование = Документ;
ДокументОбъект.Комментарий = НСтр("ru = 'Сформирован автоматически обработкой ""Зачет оплат"".'");
ЗачетПодарочногоСертификата = ТипЗнч(ДанныеКор.Объект) = Тип("СправочникСсылка.ПодарочныеСертификаты");
ДокументОбъект.КонтрагентКредитор = Контрагент;
ДокументОбъект.КонтрагентДебитор = Контрагент;
ТипКонтрагента = Неопределено;
Если ЕстьРасчетыМеждуОрганизациями Тогда
ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.Произвольный;
ТипКонтрагента = ?(ЕстьРасчетыСКлиентами,
Перечисления.ТипыУчастниковВзаимозачета.ОрганизацияКлиент,
Перечисления.ТипыУчастниковВзаимозачета.ОрганизацияПоставщик);
ИначеЕсли ЕстьРасчетыСКлиентами Тогда
Если ДанныеКор.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов Тогда
Если ЗачетПодарочногоСертификата Тогда
ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ОплатаПодарочнымСертификатом;
ДокументОбъект.КонтрагентКредитор = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеКор.ОбъектРасчетов, "Контрагент");
Иначе
ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаОрганизацияКонтрагент;
КонецЕсли;
Иначе
ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.Произвольный;
КонецЕсли;
ТипКонтрагента = Перечисления.ТипыУчастниковВзаимозачета.Клиент;
Иначе
Если ДанныеКор.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов Тогда
ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуОрганизацияКонтрагент;
Иначе
ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийВзаимозачетаЗадолженности.Произвольный;
КонецЕсли;
ТипКонтрагента = Перечисления.ТипыУчастниковВзаимозачета.Поставщик;
КонецЕсли;
Если ДанныеКор.Организация <> Организация Тогда
ДокументОбъект.Организация = ГоловнаяОрганизация;
Иначе
ДокументОбъект.Организация = Организация;
КонецЕсли;
ДокументОбъект.ТипДебитора = ТипКонтрагента;
ДокументОбъект.ТипКредитора = ТипКонтрагента;
ДокументОбъект.СуммаРегл = СтруктураСумм.СуммаРегл;
ДокументОбъект.СуммаУпр = СтруктураСумм.СуммаУпр;
Если ЕстьРасчетыСКлиентами Тогда
СтрокаАванса = ДокументОбъект.ДебиторскаяЗадолженность.Добавить();
СтрокаЗачета = ДокументОбъект.КредиторскаяЗадолженность.Добавить();
Иначе
СтрокаАванса = ДокументОбъект.КредиторскаяЗадолженность.Добавить();
СтрокаЗачета = ДокументОбъект.ДебиторскаяЗадолженность.Добавить();
КонецЕсли;
СтрокаАванса.Организация = Организация;
СтрокаАванса.Партнер = ПартнерДокумента;
СтрокаАванса.ОбъектРасчетов = ОбъектРасчетов;
СтрокаАванса.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
СтрокаАванса.СуммаВзаиморасчетов = Сумма;
СтрокаАванса.СуммаРегл = СтруктураСумм.СуммаРегл;
СтрокаАванса.СуммаУпр = СтруктураСумм.СуммаУпр;
ЗаполнитьЗначенияСвойств(СтрокаЗачета, ДанныеКор);
СтрокаЗачета.СуммаВзаиморасчетов = СтруктураСумм.СуммаВВалютеПлатежа;
СтрокаЗачета.СуммаРегл = СтруктураСумм.СуммаРегл;
СтрокаЗачета.СуммаУпр = СтруктураСумм.СуммаУпр;
ТекстОшибки = НСтр("ru = 'Не удалось создать документ взаимозачета.'");
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ДанныеКор.Документ = ДокументОбъект.Ссылка;
ТекстОшибки = "";
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОРезультатеЗачетаОплаты(МассивОбработанныхДокументов)
Если МассивОбработанныхДокументов.Количество() = 0 Тогда
Текст = НСтр("ru = 'Изменений в зачете оплаты не было'");
Пояснение = НСтр("ru = 'Изменений в документах при зачете оплаты не было'");
ПоказатьОповещениеПользователя(
Текст,
,
Пояснение,
БиблиотекаКартинок.Информация32);
Иначе
Для Каждого ДокументСсылка Из МассивОбработанныхДокументов Цикл
Текст = НСтр("ru = 'Изменен зачет оплаты'");
Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Изменен зачет оплаты по документу: %1'"),
ДокументСсылка);
ПоказатьОповещениеПользователя(
Текст,
ПолучитьНавигационнуюСсылку(ДокументСсылка),
Пояснение,
БиблиотекаКартинок.Информация32);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РазблокироватьДокументыДляРедактирования()
РазблокироватьДанныеДляРедактирования(
,
УникальныйИдентификатор);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Процедура ОбновитьДанныеНаСервере()
РазблокироватьДокументыДляРедактирования();
ПолучитьРеквизитыРасчетовСПартнером();
ЗаполнитьТаблицуПоРасчетамСПартнерами();
КонецПроцедуры
&НаСервере
Процедура РассчитатьСуммуЗачета()
СуммаЗачета = Зачтено.Итог("СуммаЗачтено");
СуммаОтмененныхЗачетов = Оплаты.Выгрузить(Новый Структура("НесохраненныеДанные",Истина)).Итог("ДоступноКЗачету")
+Авансы.Выгрузить(Новый Структура("НесохраненныеДанные",Истина)).Итог("ДоступноКЗачету");
Если КОплатеОстатокПоДоговору Тогда
Если СуммаВзаиморасчетов + СуммаОтмененныхЗачетов> 0 Тогда
Недостает = СуммаВзаиморасчетов + СуммаОтмененныхЗачетов;
Превышение = 0;
Иначе
Недостает = 0;
Превышение = -(СуммаВзаиморасчетов +СуммаОтмененныхЗачетов);
КонецЕсли;
Иначе
Если СуммаЗачета < СуммаВзаиморасчетов Тогда
Недостает = СуммаВзаиморасчетов - СуммаЗачета;
Превышение = 0;
Иначе
Недостает = 0;
Превышение = СуммаЗачета - СуммаВзаиморасчетов;
КонецЕсли;
КонецЕсли;
Если СуммаВзаиморасчетов < 0 Тогда
СуммаКОплате = 0;
Иначе
СуммаКОплате = СуммаВзаиморасчетов + ?(КОплатеОстатокПоДоговору,СуммаОтмененныхЗачетов,0);
КонецЕсли;
Элементы.ИсправитьПревышение.Видимость = (Превышение > 0);
ОбновитьИнформационнуюНадписьИтогов();
КонецПроцедуры
&НаСервере
Процедура ОбновитьИнформационнуюНадписьИтогов()
МассивСтрок = Новый Массив;
Если ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоЗаказамНакладным
И ТипОбъектаРасчетов = Перечисления.ТипыОбъектовРасчетов.Заказ Тогда
ШаблонКОплате = НСтр("ru = 'Сумма аванса к оплате %1 %2.'");
Иначе
ШаблонКОплате = НСтр("ru = 'Сумма к оплате %1 %2.'");
КонецЕсли;
МассивСтрок.Добавить(Новый ФорматированнаяСтрока(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонКОплате,
Формат(СуммаКОплате, "ЧДЦ=2; ЧРД=; ЧН="),
ВалютаВзаиморасчетов)));
МассивСтрок.Добавить(" ");
МассивСтрок.Добавить(Новый ФорматированнаяСтрока(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Зачтено на сумму %1 %2.'"),
Формат(СуммаЗачета, "ЧДЦ=2; ЧРД=; ЧН="),
ВалютаВзаиморасчетов)));
Если Недостает > 0 Тогда
МассивСтрок.Добавить(" ");
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостает %1 %2.'"),
Формат(Недостает, "ЧДЦ=2; ЧРД=; ЧН="),
ВалютаВзаиморасчетов);
МассивСтрок.Добавить(Новый ФорматированнаяСтрока(Текст, , ЦветаСтиля.ПросроченныеДанныеЦвет));
ИначеЕсли Превышение > 0 Тогда
МассивСтрок.Добавить(" ");
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Превышение на %1 %2.'"),
Формат(Превышение, "ЧДЦ=2; ЧРД=; ЧН="),
ВалютаВзаиморасчетов);
МассивСтрок.Добавить(Новый ФорматированнаяСтрока(Текст, , ЦветаСтиля.ПросроченныеДанныеЦвет));
КонецЕсли;
ИнформационнаяНадпись = Новый ФорматированнаяСтрока(МассивСтрок);
КонецПроцедуры
&НаСервере
Процедура СформироватьИнформационнуюНадписьОтборы()
НадписьОтборы = НСтр("ru = '%Организация%, %Партнер%, %Контрагент%, %Договор%, %НаправлениеДеятельности%'");
Если Не ИспользоватьДоговоры Тогда
НадписьОтборы = СтрЗаменить(НадписьОтборы, ", %Договор%", "");
КонецЕсли;
Если ИспользоватьПартнеровКакКонтрагентов Тогда
НадписьОтборы = СтрЗаменить(НадписьОтборы, ", %Контрагент%", "");
КонецЕсли;
Если Не ИспользоватьНесколькоОрганизаций Тогда
НадписьОтборы = СтрЗаменить(НадписьОтборы, "%Организация%,", "");
КонецЕсли;
Если Не ЗначениеЗаполнено(НаправлениеДеятельности) Тогда
НадписьОтборы = СтрЗаменить(НадписьОтборы, ", %НаправлениеДеятельности%", "");
КонецЕсли;
НадписьОтборы = СтрЗаменить(НадписьОтборы,"%Организация%",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Организация: %1'"), Организация));
НадписьОтборы = СтрЗаменить(НадписьОтборы,"%Партнер%",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Партнер: %1'"), Партнер));
НадписьОтборы = СтрЗаменить(НадписьОтборы,"%Контрагент%",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Контрагент: %1'"), Контрагент));
НадписьОтборы = СтрЗаменить(НадписьОтборы,"%Договор%",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Договор: %1'"), Договор));
НадписьОтборы = СтрЗаменить(НадписьОтборы,"%НаправлениеДеятельности%",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Направление деятельности: %1'"), НаправлениеДеятельности));
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборПоДоговорам()
Если Не ИспользоватьДоговоры Или ПоВсемДоговорам = 1 Тогда
Элементы.Авансы.ОтборСтрок = Неопределено;
Иначе
ОтборАвансы = Новый ФиксированнаяСтруктура("Договор", Договор);
Элементы.Авансы.ОтборСтрок = ОтборАвансы;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПересчитатьСуммуВВалютуВзаиморасчетов(Сумма, ИсходнаяВалюта, Знач ДатаКурса = Неопределено)
Если Не ЗначениеЗаполнено(ДатаКурса) Тогда
ДатаКурса = ТекущаяДатаСеанса();
КонецЕсли;
Результат = РаботаСКурсамиВалютУТ.ПересчитатьСуммуДокументаВВалюту(
Сумма, ИсходнаяВалюта, ВалютаВзаиморасчетов, ДатаКурса, ВалютаРегламентированногоУчета);
Возврат Результат;
КонецФункции
&НаСервере
Процедура РасчитатьКоличествоСтрок()
ОплатыКоличествоСтрок = Оплаты.Количество();
Если АвансыРассчитаны Тогда
АвансыКоличествоСтрок = Авансы.Количество();
Иначе
АвансыКоличествоСтрок = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗеркальныеИзмененияДокументовЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
КодОтвета = РезультатВопроса;
Если КодОтвета = КодВозвратаДиалога.Да Тогда
МассивОбработанныхДокументов = ВыполнитьЗеркальныеИзмененияДокументовНаСервере(ДополнительныеПараметры.МассивОбработанныхДокументов);
Если МассивОбработанныхДокументов.Количество() > 0 Тогда
ОповеститьОРезультатеЗачетаОплаты(МассивОбработанныхДокументов);
Оповестить("ЗачтенаОплата", ДополнительныеПараметры.Документ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция СоответствуютЗеркальнымПлатежам(МассивОбработанныхДокументов)
Соответствуют = Истина;
Для Каждого ДокументСсылка Из МассивОбработанныхДокументов Цикл
ЗеркальныйПлатежСсылка = Неопределено;
Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.СписаниеБезналичныхДенежныхСредств") Тогда
ЗеркальныйПлатежСсылка = Документы.СписаниеБезналичныхДенежныхСредств.НайтиЗеркальныйПлатеж(ДокументСсылка);
Если ЗначениеЗаполнено(ЗеркальныйПлатежСсылка) Тогда
Если Не Документы.СписаниеБезналичныхДенежныхСредств.СоответствуетЗеркальномуПлатежу(ДокументСсылка,ЗеркальныйПлатежСсылка) Тогда
Соответствуют = Ложь;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ПоступлениеБезналичныхДенежныхСредств") Тогда
ЗеркальныйПлатежСсылка = Документы.ПоступлениеБезналичныхДенежныхСредств.НайтиЗеркальныйПлатеж(ДокументСсылка);
Если ЗначениеЗаполнено(ЗеркальныйПлатежСсылка) Тогда
Если Не Документы.ПоступлениеБезналичныхДенежныхСредств.СоответствуетЗеркальномуПлатежу(ДокументСсылка,ЗеркальныйПлатежСсылка) Тогда
Соответствуют = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Соответствуют;
КонецФункции
&НаСервереБезКонтекста
Функция ВыполнитьЗеркальныеИзмененияДокументовНаСервере(МассивОбработанныхДокументов)
ОбработанныеДокументы = Новый Массив();
Для Каждого ДокументСсылка Из МассивОбработанныхДокументов Цикл
ЗеркальныйПлатежСсылка = Неопределено;
Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.СписаниеБезналичныхДенежныхСредств") Тогда
ЗеркальныйПлатежСсылка = Документы.СписаниеБезналичныхДенежныхСредств.НайтиЗеркальныйПлатеж(ДокументСсылка);
Если ЗначениеЗаполнено(ЗеркальныйПлатежСсылка) Тогда
ЗеркальныйПлатежОбъект = ЗеркальныйПлатежСсылка.ПолучитьОбъект();
Успешно = Документы.СписаниеБезналичныхДенежныхСредств.ПривестиВСоответствиеЗеркальныйПлатеж(ДокументСсылка,ЗеркальныйПлатежОбъект);
Если Успешно Тогда
ЗеркальныйПлатежОбъект.Записать(РежимЗаписиДокумента.Проведение);
ОбработанныеДокументы.Добавить(ЗеркальныйПлатежОбъект.Ссылка);
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ПоступлениеБезналичныхДенежныхСредств") Тогда
ЗеркальныйПлатежСсылка = Документы.ПоступлениеБезналичныхДенежныхСредств.НайтиЗеркальныйПлатеж(ДокументСсылка);
Если ЗначениеЗаполнено(ЗеркальныйПлатежСсылка) Тогда
ЗеркальныйПлатежОбъект = ЗеркальныйПлатежСсылка.ПолучитьОбъект();
Успешно = Документы.ПоступлениеБезналичныхДенежныхСредств.ПривестиВСоответствиеЗеркальныйПлатеж(ДокументСсылка,ЗеркальныйПлатежОбъект);
Если Успешно Тогда
ЗеркальныйПлатежОбъект.Записать(РежимЗаписиДокумента.Проведение);
ОбработанныеДокументы.Добавить(ЗеркальныйПлатежОбъект.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ОбработанныеДокументы;
КонецФункции
&НаСервере
Процедура УстановитьСтраницуАвансов()
Если АвансыРассчитаны Тогда
Элементы.ГруппаСтраницыАвансы.ТекущаяСтраница = Элементы.СтраницаРаспределениеВыполнено;
Иначе
Элементы.ГруппаСтраницыАвансы.ТекущаяСтраница = Элементы.СтраницаРаспределениеВыполняется;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЕстьЗаданияКРаспределениюВзаиморасчетов(РасчетыСКлиентами, КлючиАналитики)
Если ЕстьРасчетыСКлиентами Тогда
ИмяРегистраЗаданий = "ЗаданияКРаспределениюРасчетовСКлиентами";
Иначе
ИмяРегистраЗаданий = "ЗаданияКРаспределениюРасчетовСПоставщиками";
КонецЕсли;
Запрос = Новый Запрос;
ТекстЗапроса = "
|ВЫБРАТЬ ПЕРВЫЕ 1
| 1 КАК Номер
|ИЗ
| &Таблица КАК Задания
|ГДЕ
| Задания.АналитикаУчетаПоПартнерам В (&КлючиАналитики)
| И Задания.Месяц <= &Месяц";
Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&Таблица", "РегистрСведений." + ИмяРегистраЗаданий);
Запрос.УстановитьПараметр("КлючиАналитики",КлючиАналитики);
Запрос.УстановитьПараметр("Месяц",НачалоМесяца(ТекущаяДатаСеанса()));
Результат = Запрос.Выполнить();
Возврат НЕ Результат.Пустой();
КонецФункции
#КонецОбласти
#КонецОбласти