Имя: Пароль:
1C
1С v8
Разница между ВыполнитьДвижениеПоРегистру(Движение) и Движение.Записать(Истина);
0 Shur1cIT
 
14.01.14
16:38
иметься процедура в глобальнике
Вытаскиваю её во внешнею обработку которая будет перезаполнять движение по определенному регистру у документа, конструкция ВыполнитьДвижениеПоРегистру(Движение) не работает поэтому предполагается использовать Движение.Записать(Истина) вопрос возник как движения будут отличаться? какие особенности в них?



Процедура ЗаписатьТаблицыДокументаВРегистр(Движение, ВидДвижения, СтруктТаблицДокумента, ДатаДвижения) Экспорт
    
    Движение.мПериод = ДатаДвижения;
    Для Каждого ТабЧасть Из СтруктТаблицДокумента Цикл
    
        Если ТабЧасть.Значение.Количество() = 0 Тогда
            Продолжить; // Пропускаем пустые табличные части
        КонецЕсли;
        
        Движение.мТаблицаДвижений = ТабЧасть.Значение;
        Если ВидДвижения = Неопределено Тогда // Регистр сведений
            ВыполнитьДвижениеПоРегистру(Движение);
        Иначе // Регистр накопления
            ВыполнитьДвижениеПоРегистру(Движение, ВидДвижения);
        КонецЕсли;
    
    КонецЦикла;

КонецПроцедуры // ЗаписатьТаблицыДокументаВРегистр()
1 Nenaviwu1c20
 
14.01.14
16:40
Если на то пошло может и процедуру ВыполнитьДвижениеПоРегистру скопируешь с того места откуда остальное взял
2 Nenaviwu1c20
 
14.01.14
16:42
Процедура ВыполнитьДвижениеПоРегистру(НаборДвижений, ВидДвижения = Неопределено,
                                      ПустыеКолонкиСоставногоТипа = Неопределено) Экспорт

    ТаблицаДвижений = НаборДвижений.мТаблицаДвижений;
    Если ТаблицаДвижений.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Если ПустыеКолонкиСоставногоТипа = Неопределено Тогда
        ПустыеКолонкиСоставногоТипа = Новый Структура;
    КонецЕсли;
    
    //
    КолонкиТаблицы = ТаблицаДвижений.Колонки;
    
    //
    МетаРег = НаборДвижений.Метаданные();
    ИзмеренияСостТипа = Новый Структура;
    ИзмеренияСостТипаСтр = "";
    Для Каждого МетаИзм Из МетаРег.Измерения Цикл
        Если (МетаИзм.Тип.Типы().Количество() > 1)
           И НЕ (ПустыеКолонкиСоставногоТипа.Свойство(МетаИзм.Имя)) Тогда
            Если не КолонкиТаблицы.Найти(МетаИзм.Имя)=Неопределено Тогда
                ИзмеренияСостТипа.Вставить(МетаИзм.Имя);
                ИзмеренияСостТипаСтр = ИзмеренияСостТипаСтр + ", " + МетаИзм.Имя;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Для Каждого МетаРек Из МетаРег.Реквизиты Цикл
        Если (МетаРек.Тип.Типы().Количество() > 1)
           И НЕ (ПустыеКолонкиСоставногоТипа.Свойство(МетаРек.Имя)) Тогда
            Если не КолонкиТаблицы.Найти(МетаРек.Имя)=Неопределено Тогда
                ИзмеренияСостТипа.Вставить(МетаРек.Имя);
                ИзмеренияСостТипаСтр = ИзмеренияСостТипаСтр + ", " + МетаРек.Имя;
            КонецЕсли;
            
        КонецЕсли;
    КонецЦикла;
    Для Каждого МетаРес Из МетаРег.Ресурсы Цикл
        Если (МетаРес.Тип.Типы().Количество() > 1)
           И НЕ (ПустыеКолонкиСоставногоТипа.Свойство(МетаРес.Имя)) Тогда
            Если не КолонкиТаблицы.Найти(МетаРес.Имя)=Неопределено Тогда
                ИзмеренияСостТипа.Вставить(МетаРес.Имя);
                ИзмеренияСостТипаСтр = ИзмеренияСостТипаСтр + ", " + МетаРес.Имя;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Если ИзмеренияСостТипаСтр <> "" Тогда
        ИзмеренияСостТипаСтр = Сред(ИзмеренияСостТипаСтр, 3);
    КонецЕсли;
    
    ТипЧисло = Тип("Число");
    ТипСтрока = Тип("Строка");
    ТипДата = Тип("Дата");
    
    ЕстьПериод = НЕ ТаблицаДвижений.Колонки.Найти("Период") = Неопределено;

    Для Каждого СтрокаДвижения ИЗ ТаблицаДвижений Цикл
        Движение = НаборДвижений.Добавить();
        ЗаполнитьЗначенияСвойств(Движение, СтрокаДвижения, ,ИзмеренияСостТипаСтр);
        
        Если ВидДвижения <> Неопределено Тогда
            Движение.ВидДвижения = ВидДвижения;
        КонецЕсли;
        
        Если ЕстьПериод И НЕ СтрокаДвижения.Период = '00010101000000' Тогда
            Движение.Период = СтрокаДвижения.Период;
        ИначеЕсли НаборДвижений.мПериод <> Неопределено Тогда
            Движение.Период = НаборДвижений.мПериод;
        КонецЕсли;
        Движение.Активность = Истина;
        
        Для Каждого КлючИЗначение ИЗ ИзмеренияСостТипа Цикл
            ЗначениеВКолонке = СтрокаДвижения[КлючИЗначение.Ключ];
            
            Если ЗначениеВКолонке = Неопределено Тогда
                Продолжить;
            КонецЕсли;
            
            ТипЗначенияВКолонке = ТипЗнч(ЗначениеВКолонке);
            
            Если ТипЗначенияВКолонке = ТипЧисло Тогда
                Если ЗначениеВКолонке = 0 Тогда
                    Продолжить;
                КонецЕсли;
            ИначеЕсли ТипЗначенияВКолонке = ТипСтрока Тогда
                Если ЗначениеВКолонке = "" Тогда
                    Продолжить;
                КонецЕсли;
            ИначеЕсли ТипЗначенияВКолонке = ТипДата Тогда
                Если ЗначениеВКолонке = '00010101000000' Тогда
                    Продолжить;
                КонецЕсли;
            ИначеЕсли ЗначениеВКолонке.Пустая() Тогда
                Продолжить;
            КонецЕсли;
            
            Движение[КлючИЗначение.Ключ] = ЗначениеВКолонке;
            
        КонецЦикла;
        
    КонецЦикла;

КонецПроцедуры // ВыполнитьДвижениеПоРегистру()
3 Shur1cIT
 
14.01.14
16:44
(2) точно блин! я не думал что это процедура!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.