Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Я написала свой хеш как теперь мне внутренним соединением получить уникал наборы

Я написала свой хеш как теперь мне внутренним соединением получить  уникал наборы
Я
   1сЮлия
 
03.06.19 - 15:14
Добрый день! Вот пример
    
     Таб = Новый ТаблицаЗначений; ;
     Таб.Колонки.Добавить("Ключ");
     Таб.Колонки.Добавить("Ссылка");
     Разделитель = "_"
     сч = 0;
     н = 5 ;
     Для каждого Строка из МехАнализы Цикл
         Для   сч = 0 По н цикл
              НоваяСтрока = Таб.Добавить();
            НоваяСтрока.Ссылка = Строка.Ссылка;
             НоваяСтрока.Ключ = ЗначениеВСтрокуВнутр(Строка.Код)+Разделитель+ЗначениеВСтрокуВнутр(Строка.НомерСтроки)+Разделитель+ЗначениеВСтрокуВнутр(Строка.ПоказательАнализа) +Разделитель+ ЗначениеВСтрокуВнутр(Строка.ЗначениеПоказателя)+Разделитель + ЗначениеВСтрокуВнутр(Строка.ЗначениеПоказателя)+Разделитель+ЗначениеВСтрокуВнутр(Строка.МаксЗначениеПоказателя);
            сч = сч+1;
        КонецЦикла
     КонецЦикла;
    
    ЗапросУИД = Новый Запрос;
    ЗапросУИД.Текст =
    
      "ВЫБРАТЬ
      |    ТЗ.Ссылка,
      |    ТЗ.Ключ,
      |    СертификацияНоменклатурыАнализы.Ссылка.Номенклатура,
      |    СертификацияНоменклатурыАнализы.Ссылка.СерияНоменклатуры,
      |    СертификацияНоменклатурыАнализы.НомерСтроки,
      |    СертификацияНоменклатурыАнализы.ЕдиницаИзмерения,
      |    СертификацияНоменклатурыАнализы.ЗначениеПоказателя,
      |    СертификацияНоменклатурыАнализы.МаксЗначениеПоказателя,
      |    СертификацияНоменклатурыАнализы.ПоказательАнализа,
      |    СертификацияНоменклатурыАнализы.СоответствуетНормативу
      |ИЗ
      |    &ТЗ КАК ТЗ
      |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СертификацияНоменклатуры.Анализы КАК СертификацияНоменклатурыАнализы
      |        ПО (СертификацияНоменклатурыАнализы.Ссылка = ТЗ.Ссылка)" ;
    
    
     Запрос.УстановитьПараметр("ТЗ",Таб);
 
 
   Ёпрст
 
1 - 03.06.19 - 15:28
(0) никак
   Nyoko
 
2 - 03.06.19 - 15:32
Менеджер вунтренних таблиц не вижу что-то, а так то да сначала выбриаешь хэши потом группируешь по хэшу..
   dka80
 
3 - 03.06.19 - 15:50
Все еще воюешь с анализами?
   dezss
 
4 - 03.06.19 - 15:53
А зачем ЗначениеВСтрокуВнутр(Строка.ЗначениеПоказателя) 2 раза?
Чтоб понятней было?
   1сЮлия
 
5 - 03.06.19 - 15:58
Да спасибо большое двар раза.
   1сЮлия
 
6 - 03.06.19 - 15:59
Блин простите.
   1сЮлия
 
7 - 03.06.19 - 16:00
я думала так   "ВЫБРАТЬ
      |    ТЗ.Ссылка,
      |    ТЗ.Ключ КАК Ключ
      |ИЗ
      |    &ТЗ КАК ТЗ
      |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СертификацияНоменклатуры.Анализы КАК СертификацияНоменклатурыАнализы
      |        ПО (СертификацияНоменклатурыАнализы.Ссылка = ТЗ.Ссылка)
      |
      |УПОРЯДОЧИТЬ ПО
      |    Ключ" ;
     
а как выбирать хещои,подправьте пожайлуста
   dezss
 
8 - 03.06.19 - 16:02
(7) Конкретней напиши, какие хеши?
Я тут хешей пока не видел.
   1сЮлия
 
9 - 03.06.19 - 16:05
та  это грубо это примитивный хещ,ключ весь набор показателей,я в строку загружаю путем соединения строк,чтобы в все ссылки выстроились рядом ключ и есть хеш
   Ёпрст
 
10 - 03.06.19 - 16:10
(0) для этой задачи твой "хещ" не нужен.
Но если хочется, то
ВЫБРАТЬ
      ТЗ.Ссылка,
      ТЗ.Ключ 
Поместить ТЗ
ИЗ  &ТЗ КАК ТЗ
;
Выбрать Максимум(ТЗ.Ссылка),ТЗ.Ключ ИЗ ТЗ Сгруппировать по ТЗ.Ключ



ТЗ
   Ёпрст
 
11 - 03.06.19 - 16:14
Это разные документ, если нужны не повторяющиеся хеши, то так:

ВЫБРАТЬ
      ТЗ.Ссылка,
      ТЗ.Ключ 
Поместить ТЗ
ИЗ  &ТЗ КАК ТЗ
;
Выбрать ТЗ.Ссылка,ТЗ.Ключ ИЗ ТЗ как ТЗ
Где ТЗ.Ключ в (выбрать ТЗ.Ключ ИЗ ТЗ как ТЗ Сгруппировать ПО ТЗ.Ключ Имеющие Количество(ТЗ.ССылка)=1 )

   Ёпрст
 
12 - 03.06.19 - 16:15
И всё это можно делать без твоей ТЗ, о чем вам неоднократно писали в прошлых ветках.. но.. воз и ныне там
   dezss
 
13 - 03.06.19 - 16:18
(9) Главный вопрос. Зачем?
И нет ли более простого и логичного решения задачи?
   1сЮлия
 
14 - 03.06.19 - 16:22
Чесно я все способы уже перепробывала,ерунда этот с хешем,вроди бы более оптимальный
   1сЮлия
 
15 - 03.06.19 - 16:30
1-ое получаем уникальный набор и присваиваем ему идентификатор вот этот ключ - ключ набора записей все значения таб части в строку.Потом упорядочить по ключю и все доки рядышком с одинаковыми наборами плюс выборке
я       "ВЫБРАТЬ
      |    СертификацияНоменклатурыАнализы.ЗначениеПоказателя КАК ЗначениеПоказателя,
      |    СертификацияНоменклатурыАнализы.ПоказательАнализа КАК ПоказательАнализа,
      |    СертификацияНоменклатурыАнализы.НомерСтроки КАК НомерСтроки,
      |    СертификацияНоменклатурыАнализы.Ссылка КАК Ссылка,
      |    СертификацияНоменклатурыАнализы.МаксЗначениеПоказателя,
      |    СертификацияНоменклатурыАнализы.СоответствуетНормативу,
      |    СертификацияНоменклатурыАнализы.ПоказательАнализа.Код как Код
      |ИЗ
      |    Документ.СертификацияНоменклатуры.Анализы КАК СертификацияНоменклатурыАнализы
      |ГДЕ
      |    СертификацияНоменклатурыАнализы.Ссылка.Подразделение = &Подразделение
      |    И СертификацияНоменклатурыАнализы.Ссылка.Номенклатура = &Номенклатура
      |    И ДЕНЬ(СертификацияНоменклатурыАнализы.Ссылка.Дата) = &Дата
      |    И СертификацияНоменклатурыАнализы.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
      |    И СертификацияНоменклатурыАнализы.Ссылка.Проведен
      |
    упрорядочила по  |УПОРЯДОЧИТЬ ПО
      |    Ссылка,
      |    ПоказательАнализа";
Теперь мне нужно если хеш изменился новый док,а из выборки почему то не видит   Если  Не (Выборка.Пустой()) Тогда
        
        ВыборкаУИД = Выборка.Выгрузить();
            
     КонецЕсли;
         Для каждого СтрокаУИД из ВыборкаУИД Цикл
            Если (СтрокаУИД.Ключ <> КлючУИД) Тогда
                
                     КонецЕсли;
        КонецЦикла;
   1сЮлия
 
16 - 03.06.19 - 16:30
ключу простите
   1сЮлия
 
17 - 03.06.19 - 16:31
СтрокаУИД.Ключ не видит
   hhhh
 
18 - 03.06.19 - 16:32
(14) ну так пробуйте
Хеш = ОбщегоНазначения.ЗначениеВСтрокуXML(ТЗ);
   1сЮлия
 
19 - 03.06.19 - 16:33
Вам всем низкий поклон вообще за помощь,чтобы у вас у всех все спорилось и всегда находились оптимальные решения.
   1сЮлия
 
20 - 03.06.19 - 16:38
а как мне его применить ,что то мне не ясно? Мне нужнен УИД набора строк табл части.
   dezss
 
21 - 03.06.19 - 16:41
Если честно, я вообще ничего не понял.
Может лучше задачу описать?
   1сЮлия
 
22 - 03.06.19 - 16:51
Задача такая нужно трансформировать информацию с одного документа типового Сертификация номенклатуры,в другой не типовой. Раньше серия была в шапке дока теперь серии номенклатуры в табличной части ,в типовой документ Сертификация номенклатуры была добавлена нами таб. часть Анализы. Она у  у n количества серий может совпадать вот мне и нужно создать столько новых документов сколько уникальных табличных частей имеется ввиду по значениям и далее получить эти серии и загрузить в таб часть серии
   dezss
 
23 - 03.06.19 - 16:59
(22) И даже порядок строк имеет значение?
   Вафель
 
24 - 03.06.19 - 17:03
(22) так у тебя хэш = серия
   1сЮлия
 
25 - 03.06.19 - 17:04
Да. Ну к примеру Гр 350,вр  270,Удар 450,Сопртивление 22, и еще... Ну к примеру Гр 270,вр 350,Удар 450,Сопртивление 22, и еще ,это же ни одно и тоже.
   1сЮлия
 
26 - 03.06.19 - 17:05
А не сама табличная часть построчно все 5 показателей со значениями в строку?
   Garykom
 
27 - 03.06.19 - 17:07
Объясните или я тупой или тут действительно ТЗ пытаются запросами крутить?

Науя?
   Garykom
 
28 - 03.06.19 - 17:10
На крайний случай позовите ildarovich'а он умеет такие извращения
   Вафель
 
29 - 03.06.19 - 17:12
(28) но кто сможет хотя бы прочитать, что он напишет?
   1сЮлия
 
30 - 03.06.19 - 17:17
Ну а как тогда?
 
 Рекламное место пустует
   Garykom
 
31 - 03.06.19 - 17:21
(30) ТЗ.Свернуть("", "")
   Garykom
 
32 - 03.06.19 - 17:22
(31)+ Это если я правильно понял задачу
   Garykom
 
33 - 03.06.19 - 17:23
(32) Ну или запросами через группировку, кому что удобнее
   1сЮлия
 
34 - 03.06.19 - 17:23
Свернуть по ключу?
   Garykom
 
35 - 03.06.19 - 17:24
(34) Тебе не надо один ключ делать, он у тебя в виде набора полей есть
   1сЮлия
 
36 - 03.06.19 - 17:27
По набору полей не получится там значения они просуммируются
   Garykom
 
37 - 03.06.19 - 17:27
>сколько уникальных табличных частей имеется ввиду по значениям

Какой вид у этих ТЧ ?

ИмяПоказателя|ЗначениеПоказателя или как?
   Garykom
 
38 - 03.06.19 - 17:30
https://forum.infostart.ru/forum9/topic128335/

см 5.
ildarovich  6433 02.04.15 15:05
(1) ceramica, в статье "Расчет хэш-функции в запросе" есть Пример 2. Там приведен запрос, позволяющий сгруппировать документы, содержащие один и тот же набор номенклатуры.
Правда, итоговая задача там другая - найти наиболее популярные наборы товаров, но сам принцип подойдет и для вашего случая.
Если же один из документов фиксирован. Например, дан заказ, а требуется найти все документы "Производство" с таким же составом номенклатуры, то множество вариантов решения можно посмотреть в статье INFOSTART EVENT 2012: разбор решений конкурса разработчиков
   1сЮлия
 
39 - 03.06.19 - 17:31
Номерстроки,Показатель тип справочник Ссылка,ЗначениеПоказателя,МаксЗначениеПоказателя. В табличной части мы им делали кнопку заполнить всегда 5 показателй ,5 строк ,5 значений. И Они могут повторятся в разных доках.
   Garykom
 
40 - 03.06.19 - 17:31
Лично я бы тупо перебирал документы, брал из них ТЧ, сортировал одинаково и считал (перебор строк и складываем как то значения) этот хеш-ключ для ТЧ, записывая его в отдельную ТЗ со ссылкой на документу.
   Garykom
 
41 - 03.06.19 - 17:34
(40) + Значения из ячеек ТЧ в строковые переводим, складываем в одну длинную строку и считаем http://catalog.mista.ru/public/70030/
   Garykom
 
42 - 03.06.19 - 17:35
(41)+ О в новых версиях уже MD5 есть https://1c-programmer-blog.ru/programmirovanie/md5-v-1s.html
   palsergeich
 
43 - 03.06.19 - 17:37
(41) Я бы сделал проще:
РС. 4 поля.
Измерения
1) Регистратор
2) НомерСтроки
3) ТипХэш (ну например где то нужен хеш по одним полям, где то по другим)
Ресурс
4) ЗначениеХеш.
Как считать - вариантов много, но ИМХО это не должно делаться на сервере. Разовой обработкой регистр должен быть предзаполнен, а потом при работе -> передаваться параметром или массивом параметров
   palsergeich
 
44 - 03.06.19 - 17:38
(43) Ну и подписка на событие само собой для дальнейшего ведения этого регистра
   Garykom
 
45 - 03.06.19 - 17:39
(43) (44) У ТС проблема не куда писать, а как считать пока
   1сЮлия
 
46 - 03.06.19 - 17:40
У меня проблема создать доки различные с неповторяющимися наборами и серии туда выбрать.
   palsergeich
 
47 - 03.06.19 - 17:41
для каждого поля участвующего в хэш сумме:
Сумма по каждому полю, участвующему в сумме: это ссылка, то xmlСтрока(Ссылка), в остальных случаях Строка(значение).
Для компактности хранения можно передать MD5 или любой другой платформенной хэш функции.
   Garykom
 
48 - 03.06.19 - 18:12
(47) У нее поля в строках в ТЧ документов, строки ТЧ могут быть не в том порядке (сортировке) как в других документах а вероятно надо чтобы было пофиг на порядок строк.

Короче перебирать документы или навесить обработчик при записи на документы и перезаписать все документы.
   Вафель
 
49 - 03.06.19 - 18:14
(56) у тебя 1 в 1 документы переносятся?
   palsergeich
 
50 - 03.06.19 - 18:26
(48) ну убери номер строки из хеш функции, вопрос то в чем.
ИМХО ТС донести корректно не может, что в итоге надо.
   Garykom
 
51 - 03.06.19 - 18:35
(50) Найти документы с одинаковыми табличными частями, без учета порядка строк в них вероятно.
   palsergeich
 
52 - 03.06.19 - 20:20
Как получить хэш сумму строки - думаю возражений нет.
Теперь про документ в целом:
Можно представить хеш сумму документа, как сумму хешей строк. Так как сложение коммутативно - убирается головная боль с порядком строк.
Но так как MD5 к примеру при выражении как число - слишком большое - придется написать собственную поразрядную считалку. В принципе в институте на информатике пишут такое. В принципе - должно работать очень быстро.
Ну и соответственно хэш сумму по ТЧ всех документов тоже придется хранить.
Для решение этой частной задачи - подходит вполне, но не универсально.
   Garykom
 
53 - 03.06.19 - 20:34
(52) Можно строки посимвольно сложить ))
Причем отбрасывая старшие разряды, ибо для задачи ТС это лишнее, а уже затем для одной строки считать хеш.
   palsergeich
 
54 - 03.06.19 - 22:55
(53) Лучше поразрядную по всем правилам, посимвольная может быть не коммутативна.
Насчет старших символов - согласен.
   palsergeich
 
55 - 03.06.19 - 22:57
(54) под поразрядной я имею ввиду что результатом B+B = C6, а не ВВ
   Garykom
 
56 - 03.06.19 - 23:14
(54) Даже посимвольная будет коммутативна для строк, если складывать символы (точнее их коды) на тех же позициях.

"Вася"
"Петя"
КодСимвола("В")+КодСимвола("П") = КодСимвола("П")+КодСимвола("В")
   palsergeich
 
57 - 03.06.19 - 23:23
(56) Код символа - 2-3 разряда в 10чной системе, может и говня получиться, если срок много.
Взять поразррядный HEX сумматор с того же ИС и допилить и получить нормальный результат, не сильно то дольше.
   palsergeich
 
58 - 03.06.19 - 23:23
(56) нас же нитересуют не только последние символы, но и хотя бы еще 10-15 разрядов
   Garykom
 
59 - 03.06.19 - 23:43
(57) Дык
В+П а+е с+т я+я
   Garykom
 
60 - 03.06.19 - 23:43
(59)+ Это просто проще и быстрее на 1С чем HEX
   vde69
 
61 - 03.06.19 - 23:52
сабж делается с помощью справочника

в справочнике делаешь ТЧ, в нее записываешь набор данных.

далее в документ СертификацияНоменклатуры записываешь ссылку на справочник, так-же можно эту ссылку записывать в регистр для RLS
   vde69
 
62 - 03.06.19 - 23:55
(61) +

я такую схему использую уже почти 15 лет, при записи есть накладные расходы, зато любые отчеты и рельса просто летает, и в добавок количество реквизитов может быть произвольным....
   Garykom
 
63 - 03.06.19 - 23:59
(61) Они примерно это и хотят сделать, если одинаковые "набор данных" то один раз его хранить в справочнике.

А сейчас у них своя ТЧ у каждого документа и надо найти документы с одинаковыми ТЧ чтобы создать эти элементы справочника и ссылку на них в документы.


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