|
КД. При массовой загрузке появляются дубли элементов. | ☑ | ||
---|---|---|---|---|
0
Голубушка
14.07.16
✎
12:14
|
Есть модифицированные правила выгрузки остатков из бух. 77 в БП 3.0 . В правилах заявлено из 7.70.594 в 3.0.43.101. Правила для модификации были взяты из обработки «ПереносДанныхИзИнформационныхБаз1СПредприятия77» макет «ACC_xml», Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.43.101).
Суть . Выгружаем ввод остатков для 62 счета , в базе бухгалтерии (БП 3.0) уже есть документы текущего периода, выгруженные из УТ, т.е. справочник «Контрагенты» уже содержит некоторое количество элементов. В правилах «Контрагенты» заполнен обработчик «Поля поиска» и обработчик «При загрузке», при загрузке устанавливается «НеЗамещатьОбъект» истина если «ОбъектНайден». Кроме этого, в правилах «ВводНачальныхОстатков» для элемента «Контрагент» из таблицы «РасчетыСКонтрагентами» установлена галка «не замещать значение свойства у существующих объектов в приемнике». Выгружаем документа из 77, загружаем в 8 . Проблема. При загрузке, некоторые контрагенты дублируются, список дулей всегда одинаковый . Дубли представляют из себя элементы с заполненными полями, но не всеми , а только теми , что в правилах установлены для поиска. Элементы дублей присутствуют в документе выгрузки остатков. Если ограничить выгрузку несколькими элементами, сформировать документ выгрузки остатков только для нескольких дублирующихся контрагентов, восстановить состояние базы до загрузки и загрузить , то все прекрасно загружается, дублей нет , т.е. ссылки прекрасно находятся при загрузке. В чем может быть затык при полной загрузке? |
|||
1
Garykom
гуру
14.07.16
✎
12:17
|
Кривые правила, правьте их
Сделать "не создавать объекты а только переносить по ссылке" для реквизитов доков |
|||
2
Голубушка
14.07.16
✎
12:31
|
А если контрагента в базе загрузки нет и он для нее является новым? Я могу получить неопределенные ссылки в строках таблицы.
|
|||
3
Голубушка
14.07.16
✎
12:34
|
Для ограниченной выгрузки те же правила "прямые", для полной "кривые", я уже не знаю где их править.
|
|||
4
Garykom
гуру
14.07.16
✎
12:46
|
(2) Контрагентов выгружайте через правило выгрузки контрагентов с правильным поиском и созданием только по УИД.
|
|||
5
Голубушка
14.07.16
✎
12:51
|
Я выгружаю из 77, т.е. УИД нет, поля поиска "ИНН,КПП,Наименование,ЭтоГруппа". В обработчике «Поля поиска» устанавливаем СтрокаИменСвойствПоиска = "ИНН, КПП" , если ИНН в базе выгрузки пустой, то СтрокаИменСвойствПоиска = "Наименование". Я что-то делаю неправильно?
|
|||
6
Garykom
гуру
14.07.16
✎
12:53
|
(5) тогда все логично, вам с таками требованиями придется поиск контрагентов кодом своим описать с Если ... Тогда ... ИначеЕсли ...
|
|||
7
Голубушка
14.07.16
✎
13:28
|
Что значит "кодом своим описать"? Загрузчик "УниверсальныйОбменДаннымиXML", организует поиск по полям поиска, а требования я описала в обработчике.
К тому же, я уже отмечала, что на небольшом объеме выгружаемых данных все работает корректно. Проблема выявляется только при полном объеме загрузки. |
|||
8
Pro-tone
14.07.16
✎
13:42
|
сдается мне, что поля поиска вообще не срабатывают у вас, может не включена галка в ПКО "продолжить поиск по полям поиска"
|
|||
9
ИУБиПовиц
14.07.16
✎
13:45
|
А галка продолжить поиск если не найден по гуиду взведена? длина реквизитов одинакова? а то у меня было как то что стояла галка приводить к длине и из за этого не находилось.
|
|||
10
Голубушка
14.07.16
✎
14:03
|
(8)(9) для правил выгрузки из баз 77 это галки ПКО "Искать объект приемника по внутреннему идентификатору объекта источника", "Продолжить поиск по полям поиска, если по идентификатору объект приемника не найден" недоступны. Так же , свойство ПКС ".. привести к длине" недоступно.
Эти вещи для 77 обыгрывают в обработчиках правил, но в данном случае ничего из этого нет. |
|||
11
Garykom
гуру
14.07.16
✎
14:08
|
||||
12
Голубушка
14.07.16
✎
14:36
|
(10)Это только для если "Исходная" из семейства 8 , для 77 этого нет, т.к. ИД в 77 намного короче чем в 8.
|
|||
13
Garykom
гуру
14.07.16
✎
14:48
|
(12) Теперь понятно
можно код "заполнен обработчик «Поля поиска»"? |
|||
14
Голубушка
14.07.16
✎
15:03
|
//Для синхронизации контрагентов надо использовать следующий алгоритм:
//• если вид контрагента в ОМКМ-7 отличен от «Индивидуальный предприниматель» и «Частное лицо», то проверяем, является ли контрагент резидентом (сброшен ли в ОМКМ-7 признак «ЮЛ_ЗаПределамиРФ»); //• ЮЛ-резидентов ищем по паре "ИНН, КПП"; //• ЮЛ-нерезидентов (клиентов, у которых в ОМКМ-7 признак «ЮЛ_ЗаПределамиРФ» установлен) - по уникальному идентификатору, записанному в справочнике «СоответствиеОбъектов» и переданному при выгрузке данных; //• если вид контрагента – «Индивидуальный предприниматель» или «Частное лицо», то проверяем заполнен ли ИНН; //• если ИНН заполнен, то ведем поиск по нему; //• если ИНН не заполнен – ищем контрагента по наименованию. Если ПараметрыОбъекта<> Неопределено Тогда //УстанавливатьУОбъектаВсеСвойстваПоиска = Ложь; Если ОбщиеПроцедурыФункции.РежимОтладкиАлгоритмов = 1 Тогда ТекстСообщения = НСтр("ru = ' Поля поиска: %1. Наименование : %2.'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ПараметрыОбъекта["ИДД"],СвойстваПоиска["Наименование"]); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецЕсли; Если ЗначениеЗаполнено(ПараметрыОбъекта["Резидент"]) И ПараметрыОбъекта["Резидент"]= 0 Тогда //для нерезидентов Если ЗначениеЗаполнено(ПараметрыОбъекта["ИДД"]) Тогда НаборЗаписей=РегистрыСведений.КМ_СинхронизацияОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ИсточникДанных.Установить(Справочники.КМ_ИсточникиДанных.TRADE); НаборЗаписей.Отбор.ТипСсылкиНаОбъект.Установить("Справочник.Контрагенты"); НаборЗаписей.Отбор.УникальныйИдентификатор.Установить(ПараметрыОбъекта["ИДД"]); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество()> 0 Тогда //нашли по ИД ЗаписьНабора=НаборЗаписей[0]; СсылкаНаОбъект = ЗаписьНабора.СсылкаНаОбъект; ПрекратитьПоиск= Истина; Иначе // продолжим поиск Если ЗначениеЗаполнено(СвойстваПоиска["ИНН"]) Тогда СтрокаИменСвойствПоиска = "ИНН, КПП"; Иначе СтрокаИменСвойствПоиска = "Наименование"; КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(ПараметрыОбъекта["Резидент"]) И ПараметрыОбъекта["Резидент"]= 2 Тогда //«Индивидуальный предприниматель» или «Частное лицо» Если ЗначениеЗаполнено(СвойстваПоиска["ИНН"]) Тогда СтрокаИменСвойствПоиска = "ИНН"; Иначе СтрокаИменСвойствПоиска = "Наименование"; КонецЕсли; Иначе // продолжим поиск для резидентов Если ЗначениеЗаполнено(СвойстваПоиска["ИНН"]) Тогда СтрокаИменСвойствПоиска = "ИНН, КПП"; Иначе СтрокаИменСвойствПоиска = "Наименование"; КонецЕсли; КонецЕсли; КонецЕсли; |
|||
15
Голубушка
14.07.16
✎
15:05
|
Выгружаются только резиденты, поэтому первая часть идентификации по РС синхронизации можно пропустить.
|
|||
16
Pro-tone
14.07.16
✎
15:11
|
(14) насколько я помню СтрокаИменСвойствПоиска задействуется если включена галка "продолжить поиск по полям поиска", поэтому возможно просто в этот код у вас не заходит. Я бы копал короче в коде уже обработки "Универсальный обмен". Ставьте точку останова в кусок кода где происходит сам поиск объекта. А так вам больше и лучше, чем там никто здесь не подскажет.
|
|||
17
Pro-tone
14.07.16
✎
15:13
|
(16) если окажется что я прав, то в ПослеЗагрузки() ставите свой алгоритм поиска по наименованию и все
|
|||
18
Garykom
гуру
14.07.16
✎
15:19
|
||||
19
Garykom
гуру
14.07.16
✎
15:21
|
(18)+ Хотя это бесполезно наверно будет. Тогда да только "После загрузки".
|
|||
20
Бледно Золотистый
14.07.16
✎
15:21
|
Разве Если ЗначениеЗаполнено(ПараметрыОбъекта["Резидент"]) И ПараметрыОбъекта["Резидент"]= 0 не всегда ЛОЖЬ?
|
|||
21
Голубушка
14.07.16
✎
15:24
|
(14) "Копала", заходит и ищет. Это просто мистика какая-то, при полной выгрузке появляется ФИКСИРОВАННЫЙ список дублей, т.е. они всегда одни и те же, т.е. можно предположить что проблема в данных. Если выгрузить остатки только для контрагента , который задваивается , то все нормально он не дублируется, при отладке показывает что все находит без проблем.
|
|||
22
Garykom
гуру
14.07.16
✎
15:26
|
(21) У всех контрагентов ИНН заполнены в 77?
|
|||
23
Голубушка
14.07.16
✎
15:32
|
(20) нет не ложь , если узел есть и его значение = 0
|
|||
24
Голубушка
14.07.16
✎
15:33
|
(22) не у всех к тому же есть за двоеные ИНН
|
|||
25
Бледно Золотистый
14.07.16
✎
15:34
|
(23) Чета сумневаюсь сильно, ПараметрыОбъекта["Резидент"] - вернет же число, а ноль проверку не пройдет.
|
|||
26
Голубушка
14.07.16
✎
15:37
|
(25) Посмотрела повнимательней, да вы правы, заложенная логика не соответствует коду, исправлю. Но в данной ситуации все контрагенты резиденты, поэтом у всех параметр 1 или 2.
|
|||
27
Голубушка
14.07.16
✎
15:44
|
(18) при установленной галке ситуация не меняется, то же фиксированный список дублей.
|
|||
28
Garykom
гуру
14.07.16
✎
15:47
|
(27) В 77 есть дубли по ИНН согласно (24), при переносе хотим слить в одного контрагента? Или перенести как есть в 77?
|
|||
29
Голубушка
14.07.16
✎
15:58
|
(28) слить, к тому слить на того, который в 8 уже есть, большинство контрагентов из базы источника находят себя в базе приемника и только 120 задваиваются, при этом в документе ввода остатков стоит именно дубль с "кривым" договором, договор для таких контрагентов также заполнен только полями поиска ссылок.
|
|||
30
Голубушка
14.07.16
✎
16:04
|
(28) Проверила, на момент выгрузки остаток есть только на одном контрагенте, поэтому вопрос о "слить" не стоит.
|
|||
31
Garykom
гуру
14.07.16
✎
16:22
|
(30) А такого нету:
1. ИП Иванов ИНН 123 2. ИП Иванов ИНН пусто 3. ИП Сидоров ИНН 123 ? |
|||
32
Голубушка
14.07.16
✎
16:27
|
(31) есть конечно, но я проверила несколько дулей, ИНН дубля в выгрузке присутствует 1 раз, т.е. остаток есть только у одного контрагента, т.е. на момент выгрузки можем считать уникальным.
|
|||
33
Garykom
гуру
14.07.16
✎
16:40
|
(32) тогда это не баг это фича
|
|||
34
Голубушка
14.07.16
✎
16:43
|
(33) мне не до шуток, я не знаю где еще покопать, мне кажется я уже испробовала все.
|
|||
35
Garykom
гуру
14.07.16
✎
17:03
|
(34) Никаких шуток вы думаете что при загрузке (31) будет всего один контрагент "ИП Иванов ИНН 123" ?
Как бы не так, все зависит на кого/каких и в каком порядке будут доки грузится. Поиск например строка 2 обнуляет ИНН в базе 8-ки, и далее поиск строки 3 по ИНН которого нету дает дубль. А новая загрузка строки 1 восстановит иванову инн на 123. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |