|
v7: Как запретить печать документов без сохранения | ☑ | ||
---|---|---|---|---|
0
AJIeLLIka
20.10.15
✎
16:24
|
Привет всем! Нужно некоторым пользователям запретить печать документов без сохранения. Чтобы не получилось так, что они распечатали документ а потом просто закрыли не сохранив.
В настройках прав пользователя нашел параметр "Печать документов без сохранения", но он не влияет на погоду, документ распечатывается без сохранения если галочка стоит и если не стоит. Друзья, подскажите, можно ли это реализовать штатными средствами? Сделать это нужно в 1С-Рарус:Магазин |
|||
1
aka AMIGO
20.10.15
✎
16:27
|
ИМХО, есть такая функция: Выбран();
Если =1, то док записан, можно печатать. |
|||
2
Масянька
20.10.15
✎
16:27
|
(0) Поставь минимальные полномочия :)
|
|||
3
Злопчинский
20.10.15
✎
16:30
|
фигня какая.
на каждом документе должен быть колонтитиул в котором дата время печати кто распечатал . ну допустим документа нет а распечатка есть. люлей навешать и все тому кто распечатал. . но люля вешать - это надо иметь политическую волю. как гитлер. |
|||
4
Масянька
20.10.15
✎
16:30
|
+ (2) Справочник -> ПолномочияПользователей
|
|||
5
Масянька
20.10.15
✎
16:31
|
(3) Вот тебя слушаешь и понимаешь - "Никакой демократии!" :)
|
|||
6
Злопчинский
20.10.15
✎
16:32
|
(5) каждый автоматизатор в душе гестаповец
|
|||
7
Злопчинский
20.10.15
✎
16:33
|
вот ща
направление развиваем с руководятелом одно обговаривается а в инфе приходит фигня всякая повбывавбы |
|||
8
Масянька
20.10.15
✎
16:35
|
(7) "руководятел" - американец што ли? :)))))))))
|
|||
9
Абыр
20.10.15
✎
17:01
|
(0) Проверять Выбран() или Проведен(), если печать допускается не просто записанных, но и проведенных документов.
Если допускается изменение документов, но при этом следует запретить печать до сохранения изменений, то еще и Модифицированность() использовать. |
|||
10
Абыр
20.10.15
✎
17:03
|
Хотя, насколько я понимаю, в (0) не погромист, и просто хочет без кодирования, чтобы ткнули в нужную галочку.
|
|||
11
AJIeLLIka
20.10.15
✎
17:18
|
(10) Совершенно верно! Я не программист, и если есть легкий путь, который я смогу своими силами выполнить, было бы здорово. Если нет, то конечно же обратимся к спецам. Но спасибо вам и остальным за помощь.
А для чего тогда интересно параметр: "Печать документов без сохранения"? |
|||
12
Масянька
20.10.15
✎
17:24
|
(11) Для не проведенных документов.
|
|||
13
Злопчинский
20.10.15
✎
18:31
|
(12) я бы сказал для НЕСОХРАНЕННЫХ документов... (то есть новых или модифицированных, но не сохраненных)
|
|||
14
HawkEye
20.10.15
✎
19:00
|
(0) файлик 1cv7.md выложи
|
|||
15
Mikeware
20.10.15
✎
20:09
|
(3) я ещё добавлял verstamp. Несколько раз помогало. Ну и на многостраничных документах на второй и далее страницах - вид, номер, дата документа. И,естественно, везде штрихкод.
|
|||
16
Pahomich
20.10.15
✎
20:17
|
(0) Еще к предложенному можно в функцию Печать() добавить в начало Сохранить()...
|
|||
17
Pahomich
20.10.15
✎
20:20
|
(16) Вернее Записать()
|
|||
18
Mikeware
20.10.15
✎
20:46
|
(16) ну что за чушь...
|
|||
19
Pahomich
20.10.15
✎
21:04
|
(18) Чушь не чушь, но задачу запрета печати без сохранения решает.
|
|||
20
Pahomich
20.10.15
✎
21:07
|
(19) Кстати, верстампы и колонтитулы эту задачу не решают, а только предоставляют информацию о нарушении.
|
|||
21
oslokot
20.10.15
✎
21:08
|
В типовых клюшках, помнится, нельзя распечатать торг-12 не засейвив док
|
|||
22
Злопчинский
20.10.15
✎
21:09
|
В тисе механизм впф удобный
Но он именно для печати заточен А есть такие печати которые можно и непроведенные печатать И проведенные А штатно так не выкрутиться Часть впф хочется чтобы была видна только под конкретные значения конкретных реквизитов Вот и есть мысль флажки разрешения печати выгести в файл настроек впф и аналогично например что такаято впф доступна только если контрагент шапки равен петров Типа так Делал ктото такое расширение Или опять придется самому пилить? |
|||
23
Злопчинский
20.10.15
✎
21:11
|
(20) эээ коллега
Типовые еонфиги это учетные конфиги То есть двигающие воздух Если делать по уму то надо кардинально переколбашивать Например можно тупо На форму функцию Если в функции документ новый или не сохранен после изменений то доступностьвидимость кнопок печати равно нулю |
|||
24
oslokot
20.10.15
✎
21:15
|
А еще можно создать док, напечатать из него кучу разных печ.форм каждый раз пересохраняя, а как надоест, закинуть его от глаз подальше, на 01.01.3001
|
|||
25
Pahomich
20.10.15
✎
21:18
|
(23) Получается лучшее решение это (1) плюс учет модифицированности документа и в зависимости от этого и флажков в справочнике сотрудники определять доступность кнопок печати.
|
|||
26
Mikeware
20.10.15
✎
22:06
|
(25) и (1) тоже немного чушь. Основное - модифицированность().
А сохранение - должно быть процессом, осознанным пользователем.... чтоб не было - "я случайно исправила, а ваша программа сохранила" |
|||
27
Mikeware
20.10.15
✎
22:07
|
(22) пилить... там два десятка строк...
|
|||
28
Builder
20.10.15
✎
22:10
|
Делал в свое время механизм сохранения всех печатных форм при выводе на печать. Поймали одного менеджера и турнули с позором - на печать выводил одно, правил док и сохранял в базе другое.
|
|||
29
Злопчинский
20.10.15
✎
22:21
|
(28) Предопределенная формексовская ПриПечати() - и тупо складировать в подпапки по именам юзверей
|
|||
30
Злопчинский
20.10.15
✎
22:22
|
(27) ну так давай! а то я уставши, а у меня 2 ноября война...
|
|||
31
Сияющий в темноте
20.10.15
✎
23:50
|
(28) они бывают ещё умнее когда форму в ексель переносят и т п
а некоторые гиганты мысли просто готовую напечатанную и дома при6ося |
|||
32
vcv
21.10.15
✎
05:01
|
(6) "каждый автоматизатор в душе гестаповец"
Я у себя сделал, то бы при печати внутрь базы сохранялась печатная форма, привязанная к документу. Печатные формы защищены от удаления, документ, соответственно, удалить тоже нельзя, потому как ссылка на него есть. Бухгалтерия пришла с претензией: не можем удалить документ. И состоялся зачудительный разговор: (я) Не можете, потому что документ печатался и покупателю, по всей видимости, отдана накладная; (бух) А зачем нам всякая фигня в базе? (дословно) (я) А зачем вы всякую фигню в базу вводите, да еще и печатаете? :) |
|||
33
Aleksey
21.10.15
✎
05:56
|
(22) Я делал в виде обработке такое, т.е. у документа одна печатная форма, в которой формируется список доступных печатных форм, при необходимости пользователь галками определяет какие печатные формы нужны, выбирает принтер и автоматом печатается, даже на экран не выводиться (ТЧ выводится как ТЗ на форме для просмотра)
|
|||
34
Mikeware
21.10.15
✎
07:21
|
(33) У меня все равно длиннее... :-)
У меня для каждого контрагента без вывода на экран печатался свой набор форм, установленный договором (или пакет по умолчанию, если не установлен) |
|||
35
Pahomich
21.10.15
✎
07:51
|
(34) Возможно это правильное и эффективное решение...но только задачи имеющей весьма косвенное отношение к задаче, поставленной автором ветки и чисто конкретно её не решающее!
|
|||
36
vde69
21.10.15
✎
08:32
|
(3) я себе сделал такую фишку:
на каждом документе печатается штрих код в котором зашит ID документа и его контрольные значения (для некоторых документов это сумма, для других другие параметры, от всех параметров скопом я получаю один хеш и его храню в штрих коде), тем самым при сканировании ШК с документа я сразу определяю соответствие электронного и бумажного документа. ОЧЕНЬ УДОБНО!!!! |
|||
37
Mikeware
21.10.15
✎
09:12
|
(36) Плюсую!
|
|||
38
Mikeware
21.10.15
✎
09:13
|
(35)Задача автора решается четырьмя строчками в модуле формы:
Если Модифицированность()=1 Тогда Сообщить("Нефиг"); возврат; КонецЕсли; |
|||
39
vde69
21.10.15
✎
09:21
|
(37) собственно идея не моя, это налоговая придумала для регламентированной отчетности лет 10 назад (когда они ввели двухмерный ШК), но вот реализовать такой поход для внутреннего документооборота - моя идея...
где реально применяется 1. при разборках со складом (у них гранится первичка по которой они отгружаю/принимают), при "спорных" моментах проходим сканером и моментально находим в юазе все изменения "задним числом" 2. при подписи на бумаге счетов, скан и ты уверен, что счет заведен в систему. единственный минус - возможность редактировать печатную форму в екселе (при этом ШК будет старый), тут у меня есть идея присобачить имедж сканет и сканировать с распознаванием пару ключевых параметров (количество строк и общую сумму/количество), но пока не допилил... |
|||
40
Pahomich
21.10.15
✎
09:22
|
(38) Думаю ты погорячился - это запрет на печать для всех изменивших документ, даже для создавшего его и после сохранения исправившего какую то мелочь, а надо для некоторых...Да, и в какую процедуру ты добавишь эти строки?
|
|||
41
Pahomich
21.10.15
✎
09:27
|
(39) Это все отлично, но это проверка тобой документов твоей фирмы. Для многих клиентов, кому предназначен данный документ, это непременимо.
|
|||
42
Mikeware
21.10.15
✎
09:27
|
(39) я такое собирался сделать примерно тогда же - еще на Территории обсуждали... я собрался тогда почитать книжки (типа Питерсона или вильямса), да потом сменил работу - и руки так и не дошли, ограничился просто идентификацией
|
|||
43
vde69
21.10.15
✎
09:38
|
(41) ни разу не встречал организацию которая печатает документы нужные "чужой" и не нужной "своей"
|
|||
44
Pahomich
21.10.15
✎
10:49
|
(43) Ты счет-фактуры и накладные клиенту не передаешь?
|
|||
45
Злопчинский
21.10.15
✎
11:08
|
(36) тоже плюсую но с оглядкой. совпадение шк на печформе с базой не гарантирует что в проведении документа тот же результат, что и раньше - у нас же любят писать алгоритмы, зависящие от реквизитов, которые не находятся впрямую в документе...
. но по этому пути я тоже думаю штрихкодировать если на клюшках - можно поиметь функцию расчета для шк? и шк сам большой получается? |
|||
46
Злопчинский
21.10.15
✎
11:09
|
(44) да запросто такое может быть... например безвозмездная отгрузка. как правило клиентам нафиг не нужны ни счф, ни торг12. а у нас - оно есть...
|
|||
47
Mikeware
21.10.15
✎
11:22
|
(45) "проведение" ни при чем... вопрос в совпадении ключевых реквизитов.
совпадение ШК не гарантирует, что еквизиты не менялись, но вот несовпадение - гарантирует, что менялись. |
|||
48
Mikeware
21.10.15
✎
11:24
|
(46) просто Pahomich как всегда, пишет не разобравшись (т.е. с точностью до наеборот)
|
|||
49
Злопчинский
21.10.15
✎
11:24
|
(47) согласен, по этому пути и планирую...
и где, блин, обещанные 22 строчки??? ;-) |
|||
50
vde69
21.10.15
✎
11:25
|
(45) у меня влазит в Code128
// НомерДока - это тип документа числом, накладая - 1, реализация - 2 и так далее. мСтрокаШапка = НомерДока + "," + СсылкаНаОбъект.УникальныйИдентификатор(); мСтрокаШапка = СтрЗаменить(мСтрокаШапка, "-", ""); ОбластьШапка.Рисунки.ШтрихКодШапка.Объект.ТипКода = 4; ОбластьШапка.Рисунки.ШтрихКодШапка.Объект.Сообщение = ВРег(мСтрокаШапка); Функция ПолучитьХешТоварнойЧастиУпр (ДокументСсылка) Экспорт СтрокаДляХеша = ""; мТЗ = Новый ТаблицаЗначений; мТЗ.Колонки.Добавить("Номенклатура"); мТЗ.Колонки.Добавить("Количество"); мТЗ.Колонки.Добавить("Единица"); Для Каждого эл из ДокументСсылка.Товары Цикл НоваяСтрока = мТЗ.Добавить(); НоваяСтрока.Номенклатура = СокрЛП(эл.Номенклатура.УникальныйИдентификатор()); НоваяСтрока.Количество = эл.Количество; НоваяСтрока.Единица = СокрЛП(эл.ЕдиницаИзмерения.УникальныйИдентификатор()); КонецЦикла; СтрокаДляХеша = ""; мТЗ.Сортировать("Номенклатура"); Для Каждого эл из мТЗ Цикл СтрокаДляХеша = СтрокаДляХеша + эл.Номенклатура + "," + эл.Количество + "," + эл.Единица + ";"; КонецЦикла; Результат = ВычислитьХешСтрокиПоАлгоритмуMD5(СтрокаДляХеша); Возврат Результат; КонецФункции |
|||
51
Mikeware
21.10.15
✎
11:32
|
(49) у меня сейчас на ноуте клюшек-то нету... снес, потому, что опенконф не ставится.... (точнее, он-то ставится, но конфигуратор падает).
сейчас поставлю, по скайпу наберу... |
|||
52
Злопчинский
21.10.15
✎
11:33
|
ну... да...
а контрагента? а договор? (в некоторых доках указывается) а дата документа (частенько двигают)..? еще что-то? |
|||
53
Mikeware
21.10.15
✎
11:35
|
(52) ну так пихай в строку для хэша что надо - главное, проверять так же...
(50) сколько длина хэша? |
|||
54
vde69
21.10.15
✎
11:35
|
(50)+
вру, у меня верхний штрих код - это ссылка на документ, а нижний - хеш :) |
|||
55
vde69
21.10.15
✎
11:37
|
АлгоритмХеша = "1";
мСтрокаПодвал = АлгоритмХеша + "," + Криптография.ПолучитьХешТоварнойЧастиУпр(СсылкаНаОбъект); ОбластьПодвал.Рисунки.ШтрихКодПодвал.Объект.ТипКода = 4; ОбластьПодвал.Рисунки.ШтрихКодПодвал.Объект.Сообщение = ВРег(мСтрокаПодвал); |
|||
56
Злопчинский
21.10.15
✎
11:41
|
да, какая длина хеша получается..?
|
|||
57
vde69
21.10.15
✎
11:47
|
считай :)
75B0CD562640064F6608A170CAA96E48 |
|||
58
vde69
21.10.15
✎
11:48
|
а вообще его можно делать ЛЮБОЙ длины
|
|||
59
vde69
21.10.15
✎
11:49
|
оставлю полный код получения хеша
// Возвращает хеш по алгоритму MD5 для произвольной строки. // // Параметры: // Строка - Строка - произвольная строка любой длины // // Возвращаемое значение: // Строка - хеш, вычисленный из строки Функция ВычислитьХешСтрокиПоАлгоритмуMD5(Знач Строка) Экспорт a = ЧислоВБинарныйМассив(1732584193); // 01 23 45 67; (шестнадцатеричное представление, сначала младший байт) b = ЧислоВБинарныйМассив(4023233417); // 89 AB CD EF; c = ЧислоВБинарныйМассив(2562383102); // FE DC BA 98; d = ЧислоВБинарныйМассив(271733878); // 76 54 32 10; X = Новый Массив(16); // X - блок данных размером 512 бит, массив из 32-битных слов // разбиваем строку на блоки по 512 бит МассивБлоковИзСтроки = ПолучитьМассивБлоковБайтовИзСтроки(Строка); // для каждого блока производим расчет Для НомерБлока = 0 По МассивБлоковИзСтроки.Количество() - 1 Цикл Блок = МассивБлоковИзСтроки[НомерБлока]; Для НомерСлова = 0 По 15 Цикл Слово = 0; Для НомерБайта = 1 По 4 Цикл Слово = Слово + Блок[НомерСлова 4 + НомерБайта - 1] Pow(256, НомерБайта - 1); КонецЦикла; X[НомерСлова] = Слово; КонецЦикла; // в последний блок дописываем длину строки в битах Если НомерБлока = МассивБлоковИзСтроки.Количество() - 1 Тогда РазмерСтрокиВБитах = СтрДлина(Строка) 8; X[14] = РазмерСтрокиВБитах % Pow(2,32); // сначала младшие 4 байта X[15] = Цел(РазмерСтрокиВБитах / Pow(2,32)) % Pow(2,64); // если длина превосходит (2^64 - 1) бит, то старшие биты откидываем КонецЕсли; РассчитатьБлок(a, b, c, d, X); КонецЦикла; Результат = ЧислоВШестнадцатеричномПредставлении(БинарныйМассивВЧисло(a)) + ЧислоВШестнадцатеричномПредставлении(БинарныйМассивВЧисло(b)) + ЧислоВШестнадцатеричномПредставлении(БинарныйМассивВЧисло(c)) + ЧислоВШестнадцатеричномПредставлении(БинарныйМассивВЧисло(d)); Возврат Результат; КонецФункции // ВычислитьХешСтрокиПоАлгоритмуMD5 Функция ПолучитьМассивБлоковБайтовИзСтроки(Знач Строка) Результат = Новый Массив; Строка = Строка + Символ(128); // единичный бит + выравнивание нолями до байта Пока СтрДлина(Строка) > 0 Цикл БлокБайтов = ПолучитьБлокБайтовИзСтроки(Лев(Строка, 64)); Результат.Добавить(БлокБайтов); // если последние 8 байт получились не нулевые, то добавляем ещё один нулевой блок Если СтрДлина(Строка) > 56 И СтрДлина(Строка) < 64 Тогда Результат.Добавить(ПолучитьБлокБайтовИзСтроки("")); КонецЕсли; Строка = Сред(Строка, 65); КонецЦикла; Возврат Результат; КонецФункции Функция ПолучитьБлокБайтовИзСтроки(Знач Строка) Результат = Новый Массив; Для Позиция = 1 По СтрДлина(Строка) Цикл Результат.Добавить(КодСимвола(Сред(Строка, Позиция, 1))); КонецЦикла; // дополняем блок нолями Для Индекс = Позиция По 64 Цикл Результат.Добавить(0); КонецЦикла; Возврат Результат; КонецФункции Процедура РассчитатьБлок(a, b, c, d, X) aa = СкопироватьМассив(a); bb = СкопироватьМассив(b); cc = СкопироватьМассив(c); dd = СкопироватьМассив(d); // раунд 1 ВыполнитьОперациюСФункциейF(a,b,c,d, X[ 0], 7, 3614090360); // 0xd76aa478 / 1 / ВыполнитьОперациюСФункциейF(d,a,b,c, X[ 1], 12, 3905402710); // 0xe8c7b756 / 2 / ВыполнитьОперациюСФункциейF(c,d,a,b, X[ 2], 17, 606105819); // 0x242070db / 3 / ВыполнитьОперациюСФункциейF(b,c,d,a, X[ 3], 22, 3250441966); // 0xc1bdceee / 4 / ВыполнитьОперациюСФункциейF(a,b,c,d, X[ 4], 7, 4118548399); // 0xf57c0faf / 5 / ВыполнитьОперациюСФункциейF(d,a,b,c, X[ 5], 12, 1200080426); // 0x4787c62a / 6 / ВыполнитьОперациюСФункциейF(c,d,a,b, X[ 6], 17, 2821735955); // 0xa8304613 / 7 / ВыполнитьОперациюСФункциейF(b,c,d,a, X[ 7], 22, 4249261313); // 0xfd469501 / 8 / ВыполнитьОперациюСФункциейF(a,b,c,d, X[ 8], 7, 1770035416); // 0x698098d8 / 9 / ВыполнитьОперациюСФункциейF(d,a,b,c, X[ 9], 12, 2336552879); // 0x8b44f7af / 10 / ВыполнитьОперациюСФункциейF(c,d,a,b, X[10], 17, 4294925233); // 0xffff5bb1 / 11 / ВыполнитьОперациюСФункциейF(b,c,d,a, X[11], 22, 2304563134); // 0x895cd7be / 12 / ВыполнитьОперациюСФункциейF(a,b,c,d, X[12], 7, 1804603682); // 0x6b901122 / 13 / ВыполнитьОперациюСФункциейF(d,a,b,c, X[13], 12, 4254626195); // 0xfd987193 / 14 / ВыполнитьОперациюСФункциейF(c,d,a,b, X[14], 17, 2792965006); // 0xa679438e / 15 / ВыполнитьОперациюСФункциейF(b,c,d,a, X[15], 22, 1236535329); // 0x49b40821 / 16 / // раунд 2 ВыполнитьОперациюСФункциейG(a,b,c,d, X[ 1], 5, 4129170786); // 0xf61e2562 / 17 / ВыполнитьОперациюСФункциейG(d,a,b,c, X[ 6], 9, 3225465664); // 0xc040b340 / 18 / ВыполнитьОперациюСФункциейG(c,d,a,b, X[11], 14, 643717713); // 0x265e5a51 / 19 / ВыполнитьОперациюСФункциейG(b,c,d,a, X[ 0], 20, 3921069994); // 0xe9b6c7aa / 20 / ВыполнитьОперациюСФункциейG(a,b,c,d, X[ 5], 5, 3593408605); // 0xd62f105d / 21 / ВыполнитьОперациюСФункциейG(d,a,b,c, X[10], 9, 38016083); // 0x2441453 / 22 / ВыполнитьОперациюСФункциейG(c,d,a,b, X[15], 14, 3634488961); // 0xd8a1e681 / 23 / ВыполнитьОперациюСФункциейG(b,c,d,a, X[ 4], 20, 3889429448); // 0xe7d3fbc8 / 24 / ВыполнитьОперациюСФункциейG(a,b,c,d, X[ 9], 5, 568446438); // 0x21e1cde6 / 25 / ВыполнитьОперациюСФункциейG(d,a,b,c, X[14], 9, 3275163606); // 0xc33707d6 / 26 / ВыполнитьОперациюСФункциейG(c,d,a,b, X[ 3], 14, 4107603335); // 0xf4d50d87 / 27 / ВыполнитьОперациюСФункциейG(b,c,d,a, X[ 8], 20, 1163531501); // 0x455a14ed / 28 / ВыполнитьОперациюСФункциейG(a,b,c,d, X[13], 5, 2850285829); // 0xa9e3e905 / 29 / ВыполнитьОперациюСФункциейG(d,a,b,c, X[ 2], 9, 4243563512); // 0xfcefa3f8 / 30 / ВыполнитьОперациюСФункциейG(c,d,a,b, X[ 7], 14, 1735328473); // 0x676f02d9 / 31 / ВыполнитьОперациюСФункциейG(b,c,d,a, X[12], 20, 2368359562); // 0x8d2a4c8a / 32 / // раунд 3 ВыполнитьОперациюСФункциейH(a,b,c,d, X[ 5], 4, 4294588738); // 0xfffa3942 / 33 / ВыполнитьОперациюСФункциейH(d,a,b,c, X[ 8], 11, 2272392833); // 0x8771f681 / 34 / ВыполнитьОперациюСФункциейH(c,d,a,b, X[11], 16, 1839030562); // 0x6d9d6122 / 35 / ВыполнитьОперациюСФункциейH(b,c,d,a, X[14], 23, 4259657740); // 0xfde5380c / 36 / ВыполнитьОперациюСФункциейH(a,b,c,d, X[ 1], 4, 2763975236); // 0xa4beea44 / 37 / ВыполнитьОперациюСФункциейH(d,a,b,c, X[ 4], 11, 1272893353); // 0x4bdecfa9 / 38 / ВыполнитьОперациюСФункциейH(c,d,a,b, X[ 7], 16, 4139469664); // 0xf6bb4b60 / 39 / ВыполнитьОперациюСФункциейH(b,c,d,a, X[10], 23, 3200236656); // 0xbebfbc70 / 40 / ВыполнитьОперациюСФункциейH(a,b,c,d, X[13], 4, 681279174); // 0x289b7ec6 / 41 / ВыполнитьОперациюСФункциейH(d,a,b,c, X[ 0], 11, 3936430074); // 0xeaa127fa / 42 / ВыполнитьОперациюСФункциейH(c,d,a,b, X[ 3], 16, 3572445317); // 0xd4ef3085 / 43 / ВыполнитьОперациюСФункциейH(b,c,d,a, X[ 6], 23, 76029189); // 0x4881d05 / 44 / ВыполнитьОперациюСФункциейH(a,b,c,d, X[ 9], 4, 3654602809); // 0xd9d4d039 / 45 / ВыполнитьОперациюСФункциейH(d,a,b,c, X[12], 11, 3873151461); // 0xe6db99e5 / 46 / ВыполнитьОперациюСФункциейH(c,d,a,b, X[15], 16, 530742520); // 0x1fa27cf8 / 47 / ВыполнитьОперациюСФункциейH(b,c,d,a, X[ 2], 23, 3299628645); // 0xc4ac5665 / 48 / // раунд 4 ВыполнитьОперациюСФункциейI(a,b,c,d, X[ 0], 6, 4096336452); // 0xf4292244 / 49 / ВыполнитьОперациюСФункциейI(d,a,b,c, X[ 7], 10, 1126891415); // 0x432aff97 / 50 / ВыполнитьОперациюСФункциейI(c,d,a,b, X[14], 15, 2878612391); // 0xab9423a7 / 51 / ВыполнитьОперациюСФункциейI(b,c,d,a, X[ 5], 21, 4237533241); // 0xfc93a039 / 52 / ВыполнитьОперациюСФункциейI(a,b,c,d, X[12], 6, 1700485571); // 0x655b59c3 / 53 / ВыполнитьОперациюСФункциейI(d,a,b,c, X[ 3], 10, 2399980690); // 0x8f0ccc92 / 54 / ВыполнитьОперациюСФункциейI(c,d,a,b, X[10], 15, 4293915773); // 0xffeff47d / 55 / ВыполнитьОперациюСФункциейI(b,c,d,a, X[ 1], 21, 2240044497); // 0x85845dd1 / 56 / ВыполнитьОперациюСФункциейI(a,b,c,d, X[ 8], 6, 1873313359); // 0x6fa87e4f / 57 / ВыполнитьОперациюСФункциейI(d,a,b,c, X[15], 10, 4264355552); // 0xfe2ce6e0 / 58 / ВыполнитьОперациюСФункциейI(c,d,a,b, X[ 6], 15, 2734768916); // 0xa3014314 / 59 / ВыполнитьОперациюСФункциейI(b,c,d,a, X[13], 21, 1309151649); // 0x4e0811a1 / 60 / ВыполнитьОперациюСФункциейI(a,b,c,d, X[ 4], 6, 4149444226); // 0xf7537e82 / 61 / ВыполнитьОперациюСФункциейI(d,a,b,c, X[11], 10, 3174756917); // 0xbd3af235 / 62 / ВыполнитьОперациюСФункциейI(c,d,a,b, X[ 2], 15, 718787259); // 0x2ad7d2bb / 63 / ВыполнитьОперациюСФункциейI(b,c,d,a, X[ 9], 21, 3951481745); // 0xeb86d391 / 64 / a = БинарнаяСумма(a, aa); b = БинарнаяСумма(b, bb); c = БинарнаяСумма(c, cc); d = БинарнаяСумма(d, dd); КонецПроцедуры Процедура ВыполнитьОперациюСФункциейF(a, b, c, d, X, s, t) ВыполнитьОперацию(ПобитовоеИли(ПобитовоеИ(b, c), ПобитовоеИ(ПобитовоеНе(b), d)), a, b, X, s, t); КонецПроцедуры Процедура ВыполнитьОперациюСФункциейG(a, b, c, d, X, s, t) ВыполнитьОперацию(ПобитовоеИли(ПобитовоеИ(b, d), ПобитовоеИ(ПобитовоеНе(d), c)), a, b, X, s, t); КонецПроцедуры Процедура ВыполнитьОперациюСФункциейH(a, b, c, d, X, s, t) ВыполнитьОперацию(ПобитовоеИсключающееИли(ПобитовоеИсключающееИли(b, c), d), a, b, X, s, t); КонецПроцедуры Процедура ВыполнитьОперациюСФункциейI(a, b, c, d, X, s, t) ВыполнитьОперацию(ПобитовоеИсключающееИли(ПобитовоеИли(ПобитовоеНе(d), b), c), a, b, X, s, t); КонецПроцедуры Процедура ВыполнитьОперацию(q, a, b, X, s, t) a = БинарнаяСумма(ЦиклическийСдвигВлево(БинарнаяСумма(БинарнаяСумма(a, q), ЧислоВБинарныйМассив((X + t) % Pow(2,32))), s), b); КонецПроцедуры Функция ЧислоВБинарныйМассив(Знач Число, Знач ВсегоРазрядов = 32) Результат = Новый Массив; ТекущийРазряд = 0; Пока ТекущийРазряд < ВсегоРазрядов Цикл ТекущийРазряд = ТекущийРазряд + 1; Результат.Добавить(Булево(Число % 2)); Число = Цел(Число / 2); КонецЦикла; Возврат Результат; КонецФункции Функция БинарныйМассивВЧисло(Массив) Результат = 0; Для НомерРазряда = -(Массив.Количество()-1) По 0 Цикл Результат = Результат 2 + Число(Массив[-НомерРазряда]); КонецЦикла; Возврат Результат; КонецФункции Функция ЧислоВШестнадцатеричномПредставлении(Знач Число, Знач КоличествоБайт = 4) Результат = ""; СтрокаСимволов = "0123456789ABCDEF"; Для НомерБайта = 1 По КоличествоБайт Цикл ПредставлениеБайта = ""; Для Счетчик = 1 По 2 Цикл ПредставлениеБайта = Сред(СтрокаСимволов, Число % 16 + 1, 1) + ПредставлениеБайта; Число = Цел(Число / 16); КонецЦикла; // порядок байтов: начиная с младшего Результат = Результат + ПредставлениеБайта; КонецЦикла; Возврат Результат; КонецФункции Функция ПобитовоеИ(БинарныйМассив1, БинарныйМассив2) Результат = Новый Массив; Для Индекс = 0 По БинарныйМассив1.Количество()-1 Цикл Результат.Добавить(БинарныйМассив1[Индекс] И БинарныйМассив2[Индекс]); КонецЦикла; Возврат Результат; КонецФункции Функция ПобитовоеИли(БинарныйМассив1, БинарныйМассив2) Результат = Новый Массив; Для Индекс = 0 По БинарныйМассив1.Количество()-1 Цикл Результат.Добавить(БинарныйМассив1[Индекс] Или БинарныйМассив2[Индекс]); КонецЦикла; Возврат Результат; КонецФункции Функция ПобитовоеИсключающееИли(БинарныйМассив1, БинарныйМассив2) Результат = Новый Массив; Для Индекс = 0 По БинарныйМассив1.Количество()-1 Цикл Результат.Добавить(БинарныйМассив1[Индекс] <> БинарныйМассив2[Индекс]); КонецЦикла; Возврат Результат; КонецФункции Функция ПобитовоеНе(БинарныйМассив) Результат = Новый Массив; Для Каждого Элемент Из БинарныйМассив Цикл Результат.Добавить(Не Элемент); КонецЦикла; Возврат Результат; КонецФункции Функция ЦиклическийСдвигВлево(БинарныйМассив, КоличествоРазрядов) Результат = Новый Массив(БинарныйМассив.Количество()); Для Разряд = 0 По БинарныйМассив.Количество()-1 Цикл Результат[(Разряд + КоличествоРазрядов) % БинарныйМассив.Количество()] = БинарныйМассив[Разряд]; КонецЦикла; Возврат Результат; КонецФункции Функция БинарнаяСумма(БинарныйМассив1, БинарныйМассив2) Результат = Новый Массив; ДобавитьКРазряду = Ложь; Для Индекс = 0 По БинарныйМассив1.Количество()-1 Цикл Результат.Добавить(БинарныйМассив1[Индекс] <> БинарныйМассив2[Индекс] <> ДобавитьКРазряду); ДобавитьКРазряду = (0 + БинарныйМассив1[Индекс] + БинарныйМассив2[Индекс] + ДобавитьКРазряду) > 1; КонецЦикла; Возврат Результат; КонецФункции Функция СкопироватьМассив(Массив) Результат = Новый Массив; Для Каждого Элемент Из Массив Цикл Результат.Добавить(Элемент); КонецЦикла; Возврат Результат; КонецФункции |
|||
60
Злопчинский
21.10.15
✎
11:50
|
(57) спасибо, кэп, посчитал!
(58) тогда придется извращаться с двумернгыми или длинный ШК бить на части и усложнять процедуру сканирования... . я считал когда хотел такую хрень сделать - где-то до 48 знаков влазит без проблем для считывания... . и какой тип ШК использовать - какой из них плотный..? |
|||
61
Злопчинский
21.10.15
✎
11:51
|
(59) спсб тб дбр члвк! ;-)
|
|||
62
Злопчинский
21.10.15
✎
11:53
|
я как-то одному хомячку на заказ сделал целое РМ по маркировке и сканированию - правильные налевр, неправильные направо...
. но где эта хрень - хз... ;-) . а в конторе надо внедрять для отслеживания пути доков - со статусами, где находится, какие проблемы и прочее - бо бухи вообще не могут сами "автоматизироваться" - и это еще при условии что у нас мизерный как я считаю документооборот и дохренища самовывозов с оформлением доков по месту... |
|||
63
Mikeware
21.10.15
✎
12:02
|
(57)Да, чой-то я тормознул. в шестнадцатеричке - 32 символа... Переотдыхался. Размер хэша МД5 - 128 бит. Можно, конечно, и ужать, подняв СС до 36...
(58)а вот насчет "любой длины"... гонишь, имхо (59) Ёпрст приводил гораздо короче, с использованием js и MSScriptControl |
|||
64
vde69
21.10.15
✎
12:11
|
(63) можно делать 16, 32, 64, 128 байт, да и вообще есть разные реализации например CRC32 которые дают разный результат.
по поводу "короче", сабж будет гарантировано работать на линухе а MSScriptControl будет??? а вообще код не мой, а стыренный с инета и немного адаптированный... |
|||
65
Pahomich
21.10.15
✎
13:32
|
(48) И в чем же я не разобрался? В ветке был поставлен вопрос о запрете печати без сохранения, а не о контроле документооборота. У вас обсуждение свелось исключительно к последнему. Я привык отвечать на поставленный вопрос, а ты привык навешивать ярлыки без достаточных оснований...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |