Добрый день!

Задача:
В табличную часть документа (УФ) необходимо добавить дополнительную колонку (только на форму), чтобы при формировании печатной формы печатались только те строки, для которых установлен флаг (колонка булевная). Колонка должна быть дополнительной (только на форме), т.к. не требуется после закрытия сохранения информации о том, по каким строчкам формировалась печатная форма. Пользователь должен при каждом открытии отмечать строки, которые должны попадать в печатную форму.

Проблема:
При установке/снятии флага в новой колонке включается модифицированность формы (если булевный реквизит добавить на форму документа, а не в табличную часть, то модифицированность документа не включается).
Перед формировании печатной формы, крайне желательно сперва проверить и при необходимости сохранить документ, если он изменён. Но при сохранении документа установленные флаги в табличной части слетают (видимо 1с перерисовывает форму и обнуляет колонку, которой нет в БД) (если булевный реквизит добавить на форму документа, а не в табличную часть, то при сохранении документа флаг не слетает). Если сперва сохранить документ, а потом запустить процедуру формирования печатной формы, то все флаги слетят и печать будет нечего.

Вопрос:
Это баг УФ или нужно где-то поставить хитрый флажок?
---
Мне в голову приходит только один шизофренистический костыль

1. Решение проблемы модифицированности.
а) Добавляем дополнительный булевный реквизит «МодифицированностьФормы» (на форму выводить его не надо).
б) В обработчике новой колонки (ПриИзменении) пишем:

```1c
    МодифицированностьФормы = Модифицированность;
```

в) В обработчике (ПередОкончаниемРедактирования) таблицы пишем:

```1c
    Если МодифицированностьФормы = Ложь Тогда
    Модифицированность = Ложь;
    КонецЕсли;
```

2. Решение проблемы сохранения значений в новой колонке при сохранении документа.
а) Добавляем дополнительный реквизит «СписокСФлагами», тип = СписокЗначений (на форму выводить его не надо).
б) В обработчике формы (ПередЗаписью) пишем:

```1c
    СписокСФлагами.Очистить();
    Для каждого СтрТаб Из Объект.НашаТаблица Цикл
    СписокСФлагами.Добавить(СтрТаб.НоваяКолонка);
    КонецЦикла;
```

в) В обработчике формы (ПослеЗаписи) пишем:

```1c
    Для ИндексСписка = 1 По СписокСФлагами.Количество() Цикл

    СтрСписка = СписокСФлагами.Получить(ИндексСписка - 1);
    СтрТаб = Объект.НашаТаблица[ИндексСписка - 1];
    СтрТаб.НоваяКолонка = СтрСписка.Значение;

    КонецЦикла;

    СписокСФлагами.Очистить();
```

Приведённый код пишется в клиентских процедурах. Решение работает, но если кто-нибудь приведёт решение лучше моего костыля, буду благодарен :)
---
можно попробовать через расширение добавить эту колонку, выключить стандартную обработку и установить модифицированность = ложь на событии нажатия на флажок.
---
и установить модифицированность = ложь на событии нажатия на флажок. Вот этого, как раз делать не нужно не в коем случае. Представьте ситуацию, что данные изменились, потом кто то нажал на флажок и закрыл форму. При нажатии на флажок модифицированность сбросится, и форма закроется без уведомления о необходимости сохранении данных. В результате, как минимум, результат работы накроется медным тазом.
---
Мне в голову приходит только один шизофренистический костыль

1. Решение проблемы модифицированности.
а) Добавляем дополнительный булевный реквизит «МодифицированностьФормы» (на форму выводить его не надо).
б) В обработчике новой колонки (ПриИзменении) пишем:

```1c
    МодифицированностьФормы = Модифицированность;
```

в) В обработчике (ПередОкончаниемРедактирования) таблицы пишем:

```1c
    Если МодифицированностьФормы = Ложь Тогда
    Модифицированность = Ложь;
    КонецЕсли;
```

2. Решение проблемы сохранения значений в новой колонке при сохранении документа.
а) Добавляем дополнительный реквизит «СписокСФлагами», тип = СписокЗначений (на форму выводить его не надо).
б) В обработчике формы (ПередЗаписью) пишем:

```1c
    СписокСФлагами.Очистить();
    Для каждого СтрТаб Из Объект.НашаТаблица Цикл
    СписокСФлагами.Добавить(СтрТаб.НоваяКолонка);
    КонецЦикла;
```

в) В обработчике формы (ПослеЗаписи) пишем:

```1c
    Для ИндексСписка = 1 По СписокСФлагами.Количество() Цикл

    СтрСписка = СписокСФлагами.Получить(ИндексСписка - 1);
    СтрТаб = Объект.НашаТаблица[ИндексСписка - 1];
    СтрТаб.НоваяКолонка = СтрСписка.Значение;

    КонецЦикла;

    СписокСФлагами.Очистить();
```

Приведённый код пишется в клиентских процедурах. Решение работает, но если кто-нибудь приведёт решение лучше моего костыля, буду благодарен :)