Конвертация данных 2.1 Перенос проводок документов с признаком ручная корректировка движений
Подскажите, кто знает...
В случае если у документа сделана ручная корректировка движений(стоит чекбокс "Ручная корректировка").
Проводки не переносятся. Хотя в КД правила конвертации для регистров есть.
Пробовал в ПКО объекта в обработчик "После загрузки" добавить
Не помогло.
Как переносить движения таких документов?
В случае если у документа сделана ручная корректировка движений(стоит чекбокс "Ручная корректировка").
Проводки не переносятся. Хотя в КД правила конвертации для регистров есть.
Пробовал в ПКО объекта в обработчик "После загрузки" добавить
Объект.Движения.Хозрасчетный.Записывать = Истина;
Не помогло.
Как переносить движения таких документов?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Разумеется они есть.
Вопрос в другом....
Как отобрать нужные движения при переносе документа. Движения могут быть по разным регистрам. В том числе и независимым.
Например в случае переноса документа ОперацияБух, я в обработчике "После выгрузки" просто циклом обхожу все движения и говорю Записывать = Истина. Все работает. С реализацией это не проходит.
А как отобрать нужные записи из РС, РБ.... в обработчиках я не знаю(
Вопрос в другом....
Как отобрать нужные движения при переносе документа. Движения могут быть по разным регистрам. В том числе и независимым.
Например в случае переноса документа ОперацияБух, я в обработчике "После выгрузки" просто циклом обхожу все движения и говорю Записывать = Истина. Все работает. С реализацией это не проходит.
А как отобрать нужные записи из РС, РБ.... в обработчиках я не знаю(
(8) Так и сделано. Проблема в том, что если стоит ручная корректировка, движения выгружаются(они есть в файле), но не загружаются.
Я попробовал перегружать этот документ по тем же самым правилам через Универсальный обмен данными в формате XML. Эта обработка движения переносит корректно.
Я попробовал перегружать этот документ по тем же самым правилам через Универсальный обмен данными в формате XML. Эта обработка движения переносит корректно.
Таки расковырял я, что происходит. Странно, что за столько лет существования КД 2, до сих пор нет внятной информации.... Погуглив, пришел к выводу, что у большинства "специалистов 1С"(если что, я себя не считаю специалистом), нормальных знаний, как оно работает нет. Или, какие-то безумные решения на сотни строк кода, или обезьянья правка типовых обменов. Шаг в лево или право = проблемы.
Применительно к моей задаче.
Проблема в том, что при загрузке объекта, он сначала просто записывается. Т. е. он в БД уже есть. Соответственно,
Т. е. запись объекта без проверок не работает. Объект уже в БД и записан. И при попытке проведения работает стандартный код, как и при обычном проведении.
Но, т. к. стоит "ручная корректировка", проводки по регистрам не делаются. В результате получаем пустые проводки.
Решение простое и логичное. Т. к. документ переносится с движениями, т. е., как есть, смысла его проводить нет.... Зачем переносить движения, если они все равно будут перезаписаны. Вроде логично.
Ну и пишем в обработчике ПКО "Перед загрузкой"
На этом все. Документ после загрузки не проводится, а остается, как есть со всеми проводками...
К слову, "1С специалисты" предлагают, какие-то алгоритмы, типа получить движения, потом записать объект, потом записать движения и т. д. Просто для переноса движений...
Применительно к моей задаче.
Проблема в том, что при загрузке объекта, он сначала просто записывается. Т. е. он в БД уже есть. Соответственно,
Обмен.Загрузка = Истина
Т. е. запись объекта без проверок не работает. Объект уже в БД и записан. И при попытке проведения работает стандартный код, как и при обычном проведении.
Но, т. к. стоит "ручная корректировка", проводки по регистрам не делаются. В результате получаем пустые проводки.
Решение простое и логичное. Т. к. документ переносится с движениями, т. е., как есть, смысла его проводить нет.... Зачем переносить движения, если они все равно будут перезаписаны. Вроде логично.
Ну и пишем в обработчике ПКО "Перед загрузкой"
РежимЗаписи = "Запись";
На этом все. Документ после загрузки не проводится, а остается, как есть со всеми проводками...
К слову, "1С специалисты" предлагают, какие-то алгоритмы, типа получить движения, потом записать объект, потом записать движения и т. д. Просто для переноса движений...
(10) Мне кажется, вы здесь уже гоните. Вам предлагали такие решения, т.к. никто ваших правил не видел, и как там реализован перенос движений (и реализован ли он вообще) никто кроме вас не знает. КД - это всего лишь инструмент, а алгоритм конвертации может быть каким угодно.
(13) Ну, что бы не быть голословным.
В статье на данном сайте предлагается такой вариант, для переноса документов с движениями:
В обработке "Выгрузка структуры конфнигурации"(MD83Exp) выставить чекбоксы выгружать регисты, выгружать движения.
Ну и алгоритм в обработчике "После загрузки".
Может оно и работает. Я не проверял. Но очевидно, что у автора отсутствует понимание, как работает КД.
1. Регистры выгружать для переноса движений документов не надо. Достаточно иметь правила
конвертации регистров. Они в документах представлены, как табличные части...
Для выгрузки движений должен стоят чекбокс "Выгружать движения документов". Этого достаточно.
2. Данный алгоритм масло масляное...
После загрузки документа в КД он не проводится сразу, а сначала просто записывается. После этого этапа,
собственно обмен уже завершен. Все дальнейшие операции с объектом идут по правилам
определенным для него в коде. Всякие проверки и т. д.
Делать, что-то с движениями на этом этапе, смысла никакого нет. Т. к.
Следующим этапом идет проведение объектов. Которое делается ровно так же, как и при оперативном(неоперативном) проведении...
Есть еще отдельный вид документов, "ОперацияБух" и подобные. Которые корректируют регистры. Вот их надо переносить с движениями. Т. к. у них отсутствует механизм проведения. И указать в обработчике ПКО после загрузки:
По умолчанию стоит ложь. И если так не сделать. Получим документ с пустыми табличными частями(корректировками регистров).
Из всего этого следует логичный вывод, если делается перенос документа с движениями. Надо сделать так, что бы он после записи не проводился.
Для этого достаточно указать в ПКО перед загрузкой
и все.
Тут есть один минус. Если надо, как-то определять надо объект провести или таки оставить, как есть. В этом обработчике отсутствует ссылка на объект.
В этом случае тот же код помещаем в ПКО "Перед выгрузкой". Там есть "Источник", который представляет собой объект.ссылка.
Ну, а что бы не копипастить. Идем в глобальный обработчик "Перед конвертацией объекта" и там пишем, что-то типа такого.
Пожалуй на этом я данную тему закончу. Всем спасибо.
В статье на данном сайте предлагается такой вариант, для переноса документов с движениями:
В обработке "Выгрузка структуры конфнигурации"(MD83Exp) выставить чекбоксы выгружать регисты, выгружать движения.
Ну и алгоритм в обработчике "После загрузки".
МетаданныеОбъекта = Объект.Метаданные();
Если Метаданные.Документы.Содержит(МетаданныеОбъекта) тогда
ДвиженияВсе = Объект.Движения;
МассивДвижений = новый Массив;
Для каждого СтрокаДвижения из ДвиженияВсе Цикл
МассивДвижений.Добавить(СтрокаДвижения.Выгрузить());
КонецЦикла;
Объект.Записать(РежимЗаписиДокумента.Запись);
ИИ = 0;
Для Каждого ЭлеменМассива из МассивДвижений Цикл
//Загрузим движения обратно
НаборЗаписей = Объект.Движения[ИИ];
НаборЗаписей.Прочитать();
НаборЗаписей.Загрузить(ЭлеменМассива);
НаборЗаписей.Записать();
ИИ = ИИ +1;
КонецЦикла;
КонецЕсли;
ПоказатьМожет оно и работает. Я не проверял. Но очевидно, что у автора отсутствует понимание, как работает КД.
1. Регистры выгружать для переноса движений документов не надо. Достаточно иметь правила
конвертации регистров. Они в документах представлены, как табличные части...
Для выгрузки движений должен стоят чекбокс "Выгружать движения документов". Этого достаточно.
2. Данный алгоритм масло масляное...
После загрузки документа в КД он не проводится сразу, а сначала просто записывается. После этого этапа,
собственно обмен уже завершен. Все дальнейшие операции с объектом идут по правилам
определенным для него в коде. Всякие проверки и т. д.
Делать, что-то с движениями на этом этапе, смысла никакого нет. Т. к.
Следующим этапом идет проведение объектов. Которое делается ровно так же, как и при оперативном(неоперативном) проведении...
Есть еще отдельный вид документов, "ОперацияБух" и подобные. Которые корректируют регистры. Вот их надо переносить с движениями. Т. к. у них отсутствует механизм проведения. И указать в обработчике ПКО после загрузки:
Для Каждого элемент Из Объект.Движения Цикл
элемент.Записывать = Истина;
КонецЦикла
По умолчанию стоит ложь. И если так не сделать. Получим документ с пустыми табличными частями(корректировками регистров).
Из всего этого следует логичный вывод, если делается перенос документа с движениями. Надо сделать так, что бы он после записи не проводился.
Для этого достаточно указать в ПКО перед загрузкой
РежимЗаписи = "Запись";
Тут есть один минус. Если надо, как-то определять надо объект провести или таки оставить, как есть. В этом обработчике отсутствует ссылка на объект.
В этом случае тот же код помещаем в ПКО "Перед выгрузкой". Там есть "Источник", который представляет собой объект.ссылка.
Ну, а что бы не копипастить. Идем в глобальный обработчик "Перед конвертацией объекта" и там пишем, что-то типа такого.
Попытка
Если Источник.РучнаяКорректировка Тогда
РежимЗаписи = "Запись";
КонецЕсли
Исключение
КонецПопытки;
Пожалуй на этом я данную тему закончу. Всем спасибо.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот