Имя: Пароль:
1C
1С v8
Подскажите по процедурам при изменениях полей в табличной части документа.
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) Область памяти - кусок памяти, в который пишется/из которого читается значение поля. пока не записано в базу. а ввод вручную подразумевает взаимодействие с элементом управления