|
Подскажите по процедурам при изменениях полей в табличной части документа. |
☑ |
0
Начинающий Программер
25.08.11
✎
12:13
|
Создал документ в 8.1 по внесению данных о зарплате, с одной табличной частью, со следующими полями (полей больше, но приведу ключевые):
1. Сотрудник
2. Оклад
3. Дни по норме
4. Дни по факту
5. Итого оклад
6. Больничный
7. Итого начислено.
В каждое поле прикрутил процедуру в событие "ПриИзменении" в свойствах реквизита формы. Например в окладе:
Процедура ТабличнаяЧастьОкладПриИзменении(Элемент)
ТД = ЭлементыФормы.ТабличнаяЧасть.ТекущиеДанные;
Если ТД.ДниНорма<>0 Тогда
ТД.ИтогоНачисленоПоОкладу = Окр(ТД.Оклад*(ТД.ДниФакт/ТД.ДниНорма), 2);
Сообщить("ТабличнаяЧастьОкладПриИзменении");
КонецЕсли;
КонецПроцедуры
Тут всё работает.
Дальше, в поле Итого Оклад ставлю процедуру:
Процедура ТабличнаяЧастьИтогоНачисленоПоОкладуПриИзменении(Элемент)
ТД = ЭлементыФормы.ТабличнаяЧасть.ТекущиеДанные;
ТД.ИтогоНачислено = ТД.ИтогоНачисленоПоОкладу + ТД.Больничные + ТД.Отпускные;
Сообщить("ТабличнаяЧастьИтогоНачисленоПоОкладуПриИзменении");
КонецПроцедуры
А вот теперь, когда меняю значение оклада, изменяется только поле "Итого оклад". Если же это поле изменять вручную - то только тогда начинает работать процедура ТабличнаяЧастьИтогоНачисленоПоОкладуПриИзменении() и изменяется поле "Итого начислено". Правильно ли я понимаю, что событие "ПриИзменении" рабьотает только для ручных изменений, но не для программных? И какие приемы тогда применять, если я хочу, чтобы при изменении одного поля изменялись и другие поля, в том числе через вызовы отдельных процедур?
|
|
1
Wobland
25.08.11
✎
12:16
|
>событие "ПриИзменении" рабьотает только для ручных изменений, но не для программных
да
>И какие приемы тогда применять
изменять другие поля
|
|
2
Начинающий Программер
25.08.11
✎
12:18
|
(1) То есть в первой процедуре писать изменения для всех полей?
|
|
3
Wobland
25.08.11
✎
12:20
|
(2) код не читал, но мыслишь верно, похоже.
// я себе не могу представить такого, чтобы ожидать вызов события при присвоении
|
|
4
Начинающий Программер
25.08.11
✎
12:22
|
(3) А почему бы нет? Значение поля-то меняется?
|
|
5
Wobland
25.08.11
✎
12:30
|
я понимаю, когда какие-нибудь поля ввода начинают сообщения слать. но чтобы область памяти...
|
|
6
Начинающий Программер
25.08.11
✎
12:39
|
(5) Область памяти - это что именно? В данном случае же ведь поле именно видимо изменяется, практически то же самое, что если и вручную вводить. На мой взгляд первого месяца программирования в восьмерке вполне логично:-)
|
|
7
Wobland
25.08.11
✎
12:50
|
(6) Область памяти - кусок памяти, в который пишется/из которого читается значение поля. пока не записано в базу. а ввод вручную подразумевает взаимодействие с элементом управления
|
|