|
Подписка на событие при изменении регистра бухгалтерии. | ☑ | ||
---|---|---|---|---|
0
Kelleron
23.05.16
✎
17:29
|
Добрый день. БП 3.0. Сделал подписку на событие при записи в регистр бухгалтерии, чтобы делались записи по взаиморасчетам с контрагентами в добавленный регистр. Запись в регистр происходит через раз. Провели док, делающий движения в регистр бухгалтерии первый раз - проводки в новый регистр записались. Перепровели - проводки исчезли. Если отменить проведение и провести - отрабатывает. Привожу код общего модуля:
Процедура АТБ_ЗаписатьВзаиморасчётыСКонтрагентамиВРегистр(Источник, Отказ) Экспорт УстановитьПривилегированныйРежим(Истина); РегистрыНакопления.АТБ_ВзаиморасчетыСКонтрагентами.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Источник.Отбор.Регистратор.Значение); ВзаиморасчетыСКонтрагентами.Записывать = Истина; Для Каждого стр из Источник Цикл Если стр.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСРозничнымиПокупателями Тогда Движение = Набор.Добавить(); Движение.ВидДвижения=ВидДвиженияНакопления.Приход; Движение.Регистратор = Источник.Отбор.Регистратор.Значение; Движение.Контрагент = Источник.Отбор.Регистратор.Значение.Контрагент; Движение.Договор = Источник.Отбор.Регистратор.Значение.ДоговорКонтрагента; Движение.Сумма = стр.Сумма; Движение.Период = стр.Период; ИначеЕсли стр.СчетКт = ПланыСчетов.Хозрасчетный.РасчетыСРозничнымиПокупателями Тогда Движение = Набор.Добавить(); Движение.ВидДвижения=ВидДвиженияНакопления.Расход; Движение.Регистратор = Источник.Отбор.Регистратор.Значение; Движение.Контрагент = Источник.Отбор.Регистратор.Значение.Контрагент; Движение.Договор = Источник.Отбор.Регистратор.Значение.ДоговорКонтрагента; Движение.Сумма = стр.Сумма; Движение.Период = стр.Период; КонецЕсли; КонецЦикла; Набор.Записать(Истина); УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры Помогите, пожалуйста, уже не знаю куда копать. |
|||
1
Лефмихалыч
23.05.16
✎
17:32
|
ты внутри подписки ПриЗаписи записываешь тот же набор, на котрый подписка выполняется?
|
|||
2
aleks_default
23.05.16
✎
18:01
|
РегистрыНакопления.АТБ_ВзаиморасчетыСКонтрагентами.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Источник.Отбор.Регистратор.Значение); ВзаиморасчетыСКонтрагентами.Записывать = Истина; Это что за хрень? |
|||
3
Kelleron
24.05.16
✎
07:50
|
(1) Подписка выполняется на событие ПриЗаписи регистра бухгалтерии. То есть, когда проводки записываются в РБ, я пишу свои проводки в свой регистр.
|
|||
4
Kelleron
24.05.16
✎
07:51
|
(2) Без отбора ошибка- "не установлен отбор по регистратору"
|
|||
5
alle68
24.05.16
✎
07:57
|
(4) Интересует, в 1-й и 3-й строке один и тот же регистр?
|
|||
6
Defender aka LINN
24.05.16
✎
07:58
|
(4) Подозреваю, что вопрос все же в том - кто такой "Набор" и откуда взялся. Ну и кто такой "ВзаиморасчетыСКонтрагентами" тоже. И на кой ему ставить флаг "Записывать", если ты не в обработке проведения
|
|||
7
Kelleron
24.05.16
✎
08:15
|
(5) Да, один и тот же, Простите, я сплю.
Вот нормальный код УстановитьПривилегированныйРежим(Истина); Набор = РегистрыНакопления.АТБ_ВзаиморасчетыСКонтрагентами.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Источник.Отбор.Регистратор.Значение); АТБ_ВзаиморасчетыСКонтрагентами.Записывать = Истина; Для Каждого стр из Источник Цикл Если стр.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСРозничнымиПокупателями Тогда Движение = Набор.Добавить(); Движение.ВидДвижения=ВидДвиженияНакопления.Приход; Движение.Регистратор = Источник.Отбор.Регистратор.Значение; Движение.Контрагент = Источник.Отбор.Регистратор.Значение.Контрагент; Движение.Договор = Источник.Отбор.Регистратор.Значение.ДоговорКонтрагента; Движение.Сумма = стр.Сумма; Движение.Период = стр.Период; ИначеЕсли стр.СчетКт = ПланыСчетов.Хозрасчетный.РасчетыСРозничнымиПокупателями Тогда Движение = Набор.Добавить(); Движение.ВидДвижения=ВидДвиженияНакопления.Расход; Движение.Регистратор = Источник.Отбор.Регистратор.Значение; Движение.Контрагент = Источник.Отбор.Регистратор.Значение.Контрагент; Движение.Договор = Источник.Отбор.Регистратор.Значение.ДоговорКонтрагента; Движение.Сумма = стр.Сумма; Движение.Период = стр.Период; КонецЕсли; КонецЦикла; Набор.Записать(Истина); УстановитьПривилегированныйРежим(Ложь); |
|||
8
Лефмихалыч
24.05.16
✎
08:31
|
(0) >Провели первый раз - проводки в новый регистр записались. Перепровели - проводки исчезли. Если отменить и провести - отрабатывает.
а подписка-то эта вызывается в тех случаях, когда новые движения не делаются? |
|||
9
Kelleron
24.05.16
✎
08:52
|
(8) Судя по всему нет, если проводки через раз пишутся. Как отловить это событие?
|
|||
10
aleks_default
24.05.16
✎
09:07
|
(7) все равно это не рабочий код
вот это все же что за хрень АТБ_ВзаиморасчетыСКонтрагентами.Записывать = Истина; и у набора записей нет такого события "При изменении" |
|||
11
Kelleron
24.05.16
✎
10:03
|
(10) Так вешаю на событие ПриЗаписи а не на ПриИзменении
РегистрыНакопления.АТБ_ВзаиморасчетыСКонтрагентами.Записывать = Истина; Снова извиняюсь. |
|||
12
xxTANATORxx
24.05.16
✎
10:07
|
смотри отладчиком когда и в каком случае вызывается
|
|||
13
hhhh
24.05.16
✎
10:08
|
(11) ну это
РегистрыНакопления.АТБ_ВзаиморасчетыСКонтрагентами.Записывать = Истина; зачем пишешь? выкинь |
|||
14
Kelleron
24.05.16
✎
10:26
|
(13) Даже если это выкинуть - отрабатывает абсолютно также.
|
|||
15
Kelleron
24.05.16
✎
10:26
|
(12) Не помогает отладчик.
|
|||
16
hhhh
24.05.16
✎
10:32
|
(15) ну так напиши
АТБ_ВзаиморасчетыСКонтрагентами.Записывать = Ложь; тебе же жизненно важно, чтобы там была ложь. |
|||
17
Kelleron
24.05.16
✎
11:39
|
Заработало, правда по-другому пришлось сделать, через оппу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |