Подробное техническое описание реализованной логики работы с элементом формы "ВидРасчетаСписок", разработанной в рамках задачи CRM4DEV-966. Описание подготовлено для передачи другому программисту и позволяет понять, как работает механизм отображения и сохранения выбранных значений из выпадающего списка (множественный выбор), а также как обеспечивается контроль изменений.

Механизм предназначен для отображения и управления списком выбранных "видов расчёта" в документе "Реализация недвижимости". Он реализует:
ВидРасчетаСписок (тип — список со множественным выбором).✅ Это позволяет гибко управлять финансовыми параметрами договора на основе выбранных типов расчётов.
| Объект | Назначение |
|---|---|
| РегистрСведений.Дев_ВидыРасчетовДоговоров | Хранит связь: Договор → ВидРасчета. |
| Перечисление.Дев_ВидыРасчетов | Содержит список возможных видов расчётов (например, "Аванс", "Оплата по этапам", "Единовременно"). |
Реквизит формы ВидРасчетаСписок | Элемент управления на форме для отображения и редактирования выбранных значений. |
Реквизит формы ВидРасчетаСписокБуфер | Буферная копия ВидРасчетаСписок для сравнения изменений. |
⚠️ Реквизиты
ВидРасчетаСписокиВидРасчетаСписокБуфердолжны быть объявлены на форме как свойства типаСписокЗначений.
ПриСозданииНаСервере)Вызывается процедура:
ЗаполнитьВидРасчетаСписок();
Объект.Ссылка <> Неопределено).Дев_ВидыРасчетовДоговоров:ПараметрыОтбора.Договор = Объект.Ссылка;
ВидРасчета добавляется в ВидРасчетаСписок.ВидРасчетаСписокБуфер.✅ Таким образом, при открытии документа отображаются все ранее сохранённые виды расчётов.
Пользователь может:
Изменения фиксируются только в реквизите ВидРасчетаСписок, а ВидРасчетаСписокБуфер остаётся неизменным до момента сохранения.
ПриЗаписиНаСервере)Если Не ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(ВидРасчетаСписок, ВидРасчетаСписокБуфер) Тогда
ЗаписатьДанныеВидовРасчетаДоговора();
КонецЕсли;
ВидРасчетаСписок) — после редактирования.ВидРасчетаСписокБуфер) — состояние на момент открытия.ЗаписатьДанныеВидовРасчетаДоговора())Процедура выполняет следующие действия:
МенеджерРегистра = РегистрыСведений.Дев_ВидыРасчетовДоговоров;
ТзДляЗаполнения = МенеджерРегистра.ТаблицаЗначенийПараметровДляЗаписиВРегистр();
Формируется новая таблица значений для записи в регистр.
Все текущие значения из ВидРасчетаСписок добавляются в таблицу:
Для Каждого Эл Из ВидРасчетаСписок Цикл
НоваяСтрока = ТзДляЗаполнения.Добавить();
НоваяСтрока.Договор = Объект.Ссылка;
НоваяСтрока.ВидРасчета = Эл.Значение;
КонецЦикла;
Выполняется полная замена данных в регистре:
МенеджерРегистра.ЗаписатьЗначения(ПараметрыЗаписи);
⚠️ Это означает, что все старые записи удаляются, и вместо них создаются новые.
Буфер обновляется:
ВидРасчетаСписокБуфер.Очистить();
ВидРасчетаСписокБуфер.ЗагрузитьЗначения(ВидРасчетаСписок.ВыгрузитьЗначения());
✅ После этого механизм готов к следующему циклу редактирования.
Пользователь открывает документ
↓
ПриСозданииНаСервере()
↓
ЗаполнитьВидРасчетаСписок()
↓
Чтение из Регистра: Дев_ВидыРасчетовДоговоров
↓
Заполнение: ВидРасчетаСписок + ВидРасчетаСписокБуфер
↓
Пользователь редактирует список
↓
ПриЗаписиНаСервере()
↓
Сравнение: ВидРасчетаСписок ≠ ВидРасчетаСписокБуфер?
↓ Да
ЗаписатьДанныеВидовРасчетаДоговора()
↓
Удаление старых записей + создание новых в регистре
↓
Обновление буфера
↓
Документ сохранён
| Функция | Реализовано | Комментарий |
|---|---|---|
| Загрузка значений при открытии | ✅ | Через ЗаполнитьВидРасчетаСписок() |
| Отображение в интерфейсе | ✅ | Через элемент СписокЗначений |
| Контроль изменений | ✅ | Сравнение через СпискиЗначенийИдентичны() |
| Сохранение в регистр | ✅ | Полная перезапись данных |
| Поддержка множественного выбора | ✅ | Работает с массивом значений |
| Обновление буфера после сохранения | ✅ | Гарантирует актуальность состояния |
СписокЗначений.| Направление | Рекомендация |
|---|---|
| Частичное обновление регистра | Сейчас удаляются все записи. Можно реализовать дифф: удалить только исключённые, добавить новые. |
| Журнал изменений | Добавить запись в журнал регистрации при изменении состава. |
| Подтверждение при удалении | Если удаляется важный вид расчёта — спросить подтверждение. |
| Валидация набора | Проверять, что выбран хотя бы один обязательный вид расчёта. |
| Расшифровка в отчётах | Создать СКД-отчёт по видам расчётов по договорам. |
Сценарий:
Пользователь открыл договор №100 на реализацию квартиры.
В регистре есть записи:
При открытии они отобразились в поле "Виды расчётов".
Пользователь убрал "Оплата по этапам", добавил "Единовременно".
При сохранении:
Дев_ВидыРасчетовДоговоров.Реализованный механизм — надёжное и гибкое решение для управления множественными ссылками в документе. Он соответствует лучшим практикам 1С:
✅ Документ подготовлен так, чтобы новый программист мог:
- Понять логику без чтения кода.
- Безопасно доработать функционал.
- Перенести подход на другие объекты.