Имя: Пароль:
1C
1С v8
КД 2: перенос остатков РН в ОперациюБух
0 GlebHappy
 
19.03.15
01:57
Всем доброй ночи!
Сломал уже всю голову, не могу понять отчего получается так как получается :)
Имеем две конфигурации - доработанную БП 1.6 и доработанную БП 3.0.
Имеем в конфигурации-источнике регистр накопления КонтБланкиВОрганизации и соответствующий ему почти такой же регистр в базе-приемнике.
Задача такова - перенести данные по регистру из источника в приемник, притом все старые движения (до 01.01.2015 свернуть в остатки).
Решил перенос остатков делать стандартно (как показано в демобазе КД), а именно создал ПВД с произвольным алгоритмом:

// Служебная ТЗ
ТЗРегистровНакопления = Новый ТаблицаЗначений;
ТЗРегистровНакопления.Колонки.Добавить("Имя");
НоваяСтрока = ТЗРегистровНакопления.Добавить();
НоваяСтрока.Имя = "КонтБланкиВОрганизации";
// Выгрузим остатки по регистру накопления КонтБланкиВОрганизации в бухгалтерскую операцию
ЗапросПоОстаткам = Новый Запрос;
ЗапросПоОстаткам.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10
                        |    КонтБланкиВОрганизацииОстатки.Организация КАК Организация,
                        |    ВЫБОР
                        |        КОГДА КонтБланкиВОрганизацииОстатки.МестоНахождения ССЫЛКА Справочник.ПодразделенияОрганизаций
                        |            ТОГДА КонтБланкиВОрганизацииОстатки.МестоНахождения
                        |        КОГДА КонтБланкиВОрганизацииОстатки.МестоНахождения ССЫЛКА Справочник.КонтАгенты
                        |            ТОГДА КонтБланкиВОрганизацииОстатки.МестоНахождения.Подразделение
                        |    КОНЕЦ КАК Подразделение,
                        |    КонтБланкиВОрганизацииОстатки.МестоНахождения КАК МестоНахождения,
                        |    КонтБланкиВОрганизацииОстатки.ВидБланка КАК ВидБланка,
                        |    КонтБланкиВОрганизацииОстатки.Серия КАК Серия,
                        |    КонтБланкиВОрганизацииОстатки.Номер КАК Номер,
                        |    КонтБланкиВОрганизацииОстатки.СтраховаяКомпания КАК СтраховаяКомпания,
                        |    КонтБланкиВОрганизацииОстатки.Испорченный КАК Испорченный,
                        |    СУММА(КонтБланкиВОрганизацииОстатки.Кол_воОстаток) КАК Кол_во
                        |ИЗ
                        |    РегистрНакопления.КонтБланкиВОрганизации.Остатки(&ДатаОстатков, ) КАК КонтБланкиВОрганизацииОстатки
                        |
                        |СГРУППИРОВАТЬ ПО
                        |    КонтБланкиВОрганизацииОстатки.Организация,
                        |    КонтБланкиВОрганизацииОстатки.МестоНахождения,
                        |    КонтБланкиВОрганизацииОстатки.ВидБланка,
                        |    КонтБланкиВОрганизацииОстатки.Номер,
                        |    КонтБланкиВОрганизацииОстатки.СтраховаяКомпания,
                        |    КонтБланкиВОрганизацииОстатки.Испорченный,
                        |    ВЫБОР
                        |        КОГДА КонтБланкиВОрганизацииОстатки.МестоНахождения ССЫЛКА Справочник.ПодразделенияОрганизаций
                        |            ТОГДА КонтБланкиВОрганизацииОстатки.МестоНахождения
                        |        КОГДА КонтБланкиВОрганизацииОстатки.МестоНахождения ССЫЛКА Справочник.КонтАгенты
                        |            ТОГДА КонтБланкиВОрганизацииОстатки.МестоНахождения.Подразделение
                        |    КОНЕЦ,
                        |    КонтБланкиВОрганизацииОстатки.Серия
                        |
                        |УПОРЯДОЧИТЬ ПО
                        |    Организация,
                        |    Подразделение,
                        |    МестоНахождения,
                        |    ВидБланка,
                        |    Серия,
                        |    Номер,
                        |    СтраховаяКомпания,
                        |    Испорченный
                        |АВТОУПОРЯДОЧИВАНИЕ";
ЗапросПоОстаткам.УстановитьПараметр("ДатаОстатков", ДатаНачала - 1);
ТЗРезультата = ЗапросПоОстаткам.Выполнить().Выгрузить();
СписокОрганизаций = ТЗРезультата.Скопировать(, "Организация");
СписокОрганизаций.Свернуть("Организация");
Для Каждого СтрокаОрганизации Из СписокОрганизаций Цикл
    ИсходящиеДанные = Новый Структура;
    ИсходящиеДанные.Вставить("Организация", СтрокаОрганизации.Организация);
    ИсходящиеДанные.Вставить("Дата", ДатаНачала - 1);
    ИсходящиеДанные.Вставить("Комментарий", "## Остатки по регистру накопления КонтБланкиВОрганизации # " + СтрокаОрганизации.Организация.Наименование);
    ИсходящиеДанные.Вставить("Содержание", ИсходящиеДанные.Комментарий);
    ИсходящиеДанные.Вставить("СпособЗаполнения", " --- "); // позже уточню
    ИсходящиеДанные.Вставить("ТаблицаРегистровНакопления", ТЗРегистровНакопления);
    ТЗПоТекущейОрганизации = ТЗРезультата.Скопировать(Новый Структура("Организация", СтрокаОрганизации.Организация));
    ИсходящиеДанные.Вставить("КонтБланкиВОрганизации", ТЗПОТекущейОрганизации);
    ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "ОстаткиПоРН_КонтБланкиВОрганизации");
КонецЦикла;

На ВЫБРАТЬ ПЕРВЫЕ 10 не обращайте внимания, остатки большие, поэтому я это временно поставил в качестве ограничителя.
Затем создал правило конвертации объекта с пустым источником и с приемником в виде ОперацииБух. Правило отрабатывает без ошибок, набор записей регистра в XML-файл выгружается.
Но вот при загрузке происходит нечто странное. Документ создается, корректно заполняется, включая "Таблицу регистров накопления" - однако движений в нём нет.
При этом что меня смущает: ради интереса добавил сообщение для вывода в алгоритм ПослеЗагрузки, оно выводится. Т.е. документ записывается и алгоритмы в установленном порядке выполняются, однако набор записей регистра чист. В чём может быть мой косяк? :)
1 Godofsin
 
19.03.15
05:40
Активность = итстина;
2 Godofsin
 
19.03.15
05:41
Перепроведи документ, движения появляются?
3 GlebHappy
 
19.03.15
07:04
(1) Отчитываюсь, добавил в ПередВыгрузкой свойства Активность Значение = Истина;
При этом свойство внутри XML появляется:

<Свойство Имя="Активность" Тип="Булево">
    <Значение>true</Значение>
</Свойство>

Однако ничего не изменилось - операция всё равно загружается без движений

(2) Увы, это ОперацияБух, она не проводится - наборы движений должны загружаться в неё при обмене, а они по какой-то сакральной причине не загружаются :)
4 ShoGUN
 
19.03.15
07:05
(3) Операция точно является регистратором у регистров, в которые пытаешься загрузить данные?
5 GlebHappy
 
19.03.15
07:09
(3) Да, перепроверил это в первую очередь
6 NcSteel
 
19.03.15
07:11
В фале обмена движения есть?
Значит надо при загрузки записать движения .
7 Godofsin
 
19.03.15
07:44
(3) Так там вроде должна была быть кнопочка - переключать активность, нету такой?
Офф: У меня одного теперь по нажатия на сообщение не подставляется номер в скобочках?
8 Godofsin
 
19.03.15
07:48
Ну и можно в ПослеЗагрузки проверить и записать набор записей
9 GlebHappy
 
19.03.15
07:54
(6) Спс, попробую.
Я правильно понимаю - просто в ПриЗагрузке добавляем Объект.Записать()?
10 nva_15
 
19.03.15
07:58
Документ ОперацияБух - После загрузки:
Объект.Движения.НазваниеРегистра.Записывать = Истина;
11 GlebHappy
 
19.03.15
08:03
(6) Подтверждаю. Действительно проблема была в этом.
Никогда раньше с таким нюансом не сталкивался и даже не подозревал, что документ и его движения при загрузке живут каждый своей собственной жизнью)
Добавил в ПослеЗагрузки Объект.Движения.КонтБланкиВОрганизации.Записать();
и стало всё как надо :)
12 iHell
 
19.03.15
09:58
(11) Объект.Движения.КонтБланкиВОрганизации.Записывать = Истина;
Программист всегда исправляет последнюю ошибку.