|
КА, УПП. Для чего у док-тов ПКО и РКО принудительная отмена движений? | ☑ | ||
---|---|---|---|---|
0
WF72
16.01.12
✎
09:40
|
Спецы по КА/УПП, поделитесь плз мыслями, зачем у ПКО и РКО в модуле объекта прописана принудительная отмена движений в документе? Из-за этой дряни на эти документы не получается воткнуть подписку на события с обработкой проведения - на момент срабатывания подписки движения отменены, а это категорически неприемлемо :(
|
|||
1
ДенисЧ
16.01.12
✎
09:41
|
да там у всех документов оно прописано...
|
|||
2
Maxus43
16.01.12
✎
09:42
|
какая ещё отмена? эта чтоли?
Если мУдалятьДвижения Тогда ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, Режим); КонецЕсли; |
|||
3
Maxus43
16.01.12
✎
09:43
|
>>не получается воткнуть подписку на события с обработкой проведения - на момент срабатывания подписки движения отменены
неправда. подписка срабатывает ПОСЛЕ обработки проведения, а движения из подписки методом Источник.Движения.Хозрасчетный - ты не увидиш ни при каких обстоятельствах |
|||
4
Maxus43
16.01.12
✎
09:44
|
юзай запросы и наборы записей регистров
|
|||
5
WF72
16.01.12
✎
09:48
|
(2) нет. вот это:
мУдалятьДвижения = НЕ ЭтоНовый(); это в процедуре ПриЗаписи. |
|||
6
WF72
16.01.12
✎
09:49
|
Из-за этой фигни значение в свойствах документа будет заруливаться, каким бы оно ни было, уже проверил на собственной шкуре :(
|
|||
7
WF72
16.01.12
✎
09:50
|
В смысле, в свойствах документа прописано "не удалять автоматически", а на деле происходит именно удаление :(
|
|||
8
WF72
16.01.12
✎
09:52
|
(4)в том-то и дело, что юзал запросы, в предыдущей своей теме долго не мог понять, отчего не работает запрос. А не работал именно потому, что движений документа не было - по причине выше :(
|
|||
9
WF72
16.01.12
✎
09:53
|
(3)нет, у меня в данном случае движения по собственному регистру, не проводки...
|
|||
10
WF72
16.01.12
✎
09:55
|
(4)а, понял. сейчас попробую...
|
|||
11
Maxus43
16.01.12
✎
10:06
|
этот механизм удаления движений - нормальный. во всех документах так
|
|||
12
WF72
16.01.12
✎
11:12
|
(11)Увы, не работает. Что через набор записей, что напрямую через регистр... результат один: движения пропадают. Может из-за того, что подписка на событие вызывает дополнительную форму выбора, но вот на момент появления этой формы движений документа по регистру нет :( в БП такой хрени нет :(
долбаная КА :( |
|||
13
Maxus43
16.01.12
✎
11:15
|
подписка на обработку проведения вызывает форму выбора??? боже мой...
|
|||
14
WF72
16.01.12
✎
11:20
|
А вот такую хреновину сделали франчи... разрабатывать свою подсистему учета финанализа с нуля - это несколько недель, а то и месяцев надо убить... поэтому пытаюсь перенести имеющуюся поделку из БП в КА.
А как тогда в данном случае можно обойтись без доп. формы? При проведении документа нужно поставить в соответствие вручную для статьи затрат - элемент другого справочника и потом вся эта байда пишется в свой регистр. Можно конечно влезть в форму исходных документов (ПКО, РКО) и внести туда поле напрямую, но по-первых, сдается мне что результат будет тем же - из-за этой особенности проведения ПКО. |
|||
15
Maxus43
16.01.12
✎
11:23
|
платформа какая? подписка работает в рамках транзакции проведения, причем насколько помню в 8.1 движения писались автоматом, а в 8.2 им надо намекнуть чтоб они записались. может поэтому... но никак не из-за (5). Таково поведение всех документов а не только ПКО и РКО. и вобще - код проверки движений в подписке выложи лучше
|
|||
16
Ахиллес
16.01.12
✎
11:26
|
(14) Какую подписку о событии используешь? У меня в подписке "ПослеПроведения" всё работает. Кстати конфа КА и для ПКО и РКО в частности :-)
|
|||
17
WF72
16.01.12
✎
11:27
|
Платформа 8.2 (релиз 540).
Код запроса проверки движений: Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДанныеПоПлатежам.Подразделение, | ДанныеПоПлатежам.СтатьяДвижения, | ДанныеПоПлатежам.СуммаОборот, | ДанныеПоПлатежам.НомерСтрокиДокумента, | ДанныеПоПлатежам.Регистратор |ИЗ | РегистрНакопления.ДанныеПоПлатежам_ПМ.ОстаткиИОбороты(, , Регистратор, , ) КАК ДанныеПоПлатежам |ГДЕ | ДанныеПоПлатежам.Регистратор = &Ссылка"); Но дело не в нем. Во то время, когда форма выбора висит и ждет ответа, можно зайти в регистр и тут-то мы видим, что движений от текущего документа нет! |
|||
18
Maxus43
16.01.12
✎
11:28
|
(17) транзакция не закончена, записи появятся при успешном завершении. но в рамках транзакции доступ к данным есть
|
|||
19
WF72
16.01.12
✎
11:31
|
Но стоит только написать в ПриЗаписи вместо
мУдалятьДвижения = НЕ ЭтоНовый(); вот это: мУдалятьДвижения = Ложь; , так всё замечательно работает. Боюсь только, что такое насилие над модулем приведет к непредсказуемым результатам :( (17)Но как тогда еще сделать так, чтобы при запросе была запись в регистре? |
|||
20
Maxus43
16.01.12
✎
11:33
|
(19) результат предсказуем - у непроведённых документов будут движения и возможно задвоение движений при перепроведении.
А при запросе запись в регистре быть должна. Допиши в обработке проведения Движения.ТвойРегистр.Записать() чтоб наверняка |
|||
21
Ахиллес
16.01.12
✎
11:39
|
Кажется эти костыли придумали в 8.1 потому, что криво работало удаление движений самой платформой. Неужели в 8.2 то же самое? wft?
|
|||
22
Maxus43
16.01.12
✎
11:40
|
(21) я другого мнения) это ускоряет работу системы в некоторых случаях. например при обменах
|
|||
23
Ахиллес
16.01.12
✎
11:46
|
(22) Ну то есть, как, я и говорил - кривая платформа. Могли бы и подправить в 8.2 раз уж знали, что медленно работает. Пихать везде процедуру УдалитьДвиженияРегистратора() и самому удалять движения при том, что платформа сама якобы это умеет это ли не тупость?
|
|||
24
Maxus43
16.01.12
✎
11:48
|
(23) нет, если при записи объекта стоит признак Загрузка=Истина то удалять движения не будет, а если бы стояло автоматическое удаление - удаляло бы, делая не нужную по сути очистку. Это пример
|
|||
25
WF72
16.01.12
✎
11:49
|
(16)Создал новую подписку, новый общий модуль и запихал туда запрос, значатся ли уже движения по нужному регистру. Если значатся, форма не вылезает, документ просто спокойно проводится.
(19)Дописал - эффекта ноль :( |
|||
26
WF72
16.01.12
✎
11:51
|
Может, надо запихать вызов процедуры, которая сейчас находится в подписке, непосредственно из документа? Тогда наверное движения еще не уделены?
|
|||
27
WF72
16.01.12
✎
11:51
|
*удалены
|
|||
28
Maxus43
16.01.12
✎
11:52
|
движения удаляются ДО того как их в обработке проведения опять записывают
|
|||
29
WF72
16.01.12
✎
11:53
|
Тогда получается, что проблема неразрешима? :(
|
|||
30
Maxus43
16.01.12
✎
11:55
|
У меня проблемы вобще нет, всё работает... логику поменяй в проставлении соответствия статьям, в самом документе делай, ибо при обработке проведения открывать форму - ахтунг
|
|||
31
Maxus43
16.01.12
✎
11:59
|
ДанныеПоПлатежам.Регистратор = &Ссылка
там надеюсь параметром Источник.Ссылка а не просто Источник? |
|||
32
WF72
16.01.12
✎
12:01
|
Да, конечно же.
Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка); |
|||
33
WF72
16.01.12
✎
12:05
|
Ясно. Получается, все телодвижения надо поместить из подписку прямо в модуль документов до команды
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, Режим); большое спасибо за инфу, уже какое-то решение... |
|||
34
Ахиллес
16.01.12
✎
12:07
|
Ты в курсе вообще, как подписки работают? И на что ты подписываешься?
|
|||
35
Ахиллес
16.01.12
✎
12:08
|
...хотя это уже, я чего то гнать начал :-)
|
|||
36
WF72
16.01.12
✎
12:12
|
Ну если на момент срабатывания подписки на обработку проведения, движения документа удалены, значит сработала команда из (33)... какие еще выводы? ?)
|
|||
37
Ахиллес
16.01.12
✎
12:23
|
Дело в том, что подписка на событие "проведение" А внутри проведения всегда транзакция, а подписка срабатывает в произвольный момент. Ну то есть гарантировать ничего нельзя. Как то так по моему.
Когда я колупался с такой же фигнёй, я намутил вот такое: НаборДвиженийСтОС = Источник.Движения.СтоимостьОС; Если НаборДвиженийСтОС.Количество() = 0 Тогда Источник.Движения.СтоимостьОС.Прочитать(); НаборДвиженийСтОС = Источник.Движения.СтоимостьОС; КонецЕсли; ВремТЗ = НаборДвиженийСтОС.Выгрузить(); И не спрашивай, что это значит :-) |
|||
38
WF72
16.01.12
✎
12:41
|
Да что-то сомнительно, что в произвольный момент... думаю, что он четко определен - вот только отловить бы его точно. Ну а пока приходится извращаться...
А, использовать временную ТЗ для хранения данных между распроведением и проведением заново... тоже идея... :) |
|||
39
Maxus43
16.01.12
✎
12:44
|
чего отлавливать? подписка работает ПОСЛЕ одноименного события в модуле документа, но в рамках той же транзакции. вот 2 подписки на одно и то же действие - да, непределённость в очерёдности исполнения, и то сомнительное
|
|||
40
Ахиллес
16.01.12
✎
12:49
|
(39) Почему тогда, для разных видов документов и для разных баз, то входит внутрь ЕСЛИ то не входит?
Ваше мнение - профессор? |
|||
41
Maxus43
16.01.12
✎
12:52
|
(40) платформа разная возможно, 8.1 и 8.2 немного разное поведение, не углублялся в этот вопрос. Вобще в типовых в подписках никогда не используются конструкции типа Источник.Движения, это не правильно
|
|||
42
WF72
16.01.12
✎
12:57
|
(16)Погоди, а как ты ухитрился сделать в подписке событие "ПослеПроведения"? У меня в списке доступных событий такого нет.
|
|||
43
WF72
16.01.12
✎
13:00
|
Кстати, а это решение - поменять событие вместо "ОбработкаПроведения" на "ПриЗаписи". По-моему, отличная мысль, только что проверил - работает! Или я что-то упустил?
|
|||
44
Ахиллес
16.01.12
✎
13:00
|
(42) Очень сильное колдунство. Становится возможным если с утра в понедельник не попить кофе :-)
На самом деле событие "Проведение", а ПослеПроведения это название подписки. :-) (43) "ПриЗаписи" ещё хуже. |
|||
45
MatrosoV AleXXXand_R
16.01.12
✎
13:02
|
(17)
".ДанныеПоПлатежам_ПМ.ОстаткиИОбороты" Что-то знакомое :)) |
|||
46
WF72
16.01.12
✎
13:03
|
(44)Нет, но почему хуже? У меня цель - отловить ситуацию, есть ли движения по нужному регистру у текущего документа или нет. Если есть, проверяем, не изменилась ли сумма. Если не изменилась - проводим документ без вопросов. Где косяк?
(45)Ты из ПМ, я так понимаю? Ну и заморочь же вы наворотили! :))) |
|||
47
Ахиллес
16.01.12
✎
13:03
|
(41) Коллега - ваши комментарии по поводу данного типового кода:
Процедура ПриПроведенииПроверитьЗаполнениеПериодаРегистрации(Источник, Отказ, РежимПроведения) Экспорт Если НачалоМесяца(Источник.ПериодРегистрации) <> НачалоМесяца(Источник.Дата) Тогда Заголовок = ""; ОбщегоНазначения.СообщитьОбОшибке("Период регистрации не соответствует дате документа!", Отказ, Заголовок); КонецЕсли; КонецПроцедуры Событие ОбоаботкаПроведения в подписке. Какой смысл проверять что то после проведения? |
|||
48
MatrosoV AleXXXand_R
16.01.12
✎
13:05
|
(46) Я нет ... Просто мне приходилось редактировать код, с приставкой "ПМ" :))
|
|||
49
Ахиллес
16.01.12
✎
13:10
|
Кстати в КА поиск по вхождению Источник.Движения выдал почти 2 десятка строк, так что (41) это товарищ прогнал походу.
|
|||
50
Maxus43
16.01.12
✎
13:11
|
(47) этот код универсальный, выполнится для многих видов документов. И Отказ в истину никто не мешает поставить, значит проведения не произойдёт, транзакция проведения ещё не зафиксирована
|
|||
51
Maxus43
16.01.12
✎
13:11
|
(49) я по УПП сужу, может и есть конечно, но сам не встречал. везде юзается набор записей
|
|||
52
Maxus43
16.01.12
✎
13:14
|
(46) При записи - будут старые движения документа, вот где косяк...
|
|||
53
WF72
16.01.12
✎
13:35
|
Так мне как раз и нужны предыдущие движения по моему регистру, до записи измененного документа! А новые движения писать будем потом, можно и перед всеми остальными движениями - они не коррелируют.
(48)ты из тлт? :) |
|||
54
Maxus43
16.01.12
✎
13:36
|
(53) >>и нужны предыдущие движения по моему регистру
дак задача другая значит стоит. в подписке обработка проведения - только новые движения, сделанные в обработке проведения документа |
|||
55
0xFFFFFF
16.01.12
✎
13:51
|
(12) "Может из-за того, что подписка на событие вызывает дополнительную форму выбора"
Открывает чтоль? Ужас. |
|||
56
WF72
16.01.12
✎
14:24
|
Ужас-то конечно ужас, но поразмыслив, не смог найти другого способа сделать требуемое без правки кучи документов... а то давно избавился бы от этого ужаса :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |