![]() |
|
v7: Как ограничить кол-во элементов в транзакции в обмене через УниверсальныйОбменДаннымиXML? | ☑ | ||
---|---|---|---|---|
0
DenYuliya
28.11.17
✎
10:47
|
Валится с ошибкой "Недостаточно памяти", все советуют "Выгружай по частям", а я что-то не могу понять, где это настраивается, и настраивается ли вообще, или надо обработину править?
Где в выгрузки из УТ 10 в УТ 11 - знаю, там прямо галочка есть, "выгружать в транзакциях". Гружу с ТиС в УТ 11, через УниверсальныйОбменДаннымиXML, правила типовые для обмена ТиС - УТ 11, но дописанные. |
|||
1
1Сергей
28.11.17
✎
10:50
|
так, валится при выгрузке?
|
|||
2
DenYuliya
28.11.17
✎
10:52
|
Да
|
|||
3
DenYuliya
28.11.17
✎
10:53
|
Ошибка вроде 1000 раз обсуждалась, но нигде не смогла найти описания, как эту выгрузку по частям делать. Хотя все о ней говорят, видимо это такая элементарщина, что подразумевается, что все о ней знают))
|
|||
4
1Сергей
28.11.17
✎
10:53
|
нет клюшек под рукой. А разве в УниверсальныйОбменДаннымиXML нельзя выбрать период?
|
|||
5
DenYuliya
28.11.17
✎
10:54
|
Просто выгружать по-очереди разные справочники, а не все галки разом - пробовала. Та же ерунда, пользователи выгружаются, а вот "Контрагенты" и "Сторонние юрлица"- валится с ошибкой, там 16 000 тысяч элементов, не считая связанных.
|
|||
6
DenYuliya
28.11.17
✎
10:55
|
(4) можно, но что это даст? Я не доки гружу, а справочник.
Пробовала установить период с начала тек.года - та же фигня. Сервер стоит 64 бит, физ. память есть. Но это мало влияет, я так понимаю. |
|||
7
Ёпрст
гуру
28.11.17
✎
10:56
|
(0) валится то где хоть ? на этапе выгрузки ?
|
|||
8
Ёпрст
гуру
28.11.17
✎
10:58
|
если да, то переписать поделку выгрузки и не использовать v7plus.dll и её объекты для xml
|
|||
9
DenYuliya
28.11.17
✎
10:58
|
(7) да, почти сразу.
|
|||
10
DenYuliya
28.11.17
✎
10:58
|
(8) "поделку выгрузки"? Это очипятка, или я не знаю, что это такое?
|
|||
11
DenYuliya
28.11.17
✎
10:59
|
(0), ах да - галка "Не запоминать выгруженные объекты" - у всех ПКО стоит.
|
|||
12
Ёпрст
гуру
28.11.17
✎
11:01
|
(10) типовая поделка универсальной выгрузки из клюшек, написана, если не изменяет память на объектах v7plus.dll.
Нужно переписать её на другую объектную модель, как в снеговике. и усё. |
|||
13
Ёпрст
гуру
28.11.17
✎
11:02
|
например, на MSXML
|
|||
14
DenYuliya
28.11.17
✎
11:06
|
))))) "клюшки" - это 1С 77, снеговик - 1С 8)))? Умеете вы настроение поднимать, не слышала такого)).
Советы из серии "увеличить адресную память", "снять ограничение размера файла подкачки" результата не дали((. https://helpf.pro/help/view/153.htm И все же о каких фильтрах речь? "или выгружать данные по частям, ограничивая фильтрами"... (в данном примере ответ № 2, но данные совет встречается часто). Это о галках на выгружаемые объекты и на дату, или есть еще какие-то штатные способы, о которых я не в курсе? Насчет (12) - попробую, если ничего другого не получится, но страшно подумать, сколько это времени займет. |
|||
15
DenYuliya
28.11.17
✎
11:19
|
http://programmist1s.ru/nedostatochno-pamyati-1c/ вот еще та же история насчет адресной памяти. Правда тут речь о 1С 8, но принцип думаю тот же.
Сделала - не помогло. |
|||
16
Ёпрст
гуру
28.11.17
✎
11:22
|
(14) ограничить можешь, делав в пвд свои выборки данных.
Например, ограничив количеством выгружаемых объектов. |
|||
17
DenYuliya
28.11.17
✎
11:27
|
(16) оо, спасибо огромное, думаю это как раз то, что надо! А можно пример, где посмотреть, "что писать", или ссыль какую-нибудь? Какими командами жто самое "Количество элементов в транзакции" задать-то?
|
|||
18
Ёпрст
гуру
28.11.17
✎
11:39
|
(17) для выгрузки, транзакция не нужна и лишняя.
|
|||
19
Ёпрст
гуру
28.11.17
✎
11:40
|
ну и в выгрузке её вообще нет :)
|
|||
20
Franchiser
гуру
28.11.17
✎
11:43
|
(0) можно патч поставить на 4 Гб в 7ку, тогда скорее всего выгрузит
|
|||
21
Franchiser
гуру
28.11.17
✎
11:44
|
(13) есть что то готовое, уже кто то переписывал?
|
|||
22
DenYuliya
28.11.17
✎
11:45
|
(20) что это, где это))?
|
|||
23
DenYuliya
28.11.17
✎
11:47
|
(19) ну это я образно, "транзакция".
Имела в виду, какими "командами" ограничить в ПВД кол-во выгружаемых объектов, как это вообще делается? Наверняка этот велосипед уже до меня много раз был изобретен. |
|||
24
DenYuliya
28.11.17
✎
11:47
|
(21) меня терзают подозрения, что это такой гемор...В ПВД разобраться явно быстрее.
|
|||
25
Ёпрст
гуру
28.11.17
✎
11:50
|
(23) тупо считаешь количество элементов в справочнике и выгружаешь частями по номеру части, переданного в параметрах. Подойдёт при разовой выгрузке.
|
|||
26
Franchiser
гуру
28.11.17
✎
15:24
|
(22) есть приложение которое может пропатчить exe (в частности 1с7.7) и после этого будет выделяться памяти больше 2 Гб. Когда переходил на 8ку мне это очень помогло. Если найду могу скинуть на почту
|
|||
27
DenYuliya
28.11.17
✎
19:26
|
(26) была бы очень благодарна!
мелкие справочники выгружаются норм, а начиная с физлиц - вываливается. |
|||
28
DenYuliya
28.11.17
✎
19:41
|
Я просто не понимаю, где реализовывать эту "выгрузку партиями". Попробовала разобраться в семерочном коде обработки "Универсальная выгрузка данных XML"- мда...
А переписывать, как в 13 - "это вообще что такое"))? Тут еще одна непонятка...вот выгружу я, допустим, "мелкие" справочники (отдельно пользователи, физлица, ФИО физлиц и т.д) - а загружать их как, так же частями? Мне кажется это некорректно может загрузиться. |
|||
29
DenYuliya
28.11.17
✎
20:44
|
Хотела попробовать чит и не выгружать ненужные, пометив их на удаление.
В ПВД в "ПередВыгрузкой" написала: Если Объект.ПометкаУдаления = 1 Тогда Отказ = 1; КонецЕсли; А они все равно выгружаются,но с пометкой. |
|||
30
DenYuliya
28.11.17
✎
22:43
|
(25) это в запросе в ПВД делать надо? Как и прочие фильтры?
|
|||
31
Franchiser
гуру
29.11.17
✎
00:20
|
(28) в 13 предлагается исключить из обработки выгрузки все методы компоненты v7plus, и использовать другой объект. Я начинал переписывать на ns xmldom, но во что-то упёрся не помню. Dom модель все равно есть оперативную память, и т.к. инициализация идёт из процесса 1с 7.7 возникают те же самые ограничения на 2 Гб. Как сделать без dom модели я не разобрался.
|
|||
32
Franchiser
гуру
29.11.17
✎
00:23
|
(28) я выгружал по диапазонам букв с а до д и т.д. загружаешь, весь выгруженный файл. Потом как нашел патч от этого отказался
|
|||
33
Franchiser
гуру
29.11.17
✎
00:33
|
(27) попробуй это
http://www.ntcore.com/4gb_patch.php |
|||
34
Franchiser
гуру
29.11.17
✎
00:36
|
(27) естественно запускать потом 7ку нужно на Винде x64, чтобы получить дополнительные гб
|
|||
35
Йохохо
29.11.17
✎
00:51
|
(28) "красиво" будет найти верхнее, покрывающее ПВД, которое по ссылкам выгрузит всё
(30) как умеешь так и делаешь, вынеси параметр пользовательский и выгружай с НомерВыгрузки +1 по +1000 ВыборкаДанных - Запрос, Результат запроса, Выборка из результата запроса или произвольная коллекция выгружаемых объектов. Используется, когда способ выгрузки данных - Произвольный алгоритм. Если определить данную переменную, то обход коллекции и выгрузка объектов будет осуществляться автоматически. Сюда любую клооекцию |
|||
36
DenYuliya
29.11.17
✎
09:18
|
(33) спасибо! Буду пробовать! А редми к этой чудо-програмулине нет случайно нигде? А то на сайте описание ну очень подробное...
|
|||
37
DenYuliya
29.11.17
✎
09:55
|
(36) нашла exe-файл 1С 77, выбрала его, запустила из патча, потом нажала ок, перезагрузила систему.
Все правильно? А то что-то результата нет. |
|||
38
бомболюк
29.11.17
✎
10:03
|
маловероятно что памяти не хватает из-за объемом выгрузки, к тому же, как утверждает ТС, в самом ее начале. Скорее всего алгоритм зацикливается где то, и при этом еще и память утекает.
|
|||
39
DenYuliya
29.11.17
✎
10:32
|
(38) почему маловероятно? В демо-базе, где всего с десяток контрагентов, все выгружается и загружается в демо 8.3.
Из рабочей базы при этом выгрузка падает с ошибкой даже при попытке выгрузить абсолютно типовой обработкой с абсолютно типовыми правилами из комплекта поставки. |
|||
40
DenYuliya
29.11.17
✎
10:33
|
(38) в продолжение... Ну как в самом начале. Выгружаются около 10 000 объектов, а потом отваливается. Естественно (естественно же?) в результате файл с данными пустой.
|
|||
41
Йохохо
29.11.17
✎
10:43
|
(40) что то помнится, что сначала пишется в память в буфер, а потом на диск. Потребление памяти видно в диспетчере
Придется осваивать произвольный алгоритм |
|||
42
DenYuliya
29.11.17
✎
10:49
|
(41)Какой вывод я должна была сделать из 1 части? Ну да, потребление памяти видно в диспетчере.
Думаете, патч до 4 гб не поможет? Произвольный алгоритм - речь об отборе в ПВД с типом "произвольный"? А то я сразу про вкладку "алгоритмы" думаю. |
|||
43
бомболюк
29.11.17
✎
11:18
|
если есть утечка, описанная в (38), то нарастание размера выделенной памяти происходит не то что неравномерно, а лавинообразно, имеет смысл проконтролировать.
|
|||
44
DenYuliya
29.11.17
✎
11:44
|
(43) а как же (39)?
В случае, если бы имела место ошибка правил, то по типовым все выгружалось бы норм, и из демо-базы так же не выгружалось бы, разве нет? |
|||
45
бомболюк
29.11.17
✎
13:58
|
(44) зависит от данных. в демо выгрузку может не попасть какой нить проблемный элемент
|
|||
46
Йохохо
29.11.17
✎
14:09
|
(42) не знаю поможет или нет, можно рекомендовать взять процессэксплорер и посмотреть потребление, помнится там будет дочерний процесс чтото мсхмлблабла и когда он будет 900мБ все упадет, сама 7.7 при выгрузке не жрет ничего. А можно рекомендовать наконец разобраться с произвольным алгоритмом ПВД, умение делать тестовые выгрузки сэкономило бы уже месяц кмк.
Все галки сняли с пвд, поставили на УчПолитику выгрузили файл1, сняли, поставили Номенклатура, выгрузили файл2, сняли, поставили Контрагенты, в параметрах НомерВыгрузки 1 ШагКонтрагентов 1000, выгрузили файл3, поставили НомерВыгрузки 2,,, профит |
|||
47
DenYuliya
29.11.17
✎
15:05
|
(44) ну если только так...
написала в ПВД для Контрагентов СсылкаНаГруппу1 = Справочники.Контрагенты.НайтиПоКоду("00000001"); Если Объект.ПринадлежитЭлементу(СсылкаНаГруппу1) = 0 Тогда Отказ = 1; КонецЕсли; Ошибки валятся((. Чертов код 77. почему Справочники.Контрагенты.НайтиПоКоду("00000001"); не работает-то?(( |
|||
48
DenYuliya
29.11.17
✎
15:07
|
(42) давал бы мне еще кто поучиться толком...я сроду конвертации сложнее автоматических не юзала. Так-то согласна, что надо.
|
|||
49
бомболюк
29.11.17
✎
15:16
|
(48) у тя вроде выгрузка то из 7ки идет, а почему код 8шный тогда?
|
|||
50
DenYuliya
29.11.17
✎
15:19
|
(49) если честно, потому что на автомате пишу, как знаю, а оно не работает, собака :).
Семерку тоже в глаза раньше не видела. Нагуглила вроде бы, как искать по коду в 7.7: СпрКонтр = СоздатьОбъект("Справочник.Контрагенты"); СпрСотр.НайтиПоКоду(00000001); |
|||
51
DenYuliya
29.11.17
✎
15:19
|
*вторая строка СпрКонтр, конечно
|
|||
52
Franchiser
гуру
29.11.17
✎
15:30
|
(37) да, все верно. Если через диспетчер процессов объем памяти процеса 1с 7.8 перевалил за 3 гб, то патч работает. Процесс может дойти до 3,6 -3,7.
|
|||
53
DenYuliya
29.11.17
✎
15:34
|
(52) нашла такое в инете http://www.toolgir.ru/ispolzovanie-bolee-2gb-dlya-32-bit-prilozheniya/ :"Имейте в виде, что у программы нет обратного действия, поэтому в папке с изменяемым файлом она сохраняет его резервную копию с расширением .Backup."
У меня такой файл не создался почему-то((. |
|||
54
DenYuliya
29.11.17
✎
15:35
|
(49) а ПринадлежитЭлементу() в 7.7 тоже не работает, похоже? Не могу найти инфу про эту функцию в 7.7.
|
|||
55
бомболюк
29.11.17
✎
15:38
|
ПринадлежитГруппе(<?>)
BelongsToGroup(<?>) Синтаксис: ПринадлежитГруппе(<Группа>) Назначение: Метод проверяет, принадлежит ли указанной группе текущий элемент справочника (независимо от того, на каком нижележащем уровне он находится). Возвращает: 1 - если элемент принадлежит указанной группе , 0 - если нет. Параметры: <Группа> - выражение со значением группы справочника . |
|||
56
DenYuliya
29.11.17
✎
15:44
|
(55) нашла уже, спасибо.
СпрКонтр = СоздатьОбъект("Справочник.Контрагенты"); РезультатПоискаПоКоду = СпрКонтр.НайтиПоКоду(00000001); Если Объект.ПринадлежитГруппе(РезультатПоискаПоКоду) = 0 Тогда Отказ = 1; КонецЕсли; Как-то так, сейчас проверю, будет ли работать |
|||
57
бомболюк
29.11.17
✎
15:45
|
не будет
|
|||
58
DenYuliya
29.11.17
✎
15:47
|
потому что СоздатьОбъект не сработает?
|
|||
59
бомболюк
29.11.17
✎
15:47
|
потмоу что РезультатПоискаПоКоду = 0 или 1
|
|||
60
Franchiser
гуру
29.11.17
✎
15:48
|
(53) не знаю, попробуй ещё раз
|
|||
61
бомболюк
29.11.17
✎
15:48
|
еще чуть чуть и ты узнаешь что такое ТекущийЭлемент ;-)
|
|||
62
DenYuliya
29.11.17
✎
15:56
|
(61) Так?
СпрКонтр = СоздатьОбъект("Справочник.Контрагенты"); ТекКонтр = СпрКонтр.ТекущийЭлемент(); РезультатПоискаПоКоду = ТекКнтр.НайтиПоКоду(00000001); Если Не Объект.ПринадлежитГруппе(РезультатПоискаПоКоду) Тогда Отказ = 1; КонецЕсли; |
|||
63
Ёпрст
гуру
29.11.17
✎
16:11
|
(62) нет
|
|||
64
DenYuliya
29.11.17
✎
16:14
|
Поняла уже((.
|
|||
65
Ёпрст
гуру
29.11.17
✎
16:15
|
так, хотя бы
Спр = СоздатьОбъект("Справочник.Контрагенты"); Если Спр.НайтиПоКоду("00000001")=1 Тогда Отказ = 1-Объект.ПринадлежитГруппе(Спр.ТекущийЭлемент()); КонецЕсли; |
|||
66
Ёпрст
гуру
29.11.17
✎
16:16
|
ну и еще нужна проверка, что найденный справочник по коду - это группа
|
|||
67
Ёпрст
гуру
29.11.17
✎
16:17
|
и проще, ничего не искать по-коду, а передавать параметром ссылку на группу. Усё
|
|||
68
DenYuliya
29.11.17
✎
16:22
|
(66) Спр = СоздатьОбъект("Справочник.Контрагенты");
Если Спр.НайтиПоКоду("00000001")=1 И Спр.ЭтоГруппа() = 1 Тогда Отказ = 1-Объект.ПринадлежитГруппе(Спр.ТекущийЭлемент()); КонецЕсли; Про ТекЭлемент - поняла, логично. Ищу по коду я в общем списке значений, а потом с ТекЭлементом работаю. |
|||
69
Ёпрст
гуру
29.11.17
✎
16:24
|
(68) скобок не хватает в условии
|
|||
70
DenYuliya
29.11.17
✎
16:25
|
(67) согласна, примерно так и хотела -сначала понять, что такой метод вообще работает, а потом разбираться, как это в параметр запихнуть.
Единственное, я думала в качестве параметра сделать "Код" или "Наименование", и поставить галку "Редактируется в списке", или как-то так. Почему лучше ссылка, точнее и без проверки на ЭтоГруппа()? |
|||
71
DenYuliya
29.11.17
✎
16:26
|
(69) Если (Спр.НайтиПоКоду("00000001")=1) И (Спр.ЭтоГруппа() = 1) Тогда
Отказ = 1; КонецЕсли; Неужели эти скобки так важны? Вроде бы в 8.2 и без них отрабатывает. |
|||
72
Ёпрст
гуру
29.11.17
✎
16:37
|
(70) Потому, что ссылка однозначно определяет элемент, а код - может быть
а)не уникален б)отсутствовать г)изменён д)принадлежать элементу а не группе |
|||
73
DenYuliya
29.11.17
✎
16:41
|
мТаблицаПравилВыгрузки.УстановитьЗначение(мТаблицаПравилВыгрузки.ТекущаяСтрока(), Имя, Значение);
{C:\USERS\Users\DESKTOP\ОБМЕН ТИС - КА\ПРАВИЛА\77.ERT(50063)}: Неверный идентификатор колонки! Я же правильно делаю? В обработчике ПВД стандартного "ПередВыгрузкой". Суть сообщения примерно понимаю, но о какой колонке речь - не понятно... |
|||
74
DenYuliya
29.11.17
✎
16:49
|
Отказ =
1 - Объект.ПринадлежитГруппе(СпрКонтр.ТекущийЭлемент()); Может дело в этом самом "1 - "? Никаких колонок я не добавляла (явно во всяком случае), ТЗ не создавала... |
|||
75
Ёпрст
гуру
29.11.17
✎
16:51
|
(74) нет
|
|||
76
DenYuliya
29.11.17
✎
17:04
|
//Если Объект.ЭтоГруппа() = 1 Тогда
// Отказ = 1; //КонецЕсли; СпрКонтр = СоздатьОбъект("Справочник.Контрагенты"); Если (СпрКонтр.НайтиПоКоду("00000001")=1) И (СпрКонтр.ЭтоГруппа() = 0) Тогда Отказ = 1 - Объект.ПринадлежитГруппе(СпрКонтр.ТекущийЭлемент()); КонецЕсли; //Отказ = Объект.ПометкаУдаления(); Если Объект.ПометкаУдаления() = 1 Тогда Отказ = 1; КонецЕсли; Все, что сделала - это закоментировала 1 условие, и добавила второе. И все, куча ошибок валится(((. Это ПВД, "ПередВыгрузкой" |
|||
77
Ёпрст
гуру
29.11.17
✎
17:07
|
(76)
И (СпрКонтр.ЭтоГруппа() = 1) |
|||
78
DenYuliya
29.11.17
✎
17:10
|
Да, это у меня нормально стоит, я поправила уже.
Все равно с ошибкой валится. |
|||
79
DenYuliya
29.11.17
✎
17:11
|
Вот так на самом деле:
//Если Объект.ЭтоГруппа() = 1 Тогда // Отказ = 1; //КонецЕсли; СпрКонтр = СоздатьОбъект("Справочник.Контрагенты"); Если (СпрКонтр.НайтиПоКоду("00000001")=1) И (СпрКонтр.ЭтоГруппа() = 1) Тогда Отказ = 1 - Объект.ПринадлежитГруппе(СпрКонтр.ТекущийЭлемент()); КонецЕсли; Если Объект.ПометкаУдаления() = 1 Тогда Отказ = 1; КонецЕсли; |
|||
80
Ёпрст
гуру
29.11.17
✎
17:14
|
(79) если весь код оттуда выкидываешь, ошибка остаётся?
так ? :) |
|||
81
DenYuliya
29.11.17
✎
17:15
|
Весь добавленный? Сейчас попробую.
|
|||
82
DenYuliya
29.11.17
✎
17:21
|
(80) да...код закоментила - ошибка осталась. а в чем прикод *где тут смайл с квадратными глазами*?
|
|||
83
DenYuliya
29.11.17
✎
17:23
|
*прикол
Есть у меня одно подозрение.Сейчас проверю. |
|||
84
DenYuliya
29.11.17
✎
17:49
|
(79) ну...эта ошибка ушла. Видимо дело было в следующем: я запускала обработку "Групповое создание свойств и значений", по одному из советов "для оптимизации выгрузки" на каком-то из ресурсов.
Видимо что-то лишнее создалось. Зато появилась другая, уже при загрузке ((: Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1008)}: Ошибка при вызове метода контекста (Прочитать): Ошибка разбора XML: - [3058,59184] Фатальная ошибка: PCDATA invalid Char value 2 SystemId: file://C:/Users/USR1CV8.S1C.000/AppData/Local/Temp/v8_5D2F_1780.xml Данные все-таки перенеслись, но не те)))Перенеслись только группы без элементов в них, в том числе группа по коду 00000001 |
|||
85
Franchiser
гуру
29.11.17
✎
17:55
|
(84) есть какой-то непечатываемый символ, который в XML нельзя помещать. Нужно его найти)
|
|||
86
Franchiser
гуру
29.11.17
✎
18:04
|
найди в файле символ ALT + 2 (цифра набирается на цифровой клавиатуре), должен получится символ черный смайлик.
|
|||
87
DenYuliya
29.11.17
✎
18:11
|
И что мне с ним сделать?
Открыла файл правил в txt, вызвала смайлик... но вызывается где угодно, куда мышь наведешь. |
|||
88
Franchiser
гуру
29.11.17
✎
18:14
|
(87) зачем файл правил? нужно найти его в файле выгрузки и определить причину возникновения, скорее всего данные в 7-ке править нужно.
|
|||
89
Franchiser
гуру
29.11.17
✎
18:15
|
(87) ты хочешь сказать у тебя весь файл правил в смайликах?
|
|||
90
DenYuliya
29.11.17
✎
18:26
|
Нет, я ставлю мышь в первую строку, нажимаю ALT + 2, на этом месте высвечивается смайлик. В файле с данными то же самое.
|
|||
91
DenYuliya
29.11.17
✎
18:35
|
(88) загрузила правилами, которые пару дней назад без проблем работали - та же ошибка. Странно...
|
|||
92
Franchiser
гуру
29.11.17
✎
18:41
|
(90)все верно, копируй смайлик, потом ищи через Ctrl+f где он ест ещё.
|
|||
93
DenYuliya
29.11.17
✎
18:50
|
Кстати, насчет (52)
Сейчас в процессах памяти для 1С 77 56,2 кб. Это я ТИИ запустила сдуру еще утром... |
|||
94
Franchiser
гуру
29.11.17
✎
18:55
|
Память имеет смысл смотреть когда выгружаешь данные в xml
|
|||
95
DenYuliya
30.11.17
✎
09:54
|
(90) смайликов больше не нашла, зато помогло "Тестирование и исправление", и правда запись в Источнике некорректная была.
|
|||
96
DenYuliya
30.11.17
✎
10:51
|
(94) дошел до 3,79 Гб и отвалился ((
|
|||
97
DenYuliya
30.11.17
✎
11:48
|
Попытка отфильтровать по папке контрагента, похоже, оказалась провальной.
Выгружается как попало, полагаю из-за того, что в ТиС эта странная схема "Контрагенты- Стронние юр.лица", и написать ограничения только в ПВД "Контрагенты-Партнеры" недостаточно. Подозреваю, что надо делать какую-то связь между остальными связанными правилами (Физ.лица, Сторонние юр.лица, КонтрагентыВпартнера и т.д). Вопрос: возможно ли как-то наложить ограничения на весь процесс выгрузки? Некий "общий модуль". Если я наложу фильтры только на 1 ПВД - результат выходит некорректный. |
|||
98
Franchiser
гуру
30.11.17
✎
15:56
|
Ты выружаешь целиком справочники? Или остатки?
|
|||
99
Franchiser
гуру
30.11.17
✎
15:58
|
(96) у тебя большая утечка памяти, нужно разбираться в причинах. Может быть какое то зацикливание
|
|||
100
vicof
30.11.17
✎
16:01
|
(100) Сотка
|
|||
101
DenYuliya
30.11.17
✎
17:07
|
(98) справочник Контрагенты и связанные с ним (ФизЛица, Собственные ЮрЛица, Сторонние ЮрЛица). Даже без Номенклатуры.
Попробовала выгрузить совсем типовыми, из комплекта поставки. Доходит до 4 ГБ (3,9) и вываливается. Там и так зацикливанию не откуда взяться, а уж в Типовыт тем более вряд ли. Меня смущает, это то, что при запуске "проверки корректности данных" валится куча ошибок - например, собств юр.лица без сопоставленных контрагентов, некорректные ИНН и ОГРН, и т.д. Это ведь вряд ли влияет глобально? потому что данную проверку можно проигнорить. |
|||
102
Franchiser
гуру
30.11.17
✎
17:21
|
Для начала посчитай сколько у тебя элементов в каждом справочнике, может имеет смысл перенести всё на верхний уровень - убрать иерархию. Потом переносить каждый справочник отдельно порциями например по диапазону кодов. Справочник контрагенты у тебя будет переноситься по ссылкам при переносе других справочников, поэтому нужно подумать а нужно ли его отдельно переносить.
|
|||
103
DenYuliya
30.11.17
✎
17:39
|
(102) разве не другие справочники переносятся по ссылкам из "Контрагенты"?
"Потом переносить каждый справочник отдельно порциями например по диапазону кодов" - я не знаю (очень хочу, но не могу понять от слова совсем, и где посмотреть на примере - найти не могу), как это сделать. А то давно бы уже сделала. Как альтернативу, думаю такой вариант: в каждом ПКО и ПВД поставить условие: Если Источник.ПометкаУдаления = 1; Тогда Отказ = 1; КонецЕсли; И поиграться с галкой "не запоминать выгруженные объекты" в ПКО. Потом по очереди ставить/снимать пометку удаления с групп Контрагентов в Источнике, и выгружать их. Но не уверена, что идея будет работать. |
|||
104
DenYuliya
30.11.17
✎
17:59
|
(102)
в спр. Контрагенты 45 000 объектов в спр. Стор Ю.Л 45 000 объектов в спр. Физ Лица 4 600 объектов |
|||
105
Franchiser
гуру
01.12.17
✎
00:06
|
(103) добавляешь на форму обработки выгрузки 2 числовых реквизита: КодС и КодПо.
Далее анализирушь код конкретного справочника в ПКО в обработчике ПередВыгрузкой. При необходимости строковый код приводишь к числовому. Если код не входит в диапазон пишешь Отказ =1. |
|||
106
Franchiser
гуру
01.12.17
✎
00:08
|
(104) вообще объектов не так много, очень странно что не выгружается.
|
|||
107
Franchiser
гуру
01.12.17
✎
00:11
|
Если в контрагентах стоит ссылка на сторонние юл, то конечно выгружай контрагентов по диапазону кодов, юл перенесется по ссылкам
|
|||
108
Franchiser
гуру
01.12.17
✎
00:12
|
Физ лица вообще не понятно как связаны с контрагентами, и можно перенести отдельно
|
|||
109
DenYuliya
01.12.17
✎
00:14
|
Ребят, ну подскажите пожалуйста пример, как делать этот чертов отбор по количеству выгружаемых элементов?
Я правда честно-честно не знаю, куда копать :(. Создала параметры КолВоВыгружаемыхЭлементовНачало и КолВоВыгружаемыхЭлементовНачалоКонец, тип Число, с пометкой "редактировать в диалоге". Потом надо создать алгоритм, запихнуть в него эти параметры... Что-то из серии СпрКонтр = СоздатьОбъект("Справочник.Контрагенты"); СпрКонтр.ВыбратьЭлементы(0); Пока СпрКонтр.ПолучитьЭлемент() >= КолВоВыгружаемыхЭлементовНачало И < КолВоВыгружаемыхЭлементовКонец Цикл ///Что то тут надо делать Если СпрКонтр.ПолучитьЭлемент()= КолВоВыгружаемыхЭлементовКонец Тогда Прервать; КонецЕсли: КонецЦикла; Но это ерунда и неправильно, конечнно((. Может есть типовой пример, или статья какая-нибудь, где описывается, как это сделать? |
|||
110
Franchiser
гуру
01.12.17
✎
00:14
|
Проверь ещё что в справочнике контрагентов нет косяков: например есть ссылка самого на себя, может быть есть группы у которых родителями являются они же.
|
|||
111
DenYuliya
01.12.17
✎
00:15
|
(103) не увидела ваши сообщения. Сейчас, прочитаю...
|
|||
112
DenYuliya
01.12.17
✎
00:17
|
(110) оке, завтра проверю. У меня удаленки нет, к сожалению.
(107) да, стоит. Но я в отборах (на форме обработки) выбирала только Контрагенты_Партнеры - та же ошибка. ФЛ и СвоиЮрЛица нормально выгружаются. Но там по 5 000 - 8 000 объектов, а не по 45 000 |
|||
113
Franchiser
гуру
01.12.17
✎
00:18
|
В ПКО контрагенты в ПередВыгрузкой:
Если (Число(Источник.Код)) < кодС или (число(источник.код)>КодПо) Тогда Отказ =1; КонецЕсли; |
|||
114
Franchiser
гуру
01.12.17
✎
00:20
|
Можно делать не по коду а по первой букве наименование контрагента, все аналогично
|
|||
115
DenYuliya
01.12.17
✎
00:20
|
(107) - вот в этом и весь затык. Я не понимаю, как реализовать вот это самое "выгружай контрагентов по диапазону кодов".
В (109) примерно как я это себе представляю. Но...И в типовых правилах ТиС -УТ все Алгоритмы пересмотрела, нигде примера выгрузки по счетчику нет. |
|||
116
DenYuliya
01.12.17
✎
00:22
|
(114) вы даже не представляете, какое огроменное спасибо за пример! Попробую так, хоть "вектор мысли" есть теперь
|
|||
117
Franchiser
гуру
01.12.17
✎
00:27
|
Если (лев(нрег(источник.наименование,1)) <"а") или (лев(нрег(источник.наименование,1)) >"ж") тогда
Отказ=1: КонецЕсли; |
|||
118
Franchiser
гуру
01.12.17
✎
00:31
|
И ещё нужно создавать не параметры КД, а кинуть на форму 7-ной обработки 2 реквизита типа число и их идентификаторы использовать в коде. Добавленные параметры удали.
|
|||
119
DenYuliya
01.12.17
✎
12:27
|
Я тут данные проверить пытаюсь, тоже склоняюсь к тому, что где-то в данных ошибка.
Никто случайно не в курсе, если игнорировать проверку в типовом механизме перехода (например, чтобы на одного ЮЛ не ссылалось несколько контрагентов, и чтобы все ЮЛ были привязаны к контрагентам; заполненность ОГРН, ИНН и т.д) - это может вызвать проблемы с выгрузкой, или это только к некорректной инфе в новой базе может привести? |
|||
120
DenYuliya
01.12.17
✎
12:30
|
Дублей всяко-разных с одинаковыми ИНН + КПП + Наименованиями фигова гора....
Удалить - не дают. |
|||
121
Йохохо
01.12.17
✎
12:33
|
(120) галка "загружать данные в режиме ОбменДанными.Загрузка = Истина"
|
|||
122
Franchiser
гуру
01.12.17
✎
12:36
|
ты можешь вывести в сообщить или во внешний лог инфу что выгружается? посмотри что выгружалось последнее когда отваливалась база. М.б. там все время зацикливание идет на 1-м элементе.
|
|||
123
Franchiser
гуру
01.12.17
✎
12:38
|
не можеть быть что 4 гб оперативки не достаточно для выгрузки 45000 контрагентов!
|
|||
124
Йохохо
01.12.17
✎
12:40
|
(122) галка "комментировать выгрузку объектов" )
|
|||
125
DenYuliya
01.12.17
✎
12:41
|
(121) И тогда всё это г...этот мусор без проверок перенесется? Как вариант, да.
Где-то я эту проверку даже встречала. Хотя не нравится мне это, эска криком кричит "поправьте данные"... |
|||
126
DenYuliya
01.12.17
✎
12:42
|
(124) она у меня стоит. Но что-то я в ней смотрела только на выделенное красным, а не на строку, когда обрубается.
|
|||
127
Franchiser
гуру
01.12.17
✎
13:20
|
(124) там слишком много информации выводится. ну можно и с ней
|
|||
128
Franchiser
гуру
01.12.17
✎
13:25
|
(126) нужно знать какие последние 20-30 объектов выгружаются
|
|||
129
DenYuliya
01.12.17
✎
13:32
|
Обмен падает на первом же контрагенте. Либо сообщения не выдаются корректно, что вряд ли (ровно те же обработки - типовая и моя переписанная, на моей тестовой базе с теми же МД, но другими данными, нормально отрабатывают и выгружают)
|
|||
130
DenYuliya
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
|
там и фильтры есть и параметры. и галки по отдельным пвд
|
|||
133
DenYuliya
01.12.17
✎
14:09
|
(132) я им до сих пор пользовалась, эффект тот же. Потом решила проверить - вдруг стандартной обработкой выгрузится. Неа, та же ерунда.Кстати, в ней тоже по ПВД есть отборы, если использовать режим "Расширенный", а не "Стандартный".
Того контрагента, на котором все зависало, переименовала, чтобы он "уполз" в другое место списка. Теперь зависает на другом, но так же первом в списке. |
|||
134
Franchiser
гуру
01.12.17
✎
14:37
|
Может быть у тебя очень большой результат запроса который складывается в dbf. Проверь в темповой папке какой размер файла в момент формирования выборки запроса.
|
|||
135
Franchiser
гуру
01.12.17
✎
14:38
|
Что у тебя за ПВД, почему не сделать стандартную выборку?
|
|||
136
Йохохо
01.12.17
✎
14:46
|
(133) словила бесконечный цикл , проверяй циклы по родитель, владелец, измерение рс
|
|||
137
DenYuliya
01.12.17
✎
14:57
|
(136) Как это проверять, в КД прописывать проверки, или отладчиком в базе при выгрузке смотреть?
Меня смущает то, что и типовые не отрабатывают на рабочей базе. Следовательно, дело не том, что мои дописки - криворукие. |
|||
138
DenYuliya
01.12.17
✎
15:05
|
(135) на скрине запущена обычная, типовая выгрузка (правила перехода) с ИТС. Для выгрузки указаны ПВД "Контрагенты" и "Сторонние юр.лица" + стоит галка "Независимо вести партнеров и контрагентов".
Почему типовые ПВД реализованы именно так, а не иначе - не знаю, не задавалась этим вопросом. Мои доработки касались в основном переноса добавленных в ТиС реквизитов Контрагентов, сам же типовой механизм в целом устраивает. Но в данный момент я тестирую хотя бы на типовых - по ним тоже не проходит выгрузка. В тестовой - норм и типовые, и мои дописанные. |
|||
139
Йохохо
01.12.17
✎
15:09
|
(137) проверить что при выгрузке второй раз у контрагента не будет стоять выгружать реквизиты объекта чтоли. Т.е. контрагент(контактная(контрагент - тут должен полететь только узел ссылки, без объектов реквизитов))
|
|||
140
DenYuliya
01.12.17
✎
15:24
|
Это типовая галка какая-то, или дописать? Там помнится есть "Не выгружать объекты свойст источника"
|
|||
141
Йохохо
01.12.17
✎
15:27
|
(140) она, если использовать одно ПКО надо ее как то взводить второй раз
|
|||
142
DenYuliya
01.12.17
✎
15:33
|
Туплю...если использовать одно ПКО - в каком случае? Не уверена, что правильно поняла идею.
Может ее просто сразу поставить на ПКО, и все? |
|||
143
DenYuliya
01.12.17
✎
15:39
|
(121)
8. Загружать данные в режиме обмена Позволяет отказать от излишних проверок на этапе загрузки данных. Так у меня этап выгрузки не работает...Чем мне поможет загрузка :(. Кстати, в обработке для 7.7 этой галки я не обнаружила. |
|||
144
Franchiser
гуру
01.12.17
✎
16:21
|
Приведи сюда код из ПВД выгрзки справочника Контрагенты
|
|||
145
Йохохо
01.12.17
✎
16:35
|
(142) первый раз ПКО Контрагенты вызывается из ПВД, например, второй раз при выгрузке контактной информации как владелец. Если выгружать реквизиты как объекты получим подвид рекурсии класса бесконечная обыкновенная
(143) все просто - сейчас не нужно, потом нужно |
|||
146
DenYuliya
01.12.17
✎
16:49
|
(144) Основное "Контрагенты_Партнеры"
//Денисенко Если Объект.ЭтоГруппа() = 1 Тогда Отказ = 1; КонецЕсли; Если Объект.ПометкаУдаления() = 1 Тогда Отказ = 1; КонецЕсли; // Если Параметры.НезависимоВестиПартнеровИКонтрагентов = 0 Тогда ОсновнойКонтрагентДляЮрлица = 0; СформироватьСоответствиеКонтрагентовИЮрЛиц(); НомерНайденнойСтроки = 0; СоответствиеКонтрагентыЮрЛицо = Параметры.СоответствиеКонтрагентыЮрЛицо; Если СоответствиеКонтрагентыЮрЛицо.НайтиЗначение(Объект.ЮрФизЛицо, НомерНайденнойСтроки, "ЮрФизЛицо") = 1 Тогда ОсновнойКонтрагентДляЮрлица = СоответствиеКонтрагентыЮрЛицо.ПолучитьЗначение(НомерНайденнойСтроки, "Контрагент"); КонецЕсли; Если ОсновнойКонтрагентДляЮрлица <> Объект.ТекущийЭлемент() Тогда Отказ = 1; КонецЕсли; КонецЕсли; Стандартная выборка. Еще есть много промежуточных ПВД, например "СторонниеЮрЛица_Контрагенты" |
|||
147
DenYuliya
01.12.17
✎
16:52
|
(145) В приведенном примере речь о вызове в рамках одного ПКО?
|
|||
148
DenYuliya
01.12.17
✎
16:53
|
(145) отключить выгрузку КИ и посмотреть, что будет?
|
|||
149
Franchiser
гуру
01.12.17
✎
17:16
|
(146) Это точно ПВД?
Если так, то процедура СформироватьСоответствиеКонтрагентовИЮрЛиц() у тебя выполняется в цикле. |
|||
150
Franchiser
гуру
01.12.17
✎
17:22
|
(145) контактная информация по должна выгружаться позже чем контрагенты, с учетом того что стоит галка запоминать выгруженные рекурсии быть не должно.
|
|||
151
DenYuliya
01.12.17
✎
17:25
|
(149) да, абсолютно точно ПВД.
мои доработки - только условие на пометку удаления, которые не работают. Остальное - типовее некуда. |
|||
152
DenYuliya
01.12.17
✎
17:27
|
А почему - в цикле, я там напрямую цикла не вижу.
Разве что в этой части "ПолучитьЗначение(НомерНайденнойСтроки, "Контрагент")";что-то не так может быть |
|||
153
Franchiser
гуру
01.12.17
✎
17:28
|
(151) да я тебе верю. Понавставляй сообщить в ПВД и в ПКО Контрагенты, или запусти замер производительности. Нужно опеределить за счет чего получается рекурсия.
|
|||
154
Franchiser
гуру
01.12.17
✎
17:29
|
(152) потому что когда идет стандартная выборка этот код выполняется столько раз сколько у тебя есть контрагентов
|
|||
155
DenYuliya
01.12.17
✎
17:31
|
(154) ну да, я примерно так и подумала. Меня смущает то, что по-идее согласно "политики партии" ТиС, если я верно понимаю, кол-во СторонннихЮрЛиц = кол-во Контрагентов, верно?
|
|||
156
Franchiser
гуру
01.12.17
✎
17:33
|
(155) я не знаю что у тебя в СформироватьСоответствиеКонтрагентовИЮрЛиц(). Может быть там проверяется параметр СоответствиеКонтрагентыЮрЛицо и если он только пустой, то в этом случае происходит запонения соответствия, иначе возврат.
|
|||
157
Franchiser
гуру
01.12.17
✎
17:35
|
К тебя рекурсия происходит на первом же элементе, так что по идее она сразу должна быть видна
|
|||
158
Franchiser
гуру
01.12.17
✎
17:36
|
Ищи причину в ПКО, в ПВД ничего особенного пока не вижу
|
|||
159
DenYuliya
01.12.17
✎
17:50
|
сли ТипЗначенияСтр(Источник) = "Строка" Тогда
Возврат 1; КонецЕсли; Если Источник.ЭтоГруппа() = 1 Тогда Возврат 1; КонецЕсли; Если Источник.ПометкаУдаления() = 1 Тогда Возврат 1; КонецЕсли; Если ТипЗначенияСтр(ВходящиеДанные) <> "СписокЗначений" Тогда ВходящиеДанные = СоздатьОбъект("СписокЗначений"); КонецЕсли; ВходящиеДанные.Установить("Клиент", 0); ВходящиеДанные.Установить("Поставщик", 0); ВходящиеДанные.Установить("ПрочиеОтношения", 0); Если Параметры.СтатистикаПоДоговорам_СортКонтрагент = -1 Тогда СформироватьСтатистикуПоДоговорам(); КонецЕсли; СтатистикаПоДоговорам = Параметры.СтатистикаПоДоговорам_СортКонтрагент; НомерНайденнойСтроки = 0; Если СтатистикаПоДоговорам.НайтиЗначение(Источник, НомерНайденнойСтроки, "Контрагент") = 1 Тогда Для НомерСтроки = НомерНайденнойСтроки По СтатистикаПоДоговорам.КоличествоСтрок() Цикл СтатистикаПоДоговорам.ПолучитьСтрокуПоНомеру(НомерСтроки); Если СтатистикаПоДоговорам.Контрагент <> Источник Тогда Прервать; КонецЕсли; Если (СтатистикаПоДоговорам.ХозяйственнаяОперация = "РеализацияКлиенту") ИЛИ (СтатистикаПоДоговорам.ХозяйственнаяОперация = "ПередачаНаКомиссию") Тогда ВходящиеДанные.Установить("Клиент", 1); ИначеЕсли (СтатистикаПоДоговорам.ХозяйственнаяОперация = "ЗакупкаУПоставщика") ИЛИ (СтатистикаПоДоговорам.ХозяйственнаяОперация = "ПриемНаКомиссию") Тогда ВходящиеДанные.Установить("Поставщик", 1); КонецЕсли; КонецЦикла; КонецЕсли; Если (ВходящиеДанные.Получить("Клиент") = 0) И (ВходящиеДанные.Получить("Поставщик") = 0) Тогда ВходящиеДанные.Установить("ПрочиеОтношения", 1); КонецЕсли; Это ПКО. Тоже наитиповейший (( |
|||
160
DenYuliya
01.12.17
✎
17:51
|
(153) счас попробую...
|
|||
161
Franchiser
гуру
01.12.17
✎
17:56
|
В контрагентах есть ссылка на ЮрЛица или другие объекты, где может стоять ссылка на контрагентов?
|
|||
162
DenYuliya
01.12.17
✎
18:24
|
В ПКС для ПКО "Контрагенты_Партнеры" вроде бы нету. Код непосредственно в ПКО посмотрю, идею поняла.
Но вообще ссылок на спр. Контрагенты в обмене целая куча. |
|||
163
Franchiser
гуру
01.12.17
✎
23:58
|
У тебя и ПВД и ПКО называется одинаково Контрагенты_Партнеры?
|
|||
164
DenYuliya
02.12.17
✎
16:35
|
(163) неа, по-разному.
|
|||
165
DenYuliya
04.12.17
✎
12:03
|
В общем, условно нашла, в чем дело.
Помогло (153) и (158), огромное спасибо! Ошибка оказалась в этой части ПКО "Контр_партнеры": (перед выгрузкой) Если Параметры.СтатистикаПоДоговорам_СортКонтрагент = -1 Тогда Сообщить("тыц договор"); СформироватьСтатистикуПоДоговорам(); КонецЕсли; Я не вникала глубоко, что это за параметр, он прописан жестко на вкладке Основная -"Перед выгрузкой данных" и потом где-то присваивается. Я просто поменяла Параметры.СтатистикаПоДоговорам_СортКонтрагент = -1; на Параметры.СтатистикаПоДоговорам_СортКонтрагент = 0; Понимаю, что это неправильно, но с таким костылем хотя бы идет выгрузка. правда с ошибкой, но на выгружаемых контр. вроде бы не влияет. Ошибка исполнения обработчика: ПКО_ПередВыгрузкой_Контрагенты_Партнеры - Значение не представляет агрегатный объект (НайтиЗначение) Попробую сейчас какой-нибудь костыль сделать, Типа "попытка-исключение", или проверять на что-нибудь... В общем, чтобы этот кусрк не ошибку выдавал, а просто не попадал в условие. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |