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