Конвертация данных 2.1 Перенос проводок документов с признаком ручная корректировка движений

1. Andrew189100 19 22.05.24 11:17 Сейчас в теме
Подскажите, кто знает...
В случае если у документа сделана ручная корректировка движений(стоит чекбокс "Ручная корректировка").
Проводки не переносятся. Хотя в КД правила конвертации для регистров есть.
Пробовал в ПКО объекта в обработчик "После загрузки" добавить
Объект.Движения.Хозрасчетный.Записывать = Истина;

Не помогло.
Как переносить движения таких документов?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 22.05.24 11:21 Сейчас в теме
(1)Вероятно, есть ПВД/ПКО для регистра бухгалтерии, нужно смотреть в них
3. Andrew189100 19 22.05.24 12:18 Сейчас в теме
(2) Разумеется они есть.
Вопрос в другом....
Как отобрать нужные движения при переносе документа. Движения могут быть по разным регистрам. В том числе и независимым.
Например в случае переноса документа ОперацияБух, я в обработчике "После выгрузки" просто циклом обхожу все движения и говорю Записывать = Истина. Все работает. С реализацией это не проходит.
А как отобрать нужные записи из РС, РБ.... в обработчиках я не знаю(
4. nomad_irk 76 22.05.24 12:28 Сейчас в теме
(3)
Как отобрать нужные движения при переносе документа. Движения могут быть по разным регистрам. В том числе и независимым.

Исходя из правил это должно быть понятно.
5. Andrew189100 19 22.05.24 23:31 Сейчас в теме
(4) Точно... Не убавить не прибавить. :D
6. Oldsad 23.05.24 02:54 Сейчас в теме
(3) независимые регистры можно переносить либо отдельным правилом (если надо все перенести), либо при выгрузке документа (если в нём есть ссылка на документ)
7. Andrew189100 19 23.05.24 10:01 Сейчас в теме
(6) Штука в том, что движения документа выгружаются без всяких танцев с бубном. Они не загружаются)
8. RustamZz 23.05.24 10:44 Сейчас в теме
(3) При выгрузке описания метаданных, если поставить галочку выгружать движения документа, то регистры отображаются, как ТЧ документа. Попробуйте выгрузить их так.
9. Andrew189100 19 23.05.24 17:43 Сейчас в теме
(8) Так и сделано. Проблема в том, что если стоит ручная корректировка, движения выгружаются(они есть в файле), но не загружаются.
Я попробовал перегружать этот документ по тем же самым правилам через Универсальный обмен данными в формате XML. Эта обработка движения переносит корректно.
10. Andrew189100 19 23.05.24 22:00 Сейчас в теме
Таки расковырял я, что происходит. Странно, что за столько лет существования КД 2, до сих пор нет внятной информации.... Погуглив, пришел к выводу, что у большинства "специалистов 1С"(если что, я себя не считаю специалистом), нормальных знаний, как оно работает нет. Или, какие-то безумные решения на сотни строк кода, или обезьянья правка типовых обменов. Шаг в лево или право = проблемы.
Применительно к моей задаче.
Проблема в том, что при загрузке объекта, он сначала просто записывается. Т. е. он в БД уже есть. Соответственно,
Обмен.Загрузка = Истина

Т. е. запись объекта без проверок не работает. Объект уже в БД и записан. И при попытке проведения работает стандартный код, как и при обычном проведении.
Но, т. к. стоит "ручная корректировка", проводки по регистрам не делаются. В результате получаем пустые проводки.

Решение простое и логичное. Т. к. документ переносится с движениями, т. е., как есть, смысла его проводить нет.... Зачем переносить движения, если они все равно будут перезаписаны. Вроде логично.
Ну и пишем в обработчике ПКО "Перед загрузкой"
РежимЗаписи = "Запись";

На этом все. Документ после загрузки не проводится, а остается, как есть со всеми проводками...

К слову, "1С специалисты" предлагают, какие-то алгоритмы, типа получить движения, потом записать объект, потом записать движения и т. д. Просто для переноса движений...
Fox-trot; Raskad; +2 Ответить
11. Oldsad 24.05.24 02:18 Сейчас в теме
(10) можно просто было написать "всем спасибо, разобрался в чем дело, вот решение проблемы"
12. Andrew189100 19 24.05.24 08:04 Сейчас в теме
(11) Да, вы правы. Как-то слишком эмоционально получилось. Просто, кучу времени убил, что бы написать волшебную строчку...
Если кого-то невольно обидел. "Прошу отнестись с пониманием"(с).
Видео с извинениями уж не буду записывать :-)
Raskad; Oldsad; +2 Ответить
13. WasiliyMay 8 24.05.24 09:01 Сейчас в теме
(10) Мне кажется, вы здесь уже гоните. Вам предлагали такие решения, т.к. никто ваших правил не видел, и как там реализован перенос движений (и реализован ли он вообще) никто кроме вас не знает. КД - это всего лишь инструмент, а алгоритм конвертации может быть каким угодно.
14. Andrew189100 19 24.05.24 14:23 Сейчас в теме
(13) Ну, что бы не быть голословным.
В статье на данном сайте предлагается такой вариант, для переноса документов с движениями:
В обработке "Выгрузка структуры конфнигурации"(MD83Exp) выставить чекбоксы выгружать регисты, выгружать движения.
Ну и алгоритм в обработчике "После загрузки".
МетаданныеОбъекта = Объект.Метаданные();
Если Метаданные.Документы.Содержит(МетаданныеОбъекта) тогда
	ДвиженияВсе = Объект.Движения;
	МассивДвижений = новый Массив;
	Для каждого СтрокаДвижения из ДвиженияВсе Цикл
		МассивДвижений.Добавить(СтрокаДвижения.Выгрузить());
	КонецЦикла;
	Объект.Записать(РежимЗаписиДокумента.Запись);
			
	ИИ = 0; 
	Для Каждого ЭлеменМассива из МассивДвижений Цикл
	//Загрузим движения обратно
	НаборЗаписей = Объект.Движения[ИИ];
	НаборЗаписей.Прочитать();
	НаборЗаписей.Загрузить(ЭлеменМассива);
	НаборЗаписей.Записать();
	ИИ = ИИ +1; 	
	КонецЦикла;
КонецЕсли;
Показать


Может оно и работает. Я не проверял. Но очевидно, что у автора отсутствует понимание, как работает КД.

1. Регистры выгружать для переноса движений документов не надо. Достаточно иметь правила
конвертации регистров. Они в документах представлены, как табличные части...
Для выгрузки движений должен стоят чекбокс "Выгружать движения документов". Этого достаточно.

2. Данный алгоритм масло масляное...

После загрузки документа в КД он не проводится сразу, а сначала просто записывается. После этого этапа,
собственно обмен уже завершен. Все дальнейшие операции с объектом идут по правилам
определенным для него в коде. Всякие проверки и т. д.
Делать, что-то с движениями на этом этапе, смысла никакого нет. Т. к.
Следующим этапом идет проведение объектов. Которое делается ровно так же, как и при оперативном(неоперативном) проведении...
Есть еще отдельный вид документов, "ОперацияБух" и подобные. Которые корректируют регистры. Вот их надо переносить с движениями. Т. к. у них отсутствует механизм проведения. И указать в обработчике ПКО после загрузки:
Для Каждого элемент Из Объект.Движения Цикл
	элемент.Записывать = Истина;
КонецЦикла

По умолчанию стоит ложь. И если так не сделать. Получим документ с пустыми табличными частями(корректировками регистров).

Из всего этого следует логичный вывод, если делается перенос документа с движениями. Надо сделать так, что бы он после записи не проводился.
Для этого достаточно указать в ПКО перед загрузкой
РежимЗаписи = "Запись";
и все.
Тут есть один минус. Если надо, как-то определять надо объект провести или таки оставить, как есть. В этом обработчике отсутствует ссылка на объект.
В этом случае тот же код помещаем в ПКО "Перед выгрузкой". Там есть "Источник", который представляет собой объект.ссылка.
Ну, а что бы не копипастить. Идем в глобальный обработчик "Перед конвертацией объекта" и там пишем, что-то типа такого.
Попытка
	Если Источник.РучнаяКорректировка Тогда
		РежимЗаписи = "Запись";
	КонецЕсли
Исключение
КонецПопытки;


Пожалуй на этом я данную тему закончу. Всем спасибо.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот