Имя: Пароль:
1C
1С v8
РАУЗ. Ключи Аналитики. РИБ.
,
0 Maxus43
 
29.11.12
09:59
Приветствую господа!

Как мы знаем - Ключи аналитики просто справочник.
Информация о нём - в Соответствующих регистрах.
Имеем РИБ, много узлов.

Ситуация - в разных узлах в производство списывают Доски, первый раз в жизни базы.
Ключа такого нет, он формируется новый. В обоих базах свой ключ, но одинаковый по сути.
Идут обмены, в итоге запись в регистре есть только об ОДНОМ ключе, а в движениях РАУЗа 2 ключа

Если ещё раз списать доски в узле - подхватит ключ о котором есть запись в регистре, т.е. второй ключ.
Имеем в РАУЗ 2 записи одинаковые по смыслу (и визуально одинаковые), но с разными ключами.

Если перед расчетом себестоимости провести все доки - всё выровняется, но это просто нереально на больших объёмах, причем собственно и одно из достоинств РАУЗа - не надо ничего перепроводить
Обработка ТИИ ключей - не исправляет данную ситуацию.

Кто думал о такой ситуации вобще? Как бороться по феншую чтоб?
84 Maxus43
 
29.11.12
12:11
(83) уволится?)
85 shuhard
 
29.11.12
12:12
(80) верю (с)

и решение ТС-у надо искать архитектурное

возможно не передавать Рг РАУЗ в центр совсем

и узнать это можно только из целей консолидации
86 neckto
 
29.11.12
12:13
На существующих типовых объектах УПП вряд ли что-то получится.  Как вариант: отключить обмен справочниками Ключи аналитик и регистрами Аналитики учета. В переферии перед обменом изменившиеся Ключи аналитики сливать в дубль-справочник, значения регистров Аналитик в дубль-регистры. Закачиваем дубль-справочники и дубль-регистры в центр, после отого запускаем постобработку по соединению справочников и регистров в типовые справочники Ключи аналитик и типовые регистры Аналитик учета.
87 Maxus43
 
29.11.12
12:14
(85) в систему заложен постулат что не должно быть разницы между узлами и данными в центре, т.е. проведение дока в центре должно благополучно отразится и на узле, поведение системы должно быть одинаково в рамках всех узлов РИБа
88 Bober
 
29.11.12
12:14
(84) это полумера. передай получение ключа на md5 и все. можно даже оставить эти грабли с РС. Главное, чтобы гиуд ключа (ссылка на объект) в любой точке была одинаковой.
89 Bober
 
29.11.12
12:15
(88) передай -> переделай
90 Maxus43
 
29.11.12
12:15
(88) да, интересная идея, буду брать в расчет
91 neckto
 
29.11.12
12:16
>>проведение дока в центре должно благополучно отразится и на >>узле
писец
92 Bober
 
29.11.12
12:16
(88) а одинаковой она может быть толко с хеш-функцией и все.
93 Maxus43
 
29.11.12
12:17
(91) почему?
94 Bober
 
29.11.12
12:18
(90) при этом ты даже не нужно делать какие-то быстрые обены этими ключами. Ну нету в узле этого ключа, так он сделает его с аналогичным гуидом и при обменах все пройдет гладко.

Даже если сотня узлов одновременно сделает этот ключ, он все равно будет одинаковый.
95 neckto
 
29.11.12
12:19
Как будешь отрабатывать ситуацию по одновременному проведению дока по одинаковым аналитикам в центре и на переферии?
96 Bober
 
29.11.12
12:20
(70) к сожалению не нашел в закромах такой старый релиз. Но по описанию уже и так понял как это сделано в этой редакции.
97 Serg_1960
 
29.11.12
12:20
(про себя, молча) А ведь истиную проблему возникновения дублирования ключей так и не озвучили. Если убрать все наслоения - то имеем классическое "Хаос невозможно автоматизировать"(с) Решение - административное.
98 Maxus43
 
29.11.12
12:21
(95) РИБ делаёт это за нас, т.е. вариант центра при обмене будет истинный.
Это не значит что в центре сидим проводим за всех, просто есть такая возможность
99 Maxus43
 
29.11.12
12:21
(94) да, я оценил уже подход
100 Cube
 
29.11.12
12:21
100
101 Bober
 
29.11.12
12:21
(97) решение на уровне платформы а не административное.
Так как дубли ключей могут появиться, если одновременно провести два документа с отсутствующими ключами с системе.
102 Bober
 
29.11.12
12:22
(99) теперь когда ты оценил, ты понимаешь что все остальное это просто полумера.
103 Maxus43
 
29.11.12
12:22
(97) какое именно? на примере (76) не вижу административного решения...
104 Bober
 
29.11.12
12:23
(103) добавлю, что на больших базах специально выносят упр. расчеты на отдельный узелю
105 Maxus43
 
29.11.12
12:23
(102) две полумеры ведут к гарантии, т.е. 1.быстрые обмены + 2. замена ссылок. Но делать конечно геморней
106 Bober
 
29.11.12
12:24
(105) оцени доработки двух костей и их последующее администрирование.
107 Bober
 
29.11.12
12:24
(105) особенно в части замени. так как после замены потребуется перерасчет.
108 Базис
 
naïve
29.11.12
12:46
В любом случае перепроведение открытого периода перед РСВ мне кажется полезным.
109 Maxus43
 
29.11.12
15:38
(106) хм, MD5 получается сразу подходит для генерации ссылки по гуиду?
110 Maxus43
 
29.11.12
16:25
Если юзать идею по генерации гуида для новых элементов - есть риск напороться на то, что элемент с таким гуидом уже есть в базе, и селяви. Пока не придумал как обойти можно
111 Bober
 
29.11.12
17:37
(110) уже проверил?
112 Maxus43
 
29.11.12
17:38
(111) нет, пока умозаключения, ибо мы делаем свой порядок генерации ссылки. Кто гарантирует что такой уже нет? МД5 как раз подходит для гуида, 32 символа в виде 16-чном.
113 Maxus43
 
29.11.12
17:39
(112) тьфу, т.е. не подходит немного)
114 Bober
 
29.11.12
17:59
(113) и что не подходит?
115 Maxus43
 
30.11.12
11:30
затронута похожая тема

http://partners.v8.1c.ru/forum/thread.jsp?id=1089379
116 Maxus43
 
30.11.12
11:32
ответ 1с:
Мы рассматривали такую идею в самом начале, но нам не удалось найти приемлемого решения. Преобразование гуидов по математическим формулам не может дать 100% гуид.
117 Maxus43
 
30.11.12
11:34
(116) у кого доступа нет - ответ был на вопрос:

а не хотите-ли вы генерировать гуид ключа на основании значений ключа
например: гуид партнера + гиуд организации + гуид контрагента - md5 = гуид ключа.
тогда можно будет и в РИБе это использовать.
(с)
118 Maxus43
 
30.11.12
11:35
правда я сам не понял пока почему мы не получим 100% гуид.
119 Maxus43
 
30.11.12
11:44
хотя может и понял...

Если у двух строк хеш-коды разные, строки гарантированно различаются, если одинаковые — строки, вероятно, совпадают. (с) вики

т.е. одинаковый
120 Maxus43
 
30.11.12
11:45
(119) + одинаковый хэш-код возможен у разных входных данных
121 Maxus43
 
30.11.12
12:01
а вот и Bober пришёл)
на партнёрке тоже обсуждали, йс отказалась от идеи короче, хоть и красиво, но не 100%
122 Bober
 
30.11.12
12:02
(121) не знаю, почему отказались, делал. работает.
123 Maxus43
 
30.11.12
12:03
(122) работать будет, но нет гарантии просто. Теоретически возможна бяка, когда один гуид сгенерится на разные данные
124 Bober
 
30.11.12
12:03
(120) да, такое возможно, но вероятность маленькая. Еще как вариант написать свою хеш-фукнцию и спасть спокойно.
125 Maxus43
 
30.11.12
12:04
а 1с ничего не делает, если нет 100% уверенности, допущений не допускают, и делают по своему через опу
126 Bober
 
30.11.12
12:04
(123) зато сейчас гарантий полно -)
127 Bober
 
30.11.12
12:04
(125) делает, поэтому мы и обсуждаем как это переделать.
128 Maxus43
 
30.11.12
12:04
(126) ну разгребать овно в РИБе они разрешают самим...
129 Bober
 
30.11.12
12:06
(128) дубль ключа возможен и в одной базе при параллельном вводе данных, только вероятность этого намного меньше (если только не накладывать исключительную блокировку перед создание нового ключа).
130 Maxus43
 
30.11.12
12:11
(129) короче великие наши внедренцы последовали совету 1с так не делать. будем мучатся с комплексом затычек: быстрые обмены, замена ссылок, перепроведение
131 Bober
 
30.11.12
12:12
вот как делал MD5(НРЕГ(СтрЗаменить(XMLСтрока(Ключ.знч1) + XMLСтрока(Ключ.знч2) + XMLСтрока(Ключ.знч3)), "-", "")). Далее все это в ссылку. Полет нормальный.

PS
- Если значение ключа составной тип, то обязательно добавлять  гуид тип объекта и следить за тем, чтобы значение было
заполнено.
- если значение ключа пустое, то все рано передавать гуид (00000000-0000-0000-000000000000).
- если количество аналитики меняется, то потребуется все переделывать.
132 Maxus43
 
30.11.12
12:14
(131) можешь поделится функцией MD5? для себя
133 Bober
 
30.11.12
12:16
134 Maxus43
 
30.11.12
12:19
(133) это видел) я имею ввиду использовал читсый алгоритм этот, без дополнительных доработок?
135 Bober
 
30.11.12
12:20
с генерацией ключа?
136 Maxus43
 
30.11.12
12:20
(135) для генерации гуида
137 Maxus43
 
30.11.12
12:25
(136) + тупой вопрос, дефисы вставить только)
138 Bober
 
30.11.12
12:30
(137) нужно подождать, сейчас пример сделаю.
139 Bober
 
30.11.12
12:55
(137) тебе всю мини конфу или только кусок кода?
140 Bober
 
30.11.12
12:55
(137) накатал пример

ТекстДляКлюча = НРег(СтрЗаменить(XMLСтрока(Объект.Номенклатура) + XMLСтрока(Объект.Характеристика) + XMLСтрока(Объект.Склад), "-", ""));
   ХешТекста = ОбработкаОбъект.MD5(ТекстДляКлюча);
   
   ГуидТекст = Сред(ХешТекста, 1, 8) + "-" + Сред(ХешТекста, 9, 4) + "-" + Сред(ХешТекста, 13, 4) + "-" + Сред(ХешТекста, 17, 4) + "-" + Сред(ХешТекста, 21, 12);
   Объект.КлючАналитики = XMLЗначение(Тип("СправочникСсылка.КлючАналитики"), ГуидТекст);
   
   //идет в транзакции для блокировки спр
   НачатьТранзакцию();
   ЗаблокироватьСправочникПоСсылке(Объект.КлючАналитики);
   Если Не КлючСоздан(Объект.КлючАналитики) Тогда
       СоздатьКлючАналитики(Объект.КлючАналитики, Объект.Номенклатура, Объект.Характеристика, Объект.Склад);
   КонецЕсли;
   
   ЗафиксироватьТранзакцию();
141 Maxus43
 
30.11.12
12:57
(140) мини конфу на мыло можно, если не трудно)
впринципе понятно конечно
142 Serg_1960
 
30.11.12
13:55
Я не тупой или упрямый, я - упорный :)

Пример ситуаций, плиз, порождающих дублирование ключей. С учетом, что узлы - различные организации, различные подразделения и каждый со своим складом.
143 Maxus43
 
30.11.12
13:56
(142) всмысле? какой пример?
144 Serg_1960
 
30.11.12
13:57
ТС, как тебе идея: генерировать заранее набор ключей, при добавлении новой номенклатуры в справочник?
145 Maxus43
 
30.11.12
13:58
(142) пример - АналитикаУчетаЗатрат, там запросто
146 Maxus43
 
30.11.12
14:02
(144) тоже как вариант, только ТИИ ключей убъёт их, ибо они не используются
147 Serg_1960
 
30.11.12
14:14
(145) Для новой номенклатуры ключ создаётся при первом поступлении(оприходовании) в организацию. Как ключ ухитряется дублироваться? Вы сразу на нескольких узлах поступление(оприходование) вбиваете?

(146) Запуск ТиИ ключей можно зарегламентировать - запускать не тогда, когда хочется, а тогда - когда можно :)
  В алгоритм можно внести условия(ограничения) по удалению неиспользуемых ключей.
148 Bober
 
30.11.12
14:15
149 Maxus43
 
30.11.12
14:17
(147) номенклатура - там десятки тыщ наименований. заветси её могут давно заранее, когда запланируют
150 Maxus43
 
30.11.12
14:18
(148) спс. заценю на днях
151 Bober
 
30.11.12
14:22
(142) (147) детсад какой-то.
152 Maxus43
 
30.11.12
14:23
(147) убрать эту функцию из обработки можно конечно... но, как ты себе это представляешь? на ВСЕ сочетания номенклатур, характеристик, статей, серий, качество и т.д. создавать ключи? боюсь распухнет справочник до неприличных размеров
153 Serg_1960
 
30.11.12
15:30
У меня, наверное, какая-то неправильная УПП: для позиции номенклатуры пара-тройка записей, ну максимум 5-6 в аналитике учета затрат.
154 Maxus43
 
30.11.12
15:33
(153) это не все варианты, а те которые ты используешь... ты предлагал все варианты создать, ибо кто значет что введут и какой ключ понадобится
155 Serg_1960
 
30.11.12
16:06
Вообще-то я имел ввиду, говоря про "набор", что это не всевозможные варианты. Например: "набор" основные производственные материалы. Статья затрат - определена и не изменяется. Качество - новое или брак (допустим). Пришло на склад - ушло в производство. Всё.
156 Maxus43
 
30.11.12
16:08
(155) характеристики, серии и т.д.? чтоб не было кучи дублей - надо при поступлении создавать сразу и аналогичные производственные. А если сразу после поступления списали в производство до обменов? получаем (0) опять)
157 Serg_1960
 
30.11.12
16:12
Ладно, уговорил. Не универсальное решение.

Другая идея: специально выделенный план обмена только по этим справочникам и регистрам. Обмен по событию (по мере надобности - по факту добавления новой записи в справочник). Как тебе это?
158 Bober
 
30.11.12
16:14
(157) да, еще костыльков да побольше. вот кто будет весь этот зоопарк админить.
159 Maxus43
 
30.11.12
16:14
(157) идея быстрых обменов по этим объектам в первых постах, так и решили делать впринципе наши большеголовые, тока не по появлению записи, они тоже могут скопом создаватся.
160 Maxus43
 
30.11.12
16:16
(158) самое смешное что это фпнач-внедренец у нас делает, т.е. ему лишь бы сделать, кто поддерживать будет - не их проблема
161 Maxus43
 
30.11.12
16:16
*франч
162 Bober
 
30.11.12
16:16
(161) бррррр. звери а не люди
163 Serg_1960
 
30.11.12
16:20
(159) Ну, в принципе... новая запись справочника может быть только "спусковым курком" - сам обмен начнется через несколько секунд допустим. Одна или куча записей туда войдет уже не важно. Тот кто не успеет - вновь взведет курок.
164 Maxus43
 
30.11.12
16:22
(163) как организовать не суть, смысл предложения - обмениваться быстрей. к сожалению Гарантии тоже не даёт, приходится совмещать с другими костылями
165 Serg_1960
 
30.11.12
16:23
Bober, кстати, мне твоя идея тоже нравится. Можно генерировать уникальный идентификатор по уникальному наименованию. В риб-базах будет исключено дублирование наименований так, как при обмене это будет одна единственная запись.
166 Maxus43
 
30.11.12
16:26
(165) ответ 1с на такой подход в (116), и наши франчи согласились с ним( хотя в реальной жизни вероятность совпадения стремится к 0. Но раз "может" такое быть - значит нельзя
167 Serg_1960
 
30.11.12
16:31
Я в курсе. Всё дело в вероятности. Точнее - насколько она низкая :)

Между прочим: если новый ключ обменом будет распространяться, скажем, за пять-десять секунд - то можно, имхо, обойтись без прочих костылей. А такая скорость обмена - вполне реальна.
168 Serg_1960
 
30.11.12
16:36
А по поводу генерации "неуникального" идентификатора - надуманная проблема (имхо) Перед выдачей нового идентификатора его можно проверить на предмет существования в базе и сгенерировать ещё раз (другой).
169 Maxus43
 
30.11.12
16:37
делают костыли чтоб была гарантия 100%. хз чо у них получится
170 Maxus43
 
30.11.12
16:37
(168) если генерить другой - то по какому алгоритму? и другая база должна знать что ты в узле1 сменил алгоритм
171 Bober
 
30.11.12
16:41
(170) посмотри, сколько сейчас ключей в базе
172 Maxus43
 
30.11.12
16:41
(171) каких именно? затрат?
173 Bober
 
30.11.12
16:46
Всех различных
174 Maxus43
 
30.11.12
16:47
Ключи аналитики вида учета    10 136
Ключи аналитики распределения затрат    4 705
Ключи аналитики учета затрат    170 868
Ключи аналитики учета партий    71 211
Ключи аналитики учета прочих затрат    2 541

такая петрушка
175 Maxus43
 
30.11.12
16:48
Группа риска как раз "Ключи аналитики учета затрат"
176 Serg_1960
 
30.11.12
16:49
(170) Если есть один, общий для всех, генератор - почему бы у него не может быть другого, запасного алгоритма - тоже общего для всех? :)

Не нужно второй базе "знать" об этом. Предположим в первой базе уникальное наименования порождает неуникальный ключ - будет генерится другой ключ. Во второй базе, в аналогичной ситуации - тоже будет гериться ключ по запосному алгоритму.
177 Maxus43
 
30.11.12
16:51
(176) Это если обмен уже прошёл. А если между обменами создадим элемент1 и при попытке создать 2-й - токая же ссылка - то вернёмся к (0) :)
178 Maxus43
 
30.11.12
16:52
это всё на самом деле ОЧЕНЬ маловероятно. и легче сделать один из вариантов, чем пытаться делать АБОСЛЮТНО гарантированную систему
179 Serg_1960
 
30.11.12
16:59
(177) Не согласен. Вероятность повторной генерации - очень низкая(но есть). А повторной генерации номеров в период между обменами - стремится к 0.000(0)
180 Maxus43
 
30.11.12
17:00
(179) дак и по MD5 - стремится к 0 вероятность... но возможно :(
181 Serg_1960
 
30.11.12
17:09
Возможно? "Будь мужиком"(с) - сделай так и докажи обратное :)
182 Serg_1960
 
30.11.12
17:10
я - афк, бб.
183 Maxus43
 
30.11.12
17:12
(181) теоретически возможно. опровергать логику я не научился