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