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

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

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

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

КонецПроцедуры
10 polosov
 
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
У меня все получилось.
А в УПП есть ошибка.
13 Serg_1960
 
24.09.21
15:29
В алгоритме используются движения объекта и движения, полученные по ссылке объекта... "Убил бы за такое"(с)
14 Масянька
 
24.09.21
15:30
(13) К разработчикам 1С (в данном случае, УПП) обращайся.
15 piter3
 
24.09.21
15:32
(14) Точно из типовой?
16 Serg_1960
 
24.09.21
15:37
Между прочим: в документах ВозвратТоваровОтПокупателя, ВозвратТоваровПоставщику,ОтчетОРозничныхПродажах и т.д. используется вызов ПрослеживаемостьБП.СформироватьДвиженияРеализацияТоваров(), где последним параметром указаны Движения Объекта (без всяких вывертов с обращением к базе).
17 Serg_1960
 
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/)
20 piter3
 
24.09.21
15:47
(18) Некуда смотреть.Что-то не понято и пятнично)
21 Serg_1960
 
24.09.21
15:56
(19) Вам мои слова подтверждать не обязательно :) А вот вопрос (15) - актуален. У Вас в (0) не типовой алгоритм.
22 Serg_1960
 
24.09.21
16:11
*(21) Тьфу, пятница, вечер... написал так, что сам не понял :)
"Движения.ПрослеживаемыеТовары.Количество()" - некорректное обращение к объекты в контексте менеджера объекта - "Для выполнения функций модуля менеджера объекта не должен требоваться экземпляр объекта данных" - https://its.1c.ru/db/v8std/content/486/hdoc