| 
    
            
         
         | 
    
    
  | 
Какой самый быстрый способ понять, что элемент справочника не менялся? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Dmitry1c    
     03.03.21 
            ✎
    07:15 
 | 
         
        От поставщика прилетает номенклатура и её свойства.
 
        Свойства могут поменяться, номенклатура может быть новая/старая. Как максимально быстро с точки зрения производительности понять, что объект поменялся и его надо перезаписать? Поставщик присылать только изменения не будет, нет возможности. Реализовывать нужно именно на стороне читателя. Вижу вариант только такой: - искать номенклатуру по ключам поиска, сравнивать каждый реквизит-свойство, если менялись - перезаписать. Может есть более удачные варианты?  | 
|||
| 
    1
    
        Paint_NET    
     03.03.21 
            ✎
    07:21 
 | 
         
        Маркер изменений на стороне поставщика :)
 
        А вообще да, только пореквизитное сравнение, если никаких признаков во входящем сообщении добавить нельзя.  | 
|||
| 
    2
    
        Галахад    
     гуру 
    03.03.21 
            ✎
    07:22 
 | 
         
        Можно хранить к каждой номенклатуре некий хэш из получаемых от поставщика реквизитов. И сравнивать по нему.     
         | 
|||
| 
    3
    
        Dmitry1c    
     03.03.21 
            ✎
    07:23 
 | 
         
        (2) о! это мб. будет быстрее     
         | 
|||
| 
    4
    
        RomaH    
     naïve 
    03.03.21 
            ✎
    07:24 
 | 
         
        XDTO - получать два XML - разные - переписывать
 
        хранить не надо, все-таки каждый раз считать  | 
|||
| 
    5
    
        Dmitry1c    
     03.03.21 
            ✎
    07:25 
 | 
         
        (4) не понял     
         | 
|||
| 
    6
    
        RomaH    
     naïve 
    03.03.21 
            ✎
    07:30 
 | 
         
        что надо - сравнить два объекта по определенному правилу - в нашем случае правило простое - каждый реквизит из некого набора должен быть равен 
 
        можно просто сложить строки - это будет проще всего и быстрее, XDTO - тоже сложение строк, просто более напыщенное хранить ХЭШ - а нафига?  | 
|||
| 
    7
    
        Dmitry1c    
     03.03.21 
            ✎
    07:32 
 | 
         
        (6) а сериализация не оч. прожорлива по ресурсам будет?     
         | 
|||
| 
    8
    
        Paint_NET    
     03.03.21 
            ✎
    07:33 
 | 
         
        (2) О, интересное решение.
 
        (6) При первом поступлении считаем хэш сообщения, сохраняем, при очередном поступлении считаем хэш полученного сообщения, сравниваем с сохранённым. Не сходится - значит, изменён. Элегантненько получается.  | 
|||
| 
    9
    
        RomaH    
     naïve 
    03.03.21 
            ✎
    07:34 
 | 
         
        (7) - просто сложить строки в определенном порядке
 
        Запрос Выбрать Наименование, Код, СтрокаСравнения = Наименование + Код + ...  | 
|||
| 
    10
    
        Dmitry1c    
     03.03.21 
            ✎
    07:35 
 | 
         
        (9) вот прямо душа лежит к варианту (2)     
         | 
|||
| 
    11
    
        Dmitry1c    
     03.03.21 
            ✎
    07:36 
 | 
         
        По крайней мере если сделать вариантом (2), может быть быдлокодером не назовут ;)     
         | 
|||
| 
    12
    
        piter3    
     03.03.21 
            ✎
    07:37 
 | 
         
        (7) а пересчитывать хэш при изменении операторами забыл, так что может выйти то на то     
         | 
|||
| 
    13
    
        RomaH    
     naïve 
    03.03.21 
            ✎
    07:39 
 | 
         
        (8) - сколько будем хранить хэш первого? - история будет накапливаться по которой надо будет искать
 
        (12) о, а я не заметил хранение чем не удобно - поставщик изменить состав реквизитов - и хэш придется пересчитывать по новым правилам  | 
|||
| 
    14
    
        Paint_NET    
     03.03.21 
            ✎
    07:40 
 | 
         
        (13) А зачем его хранить? Надо только с последним значением сравнивать.     
         | 
|||
| 
    15
    
        Paint_NET    
     03.03.21 
            ✎
    07:41 
 | 
         
        (13) Ну, изменение состава реквизитов не только правила хэширования меняет, нужно и процедуры импорта модифицировать.     
         | 
|||
| 
    16
    
        RomaH    
     naïve 
    03.03.21 
            ✎
    07:41 
 | 
         
        (14) я тебя понял как - приходит сообщение - мы не ищем номенклатуру (ключ) , а сравниваем с ранее записыными ХЭШами в БД (со всеми)     
         | 
|||
| 
    17
    
        piter3    
     03.03.21 
            ✎
    07:44 
 | 
         
        Тут задачка как раз, что считать изменением, как мне кажется. Соответственно кто важнее, центр или обмен. Может проще конечно у автора     
         | 
|||
| 
    18
    
        RomaH    
     naïve 
    03.03.21 
            ✎
    07:47 
 | 
         
        ща озадачу топикпастера - а удаление номенклатуры поставщиком как обрабатывать?     
         | 
|||
| 
    19
    
        Paint_NET    
     03.03.21 
            ✎
    07:48 
 | 
         
        (16) С одним, последним хэшем. Т.е. нам надо проверить, изменилось ли что-то с _последнего_ раза.     
         | 
|||
| 
    20
    
        piter3    
     03.03.21 
            ✎
    07:49 
 | 
         
        А так же дублем что считать. Как быть когда объединятся. Лучше сейчас задуматься, а как технически дело второе     
         | 
|||
| 
    21
    
        Dmitry1c    
     03.03.21 
            ✎
    08:12 
 | 
         
        (18) здесь-то вроде все просто как раз.     
         | 
|||
| 
    22
    
        Dmitry1c    
     03.03.21 
            ✎
    08:13 
 | 
         
        (20) а что значит объединятся? 
 
        две карточки в одну? ну останется один артикул, принадлежащий изначальной второй - в утиль  | 
|||
| 
    23
    
        piter3    
     03.03.21 
            ✎
    08:17 
 | 
         
        (22) что сравнивать будешь на изменение     
         | 
|||
| 
    24
    
        dmpl    
     03.03.21 
            ✎
    08:24 
 | 
         
        (7) Меняется порядок реквизитов - и номенклатура уже разная получится.     
         | 
|||
| 
    25
    
        sdf    
     03.03.21 
            ✎
    09:16 
 | 
         
        (2) +1
 
        свойства в структуру и от неё: Функция СформироватьХеш(Данные) Экспорт ДанныеСтрока = ОбщегоНазначения.ЗначениеВСтрокуXML(Данные); ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); ХешированиеДанных.Добавить(ДанныеСтрока); Возврат СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); КонецФункции  | 
|||
| 
    26
    
        Dmitry1c    
     03.03.21 
            ✎
    09:19 
 | 
         
        (25) сериализация - лишнее (для производительности)
 
        у меня есть исходная строка уже в json(или xml), от неё уже можно считать хэш  | 
|||
| 
    27
    
        sdf    
     03.03.21 
            ✎
    09:29 
 | 
         
        (26) так да... Но а если в json(или xml) есть что-то лишнее. например дата/время формирования?     
         | 
|||
| 
    28
    
        Dmitry1c    
     03.03.21 
            ✎
    09:44 
 | 
         
        (27) нету     
         | 
|||
| 
    29
    
        brainguard    
     03.03.21 
            ✎
    10:09 
 | 
         
        (28) Тогда можно было бы просто исходную строку хранить. Хеш в данном случае просто позволяет ее сжать.
 
        И это, SHA256 все же лучше. MD5 сломали  | 
|||
| 
    30
    
        Lama12    
     03.03.21 
            ✎
    10:21 
 | 
         
        (26) А если порядок реквизитов изменится?     
         | 
|||
| 
    31
    
        Кир Пластелинин    
     03.03.21 
            ✎
    10:28 
 | 
         
        (30) собственно да. хэш-сумма в данном случае другая будет. но, с другой стороны, такая ситуация скорей исключение     
         | 
|||
| 
    32
    
        Михаил Козлов    
     03.03.21 
            ✎
    11:22 
 | 
         
        Загнать данные поставщика в ТЗ и запросом получить расхождения не пробовали?     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |