Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 15:41

Как правильно написать запрос?

Автор Yamuna, 19 июл 2019, 15:29

0 Пользователей и 1 гость просматривают эту тему.

Yamuna

ДОбрый день! Может кто нибудь сможет помочь написать запрос, вот задание:
Пропишите движение документов «Приходный кассовый ордер» и «Поступление безналичных денежных средств» по регистру «Взаиморасчеты с контрагентами». При этом для формирования движений контрагент должен браться из шапки документа, а договор должен определяться по состоянию остатков задолженности и сначала должна списываться задолженность по договору с более ранней датой исполнения. Например, были выполнены отгрузки:

ТОО «Хороший покупатель», договор№1(01.02.2019) на сумму 50 000 тенге
ТОО «Хороший покупатель», договор№2(15.03.2019) на сумму 80 000 тенге
и в документе указана сумма оплаты 80 000 тенге.

Тогда сначала необходимо списать задолженность по договору №1 (50 000 тенге), а затем часть задолженности по договору №2 (30 000 тенге).

В случае, если указанная в документах оплаты сумма больше всех задолженностей по всем договорам должно быть выдано соответствующее предупреждение пользователю и документы проводится не должны.
Вот что я сделал :

Процедура ОбработкаПроведения(Отказ, Режим)

// регистр ДенежныеСредства Приход
Движения.ДенежныеСредства.Записывать = Истина;
Движение = Движения.ДенежныеСредства.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.КассаРасчетныйСчет = Касса;
Движение.Сумма = Сумма;

Если НЕ ВводНачальныхОстатков Тогда


Движения.ВзаиморасчетыСКонтрагентами.Записать();


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентамиОстатки.Договор КАК Договор,
| ПриходныйКассовыйОрдер.Сумма КАК СуммаДок,
| ВзаиморасчетыСКонтрагентамиОстатки.СуммаОстаток КАК СуммаОстаток,
| ВзаиморасчетыСКонтрагентамиОстатки.Контрагент КАК Контрагент
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Момент, ) КАК ВзаиморасчетыСКонтрагентамиОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
| ПО (ПриходныйКассовыйОрдер.Контрагент = ВзаиморасчетыСКонтрагентамиОстатки.Контрагент)
|ГДЕ
| ПриходныйКассовыйОрдер.Ссылка = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| ВзаиморасчетыСКонтрагентамиОстатки.Договор.ДатаИсполнения
|ИТОГИ
| МАКСИМУМ(СуммаДок),
| СУММА(СуммаОстаток)
|ПО
| Контрагент";

Запрос.УстановитьПараметр("Момент", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДоговор = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДоговор.Следующий() Цикл
// Вставить обработку выборки ВыборкаДоговор
Если ВыборкаДоговор.СуммаДок > ВыборкаДоговор.СуммаОстаток Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Сумма в документе "+ВыборкаДоговор.СуммаДок+" превышает сумму задолжности.Реально надо "+ВыборкаДоговор.СуммаОстаток;
Сообщение.Сообщить();

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

КонецПроцедуры

это выгрузка  https://yadi.sk/d/zA8iPTIROsPEqg


wise

ДОЛГО описывать... посмотри...
http://www.itland.ru/forum/index.php?showtopic=18168

спроси у яндекса: "запрос задолженность на сумму 1С"
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск