Имя: Пароль:
1C
 
Конвертация данных: выгрузка документа "ОперацияБух" с проводками
,
0 Mr_Best
 
10.11.16
17:16
Доброго дня Коллеги!
Задача: перенести документ "ОперацияБух" из БП 2.0.65.45 в БП 3.0.44.140
Имеем: Конвертация данных, редакция 2.1 (2.1.8.1) и <ВерсияФормата>2.01</ВерсияФормата>

Что сделал: выгрузил метаданные с установленным флагом "Не выгружать движения документов" и снятым флагом "Не выгружать регистры бухгалтерии" в обоих базах.
Создал правила, включил один документ "ОперацияБух", конвертация предложила по ссылкам создать правила автоматически, я согласился. Создал единственное правило выгрузки для документа "ОперацияБух".
Выгрузил, проверил, движения не выгрузились.

Логично, подумал я и повторил операцию, но на этот раз я установил дополнительно флаг "Выгружать движения только у документов без проведения", а точнее с запрещенным проведением. Посмотрел в конфигурацию, у документа "ОперацияБух" режим проведения установлен в: Запретить. Наверное мой случай (?) снова подумал я и создал правила, и повторил выгрузку, и снова болт.

В поисках дальнейшего пути, я выбрал три направления:
1. Найти причину, из-за которой не выгружаются движения автоматически (так как описано выше)
2. Передать данные в параметр
3. Записать данные непосредственно в узел
4. Использовать функции ВыгрузитьПоПравилу или ВыгрузитьРегистр

Так как мне необходимо не сломать механизм регистрации изменений, я решил воспользоваться функцией ВыгрузитьРегистр. Логика работы функции проста, если ошибся, поправьте. Мы в некотором произвольном алгоритме формируем данные и выгружаем их по правилу, например "ХозрасчетныйЗапись". Автоматически правило не создалось, поэтому я его создал в ручную с именем "ХозрасчетныйЗапись". Конвертация предложила автоматически создать правила для свойств и значений, я согласился. Правило выгрузки я не делал.

Теперь есть правило, осталось только отобрать записи по нужным мне регистраторам и по очереди передать в функцию "ВыгрузитьРегистр".
Я выбрал событие ПКО ОперацияБух "После выгрузки в файл" и вставил:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Регистратор", Объект.Ссылка);
Запрос.Текст = "ВЫБРАТЬ
               |    Хозрасчетный.Период,
               |    Хозрасчетный.Регистратор,
               |    Хозрасчетный.Активность,
               |    Хозрасчетный.СчетДт,
               |    Хозрасчетный.СчетКт,
               |    Хозрасчетный.Организация,
               |    Хозрасчетный.ВалютаДт,
               |    Хозрасчетный.ВалютаКт,
               |    Хозрасчетный.ПодразделениеДт,
               |    Хозрасчетный.ПодразделениеКт,
               |    Хозрасчетный.Сумма,
               |    Хозрасчетный.ВалютнаяСуммаДт,
               |    Хозрасчетный.ВалютнаяСуммаКт,
               |    Хозрасчетный.КоличествоДт,
               |    Хозрасчетный.КоличествоКт,
               |    Хозрасчетный.СуммаНУДт,
               |    Хозрасчетный.СуммаНУКт,
               |    Хозрасчетный.СуммаПРДт,
               |    Хозрасчетный.СуммаПРКт,
               |    Хозрасчетный.СуммаВРДт,
               |    Хозрасчетный.СуммаВРКт,
               |    Хозрасчетный.Содержание,
               |    Хозрасчетный.НеКорректироватьСтоимостьАвтоматически
               |ИЗ
               |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
               |ГДЕ
               |    Хозрасчетный.Регистратор = &Регистратор";

              
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    ВыгрузитьРегистр(Выборка,,,,"ХозрасчетныйЗапись");
КонецЦикла;

А в ПКО "ХозрасчетныйЗапись" вот такие поля:

Активность
ВалютаДт
ВалютаКт
ВалютнаяСуммаДт
ВалютнаяСуммаКт
КоличествоДт
КоличествоКт
НеКорректироватьСтоимостьАвтоматически
Организация
Период
ПодразделениеДт
ПодразделениеКт
Регистратор
Содержание
СубконтоДт
СубконтоКт
Сумма
СуммаВРДт
СуммаВРКт
СуммаНУДт
СуммаНУКт
СуммаПРДт
СуммаПРКт
СчетДт
СчетКт

Конечно же я получил ошибку, и конечно же связанную с субконто:

Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5995)}: Ошибка записи объекта
    ТипОбъекта             =  Операция
    Объект                 =  Операция 00000000560 от 31.10.2016 10:58:16
    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Записать): Запись не верна! Вид субконто "Движения целевых средств" не доступен для данной записи! (Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет); Номер строки: 2)
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5988)
    КодСообщения           =  26

Т.е. в запросе не хватает СубконтоДт, СубконтоКт. Вот тут я и завис. Как хранятся данные в регистре бухгалтерии? Субконто в отдельной таблице? Тогда как в правилах их перенести ?
1 Господин ПЖ
 
10.11.16
17:17
читать книжку по кд. там целая глава и код

в демобазе тоже вроде пример есть
2 vicof
 
10.11.16
17:18
"Т.е. в запросе не хватает СубконтоДт, СубконтоКт"
"Вид субконто "Движения целевых средств" не доступен для данной записи!"
как-то не сочетается
3 Cyberhawk
 
10.11.16
17:19
В ПКО должны быть ТЧ-движения
4 Cyberhawk
 
10.11.16
17:19
А раз ты структуру метаданных загружал в КД без этих ТЧ-движений, то и обломись
5 Mr_Best
 
10.11.16
17:21
(1) Спасибо за хороший совет.
(2) Выше запрос, выборка не из виртуальной таблицы регистра, в ней поля отсутствуют, а в конвертации присутствует. Не могу понять как конвертация их подтянула, ведь в метаданных этих поле нет !
6 Mr_Best
 
10.11.16
17:23
(4) Структуру я загружал с движениями, но не для всех документов, а для тех которым проведение отключено в конфигурации (в метаданных). ОперацияБух относится как раз к такому документу.
7 Mr_Best
 
10.11.16
17:25
(4) Но табличной части Хозрасчетный в ПКО ОперацияБух нет, значит она все равно не загрузилась ? (т.е. настройка в выгрузки метаданных не сработала)
8 Cyberhawk
 
10.11.16
17:28
(7) Должна быть. В демке посмотри уже
9 Господин ПЖ
 
10.11.16
17:29
>а для тех которым проведение отключено в конфигурации (в метаданных)

это с наличием движений не связано жестко
10 Mr_Best
 
10.11.16
17:34
(7) есть, уже посмотрел. Спасибо что обратил на это внимание. Но движения все равно не переносятся, попробую выгрузить в регистр из ТЧ, отпишусь
(9) я ошибся, табличные части движений у этого документа создались ( я только что узнал, что движения оформляются в виде ТЧ объекта :) )
11 Mr_Best
 
10.11.16
17:42
В ПКО ОперацияБух "После выгрузки в файл" заменил код обработчика на:

Для Каждого Движение Из ЭтотОбъект.Движения.Хозрасчетный Цикл
    ВыгрузитьРегистр(Движение,,,,"ХозрасчетныйЗапись");    
КонецЦикла

Ошибка изменилась:

Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5995)}: Ошибка записи объекта
    ТипОбъекта             =  Операция
    Объект                 =  Операция 00000000560 от 31.10.2016 10:58:16
    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Записать): Запись не верна! Вид субконто "Движения целевых средств" не доступен для данной записи! (Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет); Номер строки: 2)
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(5988)
    КодСообщения           =  26

Вероятно, это уже связанно не с конвертацией, а с разницей настроек субконто в двух базах
12 Mr_Best
 
10.11.16
17:53
Спасибо всем за помощь ! Все получилось.
Сами по себе движения не выгружались, но это помогло:

Для Каждого Движение Из ЭтотОбъект.Движения.Хозрасчетный Цикл
    ВыгрузитьРегистр(Движение,,,,"ХозрасчетныйЗапись");    
КонецЦикла

А ошибка постом выше была связана не с конвертацией. Тему можно закрывать.
13 h-sp
 
10.11.16
17:53
(11) а для видов субконто настроил правило? и есть там такое субконто в 3.0?
14 Mr_Best
 
10.11.16
17:55
(13) дополнительно не настраивал ничего, только в ручную правило создал "ХозрасчетныйЗапись" и в ПКО ОперацияБух после выгрузки в файл это:
Для Каждого Движение Из ЭтотОбъект.Движения.Хозрасчетный Цикл
    ВыгрузитьРегистр(Движение,,,,"ХозрасчетныйЗапись");    
КонецЦикла

Но оказалось, что бухгалтера создали счет в источнике (не предопределенный) и он перенесся пустой (субконто не заполнились). После заполнения субконто в приемнике все шикарно загрузилось :)