Вход | Регистрация

  1  2
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как ограничить кол-во элементов в транзакции в обмене через УниверсальныйОбменДаннымиXML?

v7: Как ограничить кол-во элементов в транзакции в обмене через УниверсальныйОбменДаннымиXML?
Я
   DenYuliya
 
28.11.17 - 10:47
Валится с ошибкой "Недостаточно памяти", все советуют "Выгружай по частям", а я что-то не могу понять, где это настраивается, и настраивается ли вообще, или  надо обработину править?
Где в выгрузки из УТ 10 в УТ 11 - знаю, там прямо галочка есть, "выгружать в транзакциях".

Гружу с ТиС в УТ 11, через УниверсальныйОбменДаннымиXML, правила типовые для обмена ТиС - УТ 11, но дописанные.
 
 
   DenYuliya
 
101 - 30.11.17 - 17:07
(98) справочник Контрагенты и связанные с ним (ФизЛица, Собственные ЮрЛица, Сторонние ЮрЛица). Даже без Номенклатуры.

Попробовала выгрузить совсем типовыми, из комплекта поставки.
Доходит до 4 ГБ (3,9) и вываливается.

Там и так зацикливанию не откуда взяться, а уж в Типовыт тем более вряд ли.
Меня смущает, это то, что при запуске "проверки корректности данных" валится куча ошибок - например, собств юр.лица без сопоставленных контрагентов, некорректные ИНН и ОГРН, и т.д.
Это ведь вряд ли влияет глобально? потому что данную проверку можно проигнорить.
   Franchiser
 
102 - 30.11.17 - 17:21
Для начала посчитай сколько у тебя элементов в каждом справочнике, может имеет смысл перенести всё на верхний уровень - убрать иерархию. Потом переносить каждый справочник отдельно порциями например по диапазону кодов. Справочник контрагенты у тебя будет переноситься по ссылкам при переносе других справочников, поэтому нужно подумать а нужно ли его отдельно переносить.
   DenYuliya
 
103 - 30.11.17 - 17:39
(102) разве не другие справочники переносятся по ссылкам из "Контрагенты"?

"Потом переносить каждый справочник отдельно порциями например по диапазону кодов" - я не знаю (очень хочу, но не могу понять от слова совсем, и где посмотреть на примере - найти не могу), как это сделать. А то давно бы уже сделала.

Как альтернативу, думаю такой вариант: в каждом ПКО и ПВД поставить условие:
Если Источник.ПометкаУдаления = 1; Тогда 
 Отказ = 1;
КонецЕсли;

И поиграться с галкой "не запоминать выгруженные объекты" в ПКО.
Потом по очереди ставить/снимать пометку удаления с групп Контрагентов в Источнике, и выгружать их. Но не уверена, что идея будет работать.
   DenYuliya
 
104 - 30.11.17 - 17:59
(102)
в спр. Контрагенты 45 000 объектов
в спр. Стор Ю.Л 45 000 объектов
в спр. Физ Лица 4 600 объектов
   Franchiser
 
105 - 01.12.17 - 00:06
(103) добавляешь на форму обработки выгрузки 2 числовых реквизита: КодС и КодПо.
Далее анализирушь код конкретного справочника в ПКО в обработчике ПередВыгрузкой. При необходимости строковый код приводишь к числовому. Если код не входит в диапазон пишешь Отказ =1.
   Franchiser
 
106 - 01.12.17 - 00:08
(104) вообще объектов не так много, очень странно что не выгружается.
   Franchiser
 
107 - 01.12.17 - 00:11
Если в контрагентах стоит ссылка на сторонние юл, то конечно выгружай контрагентов по диапазону кодов, юл перенесется по ссылкам
   Franchiser
 
108 - 01.12.17 - 00:12
Физ лица вообще не понятно как связаны с контрагентами, и можно перенести отдельно
   DenYuliya
 
109 - 01.12.17 - 00:14
Ребят, ну подскажите пожалуйста пример, как делать этот чертов отбор по количеству выгружаемых элементов?
Я правда честно-честно не знаю, куда копать :(.

Создала параметры КолВоВыгружаемыхЭлементовНачало и КолВоВыгружаемыхЭлементовНачалоКонец, тип Число, с пометкой "редактировать в диалоге".

Потом надо создать алгоритм, запихнуть в него эти параметры...

Что-то из серии
СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");
СпрКонтр.ВыбратьЭлементы(0);
Пока СпрКонтр.ПолучитьЭлемент() >= КолВоВыгружаемыхЭлементовНачало И < КолВоВыгружаемыхЭлементовКонец  Цикл    
///Что то тут надо делать

Если СпрКонтр.ПолучитьЭлемент()= КолВоВыгружаемыхЭлементовКонец Тогда
    Прервать;
КонецЕсли:

КонецЦикла;

Но это ерунда и неправильно, конечнно((.
Может есть типовой пример, или статья какая-нибудь, где описывается, как это сделать?
   Franchiser
 
110 - 01.12.17 - 00:14
Проверь ещё что в справочнике контрагентов нет косяков: например есть ссылка самого на себя, может быть есть группы у которых родителями являются они же.
 
 Рекламное место пустует
   DenYuliya
 
111 - 01.12.17 - 00:15
(103) не увидела ваши сообщения. Сейчас, прочитаю...
   DenYuliya
 
112 - 01.12.17 - 00:17
(110) оке, завтра проверю. У меня удаленки нет, к сожалению.
(107) да, стоит. Но я в отборах (на форме обработки) выбирала только Контрагенты_Партнеры - та же ошибка.
ФЛ и СвоиЮрЛица нормально выгружаются.
Но там по 5 000 - 8 000 объектов, а не по 45 000
   Franchiser
 
113 - 01.12.17 - 00:18
В ПКО контрагенты в ПередВыгрузкой:
Если (Число(Источник.Код)) < кодС или (число(источник.код)>КодПо)
Тогда
Отказ =1;
КонецЕсли;
   Franchiser
 
114 - 01.12.17 - 00:20
Можно делать не по коду а по первой букве наименование контрагента, все аналогично
   DenYuliya
 
115 - 01.12.17 - 00:20
(107) - вот в этом и весь затык. Я не понимаю, как реализовать вот это самое "выгружай контрагентов по диапазону кодов".
В (109) примерно как я это себе представляю. Но...И в типовых правилах ТиС -УТ все Алгоритмы пересмотрела, нигде примера выгрузки по счетчику нет.
   DenYuliya
 
116 - 01.12.17 - 00:22
(114) вы даже не представляете, какое огроменное спасибо за пример! Попробую так, хоть "вектор мысли" есть теперь
   Franchiser
 
117 - 01.12.17 - 00:27
Если (лев(нрег(источник.наименование,1)) <"а") или (лев(нрег(источник.наименование,1)) >"ж") тогда
Отказ=1:
КонецЕсли;
   Franchiser
 
118 - 01.12.17 - 00:31
И ещё нужно создавать не параметры КД, а кинуть на форму 7-ной обработки 2 реквизита типа число и их идентификаторы использовать в коде. Добавленные параметры удали.
   DenYuliya
 
119 - 01.12.17 - 12:27
Я тут данные проверить пытаюсь, тоже склоняюсь к тому, что где-то в данных ошибка.
Никто случайно не в курсе, если игнорировать проверку в типовом механизме перехода (например, чтобы на одного ЮЛ не ссылалось несколько контрагентов, и чтобы все ЮЛ были привязаны к контрагентам; заполненность ОГРН, ИНН и т.д) - это может вызвать проблемы с выгрузкой, или это только к некорректной инфе в новой базе может привести?
   DenYuliya
 
120 - 01.12.17 - 12:30
Дублей всяко-разных с одинаковыми ИНН + КПП + Наименованиями фигова гора....
Удалить - не дают.
   Йохохо
 
121 - 01.12.17 - 12:33
(120) галка "загружать данные в режиме ОбменДанными.Загрузка = Истина"
   Franchiser
 
122 - 01.12.17 - 12:36
ты можешь вывести в сообщить или во внешний лог инфу что выгружается? посмотри что выгружалось последнее когда отваливалась база. М.б. там все время зацикливание идет на 1-м элементе.
   Franchiser
 
123 - 01.12.17 - 12:38
не можеть быть что 4 гб оперативки не достаточно для выгрузки 45000 контрагентов!
   Йохохо
 
124 - 01.12.17 - 12:40
(122) галка "комментировать выгрузку объектов" )
   DenYuliya
 
125 - 01.12.17 - 12:41
(121) И тогда всё это г...этот мусор без проверок перенесется?   Как вариант, да.
Где-то я эту проверку даже встречала. Хотя не нравится мне это, эска криком кричит "поправьте данные"...
   DenYuliya
 
126 - 01.12.17 - 12:42
(124) она у меня стоит. Но что-то я в ней смотрела только на выделенное красным, а не на строку, когда обрубается.
   Franchiser
 
127 - 01.12.17 - 13:20
(124) там слишком много информации выводится. ну можно и с ней
   Franchiser
 
128 - 01.12.17 - 13:25
(126) нужно знать какие последние 20-30 объектов выгружаются
   DenYuliya
 
129 - 01.12.17 - 13:32
Обмен падает на первом же контрагенте. Либо сообщения не выдаются корректно, что вряд ли (ровно те же обработки - типовая и моя переписанная, на моей тестовой базе с теми же МД, но другими данными, нормально отрабатывают и выгружают)
   DenYuliya
 
130 - 01.12.17 - 13:37
http://dropmefiles.com/ZGD6Q

Посмотрела - ничего в этом объекте такого страшного нет, либо я не понимаю, куда смотреть.

Идет счетчик строк запроса, а счетчик контрагентов - не меняется. Память доходит до 3,98 Гб и падает.
   Ёпрст
 
131 - 01.12.17 - 14:00
(130) а чего ты не пользуешься универсальноый выгрузкой в xml ?!
   Ёпрст
 
132 - 01.12.17 - 14:01
там и фильтры есть и параметры. и галки по отдельным пвд
   DenYuliya
 
133 - 01.12.17 - 14:09
(132) я им до сих пор пользовалась, эффект тот же. Потом решила проверить - вдруг стандартной обработкой выгрузится. Неа, та же ерунда.Кстати, в ней тоже по ПВД есть отборы, если использовать режим "Расширенный", а не "Стандартный".

Того контрагента, на котором все зависало, переименовала, чтобы он "уполз" в другое место списка. Теперь зависает на другом, но так же первом в списке.
 
 
   Franchiser
 
134 - 01.12.17 - 14:37
Может быть у тебя очень большой результат запроса который складывается в dbf. Проверь в темповой папке какой размер файла в момент формирования выборки запроса.
   Franchiser
 
135 - 01.12.17 - 14:38
Что у тебя за ПВД, почему не сделать стандартную выборку?
   Йохохо
 
136 - 01.12.17 - 14:46
(133) словила бесконечный цикл , проверяй циклы по родитель, владелец, измерение рс
   DenYuliya
 
137 - 01.12.17 - 14:57
(136) Как это проверять, в КД прописывать проверки, или отладчиком в базе при выгрузке смотреть?

Меня смущает то, что и типовые не отрабатывают на рабочей базе. Следовательно, дело не том, что мои дописки - криворукие.
   DenYuliya
 
138 - 01.12.17 - 15:05
(135) на скрине запущена обычная, типовая выгрузка (правила перехода) с ИТС. Для выгрузки указаны ПВД "Контрагенты" и "Сторонние юр.лица" + стоит галка "Независимо вести партнеров и контрагентов".
Почему типовые ПВД реализованы именно так, а не иначе - не знаю, не задавалась этим вопросом.

Мои доработки касались в основном переноса добавленных в ТиС реквизитов Контрагентов, сам же типовой механизм в целом устраивает. Но в данный момент я тестирую хотя бы на типовых -  по ним тоже не проходит выгрузка.
В тестовой - норм и типовые, и мои дописанные.
   Йохохо
 
139 - 01.12.17 - 15:09
(137) проверить что при выгрузке второй раз у контрагента не будет стоять выгружать реквизиты объекта чтоли. Т.е. контрагент(контактная(контрагент - тут должен полететь только узел ссылки, без объектов реквизитов))
   DenYuliya
 
140 - 01.12.17 - 15:24
Это типовая галка какая-то, или дописать? Там помнится есть "Не выгружать объекты свойст источника"
   Йохохо
 
141 - 01.12.17 - 15:27
(140) она, если использовать одно ПКО надо ее как то взводить второй раз
   DenYuliya
 
142 - 01.12.17 - 15:33
Туплю...если использовать одно ПКО - в каком случае? Не уверена, что правильно поняла идею.

Может ее просто сразу поставить на ПКО, и все?
   DenYuliya
 
143 - 01.12.17 - 15:39
(121)
8. Загружать данные в режиме обмена
Позволяет отказать от излишних проверок на этапе загрузки данных.

Так у меня этап выгрузки не работает...Чем мне поможет загрузка :(.
Кстати, в обработке для 7.7 этой галки я не обнаружила.
   Franchiser
 
144 - 01.12.17 - 16:21
Приведи сюда код из ПВД выгрзки справочника Контрагенты
   Йохохо
 
145 - 01.12.17 - 16:35
(142) первый раз ПКО Контрагенты вызывается из ПВД, например, второй раз при выгрузке контактной информации как владелец. Если выгружать реквизиты как объекты получим подвид рекурсии класса бесконечная обыкновенная
(143) все просто - сейчас не нужно, потом нужно
   DenYuliya
 
146 - 01.12.17 - 16:49
(144) Основное "Контрагенты_Партнеры" 
//Денисенко

Если Объект.ЭтоГруппа() = 1 Тогда
    Отказ = 1;
КонецЕсли;
Если Объект.ПометкаУдаления() = 1 Тогда
    Отказ = 1;
КонецЕсли;
//


Если Параметры.НезависимоВестиПартнеровИКонтрагентов = 0 Тогда
    ОсновнойКонтрагентДляЮрлица = 0;
    СформироватьСоответствиеКонтрагентовИЮрЛиц();
    НомерНайденнойСтроки = 0;
    СоответствиеКонтрагентыЮрЛицо = Параметры.СоответствиеКонтрагентыЮрЛицо;
    Если СоответствиеКонтрагентыЮрЛицо.НайтиЗначение(Объект.ЮрФизЛицо, НомерНайденнойСтроки, "ЮрФизЛицо") = 1 Тогда
        ОсновнойКонтрагентДляЮрлица = СоответствиеКонтрагентыЮрЛицо.ПолучитьЗначение(НомерНайденнойСтроки, "Контрагент");
    КонецЕсли;    
    Если ОсновнойКонтрагентДляЮрлица <> Объект.ТекущийЭлемент() Тогда
        Отказ = 1;
    КонецЕсли;    
КонецЕсли;

Стандартная выборка.

Еще есть много промежуточных ПВД, например "СторонниеЮрЛица_Контрагенты"
   DenYuliya
 
147 - 01.12.17 - 16:52
(145) В приведенном примере речь о вызове в рамках одного ПКО?
   DenYuliya
 
148 - 01.12.17 - 16:53
(145) отключить выгрузку КИ и посмотреть, что будет?
   Franchiser
 
149 - 01.12.17 - 17:16
(146) Это точно ПВД?
Если так, то процедура СформироватьСоответствиеКонтрагентовИЮрЛиц() у тебя выполняется в цикле.
 
 Рекламное место пустует
   Franchiser
 
150 - 01.12.17 - 17:22
(145) контактная информация по должна выгружаться позже чем контрагенты, с учетом того что стоит галка запоминать выгруженные рекурсии быть не должно.
   DenYuliya
 
151 - 01.12.17 - 17:25
(149) да, абсолютно точно ПВД.
мои доработки - только условие на пометку удаления, которые не работают.
Остальное - типовее некуда.
   DenYuliya
 
152 - 01.12.17 - 17:27
А почему - в цикле, я там напрямую цикла не вижу.
Разве что в этой части 
"ПолучитьЗначение(НомерНайденнойСтроки, "Контрагент")";что-то не так может быть
   Franchiser
 
153 - 01.12.17 - 17:28
(151) да я тебе верю. Понавставляй сообщить в ПВД и в ПКО Контрагенты, или запусти замер производительности. Нужно опеределить за счет чего получается рекурсия.
   Franchiser
 
154 - 01.12.17 - 17:29
(152) потому что когда идет стандартная выборка этот код выполняется столько раз сколько у тебя есть контрагентов
   DenYuliya
 
155 - 01.12.17 - 17:31
(154) ну да, я примерно так и подумала. Меня смущает то, что по-идее согласно "политики партии" ТиС, если я верно понимаю, кол-во СторонннихЮрЛиц = кол-во Контрагентов, верно?
   Franchiser
 
156 - 01.12.17 - 17:33
(155) я не знаю что у тебя в СформироватьСоответствиеКонтрагентовИЮрЛиц(). Может быть там проверяется параметр СоответствиеКонтрагентыЮрЛицо и если он только пустой, то в этом случае происходит запонения соответствия, иначе возврат.
   Franchiser
 
157 - 01.12.17 - 17:35
К тебя рекурсия происходит на первом же элементе, так что по идее она сразу должна быть видна
   Franchiser
 
158 - 01.12.17 - 17:36
Ищи причину в ПКО, в ПВД ничего особенного пока не вижу
   DenYuliya
 
159 - 01.12.17 - 17:50
сли ТипЗначенияСтр(Источник) = "Строка" Тогда
    Возврат 1;
КонецЕсли;

Если Источник.ЭтоГруппа() = 1 Тогда
    Возврат 1;
КонецЕсли;

Если Источник.ПометкаУдаления() = 1 Тогда 
    Возврат 1;
КонецЕсли;

Если ТипЗначенияСтр(ВходящиеДанные) <> "СписокЗначений" Тогда
    ВходящиеДанные = СоздатьОбъект("СписокЗначений");
КонецЕсли;

ВходящиеДанные.Установить("Клиент", 0);
ВходящиеДанные.Установить("Поставщик", 0);
ВходящиеДанные.Установить("ПрочиеОтношения", 0);

Если Параметры.СтатистикаПоДоговорам_СортКонтрагент = -1 Тогда
    СформироватьСтатистикуПоДоговорам();
КонецЕсли;

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

Если (ВходящиеДанные.Получить("Клиент") = 0) И (ВходящиеДанные.Получить("Поставщик") = 0) Тогда
    ВходящиеДанные.Установить("ПрочиеОтношения", 1);
КонецЕсли;


Это ПКО. Тоже наитиповейший ((
   DenYuliya
 
160 - 01.12.17 - 17:51
(153) счас попробую...
   Franchiser
 
161 - 01.12.17 - 17:56
В контрагентах есть ссылка на ЮрЛица или другие объекты, где может стоять ссылка на контрагентов?
   DenYuliya
 
162 - 01.12.17 - 18:24
В ПКС для ПКО "Контрагенты_Партнеры" вроде бы нету. Код непосредственно в ПКО посмотрю, идею поняла.
Но вообще ссылок на спр. Контрагенты в обмене целая куча.
   Franchiser
 
163 - 01.12.17 - 23:58
У тебя и ПВД и ПКО называется одинаково Контрагенты_Партнеры?
   DenYuliya
 
164 - 02.12.17 - 16:35
(163) неа, по-разному.
   DenYuliya
 
165 - 04.12.17 - 12:03
В общем, условно нашла, в чем дело.
Помогло (153) и (158), огромное спасибо!
Ошибка оказалась в этой части ПКО "Контр_партнеры": (перед выгрузкой)
Если Параметры.СтатистикаПоДоговорам_СортКонтрагент = -1 Тогда    
    Сообщить("тыц договор");
    СформироватьСтатистикуПоДоговорам();
КонецЕсли;

Я не вникала глубоко, что это за параметр, он прописан жестко на вкладке Основная -"Перед выгрузкой данных" и потом где-то присваивается.
Я просто поменяла 
Параметры.СтатистикаПоДоговорам_СортКонтрагент    =  -1;
на
Параметры.СтатистикаПоДоговорам_СортКонтрагент    = 0;

Понимаю, что это неправильно, но с таким костылем хотя бы идет выгрузка.
правда с ошибкой, но на выгружаемых контр. вроде бы не влияет.
Ошибка исполнения обработчика:  ПКО_ПередВыгрузкой_Контрагенты_Партнеры
  - Значение не представляет агрегатный объект (НайтиЗначение) 

Попробую сейчас какой-нибудь костыль сделать, Типа "попытка-исключение", или проверять на что-нибудь... В общем, чтобы этот кусрк не ошибку выдавал, а просто не попадал в условие.
  1  2

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует