Имя: Пароль:
1C
1С v8
КА, УПП. Для чего у док-тов ПКО и РКО принудительная отмена движений?
,
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
Ужас-то конечно ужас, но поразмыслив, не смог найти другого способа сделать требуемое без правки кучи документов... а то давно избавился бы от этого ужаса :)
AdBlock убивает бесплатный контент. 1Сергей