Имя: Пароль:
1C
1С v8
Двойной вызов обработки проведения
0 YurAnt
 
07.07.13
01:40
Доброго времени суток всем.
Проблема следующая при проведении документа вываливается ошибка что документ (периодичность проведения = мес) не может быть проведен поскольку запись с такими ключевыми полями существует.
Отладчиком обнаружил что после того, как проходится вся процедура проведения, она вызывается снова... что похоже и вызывает ошибку.
http://s1.ipicture.ru/uploads/20130707/83VC3VBq.png
Ни на форме, ни в объекте нет процедур а ля: ПриЗаписи(), ПриЗакрытии()

Обработка проведения создана конструктором (док осуществляет движение по 3м регистрам сведений)

Процедура ОбработкаПроведения(Отказ, Режим)
   //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   // регистр РегистрРасчетаЗаработнойПлаты
   Движения.РегистрРасчетаЗаработнойПлаты.Записывать = Истина;
   Движения.РегистрРасчетаЗаработнойПлаты.Очистить();
   Для Каждого ТекСтрокаРасчетЗП Из РасчетЗП Цикл
       Движение = Движения.РегистрРасчетаЗаработнойПлаты.Добавить();
       Движение.Период = ЭтотОбъект.Дата;
       Движение.РасчетЗаработнойПлаты = ЭтотОбъект.Ссылка;
       Движение.ОбъемПоДоговоруИтого = ОбъемПоДоговоруИтого;
       Движение.КомУслИтого = КомУслИтого;
       Движение.КомандирИтого = КомандирИтого;
       Движение.ОбъемДляНачислЗПИтого = ОбъемДляНачислЗПИтого;
       Движение.ОбъемПоНЗаказамИтого = ОбъемПоНЗаказамИтого;
       Движение.ВТЧКоэффицентИтого = ВТЧКоэффицентИтого;
       Движение.ВТЧЗарплатаИтого = ВТЧЗарплатаИтого;
       Движение.РасчетЗПУправление = ТекСтрокаРасчетЗП.Управление;
       Движение.РасчетЗПОбъемПоДоговору = ТекСтрокаРасчетЗП.ОбъемПоДоговору;
       Движение.РасчетЗПКомУсл = ТекСтрокаРасчетЗП.КомУсл;
       Движение.РасчетЗПКомандир = ТекСтрокаРасчетЗП.Командир;
       Движение.РасчетЗПОбъемДляНачислЗП = ТекСтрокаРасчетЗП.ОбъемДляНачислЗП;
       Движение.РасчетЗПОбъемПоНЗаказам = ТекСтрокаРасчетЗП.ОбъемПоНЗаказам;
       Движение.РасчетЗПВТЧКоэффицент = ТекСтрокаРасчетЗП.ВТЧКоэффицент;
       Движение.РасчетЗПВТЧЗарплата = ТекСтрокаРасчетЗП.ВТЧЗарплата;
   КонецЦикла;

   // регистр РегистрРасчетаЗаработнойПлатыКомУсл
   Движения.РегистрРасчетаЗаработнойПлатыКомУсл.Записывать = Истина;
   Движения.РегистрРасчетаЗаработнойПлатыКомУсл.Очистить();
   Для Каждого ТекСтрокаКомУсл Из КомУсл Цикл
       Движение = Движения.РегистрРасчетаЗаработнойПлатыКомУсл.Добавить();
       Движение.Период = ЭтотОбъект.Дата;
       Движение.РасчетЗаработнойПлаты = ЭтотОбъект.Ссылка;
       Движение.КомУслУправление = ТекСтрокаКомУсл.Управление;
       Движение.КомУслЭлектроэнергияОсвещение = ТекСтрокаКомУсл.ЭлектроэнергияОсвещение;
       Движение.КомУслТеплоэнергия = ТекСтрокаКомУсл.Теплоэнергия;
       Движение.КомУслГазПриродный = ТекСтрокаКомУсл.ГазПриродный;
       Движение.КомУслИнтернет = ТекСтрокаКомУсл.Интернет;
       Движение.КомУслСвязь = ТекСтрокаКомУсл.Связь;
       Движение.КомУслСотСвязь = ТекСтрокаКомУсл.СотСвязь;
       Движение.КомУслСпецпитаниеЗаТекМесяц = ТекСтрокаКомУсл.СпецпитаниеЗаТекМесяц;
       Движение.КомУслШтраф = ТекСтрокаКомУсл.Штраф;
       Движение.Итого = ТекСтрокаКомУсл.Итого;
   КонецЦикла;

   // регистр РегистрРасчетаЗаработнойПлатыМолоко
   Движения.РегистрРасчетаЗаработнойПлатыМолоко.Записывать = Истина;
   Движения.РегистрРасчетаЗаработнойПлатыМолоко.Очистить();
   Для Каждого ТекСтрокаМолоко Из Молоко Цикл
       Движение = Движения.РегистрРасчетаЗаработнойПлатыМолоко.Добавить();
       Движение.Период = ЭтотОбъект.Дата;
       Движение.РасчетЗаработнойПлаты = ЭтотОбъект.Ссылка;
       Движение.СпецжирыПодразделения = ТекСтрокаМолоко.Подразделения;
       Движение.СпецжирыЗатратыНаСпецжиры = ТекСтрокаМолоко.ЗатратыНаСпецжиры;
       Движение.СпецжирыИтого = СпецжирыИтого;
   КонецЦикла;

   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Думал проблемы с периодичностью (месяц), выставлял непереодический - толку ноль.
Не могу понять что вызывает такое поведение...
1 sanja26
 
07.07.13
03:12
проводишь программно через записать()?
Посмотри еще подписки
2 Web00001
 
07.07.13
04:46
Глупый вопрос. какой обработчик на кнопке ОК?
3 Defender aka LINN
 
07.07.13
08:33
(0) Ну у тебя ж там реально 2 строки одинаковых
4 YurAnt
 
07.07.13
10:15
(1) В модуле формы/объекта все чисто...
Проблема если я все правильно понимаю растет из того, что обработка проведения вызывается 2 раза...
PS построено конструктором

В общих подписках тоже не сильно ясно что искать, поскольку документ опять же новый (сам создавал) и разумеется, чего либо относящегося к данному типу документов быть не может.

(2) Дописанных своих из модуля формы/объекта нет никаких,
На ЗАПИСАТЬ - висит действие записать, на ОК - записать и закрыть.

(3) Defender aka LINN, что значит 2 строки одинаковых?поясните...
Если вы о строках таблицы на скрине, то даже если там 1 строка будет, эффект будет тот же.
5 YurAnt
 
07.07.13
10:24
Лол... костыль вида - первый раз попали изменили счетчик, и больше сюда не заходим.

   Если Сч = 0 Тогда
       Сч = 1;
               ...тут весь конструктор описанный выше...
       КонецЕсли;

Ну конечно решение в лоб и причина остается, но в этом случае документ проводится.
6 YurAnt
 
07.07.13
10:28
+ на периодичность регистра теперь 0 внимания...((
7 YurAnt
 
07.07.13
10:36
так... теперь всё совсем плохо. Регистры перестали обращать внимание на периодичность(
Разбираюсь дальше...
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший