Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Отримати строку ШК по документу          
djdf_crash Подменю пользователя
сообщение 24.07.14, 8:27
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 40
Из: Киев
Спасибо сказали: 1 раз
Рейтинг: 0

Доброго всім дня. Склалась ось така ситуація: Є обробка з допомогою якої звіряють документи по ШК (штрих коду). Документи вона знаходить, а от при виконанні фукції шкПолучитьСтрокуШКПоДокументу(), повертає значення не таке як має бути. Попрацювавши трішки з отладчиком, вияснилось, що не правильнго розраховується CRC32HEX сума.

 Функция шкПолучитьСтрокуШКПоДокументу(Док, ТекстОшибки = "", CRC32 = "", ДляПокупателя = Истина) Экспорт
    ВидД = ТипЗнч(Док);

    //версия алгоритма
    VV = "01";
    
    //вид документа
    P = "";
    Если ВидД = Тип("ДокументСсылка.РеализацияТоваров") Тогда
        P = ?(ДляПокупателя,  "1", "0");
    ИначеЕсли ВидД = Тип("ДокументСсылка.ПоступлениеТоваров") Тогда
        P = "1";
    ИначеЕсли ВидД = Тип("ДокументСсылка.ЗаказНаряд") Тогда
        P = "2";
    ИначеЕсли ВидД = Тип("ДокументСсылка.ПеремещениеТоваровВПроизводство") Тогда
        P = "3";
    ИначеЕсли ВидД = Тип("ДокументСсылка.СписаниеТоваров") Тогда
        P = "4";
    ИначеЕсли ВидД = Тип("ДокументСсылка.ВводОстатковТоваров") Тогда
        P = "6";
    ИначеЕсли ВидД = Тип("ДокументСсылка.ИзвлечениеТоваровИзПроизводства") Тогда
        P = "9";
    КонецЕсли;
    
    Если P = "" Тогда
        Если ТекстОшибки <> "" Тогда
            ТекстОшибки = ТекстОшибки + Символы.ПС;
        КонецЕсли;
        ТекстОшибки =  ТекстОшибки + "Вид документа """ + Строка(ВидД) + """ не может быть обработан!";
        Возврат 0;
    КонецЕсли;

    
    
    //DDMMYY - дата документа
    Если ВидД = Тип("ДокументСсылка.ПоступлениеТоваров") Тогда
        ДатаДок = Формат(Док.ВхДокНомер,"ДФ=dd.MM.yy");
    Иначе
        ДатаДок = Формат(Док.Дата,"ДФ=dd.MM.yy");
    КонецЕсли;
    
    DD = Сред(ДатаДок,1,2);
    MM = Сред(ДатаДок,4,2);
    YY = Сред(ДатаДок,7,2);

    
    //C - CRC32, построенное по выбранным полям документа
    //CRC32 = "";
    CRC32HEX = "";
    СимволРазделитель = ";";
    Если дкДокументЕстьРеквизитШапки("Контрагент", Док.Метаданные().Имя) Тогда
        ЕГРПОУ = СокрЛП(Док.Контрагент.ЕДРПОУ);
    Иначе
        ЕГРПОУ = "";
    КонецЕсли;    
    
    Если ВидД = Тип("ДокументСсылка.РеализацияТоваров") Тогда
        ЕГРПОУ = СокрЛП(Док.Организация.ЕДРПОУ); // т.о. когда это будет ПН там наша фирма будет Контрагент
    КонецЕсли;      
    
    CRC32 = ЕГРПОУ + СимволРазделитель;
    
    CRC32 = ДописатьТЧВСтрокуДляCRC32(Док, "Товары", CRC32);
    
    Если ВидД = Тип("ДокументСсылка.ЗаказНаряд") Тогда
        CRC32 = ДописатьТЧВСтрокуДляCRC32(Док, "Работы", CRC32);
    КонецЕсли;
    
    CRC32HEX = hex_(Число(шкХеш(CRC32)));
    
    //N - номер документа
    Если ВидД = Тип("ДокументСсылка.ПоступлениеТоваров") Тогда

        N = шкТранслитерация(СокрЛП(Док.ВхДокНомер), "RUEN", ТекстОшибки);
    Иначе
        N = шкТранслитерация(СокрЛП(Док.Номер), "RUEN", ТекстОшибки);
    КонецЕсли;
    
    Если ТекстОшибки = "" Тогда
        СтрокаШК = VV + P + DD + MM + YY + CRC32HEX + N;
        Возврат СтрокаШК;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции // глПолучитьСтрокуШКПоДокументу


Ось сама функція шкХеш()

Функция шкХеш(СтрокаХэш) Экспорт 
    Строка_ = СокрЛП(Строка(СтрокаХэш));                         //Получаем строку и убираем ведущие и ведомые пробелы    
    НачПозиция = 1;                                              //Переменная начальной позиции блока
    hash=0;                                                      //Переменная хеша;
    M=33;                                                        //Переменная точности
    ДлинаСтроки = СтрДлина(Строка_);                            //Получаем длину входной строки
    //Организовываем цикл обработки по блокам из 10 символов
    Пока НачПозиция <= ДлинаСтроки Цикл
        СтрокаБлока = Сред(Строка_, НачПозиция, 10);            //Получае блок
        //Цикл получения хеша блока
        Для к = 1 По СтрДлина(СтрокаБлока) Цикл
            hash = M * hash + КодСимволаASCII(Сред(СтрокаБлока, к,1));
        КонецЦикла;
        hash = hash % 4294967296;                                //Остаток от деления определяет разрядность хеша (4294967296 - 4 байт,18446744073709551616 - 8 байт)
        НачПозиция = НачПозиция + 10;                           //Начальная позиция следующего блока
    КонецЦикла;
    Результат = hash;
    Возврат Результат;
КонецФункции //Хеш


В результаті на паперовому носії ШК - 011050514BA71C97EZAP1405008;
При відпрацювання обробки ШК - 0110505145480487EZAP1405008;

Чому різні CRC32 суми. Допоможіть розібратись. Дякую.
Конфа - "Альфа"
1С-8.2.17.143


 ! 

Правила, п.3
 


Сообщение отредактировал logist - 24.07.14, 8:35

Petre Подменю пользователя
сообщение 24.07.14, 9:00
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2907
Из: Київ, Україна
Спасибо сказали: 1148 раз
Рейтинг: 1230.2

Поясніть алгоритм дій.
Звідки береться на шк паперовому носії?
"Документи вона знаходить" означає, що обробка знаходить документи за шк на паперовому носії? Тоді навіщо генерувати шк "при відпрацювання обробки"?


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

djdf_crash Подменю пользователя
сообщение 24.07.14, 9:09
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 40
Из: Киев
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(Petre @ 24.07.14, 10:00) *
Поясніть алгоритм дій.
Звідки береться на шк паперовому носії?
"Документи вона знаходить" означає, що обробка знаходить документи за шк на паперовому носії? Тоді навіщо генерувати шк "при відпрацювання обробки"?


До нас приходять накладні з головного офіса, в електронному та паперовому вигляді. На паперовому вже існує ШК. Наскільки я розумію то бухгалтерія повинна звіряти їх в кінцці місяця. Повинно находити документ в базі та відповідно щоб був однаковий ШК. Структуру ШК можна побачити в функціях яких я скинув.

djdf_crash Подменю пользователя
сообщение 25.07.14, 8:03
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 40
Из: Киев
Спасибо сказали: 1 раз
Рейтинг: 0

Я так розумію мені ніхто не допоможе з CRC сумами по ШК 64000000.gif

Petre Подменю пользователя
сообщение 25.07.14, 14:10
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2907
Из: Київ, Україна
Спасибо сказали: 1148 раз
Рейтинг: 1230.2

Ну то запитайте у головному офісі алгоритм формування шк на друк.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Pepe Подменю пользователя
сообщение 25.07.14, 17:04
Сообщение #6

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1434
Из: Ужгород
Спасибо сказали: 761 раз
Рейтинг: 230

Має співпадати обробка формування штрих-кода та розшифровки. По-друге, треба перевірити систему формування та читання, їх багато (Code 39, Code128, EAN...) - мають співпадати. Сканер сам розпізнає систему кодування, але іноді налаштування сканера неправильно формує код (включено перевірку на CRC, деякі символи сканер може не траслювати, замінюючи їх іншими символами, особливо це стосуєть роздільників...). В блокноті подивіться код, який ви отримуєте без обробки від сканера.

Сообщение отредактировал Pepe - 25.07.14, 17:10

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 04.06.24, 16:26
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!