Имя: Пароль:
1C
1С v8
Запись в регистр накопления
, ,
0 Vladislava-smile
 
17.11.17
05:02
Не могу понять почему не срабатывает запись в регистр ... Подскажите, пжлст ...

НаборДвижений = Движения.РасчетыСКонтрагентами;
    
    ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
    СуммаВзаиморасчетов   = СуммаВзаиморасчетовДляЗакрытия
                            + МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(
                                            СуммаДокумента,
                                            СтруктураШапкиДокумента.ВалютаДокумента,
                                            СтруктураШапкиДокумента.ВалютаВзаиморасчетов,
                                            СтруктураШапкиДокумента.КурсДокумента, КурсВзаиморасчетов,
                                            СтруктураШапкиДокумента.КратностьДокумента, КратностьВзаиморасчетов);
                                                            
    СуммаУпр              = СуммаУпрДляЗакрытия
                            + МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(
                                            СуммаДокумента,
                                            СтруктураШапкиДокумента.ВалютаДокумента,
                                            СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
                                            СтруктураШапкиДокумента.КурсДокумента,
                                            СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
                                            СтруктураШапкиДокумента.КратностьДокумента,
                                            СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
                                            
    Если СуммаВзаиморасчетов <> 0 ИЛИ СуммаУпр <> 0 Тогда
        СтрокаДвижений = ТаблицаДвижений.Добавить();
        СтрокаДвижений.РасчетыВозврат        = Перечисления.РасчетыВозврат.Расчеты;
        СтрокаДвижений.ДоговорКонтрагента    = СтруктураШапкиДокумента.ДоговорКонтрагента;
        СтрокаДвижений.Контрагент               = СтруктураШапкиДокумента.Контрагент;
        СтрокаДвижений.Организация           = СтруктураШапкиДокумента.Организация;
        СтрокаДвижений.Сделка                = ЗаказПокупателя;
        СтрокаДвижений.СуммаВзаиморасчетов   = СуммаВзаиморасчетов;
        СтрокаДвижений.СуммаУпр              = СуммаУпр;
        
        НаборДвижений.мПериод            = Дата;
        НаборДвижений.мТаблицаДвижений   = ТаблицаДвижений;
        
        Движения.РасчетыСКонтрагентами.ВыполнитьПриход();
    КонецЕсли;
1 Vladislava-smile
 
17.11.17
05:03
В таблицу мТаблицаДвижений попадает все, что нужно, тип документа добавлен в регистратор. Что еще?
2 VladZ
 
17.11.17
06:03
НаборДвижений.ДобавитьДвижение();
3 VladZ
 
17.11.17
06:04
Движения.РасчетыСКонтрагентами.ВыполнитьПриход() - записывает движения регистра. А в самом регистре еще нет данных. Туда либо сам добавляешь, либо через .ДобавитьДвижения (данные подтянутся из мТаблицаДвижений)
4 VladZ
 
17.11.17
06:06
см. модуль набора записей.
5 1dvd
 
17.11.17
06:27

НаборДвижений = Движения.РасчетыСКонтрагентами;
ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
...
СтрокаДвижений = ТаблицаДвижений.Добавить();
...
НаборДвижений.мПериод            = Дата;
НаборДвижений.мТаблицаДвижений   = ТаблицаДвижений;


Это какая внеземная магия.

ЗЫ
И это, остальные реквизиты движения кто будет заполнять?
6 Vladislava-smile
 
17.11.17
07:53
(5) Это код, взятый уже из работающей конфы. Только там пашет, а здесь зараза нет.
7 Vladislava-smile
 
17.11.17
07:54
(5) все остальное заполняется в модуле регистра:

Процедура ВыполнитьПриход() Экспорт

    ОбщегоНазначения.ВыполнитьДвижениеПоРегистру(ЭтотОбъект, ВидДвиженияНакопления.Приход);

КонецПроцедуры // ВыполнитьПриход()
8 Vladislava-smile
 
17.11.17
07:54
(5)
Процедура ВыполнитьДвижениеПоРегистру(НаборДвижений, ВидДвижения = Неопределено,
                                      ПустыеКолонкиСоставногоТипа = Неопределено, ЗаполнитьПериод = истина) Экспорт

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

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

                Если ПерваяКолонка Тогда
                    
                    Если ВидДвижения = ВидДвиженияНакопления.Приход Тогда
                        СтрокаДвижения = НаборДвижений.ДобавитьПриход();
                    ИначеЕсли ВидДвижения = ВидДвиженияНакопления.Расход Тогда
                        СтрокаДвижения = НаборДвижений.ДобавитьРасход();
                    Иначе
                        СтрокаДвижения = НаборДвижений.Добавить(); // Для оборотных регистров
                    КонецЕсли;
                    
                    МассивСтрок[Индекс] = СтрокаДвижения;
                    СтрокаДвижения.Период = НаборДвижений.мПериод;
                    Если не ЗаполнитьПериод и ЕстьПериод И НЕ СтрокаТаблицы.Период = '00010101' Тогда
                        СтрокаДвижения.Период = СтрокаТаблицы.Период;
                    Иначе
                        СтрокаДвижения.Период = НаборДвижений.мПериод;
                    КонецЕсли;
                    
                Иначе
                    
                    СтрокаДвижения = МассивСтрок[Индекс];
                    
                КонецЕсли;
                
                Индекс = Индекс + 1;
                
                ЗначКолонки = СтрокаТаблицы[ИмяКолонки];
                Если ФлагКолонкиСостТипа Тогда

                    Очистить = Ложь;
                    Если ТипЗнч(ЗначКолонки) = Тип("Число")Тогда
                        Если ЗначКолонки = 0 Тогда
                            Очистить = Истина;
                        КонецЕсли;
                    ИначеЕсли ТипЗнч(ЗначКолонки) = Тип("Строка") Тогда
                        Если ЗначКолонки = "" Тогда
                            Очистить = Истина;
                        КонецЕсли;
                    ИначеЕсли ТипЗнч(ЗначКолонки) = Тип("Дата") Тогда
                        Если ЗначКолонки = '00010101000000' Тогда
                            Очистить = Истина;
                        КонецЕсли;
                    ИначеЕсли ЗначКолонки = Неопределено Или ЗначКолонки.Пустая() Тогда
                        Очистить = Истина;
                    КонецЕсли;

                    Если Очистить Тогда
                        СтрокаДвижения[ИмяКолонки] = Неопределено;
                    Иначе
                        СтрокаДвижения[ИмяКолонки] = ЗначКолонки;
                    КонецЕсли;
                Иначе
                    СтрокаДвижения[ИмяКолонки] = ЗначКолонки;
                КонецЕсли;
                
            КонецЦикла;
            
            ПерваяКолонка = Ложь;
            
        КонецЕсли;

    КонецЦикла;

КонецПроцедуры // ВыполнитьДвижениеПоРегистру()
9 1dvd
 
17.11.17
07:55
(7) и почему я этого в (0) не увидел...
10 Vladislava-smile
 
17.11.17
08:36
(9)  Движения.РасчетыСКонтрагентами.ВыполнитьПриход();
11 youalex
 
17.11.17
09:01
(7) Проверьте в отладчике,  например, ЭтотОбъект.Записывать
12 Vladislava-smile
 
17.11.17
09:39
(11) Правы абсолютно, вставила:

// Выполняет приход по регистру.
//
// Параметры:
//  Нет.
//
Процедура ВыполнитьПриход() Экспорт

    ЭтотОбъект.Записывать = Истина;
    ОбщегоНазначения.ВыполнитьДвижениеПоРегистру(ЭтотОбъект, ВидДвиженияНакопления.Приход);

КонецПроцедуры // ВыполнитьПриход()

И все заполняется теперь. А где это определяется записывать или нет? Просто есть документ Заказ покупателя в этой конфе, который вызывает абсолютно те же функции и делает движения, а я добавила новый документ Изменения заказа покупателя, вызываю там те же функции и нет движений... Как так? Не понимаю.
13 Vladislava-smile
 
17.11.17
09:51
Ладно, загадка, спасибо всем огромное, особенно youalex )
14 Мимохожий Однако
 
17.11.17
09:54
(12) Убедись, что новый документ является регистратором этого регистра
15 youalex
 
17.11.17
09:57
(12) Читайте СП)
Записывать (Write)

... свойства метаданного документа "Запись движений при проведении" в Конфигураторе выставлено в "Записывать выбранные".

Вангую, что в старом документе Запись движений при проведении = ЗаписыватьМодифицированные, а в новом - ЗаписыватьВыбранные (для новых документов встает по умолчанию)
16 Buster007
 
17.11.17
10:09
(14) думаешь у нее могли сформироваться записи в регистре, если бы документ не был бы регистратором этого регистра?
17 Мимохожий Однако
 
17.11.17
10:22
(16) У неё не формируются
2 + 2 = 3.9999999999999999999999999999999...