Регистрация

Практическая разработка логики процессов 4.x

Модератор: Модераторы форума

Гуру
Аватара пользователя
Сообщения: 419
Зарегистрирован: 23 дек 2009, 16:20

Re: Практическая разработка логики процессов 4.x

Сообщение KYCTAPb » 11 июл 2016, 13:38

KYCTAPb писал(а):Механизма, позволяющего пачкой передать данные из скрипта в БП я не нашел.

В порядке изврата, можно ещё сгенерить из полученной выборки данных строку с разделителями и присвоить её переменной. Потом, в другом скрипте её получить, разобрать обратно в массив по разделителям и обрабатывать.
Но, здесь меня смущает, какая максимальная длина строки может поместиться в переменную.

Гуру
Аватара пользователя
Сообщения: 528
Зарегистрирован: 31 янв 2012, 13:32
Откуда: Оттуда

Re: Практическая разработка логики процессов 4.x

Сообщение Vanoha » 11 июл 2016, 14:02

KYCTAPb писал(а):В порядке изврата, можно ещё сгенерить из полученной выборки данных строку с разделителями и присвоить её переменной.
Ага. Или переменная коллекция типа строка. В каждую записать по 100 id с разделителем. Потом проходить по каждой.
В теории ограничения не должно быть по длине, там же sql_variant.

И мне кажется переменная БП при типе строка должна работать быстрее в отличии от типа Сотрудник. Т.к не будет пытаться привести её к какому-то типу, но это теория. В любом случае коллекция будет небольшой
DV5 (НО 7 и 8 ). Когда-то был 4.5.1966

Гуру
Аватара пользователя
Сообщения: 419
Зарегистрирован: 23 дек 2009, 16:20

Re: Практическая разработка логики процессов 4.x

Сообщение KYCTAPb » 11 июл 2016, 14:30

Vanoha писал(а):
KYCTAPb писал(а):В порядке изврата, можно ещё сгенерить из полученной выборки данных строку с разделителями и присвоить её переменной.
Ага. Или переменная коллекция типа строка.

Переменная-коллекция типа строка - не работает!
Я в своем сообщении об этом и писал!.

Я сначала пробовал использовать коллекцию типа "Сотрудник" - не удачно. Потом, преобразовал её в коллекцию типа "Строка" (ID сотрудника) -намного веселее, но всё равно не работает - по тай-ауту отваливается при добавлении в неё >1700 ~ значений

Vanoha писал(а):И мне кажется переменная БП при типе строка должна работать быстрее в отличии от типа Сотрудник. Т.к не будет пытаться привести её к какому-то типу, но это теория. В любом случае коллекция будет небольшой

Да вот, как раз и разговор, что коллекция большая и скрипт не успевает все её данные засунуть в переменную БП

Гуру
Аватара пользователя
Сообщения: 528
Зарегистрирован: 31 янв 2012, 13:32
Откуда: Оттуда

Re: Практическая разработка логики процессов 4.x

Сообщение Vanoha » 11 июл 2016, 18:07

Далее там написал , что в каждую записать по 100 id с разделителем. Тогда записей около 17 будет ) Как ты и писал про работу с пачкой
DV5 (НО 7 и 8 ). Когда-то был 4.5.1966

Гуру
Сообщения: 334
Зарегистрирован: 18 авг 2010, 00:27

Re: Практическая разработка логики процессов 4.x

Сообщение revolver » 11 июл 2016, 18:09

KYCTAPb писал(а):Я сначала пробовал использовать коллекцию типа "Сотрудник" - не удачно. Потом, преобразовал её в коллекцию типа "Строка" (ID сотрудника) -намного веселее, но всё равно не работает - по тай-ауту отваливается при добавлении в неё >1700 ~ значений

это плохая методика использовать коллекции на 1000 и более значений.
правильно обрабатывать данные порциями, индикатором может послужить какое нибудь пользовательское свойство у сотрудника.
По возможности лучше отказаться от использования коллекции DV и использовать локальный массив внутри скрипта кубика.
Для больших обработок, например при вытеснении файлов, я использовал в БП кубик который выбирал порцию данных из БД запросом SQL, здесь на форуме есть примеры, засовывал в локальный массив объявленный внутри кубика, далее производил обработку в том же кубике.
После данного кубика связь на кубик с проверкой, если данные под условие найдены, то опять туда же, если не найдены то на выход.

Real ГУРУ
Аватара пользователя
Сообщения: 1104
Зарегистрирован: 12 мар 2010, 10:56
Откуда: Москва (Самара)

Re: Практическая разработка логики процессов 4.x

Сообщение Сергей Осипов » 11 июл 2016, 18:44

Лучше реализуйте ту логику что я в последнем своем сообщении дал.
Никаких переменных БП, обработка пачками, чтение сразу из SQL, через API только внесение необходимых изменений.
Дел на 30 мин реализации.


Использовать какой-то признак у сотрудника для мечения обработанных - идея не самая лучшая.
Вы будете вносить изменения в каждого сотрудника даже в тех, которые никаких разногласий с AD не имеют, и делать это при каждой сверке.
Вмешиваться в данные нудно только тогда когда требуется изменение существенных данных.
Для корректной обработки сотрудников пачками с выходом из кубика скрипта - используйте сортировку с простейшим условием - как у меня в примере.
ОАО АК "АЛРОСА" (2011-2012гг: ЗАО "Вебзавод"; 2008-2010гг: ООО "Программные технологии")

Гуру
Аватара пользователя
Сообщения: 419
Зарегистрирован: 23 дек 2009, 16:20

Re: Практическая разработка логики процессов 4.x

Сообщение KYCTAPb » 12 июл 2016, 08:43

Vanoha писал(а):Далее там написал , что в каждую записать по 100 id с разделителем. Тогда записей около 17 будет ) Как ты и писал про работу с пачкой

Точно :!: Как я сразу не сообразил лепить в строку с разделителями пачки IDшников :)

Сергей Осипов писал(а):Как упорядочить и обрабатывать пачками?
Элементарно: ...
Код: Выделить всё
select top 100 isnull(LastName,'')+isnull(FirstName,'')+isnull(MiddleName,''), AccountName, Phone from [dvtable_{dbc8ae9d-c1d2-4d5e-978b-339d22b32482}] with(nolock)
where isnull(LastName,'')+isnull(FirstName,'')+isnull(MiddleName,'')>'АбайдуллинИльдарСаматович'
order by isnull(LastName,'')+isnull(FirstName,'')+isnull(MiddleName,'')

Вот и вся логика.
Единственное - в обработке записей ФИО в Доксе менять не надо т.к. они как ключи для сортровки используются.

:idea: Я понял смысл. Хороший подход - обязательно попробую!
Просто не совсем понятно было, почему в Доксе отсутствуют штатные механизмы передачи объёмных данных.

Хороших мыслей накидали - спасибо! Тема получилась на редкость полезная!

Гуру
Аватара пользователя
Сообщения: 419
Зарегистрирован: 23 дек 2009, 16:20

Re: Практическая разработка логики процессов 4.x

Сообщение KYCTAPb » 12 июл 2016, 11:19

Vanoha писал(а):Далее там написал , что в каждую записать по 100 id с разделителем. Тогда записей около 17 будет ) Как ты и писал про работу с пачкой


Попробовал такой вариант - кубик с поиском по секции сотрудников и записью в переменную-коллекцию строк со ста IDшниками сотрудников разделенными "|" в каждой, отрабатывает за 5 секунд!!!
Вариант реально рабочий!

Гуру
Аватара пользователя
Сообщения: 528
Зарегистрирован: 31 янв 2012, 13:32
Откуда: Оттуда

Re: Практическая разработка логики процессов 4.x

Сообщение Vanoha » 19 июл 2016, 12:44

Сергей Осипов писал(а):В кубике скрипта получайте пачку из 100 сотрудников вот таким запросом (только вместо 'АбайдуллинИльдарСаматович' нужно поставить строковое значение из этой переменной):
select top 100 isnull(LastName,'')+isnull(FirstName,'')+isnull(MiddleName,''), AccountName, Phone from [dvtable_{dbc8ae9d-c1d2-4d5e-978b-339d22b32482}] with(nolock)
where isnull(LastName,'')+isnull(FirstName,'')+isnull(MiddleName,'')>'АбайдуллинИльдарСаматович'
order by isnull(LastName,'')+isnull(FirstName,'')+isnull(MiddleName,'')

Хороший способ, тоже возьму на вооружение. Только наверно лучше использовать [RowID] в качестве ключа для сортировки вместо isnull(LastName,'')+isnull(FirstName,'')+isnull(MiddleName,'') .
DV5 (НО 7 и 8 ). Когда-то был 4.5.1966

Real ГУРУ
Аватара пользователя
Сообщения: 1104
Зарегистрирован: 12 мар 2010, 10:56
Откуда: Москва (Самара)

Re: Практическая разработка логики процессов 4.x

Сообщение Сергей Осипов » 19 июл 2016, 13:36

Я хз как по типу uniqueidentifier сортировка работает - визуально как-то стремно.
А в MSDN покопаться и разобраться - все времени нет.
Если сортируется этот тип нормально то конечно лучше RowID использовать чем конкатенацию ФИО.
ОАО АК "АЛРОСА" (2011-2012гг: ЗАО "Вебзавод"; 2008-2010гг: ООО "Программные технологии")

Гуру
Аватара пользователя
Сообщения: 419
Зарегистрирован: 23 дек 2009, 16:20

Re: Практическая разработка логики процессов 4.x

Сообщение KYCTAPb » 19 июл 2016, 15:14

Сергей Осипов писал(а):Я хз как по типу uniqueidentifier сортировка работает - визуально как-то стремно.
Если сортируется этот тип нормально то конечно лучше RowID использовать чем конкатенацию ФИО.

Да нормально, вроде сортируется, стабильно. Не наглядно, правда.
Но ведь можно и так сделать:
Код: Выделить всё
select CAST(RowID as nvarchar(36)) as rr, *
from [dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482}] order by rr

или так
Код: Выделить всё
select rank() OVER (ORDER BY RowID) as rank, *
from [dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482}]

Гуру
Сообщения: 1140
Зарегистрирован: 23 июн 2009, 10:25
Откуда: Понаехаловск

Re: Практическая разработка логики процессов 4.x

Сообщение dimFora » 29 сен 2016, 12:59

Всем привет!

А темка-то живёт)))
__________________________
Из разговора заказчика и внедренца ...
А DV с версией 7.0 есть?
Нет, сынок...Это фантастика ;)

Пред.

Вернуться в Курилка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0