Вход | Регистрация

1С:Предприятие ::

Метки: 

Запись в регистр накопления

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

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


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

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

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

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

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

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

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

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

                Если ПерваяКолонка Тогда
                    
                    Если ВидДвижения = ВидДвиженияНакопления.Приход Тогда
                        СтрокаДвижения = НаборДвижений.ДобавитьПриход();
                    ИначеЕсли ВидДвижения = ВидДвиженияНакопления.Расход Тогда
                        СтрокаДвижения = НаборДвижений.ДобавитьРасход();
                    Иначе
                        СтрокаДвижения = НаборДвижений.Добавить();// Для оборотных регистров

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

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

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

    КонецЦикла;

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

// Выполняет приход по регистру.

//
// Параметры:

//  Нет.
//

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

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

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


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

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

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


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует