Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Движение есть и его тут же нет

Движение есть и его тут же нет
Я
   Масянька
 
24.09.21 - 15:11
День добрый!
Модуль объекта (кусочек):
сообщить("0 - " + Движения.ПрослеживаемыеТовары.Количество());
        ПрослеживаемостьБП.СформироватьДвиженияРеализацияТоваров(ПараметрыПроведения.ПрослеживаемыеТовары, ПараметрыПроведения.ПрослеживаемыеОперации, ТаблицаРеквизиты,
                                                                 СтруктураШапкиДокумента.Ссылка.ПолучитьОбъект().Движения);
сообщить("3 - " + Движения.ПрослеживаемыеТовары.Количество());
    КонецЕсли;

Общий модуль:
Процедура СформироватьДвиженияРеализацияТоваров(ТаблицаТовары, ТаблицаОперации, ТаблицаРеквизиты, Движения) Экспорт
    
    Если Не ЗначениеЗаполнено(ТаблицаРеквизиты) Тогда
        Возврат;
    КонецЕсли;
    
    ОбщиеПараметры = ПодготовитьОбщиеПараметры(ТаблицаРеквизиты);
    Реквизиты = ОбщиеПараметры.Реквизиты[0];
    
    СформироватьДвиженияПрослеживаемыхТоваров(ТаблицаТовары, Реквизиты, Движения, Истина);
        
    СформироватьДвиженияОперацииСПрослеживаемымиТоварами(ТаблицаОперации, Реквизиты, Движения);
сообщить("2 - " + Движения.ПрослеживаемыеТовары.Количество());
    
КонецПроцедуры

На экране:
0 - 0
2 - 1
3 - 0
Где очищается регистр?
Спасибо.
   2S
 
1 - 24.09.21 - 15:11
в 2.5
   polosov
 
2 - 24.09.21 - 15:14
СтруктураШапкиДокумента.Ссылка.ПолучитьОбъект().Движения - это таки что?
   VladZ
 
3 - 24.09.21 - 15:16
(0) сдается мне, ты отслеживаешь разные вещи.
   Kassern
 
4 - 24.09.21 - 15:17
(2) это издевательства на 1ской))
   VladZ
 
5 - 24.09.21 - 15:17
сообщить("0 - " + Движения.ПрослеживаемыеТовары.Количество());

В "2" у тебя СтруктураШапкиДокумента.Ссылка.ПолучитьОбъект().Движения
   youalex
 
6 - 24.09.21 - 15:18
коллекции разные же, в процедуре ОМ и в контексте модуля объекта.
   Масянька
 
7 - 24.09.21 - 15:19
(2) КоллекцияДвижений
   VladZ
 
8 - 24.09.21 - 15:20
Разные сущности.  Так что, никакой магии.
Разрабы тебя запутали словом "Движения" :)
   Масянька
 
9 - 24.09.21 - 15:20
Процедура СформироватьДвиженияПрослеживаемыхТоваров(ТаблицаТовары, Реквизиты, Движения, Списание = Ложь)
    
    Если Не ЗначениеЗаполнено(ТаблицаТовары) Тогда
        Возврат;
    КонецЕсли;
    
    Параметры = ПодготовитьПараметрыДвиженияТоваров(ТаблицаТовары);
    
    Для Каждого СтрокаТаблицы Из Параметры.Товары Цикл
        Если Списание Тогда
            Запись = Движения.ПрослеживаемыеТовары.ДобавитьРасход();
        Иначе
            Запись = Движения.ПрослеживаемыеТовары.ДобавитьПриход();
        КонецЕсли;
        
        Запись.Период = Реквизиты.Дата;
        
        ЗаполнитьЗначенияСвойств(Запись, Реквизиты);
        ЗаполнитьЗначенияСвойств(Запись, СтрокаТаблицы);
    КонецЦикла;
    
    Движения.ПрослеживаемыеТовары.Записывать = Истина;

КонецПроцедуры
   polosov
 
10 - 24.09.21 - 15:21
(7) А, ну тогда нормально ))
   Масянька
 
11 - 24.09.21 - 15:26
Процедура СформироватьДвиженияРеализацияТоваров(ТаблицаТовары, ТаблицаОперации, ТаблицаРеквизиты, Движения) Экспорт
    
сообщить("2.5 - " + Движения);
    Если Не ЗначениеЗаполнено(ТаблицаРеквизиты) Тогда
        Возврат;
    КонецЕсли;
    
    ОбщиеПараметры = ПодготовитьОбщиеПараметры(ТаблицаРеквизиты);
    Реквизиты = ОбщиеПараметры.Реквизиты[0];
    
    СформироватьДвиженияПрослеживаемыхТоваров(ТаблицаТовары, Реквизиты, Движения, Истина);
        
    //Если Реквизиты.Владелец().Колонки.Найти("Контрагент") <> Неопределено И Реквизиты.Контрагент <> Неопределено Тогда

    //    СтранаРегистрацииКонтрагента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Реквизиты.Контрагент, "СтранаРегистрации");

    //    Если Справочники.СтраныМира.ГосударствоЧленТаможенногоСоюза(СтранаРегистрацииКонтрагента) Тогда

    //        Возврат;

    //    КонецЕсли;

    //КонецЕсли;


    СформироватьДвиженияОперацииСПрослеживаемымиТоварами(ТаблицаОперации, Реквизиты, Движения);
сообщить("2 - " + Движения.ПрослеживаемыеТовары.Количество());
    
КонецПроцедуры


0 - 0 - КоллекцияДвижений
2.5 - КоллекцияДвижений
2 - 1
3 - 0
   Масянька
 
12 - 24.09.21 - 15:28
У меня все получилось.
А в УПП есть ошибка.
   Serg_1960
 
13 - 24.09.21 - 15:29
В алгоритме используются движения объекта и движения, полученные по ссылке объекта... "Убил бы за такое"(с)
   Масянька
 
14 - 24.09.21 - 15:30
(13) К разработчикам 1С (в данном случае, УПП) обращайся.
   piter3
 
15 - 24.09.21 - 15:32
(14) Точно из типовой?
   Serg_1960
 
16 - 24.09.21 - 15:37
Между прочим: в документах ВозвратТоваровОтПокупателя, ВозвратТоваровПоставщику,ОтчетОРозничныхПродажах и т.д. используется вызов ПрослеживаемостьБП.СформироватьДвиженияРеализацияТоваров(), где последним параметром указаны Движения Объекта (без всяких вывертов с обращением к базе).
   Serg_1960
 
17 - 24.09.21 - 15:43
(15) ТС не указал ни свою конфигурацию, ни релиз. В УПП 1.3.166.1 конструкция "СтруктураШапкиДокумента.Ссылка.ПолучитьОбъект().Движения" используется только в экспортных процедурах модулей менеджеров объектов (не в модулях объектов)
   Масянька
 
18 - 24.09.21 - 15:45
(15) Открой и посмотри.
   Масянька
 
19 - 24.09.21 - 15:45
(17) ТН, модуль менеджера:
Процедура ДвиженияПоРегистрамПрослеживаемыхТоваров(СтруктураШапкиДокумента, ТаблицаСумм = Неопределено) Экспорт

    
    УчетнаяПолитикаРегл = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиРегл(СтруктураШапкиДокумента.Дата, СтруктураШапкиДокумента.Организация);
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("Ссылка", СтруктураШапкиДокумента.Ссылка);
    
    НомераТаблиц = Новый Структура;
    ПараметрыПроведения = Новый Структура;
    
    УсловияПрослеживаемости = Новый Структура;
    УсловияПрослеживаемости.Вставить("ВедетсяУчетПрослеживаемыхТоваров", ПолучитьФункциональнуюОпцию("ВестиУчетПрослеживаемыхТоваров")
        И ПрослеживаемостьБРУ.ВедетсяУчетПрослеживаемыхТоваров(СтруктураШапкиДокумента.Дата));
    
    Запрос.Текст = Документы.ТребованиеНакладная.ТекстЗапросаПрослеживаемыеТовары(НомераТаблиц, ПараметрыПроведения, УсловияПрослеживаемости);
    
    Если НЕ ПустаяСтрока(Запрос.Текст) Тогда
        Результат = Запрос.ВыполнитьПакет();
        
        Для Каждого НомерТаблицы Из НомераТаблиц Цикл
            ПараметрыПроведения.Вставить(НомерТаблицы.Ключ, Результат[НомерТаблицы.Значение].Выгрузить());
        КонецЦикла;
    КонецЕсли;
    
    Если УсловияПрослеживаемости.ВедетсяУчетПрослеживаемыхТоваров Тогда
        ТаблицаРеквизиты = ПрослеживаемостьБП.СтруктуруВТаблицуЗначений(СтруктураШапкиДокумента);
        
        Если НЕ ТаблицаСумм = Неопределено Тогда
            Для каждого Строка Из ПараметрыПроведения.ПрослеживаемыеОперации Цикл
                СтрокаССуммой = ТаблицаСумм.Найти(Строка.ИдентификаторСтроки, "ИдСтрокиПрослеживаемогоТовара");
                
                Если ЗначениеЗаполнено(СтрокаССуммой) Тогда
                    Строка.СуммаБезНДС = СтрокаССуммой.Стоимость;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    
        ПрослеживаемостьБП.СформироватьДвиженияРеализацияТоваров(
            ПараметрыПроведения.ПрослеживаемыеТовары,
            ПараметрыПроведения.ПрослеживаемыеОперации,
            ТаблицаРеквизиты,
            СтруктураШапкиДокумента.Ссылка.ПолучитьОбъект().Движения);
    КонецЕсли;
    
КонецПроцедуры
Управление производственным предприятием, редакция 1.3 (1.3.166.1) (http://v8.1c.ru/enterprise/)
Copyright (С) ООО "1C-Софт", 2009-2020. Все права защищены
(http://www.1c.ru/)
   piter3
 
20 - 24.09.21 - 15:47
(18) Некуда смотреть.Что-то не понято и пятнично)
   Serg_1960
 
21 - 24.09.21 - 15:56
(19) Вам мои слова подтверждать не обязательно :) А вот вопрос (15) - актуален. У Вас в (0) не типовой алгоритм.
   Serg_1960
 
22 - 24.09.21 - 16:11
*(21) Тьфу, пятница, вечер... написал так, что сам не понял :)
"Движения.ПрослеживаемыеТовары.Количество()" - некорректное обращение к объекты в контексте менеджера объекта - "Для выполнения функций модуля менеджера объекта не должен требоваться экземпляр объекта данных" - https://its.1c.ru/db/v8std/content/486/hdoc


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