При разработке отчетов или внешних обработок в 1С:Управление торговлей 11.5 часто возникает задача вывести текущий статус оплаты документа Реализация товаров и услуг. Пользователи привыкли видеть в интерфейсе документа информационную строку «Оплачено: XX RUB 100%». Однако попытка получить эти данные простым запросом к Регистрам накопления часто заводит разработчиков в тупик. Давайте разберем, почему это происходит и как правильно подойти к решению данной задачи.
Первое, что необходимо осознать: в 1С:УТ 11 информация об оплате не хранится в виде простого поля «Процент оплаты» внутри документа. Эта величина является вычисляемой. Система динамически рассчитывает состояние взаиморасчетов, опираясь на целый ряд факторов:
РасчетыСКлиентами и РасчетыСКлиентамиПоДокументам), данные в которых могут отличаться в зависимости от настроек системы.Вместо того чтобы писать сложный запрос, который будет ломаться при каждой смене методики учета на проекте, рекомендуем воспользоваться типовым подходом, заложенным разработчиками 1С. Рассмотрим, как это реализовано в системе.
Типовые механизмы конфигурации инкапсулированы в общие модули. Чтобы получить статус оплаты для Реализация товаров и услуг, обратимся к функциям подсистемы «Взаиморасчеты». При анализе кода формы документа вы обнаружите, что для отображения процента оплаты вызываются методы, которые анализируют остатки по регистрам взаиморасчетов в разрезе документа-регистратора.
Для решения вашей задачи выполните следующие шаги:
РасчетыСКлиентами или РасчетыСКлиентамиПоДокументам.Взаиморасчеты или РасчетыСКлиентамиСервер. Именно там находятся функции, возвращающие структуру данных о состоянии расчетов.Вместо прямого запроса используйте вызов функции, подобной этой (название функции может отличаться в зависимости от релиза):
// Примерный алгоритм получения данных
СтруктураПараметров = Новый Структура("ДокументСсылка", СсылкаНаРТУ);
РезультатРасчетов = ВзаиморасчетыСервер.ПолучитьСостояниеРасчетовПоДокументу(СтруктураПараметров);
// Полученные данные содержат процент оплаты, сумму задолженности и статус
ПроцентОплаты = РезультатРасчетов.ПроцентОплаты;
Разработчики 1С уже учли все возможные «подводные камни» в расчетах: операции сторнирования, валютные разницы, особенности отражения оплат по эквайрингу и многое другое. Если вы напишете собственный запрос к Регистру накопления, вы почти гарантированно упустите какой-либо из этих аспектов, что приведет к неверным данным в ваших отчетах.
Таким образом, лучший способ получить информацию — это делегировать вычисление типовым функциям платформы. Это обеспечит корректность данных, единообразие с типовым интерфейсом и стабильность вашей разработки при обновлении конфигурации.