Непонятная ситуация с регистрами!?!?

1. kmax1980 24.02.07 13:55 Сейчас в теме
Не пойму что творится! Есть стандартная конфигурация торговля + склад 7.70.940, немного переделанная. Есть документ который проводит или не проводит по определённому условию сумму по регистру касса по кассе №2 (код "00002"), при этом если он вводится на основании другого документа (ДокОснование) то проверяется провёл ли сумму ДокОснование по этому же регистру по кассе №2, если провёл, то исходный документ ничего по регистру касса по кассе №2 не проводит, иначе проводит.

Иногда возникает следующая ситуация - данный запрос отрабатывает как будто ДокОснование действительно провёл сумму в регистр касса по кассе №2, но на самом деле не проводил (перепровёл ДокОснование в дебаггере и убедился что проведения в регистр не делает), также отчёт по кассе №2 не показывает документа ДокОснование.
Кусок запроса с условием прилагаю ниже, помогите, не могу понять в чём дело!

Если ПустоеЗначение(ДокОснование)=0 Тогда
кмДвижение=СоздатьОбъект("Регистры");
кмДвижениеКасса=кмДвижение.Касса;
Если кмДвижениеКасса.ВыбратьДвиженияДокумента(ДокОснование)=1 Тогда
Пока кмДвижениеКасса.ПолучитьДвижение()>0 Цикл
Если кмДвижениеКасса.Касса.Код="00002" Тогда
кмПроводитьПоКассе=0;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если кмПроводитьПоКассе=1 Тогда
ОбработкаПроведенияПоКассе2(ВремКасса);
КонецЕсли;
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. CheBurator 2712 25.02.07 13:07 Сейчас в теме
данного коода недостаточно, чтобы однозначнго определить причину...
переменные определять надо...?
//
Код
 
кмПроводитьПоКассе=1;
Если ПустоеЗначение(ДокОснование)=0 Тогда
Показать полностью
3. kmax1980 26.02.07 12:22 Сейчас в теме
Сhe Burashka Написал:
-------------------------------------------------------
> данного коода недостаточно, чтобы однозначнго
> определить причину...
> переменные определять надо...?
> //кмПроводитьПоКассе=1;
> Если ПустоеЗначение(ДокОснование)=0 Тогда
>

ДокОснование - тип "документ", строку кмПроводитьПоКассе=1; забыл скопировать, она действительно присутствует перед всем этим кодом. Т.е сначал флаг кмПроводитьПоКассе устанавливаем равным 1, а потом проверяем, вызвал ли движения регистра ДокОснование, если вызвал, то устанавливаем флаг кмПроводитьПоКассе равным 0.
Ещё забыл сказать я немного переделал этот кусок, воспользовавшись функцией ВыбратьДвижения вместо ВыбратьДвиженияДокумента, и он заработал, как ни странно (т.е. метод ВыбратьДвижения не отбирает в выборку документ ДокОснование, т.е. он туда не попадает, как и должно быть, в отличие от метода ВыбратьДвиженияДокумента).
[ code ]
кмПроводитьПоКассе=1;
Если ПустоеЗначение(ДокОснование)=0 Тогда
кмДвижение=СоздатьОбъект("Регистры");
кмДвижениеКасса=кмДвижение.Касса;
Касса2=СоздатьОбъект("Справочник.Кассы");
Касса2.НайтиПоКоду("00002");
кмДвижениеКасса.УстановитьЗначениеФильтра("Касса",Касса2.ТекущийЭлемент(),1);
Если кмДвижениеКасса.ВыбратьДвижения(ДокОснование.ДатаДок,ДокОснование.ДатаДок)=1 Тогда
Пока кмДвижениеКасса.ПолучитьДвижение()>0 Цикл
Если кмДвижениеКасса.ТекущийДокумент()=ДокОснование Тогда
кмПроводитьПоКассе=0;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если кмПроводитьПоКассе=1 Тогда
ОбработкаПроведенияПоКассе2(ВремКасса);
КонецЕсли;
[ /code ]

Понятно, что этот новый кусок намного тормознее, чем изначальный, но другого выхода пока не вижу.
Может я чего-то не знаю об этом методе (ВыбратьДвиженияДокумента)? Видимо он как-то по другому работает.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот