Как проверить оплачен ли документ ЗаказКлиента?

1. Kstore 09.12.20 15:51 Сейчас в теме
Как правильно проверить оплачен ли заказ клиента на 100% ?
Из дополнительной обработки &НаСервере, если мы имеет доступ к объекту?
Вознаграждение за ответ
Показать полностью
Найденные решения
8. igslepenko 16 14.12.20 13:17 Сейчас в теме +0.1 $m
(1) Я бы сказал, что постановка задачи не полная. Исходные данные, что нужно получить в итоге? Если просто, как у Вас указано, проверка на полную оплату, то (для УТ11.4):
// Возвращает Истина, если заказ оплачен полностью, иначе Ложь
Функция ПроверитьОплатуЗаказаПолную(СсылкаНаЗаказ)
ЗапросОплат = НовыйЗапрос;
ЗапросОплатТекст = "
    |ВЫБРАТЬ
    |    СостоянияЗаказов.ПроцентОплаты КАК ПроцентОплаты
    |ИЗ
    |    РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказов
    |ГДЕ
    |    СостоянияЗаказов.Заказ = &СсылкаНаЗаказ
    |";
ЗапросОплат.УстановитьПараметр("СсылкаНаЗаказ",СсылкаНаЗаказ)
РезультатЗапроса = ЗапросОплат.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
    Если Выборка.ПроцентОплаты = 100 Тогда
        Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;
Иначе
    Возврат Ложь;
КонецЕсли;
КонецФункции
Показать
user1882149; Vyksa; EvgeniyOlxovskiy; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. igslepenko 16 14.12.20 13:17 Сейчас в теме +0.1 $m
(1) Я бы сказал, что постановка задачи не полная. Исходные данные, что нужно получить в итоге? Если просто, как у Вас указано, проверка на полную оплату, то (для УТ11.4):
// Возвращает Истина, если заказ оплачен полностью, иначе Ложь
Функция ПроверитьОплатуЗаказаПолную(СсылкаНаЗаказ)
ЗапросОплат = НовыйЗапрос;
ЗапросОплатТекст = "
    |ВЫБРАТЬ
    |    СостоянияЗаказов.ПроцентОплаты КАК ПроцентОплаты
    |ИЗ
    |    РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказов
    |ГДЕ
    |    СостоянияЗаказов.Заказ = &СсылкаНаЗаказ
    |";
ЗапросОплат.УстановитьПараметр("СсылкаНаЗаказ",СсылкаНаЗаказ)
РезультатЗапроса = ЗапросОплат.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
    Если Выборка.ПроцентОплаты = 100 Тогда
        Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;
Иначе
    Возврат Ложь;
КонецЕсли;
КонецФункции
Показать
user1882149; Vyksa; EvgeniyOlxovskiy; +3 Ответить
9. Kstore 21.12.20 16:18 Сейчас в теме
(8) Спасибо то что нужно
10. igslepenko 16 22.12.20 04:54 Сейчас в теме
(9)Не за что, рад, что помог
2. ilnur75 09.12.20 15:59 Сейчас в теме
открыть отчет карточки расчетов с клиентами.
3. Fril 09.12.20 16:42 Сейчас в теме
Всегда есть документ оплаты, который обычно создается на основании.
Следовательно надо найти документ оплаты у которого в реквизите "Основание" или "документОснование" будет ваш заказ клиента. После чего проверить чтобы суммы были равны.
Бывает что оплата была двумя документами.
Можно проверить если получить подчиненные документы документа ЗаказКлиента
4. harmer 1 09.12.20 17:05 Сейчас в теме
Посмотреть в регистре накопления "Расчеты с клиентами", там в качестве объекта расчетов должен быть указан заказ клиента.
5. Tiger77 69 14.12.20 04:06 Сейчас в теме
Приблизительно так, названия регистров и реквизитов может меняться в зависимости от конфигураций.

Код не оптимальный и очень медленный, но понятный для понимания. Если уточнить задачу (например, что подразумевает "оплаченный" - оплаченный полностью, частично, включать ли "бесплатные"), то код можно оптимизировать...



	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК ОтгрузкаКлиенту,
		|	ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовРасход КАК ОплатаКлиента,
		|	ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК Остаток
		|ИЗ
		|	РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, &КонДата, , , Сделка = &Сделка) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты";
	
	
	Запрос.УстановитьПараметр("Сделка", Сделка);
	Запрос.УстановитьПараметр("КонДата", ТекущаяДата());
	
	
	фЗаказОплачен = Ложь;
	
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
		Если ВыборкаДетальныеЗаписи.Остаток = 0 и ВыборкаДетальныеЗаписи.ОплатаКлиента > 0 Тогда
			ОплатаКлиента = Истина;
		КонецЕсли;
	КонецЕсли;
	
	Если фЗаказОплачен Тогда
		Сообщить("Заказ "+Сделка+" оплачен");
	Иначе
		Сообщить("Заказ "+Сделка+" не оплачен");
	КонецЕсли;


Показать
6. ab_initio 95 14.12.20 05:37 Сейчас в теме
Если это УТ-11, то такой запрос подойдет:

ВЫБРАТЬ
	РасчетыСКлиентамиОстатки.КОплатеОстаток КАК КОплатеОстаток
ИЗ
	РегистрНакопления.РасчетыСКлиентами.Остатки(, ЗаказКлиента = &ЗаказКлиента) КАК РасчетыСКлиентамиОстатки


Если остаток нулевой - оплачен на 100%, если положительный - то это недоплата, отрицательный - переплата.
7. EVKash 15 14.12.20 08:19 Сейчас в теме
(1) Если это УТ11, то есть экспортная процедура в модуле заказа клиента
Документы.ЗаказКлиента.РассчитатьСостояние
// Осуществляет вычисление текущего состояния заказа клиента
//
// Параметры:
//	ЗаказКлиента            - ДокументСсылка.ЗаказКлиента - Документ, состояние которого необходимо вычислить
//	Договор                 - СправочникСсылка.ДоговорыКонтрагентов    - Договор с клиентом
//	СостояниеРасчетов       - ФормаКлиентскогоПриложения - Форма, в реквизиты которой будет помещено рассчитанное состояние.
//
Процедура РассчитатьСостояние(Знач ЗаказКлиента, Знач Договор, СостояниеРасчетов) Экспорт
Показать

Форму в нее передавать не обязательно. Можно передать нужную структуру.
ZDmitry83; onesec; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот