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