Выгрузка документа за датой запрета редактирования ссылкой

1. cargobird 308 17.04.15 22:30 Сейчас в теме
Доброго времени!
Возникла необходимость выгружать документы за датой запрета редактирования ссылкой. Конфигурации УТ 10.3 и БП 2.0.
Но возникла такая проблема.
Возможно это не так, но выглядит примерно следующим образом.
Если в документ, выгружаемый ссылкой, попадает номенклатура, которая содержится в других документах, но уже выгружаемых целиком, то в этих самых документах она пропадает.
То есть в табличной части документа, выгружаемого целиком в некоторых строках может пропасть номенклатура. У других - контрагент. И т.д.
Подскажите пожалуйста, в чем может быть закавыка...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Caspersky 17.04.15 23:57 Сейчас в теме
(1) cargobird,
1. Выгрузке данных пофиг, ой, все равно на дату запрета.
2. При загрузке, используется режим ОбменДанными.Загрузка=Истина, при котором ДатаЗапрета также не проверяется вроде...
Продиагностируйте проблему:
Выгрузите файл из источника, посмотрите его содержимое, для проблемных документов, если в выгруженном файле есть "потерянные" данные, значит "трабл" при загрузке в приемник...
Если же в файле уже нет "потеряшек", то при выгрузке.
Давайте сначала определимся с местом возникновения проблемы
3. cargobird 308 18.04.15 07:42 Сейчас в теме
(2) Caspersky, спасибо за отклик!

Для того, чтобы выгружаемый документ не вызывал изменений в БП (и соответственно не откидывал границу последовательности на себя) были сделано следующее.

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

Так вот здесь дополнительно дата документа сравнивается датой границы по организации, и в случае если меньше также выгружается ссылкой.
	Если Параметры.СписокГраницЗапретаИзмененияДанных.Количество() > 0 Тогда
		Если ОбщегоНазначения.ЕстьРеквизитДокумента("Организация", МетаданныеОбъекта) Тогда
			ВыбДатаГраница = Параметры.СписокГраницЗапретаИзмененияДанных.НайтиПоЗначению(ПараметрИсточник.Организация.ИНН);
			Если ВыбДатаГраница <> Неопределено Тогда
				Если ПараметрИсточник.Дата < Дата(ВыбДатаГраница.Представление) Тогда
					ТолькоПолучитьУзелСсылки = Истина;
					Сообщить("Дата объекта " + Строка(ПараметрИсточник) + " меньше границы запрета по организации, выгружен ссылкой.");
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
Показать

И плюсом к этому при загрузке документа анализируется, что если он по дате меньше даты запрета редактирования, то не замещается.
НеЗамещатьОбъект = Истина

Другого способа не изменять при загрузке документы, там, где по логике их и не надо изменять, пока не придумал.

Да, а самое, на мой взгляд, главное, только сообразил, что настройка выгрузки для номенклатуры в настройке обмена данными стоит Как "Выгружать по ссылке".
И получается, что если документ выгружается ссылкой, то содержащаяся в нем по ссылке номенклатура не встает в другие документы.

Номенклатура в файле выгрузки есть.
По файлу выгрузки увидел, что там, где номенклатура встречается первый раз, например, в документе, выгруженном по ссылке, то там и прописано значение, которое получилось в результате преобразования ссылки объекта, типа {"#",3d446917-2fb8-11d7-85a2-0050bae0a772,26:826b001e676fc01d11e49f8c142caac8}.
Но в других местах, где встречается эта номенклатура, прописана ссылка на это место. То есть, опять же, если документ выгружен только ссылкой без наполнения, то другие документы будут ссылаться на пустое место.
Как-то так, поправьте, пожалуйста, где не прав.
4. tusv 212 18.04.15 09:33 Сейчас в теме
(3) cargobird,
Другого способа не изменять при загрузке документы, там, где по логике их и не надо изменять, пока не придумал.

Можно же в приемнике проверять дату запрета редактирования и установить параметр НеЗамещатьОбъектПриЗагрузке = Истина;
Доступен в обработчике "При загрузке"
5. cargobird 308 18.04.15 10:07 Сейчас в теме
(4) tusv, да, так и сделал...
И плюсом к этому при загрузке документа анализируется, что если он по дате меньше даты запрета редактирования, то не замещается.

И это было сделано в первую очередь.
Сейчас, честно говоря, затрудняюсь точно вспомнить, для чего понадобился дополнительный контроль ДО конвертации объекта (с COM-соединением).
По-моему установка признака НеЗамещатьОбъект срабатывала не во всех случаях, и решили сделать в самом начале обмена.

Больше всего интересует вопрос, прав ли я в том, что номенклатура, попадая в документ, выгружаемый ссылкой, становится пустой в документах, которые выгружаются целиком.
Если это нигде в конвертации не исправляется, тогда или продолжать мучиться с этим дальше, всякий раз повторно выгружая документы с битой номенклатурой, или включать в настройке обмена выгрузку номенклатуры не по ссылке, а вообще всю зарегистрированную.
Но тогда в БП повалит всё подряд, что имеет к ней отношение, и что не имеет.
7. tusv 212 18.04.15 11:24 Сейчас в теме
(5) cargobird,
Сейчас, честно говоря, затрудняюсь точно вспомнить, для чего понадобился дополнительный контроль ДО конвертации объекта (с COM-соединением).

Скорее всего для оптимизации объема передаваемых данных. Иначе смысла не вижу.

Больше всего интересует вопрос, прав ли я в том, что номенклатура, попадая в документ, выгружаемый ссылкой, становится пустой в документах, которые выгружаются целиком.

Если Объекта нет в приемнике, то да. Прав. Вроде бы как бы Новый объект загружен, а на самом деле нет, но в таблицу загруженных объектов уже попал. ИМХО
Если оптимизация объема важна. То можно выгружать документы в Обратном порядке, а проводить документы в хронологическом порядке в обработчике "После загрузки данных".
6. Caspersky 18.04.15 11:15 Сейчас в теме
(3) cargobird, Обратите внимание на флаг "Не запоминать выгруженные объекты" в ПКО, попробуйте установить для номенклатуры, и произвести выгрузку...
cargobird; +1 Ответить
8. tusv 212 18.04.15 11:41 Сейчас в теме
(6) Caspersky, Если в (3) так не хило завернули, то "Не запоминать выгруженные объекты" явно не катит:)
10. cargobird 308 18.04.15 11:46 Сейчас в теме
(8) tusv, отчего же, дня не проходит, как обнаруживается какая-нибудь неизвестная но очень полезная возможность)
15. tusv 212 18.04.15 12:42 Сейчас в теме
(10) cargobird, Ну как бы для меня галочка "Не запоминать выгруженные объекты" только для теста. Она очень плохая при большом объеме. По тому как уже выгруженная ссылка выгружается как встретилась. То есть 100 раз встретилась, 100 выгрузилась.

КД очень мощный инструмент. и если параметр "НеЗамещатьОбъектПриЗагрузке" не работает, то это значит, что это просто переменная.
Проверяется просто. Сообщить(НеЗамещатьОбъектПриЗагрузке); Ругнется, значит в этом обработчике не работает
19. cargobird 308 18.04.15 12:56 Сейчас в теме
(15) tusv, по поводу параметра...
КД очень мощный инструмент. и если параметр "НеЗамещатьОбъектПриЗагрузке" не работает, то это значит, что это просто переменная.


В мануале обработчика объекта "При загрузке":
НеЗамещатьОбъект - Булево - Если установить значение Истина, то существующий объект информационной базы не будет изменен.
Также и у меня...
Или куда-то не туда смотрю?
22. tusv 212 18.04.15 13:52 Сейчас в теме
(19) cargobird, Смотри для чего все сделано в Выгрузке Такое ощущение, что писал правила выгрузки очень подкованный человек. То есть выгрузка оптимальна, если в источнике ни чего нового на даты запрета не вносили, что возможно только теоритически. На практике же меняют, что попало. Да еще документ с подписью Ген директора предъявят. Тут надо кричать Палундра, Караул, как Вы будете сводить учет или как то обходить. Это же наша работа.
Если параметр не замещать не работает, то можно загруженный объект вернуть разными способами. Отказ, Объект модифицирован. и тупо, веруть его к исходному состоянию программно.
что то типа
ГраницаЗапрета=ПроверитьЗапретНаДокумент();
Если ГраницаЗапрета и ОбъектНайден Тогда
   ЗаполнитьЗначенияСвойств(Объект,Объект.Ссылка);
   Для Каждого ТЧ из Объект.Метаданные().ТабличныеЧасти Цикл
       Объект[тч.Имя].Загрузить(Объект.Ссылка{Тч.Имя});
   КонецЦикла;
КонецЕсли;
9. cargobird 308 18.04.15 11:43 Сейчас в теме
(6) Caspersky, из серии "Учите матчасть", понимаю...) Спасибо, обязательно попробую.
11. cargobird 308 18.04.15 12:19 Сейчас в теме
(6) Caspersky, поставил "Не запоминать выгруженные объекты" у всех справочников, по которым идет выгрузка по ссылке, залил правила в торговлю.
Вылетает при обмене, даже ошибку не выдает. Залил старые правила обратно. Выгрузилось нормально. Думаю, что не так...
12. Caspersky 18.04.15 12:24 Сейчас в теме
(11) cargobird, При выгрузке "вылетает", т.е. файл выгрузки не формируется?
13. cargobird 308 18.04.15 12:30 Сейчас в теме
(12) Caspersky, да, сваливается в дамп, файл сформировать не успевает.
14. Caspersky 18.04.15 12:35 Сейчас в теме
(13) cargobird,
где номенклатура встречается первый раз, например, в документе, выгруженном по ссылке, то там и прописано значение, которое получилось в результате преобразования ссылки объекта, типа {"#",3d446917-2fb8-11d7-85a2-0050bae0a772,26:826b001e676fc01d11e49f8c142caac8}.
Но в других местах, где встречается эта номенклатура, прописана ссылка на это место

Выше описано поведение при кэшировании объектов;совпадение???)
ПОпробуйте отключить свои обработчики, и выгрузить данные с отключенным кэшированием.
Врядли "падение" при выгрузке, напрямую связано с вкл. кэширования.
17. cargobird 308 18.04.15 12:50 Сейчас в теме
(14) Caspersky, со старыми правилами - включенными обработчиками и отключенным кэшированием - выгрузка прошла нормально.
Выше - да, описано кэширование как есть, спасибо за разъяснение терминологии)
21. cargobird 308 18.04.15 13:23 Сейчас в теме
(14) Caspersky, прошу прощения, туплю немного. Да, попробую с отключенным кэшированием и отключенными обработчиками.
Пока же на файловой и скульной базах - одна и таже торговля разных периодов - выгрузка с отключенным кэшированием и включенными обработчиками валит базы в дамп.
23. cargobird 308 18.04.15 16:39 Сейчас в теме
(14) Caspersky, получен предварительный итог. В дамп валит справочник контрагентов.
26. cargobird 308 20.04.15 10:17 Сейчас в теме
(14) Caspersky, (24) artfa, поставил флаг "Не запоминать выгруженные" у справочников номенклатуры, банковских счетов и валют, по ним чаще всего встречались пустые объекты.
Пока обмен идет нормально...
16. tusv 212 18.04.15 12:46 Сейчас в теме
(13) cargobird, А что ты хотел. Вся память сожрана. Я говорю это плохая галочка
18. cargobird 308 18.04.15 12:53 Сейчас в теме
(16) tusv, что странно, потому что к тому времени, когда я скорректировал правила, объектов для выгрузки было немного.
В понедельник придет сисадмин - попрошу посмотреть память сервера в момент выгрузки со включенным кэшированием, если скакнет - ваша правда)
20. tusv 212 18.04.15 13:20 Сейчас в теме
(18) cargobird,
что странно, потому что к тому времени, когда я скорректировал правила, объектов для выгрузки было немного.

Ну при включенном параметре Получать только узел ссылки это вполне возможно
24. artfa 58 20.04.15 02:43 Сейчас в теме
Валится из-за зацикливания.
25. cargobird 308 20.04.15 07:20 Сейчас в теме
(24) artfa, да, вот здесь дополнительно к обсуждаемой теме тоже приходили к зацикливанию.
Обмен по плану обмена, не выгружаются объекты
Не пойму только, из-за чего это может быть, так как у справочников, подчиненных контрагентам флага "Не запоминать выгруженные..." не стоит.
Оставьте свое сообщение

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