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

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

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

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

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