Колонка «процент оплаты» в списке реализаций 1С: три способа без переписывания конфигурации
Что считать «процентом оплаты»
Базовая логика одинакова для любой конфигурации: процент оплаты = сумма поступлений по документу-основанию, делённая на сумму реализации, умноженная на 100. Спор только в том, где брать поступления:
- В БП 3.0 — через сальдо счёта 62 «Расчёты с покупателями» в разрезе документа-основания (субконто «Документ расчётов с контрагентом»).
- В УТ 11 / ERP — через регистры расчётов с клиентами в разрезе документа-сделки.
- В нетиповой конфигурации — через тот регистр, в котором ваша команда ведёт расчёты с покупателями.
Имена объектов в примерах ниже даны под БП 3.0; в УТ / ERP / нетиповых их нужно заменить на свои. Логика остаётся той же.
Три способа добавить колонку
| Способ | Где живёт | Кому подходит | Минусы |
|---|---|---|---|
| 1. Пользовательская настройка формы | Только у пользователя, без правки конфигурации | Когда нужно «себе» одному менеджеру; не требует прав конфигуратора | Не делится с коллегами, не переживает обновления настроек пользователя |
| 2. Дополнительный реквизит через БСП | В подсистеме «Свойства» / «Дополнительные реквизиты» | Когда нужно для группы пользователей и обновлять конфигурацию не хочется | Значение не пересчитывается автоматически — нужна процедура заполнения |
| 3. Расширение конфигурации | Файл .cfe рядом с конфигурацией | Когда нужно «для всех», централизованно, на годы | Требует осторожности при обновлениях — расширение может «отвалиться» от формы |
Способ 1 — за пять минут
В режиме пользователя: «Ещё → Изменить форму → Поля → Добавить поле → выбрать реквизит». Если в реквизитах списка нет готового «процент оплаты», его в этом режиме не сделать — этот способ работает только когда колонка уже посчитана где-то ниже.
Поэтому Способ 1 — это либо «настройка существующей колонки», либо мостик, после которого вы всё равно идёте в Способ 2 или 3.
Способ 2 — дополнительный реквизит, заполняемый по событию
Работает при двух условиях: в конфигурации развёрнута подсистема БСП «Свойства / Дополнительные реквизиты и сведения», и для документа реализации включена возможность хранить дополнительные реквизиты (НСИ и администрирование → Общие настройки → Дополнительные реквизиты). Если хотя бы одно условие не выполнено — переходите к Способу 3.
Завести дополнительный реквизит «Процент оплаты» у документа реализации, тип — Число. Заполнять его — подпиской на событие записи документов поступлений (поступление на расчётный счёт, приходный кассовый ордер) и самой реализации:
// Псевдокод подписки на ПриЗаписи документа поступления
Процедура ОбновитьПроцентОплаты(ДокументРеализации) Экспорт
СуммаДокумента = ДокументРеализации.СуммаДокумента;
Если СуммаДокумента = 0 Тогда
Возврат;
КонецЕсли;
СуммаОплат = РасчетыСПокупателями.ПолучитьСуммуОплат(ДокументРеализации);
Процент = Окр(СуммаОплат / СуммаДокумента * 100, 2);
// Запись через стандартный механизм БСП
УправлениеСвойствами.ЗаписатьЗначениеСвойства(
ДокументРеализации,
ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПроцентОплаты,
Процент);
КонецПроцедуры
В реальной конфигурации имена объектов будут другими: РасчетыСПокупателями — это абстрактное имя вашего общего модуля. Где именно брать сумму оплат — зависит от конфигурации:
- БП 3.0: запрос к виртуальной таблице
РегистрБухгалтерии.Хозрасчетный.Оборотыпо счёту 62 «Расчёты с покупателями», с фильтром по субконто «Документы расчётов с контрагентом» = ваш документ реализации. Сумма оборота по кредиту счёта 62 в разрезе этого субконто — и есть сумма оплат. Точные имена субконто (Субконто1/2/3) проще всего набрать в конструкторе запросов. - УТ 11 / ERP: запрос к регистру накопления взаиморасчётов с клиентами в разрезе документа-сделки.
- Нетиповая: тот регистр, в котором у вас ведутся расчёты с покупателями. Если такого регистра нет — это отдельный архитектурный разговор, не покрываемый этой статьёй.
На больших списках (сотни–тысячи строк) не считайте процент оплаты «на лету» через вычисляемое поле формы — открытие списка заметно замедлится. Если же список почти всегда отфильтрован до десятков строк («мои за сегодня», «один контрагент»), вычисляемое поле остаётся самым дешёвым вариантом — без подписок и расширения. В остальных случаях лучше посчитать один раз при записи и хранить готовое число.
Способ 3 — расширение конфигурации с подпиской
В Конфигураторе создайте расширение (.cfe), добавьте в него реквизит «ПроцентОплаты» в документ реализации и подписку «ПриЗаписи» на документы платежей. В обработчике подписки — тот же расчёт, что в Способе 2, только без БСП-обвязки: вы просто пишете значение в реквизит документа.
В формах списка, которые система генерирует автоматически, колонка появится сама — её останется только добавить через редактор формы. Для переопределённых форм (АРМ менеджера, специальный журнал документов) расширения формы списка нужно делать отдельно: расширение реквизита само в чужую форму не вставится.
Чек-лист внедрения
- Определите, в какой конфигурации работаете (БП 3.0 / УТ 11 / ERP / нетиповая) и где у вас хранятся расчёты с покупателями.
- Выберите способ из таблицы — для большинства команд это Способ 3 (расширение).
- Создайте реквизит «ПроцентОплаты» типа Число(5,2) у документа реализации.
- Напишите функцию расчёта суммы оплат по документу-основанию — это самая важная часть, проверьте её на 5–10 реальных документах.
- Сделайте подписку «ПриЗаписи» на документы поступления денежных средств — они будут триггерить пересчёт.
- Сделайте отдельную обработку «Пересчитать процент оплаты» для группы документов — пригодится при первичном заполнении и после обновлений.
- Добавьте колонку в форму списка через редактор формы расширения.
- Протестируйте: создайте реализацию на 1000 ₽, проведите оплату на 600 ₽, убедитесь, что в списке появилось «60.00».
Типичные ошибки
- Расчёт на лету в списке. Вычисляемое поле формы пересчитывает все строки при каждой прокрутке. На тысячах строк интерфейс «зависает».
- Хардкод имён конкретной конфигурации. Если перенести расширение с БП на УТ, отвалится: имена регистров и реквизитов отличаются. Делайте функцию-обёртку «получить сумму оплат», локализующую конфигурационную специфику.
- Подписка только на реализацию. Тогда при записи платежа процент не пересчитается. Подписка должна быть на документы поступления, а триггерить пересчёт нужно у документа-основания.
- Деление без проверки на ноль. Документ реализации с нулевой суммой (черновик, тестовая запись) сломает расчёт. Всегда защищайте делитель.
- Забыли про предоплаты. В БП и УТ предоплата (оплата до отгрузки) учитывается особым образом. Решите сразу: учитываете её в проценте или нет, и зафиксируйте это в комментарии к функции расчёта.
- Колонка только на одной форме списка. В типовой конфигурации форм с реализациями может быть несколько (общий список, рабочее место менеджера, журнал документов). Проверьте все и добавьте колонку везде, где она нужна.
Перейти в каталог решений →