Дополнительная колонка в табличной части документа и модифицированность

1. Alexander-K 06.12.17 15:31 Сейчас в теме
Добрый день!

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

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

Вопрос:
Это баг УФ или нужно где-то поставить хитрый флажок?
По теме из базы знаний
Найденные решения
4. Alexander-K 06.12.17 22:11 Сейчас в теме
Мне в голову приходит только один шизофренистический костыль

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

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

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

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

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

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

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

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

Приведённый код пишется в клиентских процедурах. Решение работает, но если кто-нибудь приведёт решение лучше моего костыля, буду благодарен :)
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. maks_20 164 06.12.17 18:57 Сейчас в теме
можно попробовать через расширение добавить эту колонку, выключить стандартную обработку и установить модифицированность = ложь на событии нажатия на флажок.
3. ger_kar 06.12.17 19:38 Сейчас в теме
(2)
и установить модифицированность = ложь на событии нажатия на флажок.
Вот этого, как раз делать не нужно не в коем случае. Представьте ситуацию, что данные изменились, потом кто то нажал на флажок и закрыл форму. При нажатии на флажок модифицированность сбросится, и форма закроется без уведомления о необходимости сохранении данных. В результате, как минимум, результат работы накроется медным тазом.
4. Alexander-K 06.12.17 22:11 Сейчас в теме
Мне в голову приходит только один шизофренистический костыль

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

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

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

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

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

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

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

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

Приведённый код пишется в клиентских процедурах. Решение работает, но если кто-нибудь приведёт решение лучше моего костыля, буду благодарен :)
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)