|
Модифицированность у объекта при открытии | ☑ | ||
---|---|---|---|---|
0
Rendalina
22.01.15
✎
14:06
|
Понадобилось добавить печатную форму в типовой справочник "Договоры контрагентов" (конфигурация на основе УПП 1.3.58)
Сделала внешнюю печатную форму, добавила код, чтобы кнопки печати появились на форме элемента справочника "Договоры контрагентов". В принципе печатная форма формируется, но перед этим спрашивает "Объект изменен. Для печати его необходимо записать. Записать?" Код печати типовой, проверка на модифицированность тоже типовая из общих модулей типа "Работа с диалогами". Хочется ими воспользоваться без изменений. В модуле формы элемента справочника "Договоры контрагентов" в процедуре "Перед открытием" есть такой типовой код: Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) ЗаполнитьСписокВыбораВидаДоговора(); ЗаполнитьСписокВыбораВедениеВзаиморасчетов(); ЭлементыФормы.ВидДоговора.Значение = ВидДоговора; // вот здесь ЭтотОбъект.Модифицированность() становится ИСТИНА ЭлементыФормы.ВедениеВзаиморасчетов.Значение = ВедениеВзаиморасчетов; КонецПроцедуры Т.е. после того, как отработает процедура "ПередОткрытием", 1С уже считает, что объект модифицировался. При этом сообщение об измененном объекте выходит когда нажимаешь на кнопку "Печать по умолчанию", т.е. которая с названием печатной формы. А если нажать на кнопку "Печать", то выведется список форм, и при выборе той же формы она без всяких ругачек прекрасно формируется, так как там проверка идет на модифицированность формы, а не объекта. Вот теперь сообразить не могу, как сформировать внешнюю печатную форму с минимальными изменениями типового кода? |
|||
1
aka AMIGO
22.01.15
✎
14:11
|
КО - не трогать элементы формы документа/элемента справочника и т.д.
|
|||
2
Адский плющ
22.01.15
✎
14:17
|
ЭлементыФормы.ВидДоговора.Значение = ВидДоговора;
Глубоко. |
|||
3
Fish
22.01.15
✎
14:18
|
(0) А у поля ВидДоговора в свойствах стоит галочка "ИзменяетДанные"? В типовой не стоит.
|
|||
4
Rendalina
22.01.15
✎
14:20
|
(1) А я их не трогаю, они трогаются типовым кодом УПП в процедуре "Перед открытием"
(3) Нет, не стоит, это проверила уже |
|||
5
Fish
22.01.15
✎
14:22
|
(4) Значит, модифицированность возникает не в ЭлементыФормы.ВидДоговора.Значение = ВидДоговора;, а раньше.
|
|||
6
Rendalina
22.01.15
✎
14:42
|
(5) Раньше (на предыдущей строчке) она Ложь, а после Истина, я не знаю, где оно ещё может меняться...
Вообще галочка "Изменяет данные" видимо для других целей нужна: "Изменяет данные — если свойство установлено, то элемент управления непосредственно не связан с данными, но косвенно изменяет их. Самый простой пример - кнопка, по которой что-то вычисляется и на основании этого программно меняются данные объекта, отображаемого в форме. Например, вычислить цену исходя из текущих остатков, планируемых поступлений, расходов, динамики продаж и пр. Более сложный пример - поле ввода, в котором выбираются данные, не связанные с самим объектом, например, настроение начальника. Если настроение хорошее, программно устанавливается одна цена, если настроение плохое - другая цена. Фактически установка этого свойства приводит к тому, что будет "взведена" модифицированность формы и пользователь, просто закрыв окно (отказавшись от редактирования формы), не сможет потерять данные, измененные программно. Система известит его о том, что данные были изменены и предложит записать их или отказаться от записи. Ведь пользователь может и не знать о том, что в результате его действий данные объекта поменялись... " |
|||
7
Fish
22.01.15
✎
14:49
|
(6) "Раньше (на предыдущей строчке) она Ложь, а после Истина" - значит, изменение происходит в процедуре ЗаполнитьСписокВыбораВедениеВзаиморасчетов();
|
|||
8
Rendalina
22.01.15
✎
15:51
|
(7) Нет, после выполнения процедуры ЗаполнитьСписокВыбораВедениеВзаиморасчетов() Модифицированность объекта Ложь,
а вот после ЭлементыФормы.ВидДоговора.Значение = ВидДоговора; Истина. Да и вообще, в этой процедуре просто список выбора формируется, т.е. значения реквизитов формы и объекта не меняются, а просто появляется содержимое выпадающей менюшки. А вот в "подозреваемой" строке меняется Значение элемента формы, связанной с объектом. В принципе, логично, что там появляется модифицированность объекта. Модифицированность формы при этом так же появляется, но она уходит между процедурами "Перед открытием" и "При открытии", а модифицированность объекта - не уходит. Процедура ЗаполнитьСписокВыбораВедениеВзаиморасчетов() СписокВыбора = Новый СписокЗначений; СписокВыбора.Вставить(0, Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом); СписокВыбора.Вставить(1, Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам); СписокВыбора.Вставить(2, Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоСчетам); РаботаСДиалогами.УстановитьСписокПоляВыбора(ЭлементыФормы.ВедениеВзаиморасчетов, СписокВыбора); КонецПроцедуры |
|||
9
Defender aka LINN
22.01.15
✎
16:00
|
"а модифицированность объекта - не уходит" - а должна? Особенно с учетом того, что это метод, а не свойство
|
|||
10
Rendalina
22.01.15
✎
16:17
|
(9) Да наверное и не должна. Просто объект вроде как "не меняли" и я возникновения модифицированности не ожидала... В общем-то это от незнания поведения системы конечно.
Наверное проще всё-таки свою процедуру печати внешней формы на основе типовой добавить, где бы проверялась модифицированность формы. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |