Вход | Регистрация
 

Код ведёт себя по разному в разных местах

Код ведёт себя по разному в разных местах
Я
   OnePrg
 
18.08.21 - 16:19
Документ чек не проводится, ругается, что нет на остатке. Смотрю отчётом из UNIREPORTS - остаток есть

Код такой:

Процедура глИзменитьОстатки(Конт, спФирмы, Склад, ФлагВозврата, ФлагПрихода, ФлагУчетаОстатков=0, ФлагПеремещения=2,ПараметрПроведения = 0) Экспорт
    
    Если (ФлагПрихода = 0) или (ФлагУчетаОстатков = 1) Тогда
        // будем использовать остатки, рассчитаем итоги
        спТовары = СоздатьОбъект("СписокЗначений");
        Конт.ВыгрузитьТабличнуюЧасть(спТовары,"Товар");
        
        Регистры=СоздатьОбъект("Регистры");
        Рег=Регистры.ОстаткиТоваров;
        
        Рег.УстановитьЗначениеФильтра("Фирма",спФирмы,2);
        Рег.УстановитьЗначениеФильтра("Товар",спТовары,2);
        Рег.УстановитьЗначениеФильтра("Склад",Склад,1);
        
        Если Конт.ИтогиАктуальны()=0 Тогда
            Рег.ВременныйРасчет(1);      
            //Сообщить(Конт.ТекущийДокумент());                    
            СравнитьТА = Конт.СравнитьТА();
            //Сообщить(СравнитьТА);
            Если СравнитьТА = -1 Тогда
                Регистры.РассчитатьРегистрыНа(Конт.ТекущийДокумент());  //------- попадает вот сюда
            ИначеЕсли СравнитьТА = 0 Тогда
                Регистры.РассчитатьРегистрыНа(ПолучитьТА());
            КонецЕсли;
        КонецЕсли;    
        
    КонецЕсли;                                        
    
    
    Для Инд = 1 по спФирмы.РазмерСписка() Цикл
        текФирма=спФирмы.ПолучитьЗначение(Инд);
        
        Если (ФлагПрихода = 0) или (ФлагУчетаОстатков = 1) Тогда
            // будем использовать остатки, получим итоги
            тбОстатки = 0;
            Рег.УстановитьЗначениеФильтра("Фирма",текФирма,1);
            Рег.УстановитьЗначениеФильтра("Товар",спТовары,2);
            Рег.УстановитьЗначениеФильтра("Склад",Склад,1);
            Рег.ВыгрузитьИтоги(тбОстатки,1,1); //-------------------------- тбОстатки пустая
        КонецЕсли;                                        




Делаю внешнюю обработку, на ней размещаю реквизит Конт с типом значения "Документ.Чек"

И вставляю туда тот же код, только немного под обработку адаптированный:

Процедура Сформировать()        
                        
        спФирмы = глПолучитьФирмы(Конт);  
        
        спТовары = СоздатьОбъект("СписокЗначений");
        Конт.ВыгрузитьТабличнуюЧасть(спТовары,"Товар");
        
        Регистры=СоздатьОбъект("Регистры");
        Рег=Регистры.ОстаткиТоваров;
        
        Рег.УстановитьЗначениеФильтра("Фирма",спФирмы,2);
        Рег.УстановитьЗначениеФильтра("Товар",спТовары,2);
        Рег.УстановитьЗначениеФильтра("Склад",Конт.Склад,1);
        
        //Если Конт.ИтогиАктуальны()=0 Тогда
        //    Рег.ВременныйРасчет(1);      
        //    //Сообщить(Конт.ТекущийДокумент());                    
        //    СравнитьТА = Конт.СравнитьТА();
        //    //Сообщить(СравнитьТА);
        //    Если СравнитьТА = -1 Тогда
                Регистры.РассчитатьРегистрыНа(Конт.ТекущийДокумент());
        //    ИначеЕсли СравнитьТА = 0 Тогда
        //        Регистры.РассчитатьРегистрыНа(ПолучитьТА());
        //    КонецЕсли;
        //КонецЕсли;    
        
    
    Для Инд = 1 по спФирмы.РазмерСписка() Цикл
        текФирма=спФирмы.ПолучитьЗначение(Инд);
        
        //Если (ФлагПрихода = 0) или (ФлагУчетаОстатков = 1) Тогда
        //    // будем использовать остатки, получим итоги
            тбОстатки = 0;
            Рег.УстановитьЗначениеФильтра("Фирма",текФирма,1);
            Рег.УстановитьЗначениеФильтра("Товар",спТовары,2);
            Рег.УстановитьЗначениеФильтра("Склад",Конт.Склад,1);
            Рег.ВыгрузитьИтоги(тбОстатки,1,1); //------------------ таблица заполнена, остатки есть
        //КонецЕсли;                                        



Что не так?
   Ёпрст
 
1 - 18.08.21 - 16:34
(0) и нахрена 2 раза фильтр устанавливать ?
   Builder
 
2 - 18.08.21 - 16:35
Отладчик в руки и проверяй установленные фильтры.
"Склад" особенно, он как то отдельно передается?
   Ёпрст
 
3 - 18.08.21 - 16:36
Ну и в первом случае, итоги расчитаны до документа, а во втором - на ТА
   Ёпрст
 
4 - 18.08.21 - 16:36
ясен хрен, что они разные.
   breezee
 
5 - 18.08.21 - 16:37
это семерка? можете удалять комментарий перед выкладыванием кода на форум, пожалуйста?
   Ёпрст
 
6 - 18.08.21 - 16:37
если только, сам док не в потоке проводится, а по коду - нет, раз в отладке идёт временной рассчет итогов
   OnePrg
 
7 - 18.08.21 - 16:41
(3) В обоих случая на документ
   OnePrg
 
8 - 18.08.21 - 16:42
(2) Фильтры проверил в первую очередь
   Ёпрст
 
9 - 18.08.21 - 16:42
(7) в каком месте в коде 2 у тебя расчет на документ ?
   Ёпрст
 
10 - 18.08.21 - 16:43
У тебя там нет никакого расчета и останки берутся на ТА
   OnePrg
 
11 - 18.08.21 - 16:44
(5) конечно, только в этом случае хотел показать, что код одинаковый, поэтому оригинальные строки не удалял, а комментировал
   OnePrg
 
12 - 18.08.21 - 16:44
(10) опа, точно
сейчас посмотрю
   Ёпрст
 
13 - 18.08.21 - 16:45
И еще.. в модуле проведения СравнитьТА не используется, от слова совсем
   OnePrg
 
14 - 18.08.21 - 16:46
(10) всё верно, теперь и обработка не выдаёт остатки - теперь можно разбираться

всем спасибо!
   OnePrg
 
15 - 18.08.21 - 16:48
хотя, хотя ...

теперь вопрос: ТА 19.08, документ 18.08 - почему если рассчитываешь итоги на документ, их нет?

унирепортс на 18.08 выдаёт остатки
   breezee
 
16 - 18.08.21 - 16:51
(11) Понял, извините)
   OnePrg
 
17 - 18.08.21 - 16:53
Теперь точно всё: этот товар переместили на этот склад сегодня в 23:59, ну и ясное дело, что чек в 14:41 ещё его не видит.

Ещё раз всем, спасибо!

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.