Простая и быстрая хэш функция (hash) средствами 1С

Публикация № 70030 11.05.10

Разработка - Практика программирования

Вроде бы не нужна в 1С хэш функция, а всё таки иногда без неё не обойтись.
В частности для индексирования строк неограниченной длины или групп строк.
Готовую нашел здесь (реализация MD5), но уж очень медленно работает и оптимизировать её не получится - в 1С нет быстрой работы с битами.
Вот нашел выход. Спасибо сайту за теорию http://www.strchr.com/hash_functions
Оказывается своя хэш функция - это просто.
Скорость для 64 битного хэш (кво в минуту):  

Для строки "http://infostart.ru/public/edit/" - 55000
Для этого текста(600 символов) - 3048


Пример использования с тестом скорости работы в разделе файлов.
Скорость расчитывается как количество хэшей из заданного Вами текста за минуту.

http://www.strchr.com/hash_functions

//////////////////////////////////////////////////////////////////////
 //СтрокаХэш - исходный текст
 //hash- начальное значение hash
 // М - множитель (влияет накачество хэш и производительность)
 // TABLE_SIZE - размер получаемого ключа, как Максимальная величина + 1
Функция Хэш(СтрокаХэш, hash=0, M = 31, TABLE_SIZE = 18446744073709551616)
   
//TABLE_SIZE = 18446744073709551615; 64 бита
    //M = 31; Умножитель
   
ДлинаСтроки = СтрДлина(СтрокаХэш);
    Для
к=1 по ДлинаСтроки цикл
       
hash = M * hash + КодСимвола(Сред(СтрокаХэш,к,1));
    конеццикла;
    возврат
hash%TABLE_SIZE;
КонецФункции

// Для ускорения работы с большими текстами их надо передавать блоками
// Данная функция разбивает исходный текст (Параметр "Строка") на блоки
// длиной ДлинаБлока и вычислет хэш блоками возвращая результат для всего текста.
Функция ХэшБлоками(Строка, ДлинаБлока = 64, hash = 0, M = 31, TABLE_SIZE = 18446744073709551616)
    
НачПозиция = 1;
    
ДлинаСтроки = СтрДлина(Строка);
      Пока 
НачПозиция<=ДлинаСтроки цикл
       
hash = Хэш(Сред(Строка, НачПозиция, ДлинаБлока), hash, M, TABLE_SIZE);
       
НачПозиция = НачПозиция + ДлинаБлока;
    КонецЦикла;
    возврат
hash;
КонецФункции


Скачать файлы

Наименование Файл Версия Размер
Простая и быстрая ХЭШ функция (с оптимизацией от alexk-is) версия 2

.epf 7,13Kb
279
.epf 7,13Kb 279 Скачать
Предыдущая версия

.epf 7,20Kb
8
.epf 7,20Kb 8 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1364 13.05.10 20:21 Сейчас в теме
Интересно, плюсанул.
(0) Но также очень интересно практическое применение:
цитата "Вроде бы не нужна в 1С хэш функция, а всё таки иногда без неё не обойтись.
В частности для индексирования строк неограниченной длины или групп строк"
вот увидеть бы пример индексирования и сравнить со встроенными методами 1С (например, соответствие) !
2. kosilov 266 13.05.10 21:11 Сейчас в теме
А попробуй в запросе поставить ГДЕ <строка неограниченной длины> = "Слово из 3-х букв" и поймешь.
Строка неограниченной длины - реквизит объекта неоганиченной длины.
Посмотри зачем нужна хэш функция.
Сравнивать длинные текстовые поля так эффективнее.
3. artbear 1364 14.05.10 07:45 Сейчас в теме
(2) Пример с ГДЕ не подходит.
Я в таких случаях юзаю внутри запроса
ГДЕ
ВЫРАЗИТЬ(ИнвентаризацияОС.Комментарий КАК Строка(200)) = &Комментарий
запрос прекрасно работает.

Покажи пример индексирования и поиска

ЗЫ я прекрасно знаю назначения хеш-функций :)
Большой опыт программирования на С++ никуда не денется
4. Adept 14.05.10 09:48 Сейчас в теме
(3) пример, буквально сегодня применю у себя в конфе,
Есть справочник юзерей, и справочник ролей, они само собой связаны, для того что бы не лезть в БД и каждый раз не проверять есть ли у меня там все необходимые юзеры и роли, те что и в конфе, я буду их собирать в строку и хешировать, и сравнивать с хешем скажем в константе и если уже хеши отличаются то лезть в бд и синхронизировать юзерей и роли.
Вот так например :)
5. artbear 1364 14.05.10 10:15 Сейчас в теме
(4) Нифига не понял пример.
Расшифруй примерчик.
"Собирать в строку и хешировать", "чтобы не проверять если ли у меня там необходимые юзеры и роли" и т.д.
Жду.
6. Adept 14.05.10 10:30 Сейчас в теме
(5) Все просто, при запуске предприятия проводиться проверка соответствие справочника пользователи с тч роли и справочника роли, текущему состоянию (пользователям и ролям внесенными в конфигуратор) , проводиться проверка соответствия если его нет то справочники синхронизируются с системой, для того что бы не сверять при каждом входе со справочниками (строить запросы бд), просто сохранить хэш из строки с именами и ролями пользователей, проверять при входе соответствие хэша, если были изменения, уже лезть в БД и искать где надо добавить пользователей или изменить состав ролей и тд.
7. artbear 1364 14.05.10 17:42 Сейчас в теме
(6) 1. Перед тем, как сверять, ты же все равно должен исходные значения получить, значит, все равно будет запрос к БД.

(0) Автор, дай пример использования.
Я не против разработки, плюсанул сразу. мне интересно, где именно в 1С можно юзать подобную хеш-функцию.
Ведь у 1С уже есть Соответствие и Структура для быстрого поиска, а также Индексы у таблиц.

Всем - помните, что значения хеш-а совершенно не обязательно должны быть уникальными :( При работе с хеш-функцией вполне могут быть коллизии, об этом нужно всегда помнить!
8. kosilov 266 15.05.10 03:01 Сейчас в теме
(7) Я сейчас разрабатываю аналитическую базу данных, в которой в качестве источника аналитики используются RSS каналы.
RSS генератор, не отслеживает какие новости пользоватль прочитал (получил), а какие нет. Т.е. это задача RSS приемника определить какая новость уже есть в базе, а какая нет.
Некоторые каналы пересылают поле (тэг) id новости, некоторые нет.
Соответственно, для таких каналов, которые не пересылают тэг id (да и вобщем-то для всех для надежности) необходимо как-то определить новая это новость или нет. Для этого само собой используются некоторый набор тэгов, таких как title, дата публкации и пр. Этот набор тэгов выбирает пользователь отдельно для каждого канала, а каналов может быть много. Здесь есть две проблемы.
С одной стороны не очень приятный запрос, где на лету должны генериться условия (т.е. в тексте), во вторых некоторые поля неограниченной длины. Можно конечно брать подстроку, но подстрока - это всегда ограничение. Дляна заголовка может теоретически быть до 2кб., а я возьму только 500 символов (это ограничение 1С).
В третьих, при большом количестве записей и условий, где сравниваются строки, скорость выполнения запроса будет низкой, а запрос мне надо сделать на каждую новость, которых в канале от 10 до 20 (и больше). Соответственно при получении новостей от 10-20 каналов в которых 10-20 новостей придется выполнить 200-400 запросов, каждый из которых может выполняться секунд по 10.
При хэшировании размер индекса (длина) составлет всего 10-20 символов (вместо 500) и он один для всех текстовых и не текстовых полей. Кроме этого хэш поле индексировано в базе (текстовых поля неограниченной длины нельзя индексировать).
В результате использования хэш функции имеем следующие преимущества:
1. Не надо генерить текст запроса на лету
2. Нет ограничений на длину индексируемой текстовой строки
3. Многократный выигрышь в скорости.

Это по моей задаче.

Есть другой пример.
Допустим вы храните в базе данных текстовые документы (приказы, письма, книги, статьи и пр). Тут уж точно нельзя ограничиваться 200 или 500 первыми символами, так как они могут совпадать для различых текстов. Выход здесь будет один - хэшировать текст.

Отдельная задача - индексирование информации помещаемой в хранилище значений. Файлы, картинки, архивы. Иногда тоже требуется проверить, есть уже такой объект в хранилище либо нет. И здесь хэш - самый простой выход.

Что же касается возможности коллизии хэш, то такая вероятность практически равна нулю. Коллизии могут возникать только при умышленной подделки исходного текста, или при очень коротком хэш (например 16 бит)
Если же нет опасности, что кто-то будет подстраиваться под хэш и хэш длинный, то коллизии не будет. Вспомните информацию про GUID. При его длине вероятность совпадения ближайшие сколько-то лет (50 что ли) практически равна нулю.

9. artbear 1364 15.05.10 07:15 Сейчас в теме
(8) Спасибо, хорошие примеры.

ОФФ По поводу ГУИД кто-то на ИС или еще где :) выкладывал статью, где показывалось, что не слишком уж случайное число получается :)
10. artbear 1364 15.05.10 07:26 Сейчас в теме
(8) Слегка бы поправить функции для оптимизиции и исключения ошибок.
1. непонятно, как поведет себя функция ХэшБлоками, если длина блока будет больше, чем длина строки - Сред обрежет строку или нет, не помню/не знаю :(
2. ИМХО 1С переменную окончания цикла каждый раз пересчитывает, поэтому СтрДлина лучше считать в отдельной переменной до цикла.

Лучше всего проверить функцию на автоматических тестах, которые совсем несложно сделать.
11. kosilov 266 15.05.10 11:01 Сейчас в теме
(10) Всё верно. У меня была ошибка. При смене блока пропускался один символ за счет цикла Для. Исправил.
Что касается Сред("йцукен",1,1000), то он работает корректно. В данном примере будет просто выбрана вся строка.
12. artbear 1364 15.05.10 11:14 Сейчас в теме
(11) Вот я и говорю, лучше проверять на автоматических тестах.
Тем более, задача простая, и тестами ее охватить легко :)
13. artbear 1364 15.05.10 11:16 Сейчас в теме
(11) По вычислении СтрДлина при каждой итерации поправь.
все-таки хеш-функция должна быть максимально быстрой :)
14. kosilov 266 16.05.10 02:29 Сейчас в теме
15. alexk-is 6509 18.05.10 11:32 Сейчас в теме
(14) Я подозревал, что у меня шустрый компьютер, только не знал, что на столько. А ведь ему уже 3 года.
...подшаманил чуток :)
Прикрепленные файлы:
16. kosilov 266 18.05.10 11:59 Сейчас в теме
(15) Боюсь в код закралась ошибка после последней правки.
В функции хэшБлоками было ДлинаСтроки = СтрДлина(СтрокаХэш) вместо ДлинаСтроки = СтрДлина(Строка) (как правильно и как сейчас).
Странно что 1С не ругнулась, но думаю так как СтрокаХэш в этой функции неопределено, то длина была 0 соответственно у Вас хэш высчитывался один рах для всего текста, а не 2-3 раза.
Попробуйте теперь. :)
У меня на ноуте 10тыс. для текста анонса.
17. alexk-is 6509 18.05.10 12:16 Сейчас в теме
(16) Спасибо подправил. Замер для текста на картинке. Жаль, что у меня нет ноута :)
Прикрепленные файлы:
18. artbear 1364 18.05.10 14:38 Сейчас в теме
19. alexk-is 6509 18.05.10 14:55 Сейчас в теме
(18) Внутренности конечно. Ну, и внешний вид чуток.
20. kosilov 266 18.05.10 21:12 Сейчас в теме
(18) Я же написал: В функции хэшБлоками было ДлинаСтроки = СтрДлина(СтрокаХэш) вместо ДлинаСтроки = СтрДлина(Строка) (как правильно и как сейчас).
21. alexk-is 6509 19.05.10 12:36 Сейчас в теме
(18) (20) Во вложении вариант с некоторыми изменениями оптимизированный под 8.1.

Суть изменений
1. Исправлена ошибка в фунции ХэшБлокамиСОбраткой
2. Добавлена возможность сохранения текста
3. Начало замера с начала секунды

Суть оптимизации
1. Незначительная оптимизация кода
2. Сокращено количество команд выполняемых интерпретатором (наиболее заметно при использовании отладчика с включенным замером производительности)
3. Подобран более оптимальный размер блока, как мне кажется
Прикрепленные файлы:
SimpleHash2.epf
22. kosilov 266 19.05.10 22:48 Сейчас в теме
(21) Скачал. Посмотрю сейчас
23. kosilov 266 19.05.10 23:00 Сейчас в теме
(21) Скрин говорит сам за себя. Плюс однозначно.
PS Никогда бы не подумал, что написание текста модуля в одну строку улучшает производительность :D
Прикрепленные файлы:
25. alexk-is 6509 20.05.10 06:21 Сейчас в теме
(23) Не совсем так. Всё дело в переходах между командами. Поэтому если смотреть в замере производительности, то цикл в строке ДЛЯ из 10000 повторов записанный обычной структурой будет выполнен 10001 раз, а записанный в 1 строку 1 раз. Разумеется, что при этом результат выполнения будет одинаковый.

Кроме этого править такую форму записи очень сложно. Поэтому, если команды отрабатываются 1 раз, то нет особого смысла записывать их в 1 строку.
24. kosilov 266 19.05.10 23:31 Сейчас в теме
Забавно, но еще 2%-3% прироста скорости можно получить переведя текст на анлийский вариант.
Прикрепленные файлы:
26. kosilov 266 20.05.10 22:04 Сейчас в теме
Есть тут ещеодин момент, незнаю как онотразится на стойкости функции.
Изначально функция расчитывалась (смотри ссылку на теорию в заголовке) на анлийский алфавит (или по крайней мере на 255 символов). У нас для русских букв мы имеем юникод 2 байта (КодСимвола(Сред(СтрокаХэш,к,1)) для русской буквы даст число больше 255).
27. alexk-is 6509 20.05.10 23:11 Сейчас в теме
КодСимвола("z") = 122
КодСимвола("я") = 1103
КодСимвола("ё") = 1105
28. tormozit 6346 22.05.10 14:37 Сейчас в теме
Может кому пригодится такой вариант подсчета хеша. http://www.forum.mista.ru/topic.php?id=483601
29. GSoft 2859 30.05.10 23:33 Сейчас в теме
Ребят а кто делал или встречал функции шифрования-дешифрования на 1С
30. tdr1225 36 31.05.10 10:39 Сейчас в теме
(29) CodeString() в v7icq.dll (Абадонна)
31. vet7777 550 31.08.10 13:22 Сейчас в теме
Более быстрый вариант :
(несмотря на то, что код более объёмный по сравнению с авторским)
Функция ХэшБыстрый2(СтрокаХэш, Знач Основание = 31, Знач TABLE_SIZE = 18446744073709551616) Экспорт
	Хэш = 0;ДлинаСтроки=СтрДлина(СтрокаХэш);
	КоличествоПовторенийВРазвёртке = 60;Основание2=Основание*Основание;Основание3=Основание2*Основание;Основание4=Основание3*Основание;
	Для Сч = 0 по Цел(ДлинаСтроки/КоличествоПовторенийВРазвёртке)-1 Цикл
		//1С неэффективно работает с длинными строками, поэтому сначала откусываем кусочек
		//складывать начинаем с меньших чисел, т.к. арифметика больших затратнее
		ТекСтрока = Сред(СтрокаХэш, Сч*КоличествоПовторенийВРазвёртке+1, КоличествоПовторенийВРазвёртке);
		Хэш = КодСимвола(ТекСтрока, 4) + Основание * КодСимвола(ТекСтрока, 3) + Основание2 * КодСимвола(ТекСтрока, 2) + Основание3 * КодСимвола(ТекСтрока) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 8) + Основание * КодСимвола(ТекСтрока, 7) + Основание2 * КодСимвола(ТекСтрока, 6) + Основание3 * КодСимвола(ТекСтрока, 5) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 12) + Основание * КодСимвола(ТекСтрока, 11) + Основание2 * КодСимвола(ТекСтрока, 10) + Основание3 * КодСимвола(ТекСтрока, 9) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 16) + Основание * КодСимвола(ТекСтрока, 15) + Основание2 * КодСимвола(ТекСтрока, 14) + Основание3 * КодСимвола(ТекСтрока, 13) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 20) + Основание * КодСимвола(ТекСтрока, 19) + Основание2 * КодСимвола(ТекСтрока, 18) + Основание3 * КодСимвола(ТекСтрока, 17) + Основание4 * (Хэш % TABLE_SIZE);
		Хэш = КодСимвола(ТекСтрока, 24) + Основание * КодСимвола(ТекСтрока, 23) + Основание2 * КодСимвола(ТекСтрока, 22) + Основание3 * КодСимвола(ТекСтрока, 21) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 28) + Основание * КодСимвола(ТекСтрока, 27) + Основание2 * КодСимвола(ТекСтрока, 26) + Основание3 * КодСимвола(ТекСтрока, 25) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 32) + Основание * КодСимвола(ТекСтрока, 31) + Основание2 * КодСимвола(ТекСтрока, 30) + Основание3 * КодСимвола(ТекСтрока, 29) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 36) + Основание * КодСимвола(ТекСтрока, 35) + Основание2 * КодСимвола(ТекСтрока, 34) + Основание3 * КодСимвола(ТекСтрока, 33) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 40) + Основание * КодСимвола(ТекСтрока, 39) + Основание2 * КодСимвола(ТекСтрока, 38) + Основание3 * КодСимвола(ТекСтрока, 37) + Основание4 * (Хэш % TABLE_SIZE);
		Хэш = КодСимвола(ТекСтрока, 44) + Основание * КодСимвола(ТекСтрока, 43) + Основание2 * КодСимвола(ТекСтрока, 42) + Основание3 * КодСимвола(ТекСтрока, 41) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 48) + Основание * КодСимвола(ТекСтрока, 47) + Основание2 * КодСимвола(ТекСтрока, 46) + Основание3 * КодСимвола(ТекСтрока, 45) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 52) + Основание * КодСимвола(ТекСтрока, 51) + Основание2 * КодСимвола(ТекСтрока, 50) + Основание3 * КодСимвола(ТекСтрока, 49) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 56) + Основание * КодСимвола(ТекСтрока, 55) + Основание2 * КодСимвола(ТекСтрока, 54) + Основание3 * КодСимвола(ТекСтрока, 53) + Основание4 * Хэш;
		Хэш = КодСимвола(ТекСтрока, 60) + Основание * КодСимвола(ТекСтрока, 59) + Основание2 * КодСимвола(ТекСтрока, 58) + Основание3 * КодСимвола(ТекСтрока, 57) + Основание4 * (Хэш % TABLE_SIZE);
	КонецЦикла;
	
	Для Сч = ДлинаСтроки - ДлинаСтроки%КоличествоПовторенийВРазвёртке + 1 По ДлинаСтроки Цикл
		Хэш = Основание * Хэш + КодСимвола(СтрокаХэш, Сч);
	КонецЦикла;		
	
	Возврат Хэш%TABLE_SIZE;
	
КонецФункции
Показать
35. laeg 13 11.11.11 18:44 Сейчас в теме
ХЭШ использую как одностороннего криптования пароля.
ТС и (31) спасибо за более быстрые алгоритмы.
32. JohnyDeath 299 07.07.11 09:44 Сейчас в теме
А как, например, расчитать хэш для файла (эксель, дбф и т.п.)?
Передавать в качестве строки биты данных?
33. JohnyDeath 299 07.07.11 10:34 Сейчас в теме
Написал вот так:
Функция ХэшФайла(Знач ИмяФайла) Экспорт
	двФайл = Новый ДвоичныеДанные(ИмяФайла);
	СтрокаФайла = Base64Строка(двФайл);
	Возврат Из_Число_В_16(ХэшБлоками(СтрокаФайла,, 5381, 33));
КонецФункции	//ХэшФайла

Насколько это правильно?
36. fixin 4073 07.12.11 01:54 Сейчас в теме
да, мне тоже актуально. Делаю подпись документа, просто сцепляя гуиды его реквизитов. Так вот для этих целей как раз и годится хэш. МД5 вычисляется долго или через внешние компоненты. Надо поизучать эту методику, заранее плюсанул...
37. Foxx 104 08.12.11 00:36 Сейчас в теме
Вот если кому интересно - оптимизированный вариант хэш функции (http://infostart.ru/public/100845/). На строках более килобайта - прирост до 50% по скорости.
38. Serj1C 480 04.07.12 07:09 Сейчас в теме
Этот день настал! Встречаем 8.3 и встроенный MD5 в платформу! http://downloads.v8.1c.ru/content/Platform/8_3_1_531/1cv8upd.htm
39. slavik27 14 20.06.13 07:52 Сейчас в теме
Спасибо, очень полезная штука, попробую!
40. alex_4x 82 20.05.14 22:00 Сейчас в теме
А сталкивался кто нибудь, как в 1С запросе посчитать хэш от полученной строки?
Цель - получить таблицу с хешем документов, сравнив её с другой такой же таблицей - понять, какие документы отличаются. И всю эту операцию провернуть на сервере.
41. ildarovich 7293 20.03.15 14:54 Сейчас в теме
(40) alex_4x, в статье "Расчет хэш-функции в запросе" описывается один из возможных подходов к решению этой задачи.
42. serg1974 15.04.15 10:00 Сейчас в теме
Напомните пожалуйста значение значение функции % - я вероятно знал - но забыл её, и никак не могу понять смысл выражения hash%TABLE_SIZE

ну и заодно разъясните - как получено число TABLE_SIZE = 18446744073709551616? Очень интересно!
я на ассемблере не программировал с 1997 года...

Спасибо!
43. robix 15.06.17 15:19 Сейчас в теме
Я думал это MD5 А это какой-то непонятный хэш
44. alex_4x 82 15.06.17 19:53 Сейчас в теме
Я очень извиняюсь, вопрос у меня не совсем (совсем не) по 1С.
Хочется утилитку, которую можно запускать из командной строки (ну и из 1С) чтобы она быстро считала хеш функции файлов.
Цель - сопоставление торрентов и уже скачанных файлов. Если есть такая приблуда всё в одном - тоже интересно.
Проблема в следующем - есть куча скачанных торентами файлов и есть сами файлы торренты - их надо сопоставить.
В ручную это я сделать вообще не представляю как.
Извините за частичный оффтоп. Любые ссылки и наводки куда копать - будут очень полезны.
45. silberRus 68 20.08.19 14:36 Сейчас в теме
(44) Такую написать самому недолго на 1с: Поток + ХешФункция
и скорость будет норм.
Оставьте свое сообщение

См. также

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5 Промо

Практика программирования Адаптация типовых решений Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Данная публикация является продолжением описания функционирования обработки "FormCodeGenerator " в режиме сравнения форм и генерирования кода на основании сравнения. Подходит для перевода уже доработанных форм с интерактивной доработки на программную. Данный режим работы обработки снизит издержки при дальнейших обновлениях конфигураций.

5 стартмани

21.12.2020    6826    21    huxuxuya    11    

Как правильно удалять данные из больших массивов

Практика программирования Универсальные функции Абонемент ($m)

Как правильно удалять данные из больших несортированных массивов

1 стартмани

15.02.2021    1626    0    Def.Gh    14    

Интерактивная справка по объектам 1С (подключаемое расширение)

Практика программирования Работа с интерфейсом v8 ERP2 Абонемент ($m)

База знаний, подключаемая к объектам основной базы. Пополняется интерактивно, формируется в виде статей прямо в 1С (текст, картинки, таблицы, ссылки). Есть возможность прикрепления файлов, привязки к объектам 1С, возможности рейтинга и комментирования пользователями.

3 стартмани

29.09.2020    12985    73    sapervodichka    43    

Загрузка файлов на сервер с использованием HTTP-сервиса 1С (multipart/form-data).

Практика программирования WEB Абонемент ($m)

Вариант загрузки файлов в составных данных методом POST (multipart/form-data) на примере демонстрационной базы.

1 стартмани

12.08.2020    8187    20    ltfriend    5    

Вам нравятся запросы в 1С? Промо

Практика программирования Разработка v8 v8::Запросы 1cv8.cf Абонемент ($m)

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    25966    7    m-rv    91    

Конвертация PDF в 1С

Практика программирования Разработка внешних компонент Абонемент ($m)

COM-компонента для работы с PDF (32/64 bit)

4 стартмани

31.03.2020    13647    50    SerVer1C    75    

Распаковка хранилища значений средствами MS SQL Server

Практика программирования Абонемент ($m)

Способ извлечения данных из 1С-ного "ХранилищеЗначений" в MS SQL Server с помощью самописной скалярной функции (без использования платформы 1С).

1 стартмани

23.09.2019    8993    3    SerVer1C    11    

Конвейер проверки качества кода

Инструментарий разработчика Практика программирования Математика и алгоритмы Jenkins SonarQube v8 1cv8.cf Абонемент ($m)

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    33547    27    Stepa86    46    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") Промо

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    34938    93    m-rv    58    

Расширяем возможности MS SQL Server с помощью хранимых процедур CLR

Практика программирования Разработка Абонемент ($m)

Не хватает какого-то функционала на скуле для обработки данных? Тогда он (новый функционал) идет к вам.

1 стартмани

02.09.2019    10546    1    SerVer1C    9    

Перфолента, первое знакомство. Новый язык программирования

Практика программирования Инструментарий разработчика Абонемент ($m)

Первое знакомство с новым языком программирования Перфолента. В статье описано назначение языка, причины его появления, основные характеристики и возможные варианты использования.

22.07.2019    23532    0    Perfolenta    165    

Настраиваемое мобильное приложение для сканирования штрихкодов

Практика программирования Сканер штрих-кода Мобильная разработка Абонемент ($m)

Обзор приложения для сканирования штрихкодов с возможностью обработки результата сканирования произвольным кодом для совместного использования с Android приложениями через Intent и взаимодействие с 1С конфигурациями через web-сервис.

1 стартмани

14.01.2019    11902    5    inord777    10    

Заполняем по шаблону (по умолчанию) Промо

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Простой в подключении, универсальный и достаточно удобный механизм заполнения реквизитов произвольных документов/справочников значениями по умолчанию. Реализован в расширении, но может быть и непосредственно включен практически в любую конфигурацию на управляемых формах простым копированием одной формы и двух команд. Весь код в статье.

1 стартмани

08.02.2018    32887    20    mvxyz    17    

Мониторинг активности пользователя

Журнал регистрации v8 1cv8.cf Бесплатно (free)

Работает ли пользователь с программой? Сколько времени пользователь работает в программе? Что пользователь делает в программе? - эти вопросы стандартно решаются или просмотром журнала регистрации, или с помощью внешних программ. В данной статье будет предложен способ, как следить за активностью пользователей, используя небольшую доработку конфигурации. Бонусом системы мониторинга является автоматическое завершение сеансов пользователей, не работающих с программой длительное время.

11.10.2018    19377    postovalov    25    

Работа с публикациями "Инфостарт"

Практика программирования О сообществе WEB v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    26251    14    RocKeR_13    16    

HTTP Сервисы: Путь к своему сервису. Часть 3

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.

1 стартмани

27.08.2018    50108    66    dsdred    17    

Нечеткий поиск одним запросом Промо

Практика программирования v8 1cv8.cf Абонемент ($m)

Использование механизма полнотекстового поиска в 1С не всегда оправдано, т.к. построение индекса и поддержание его в актуальном состоянии может значительно нагружать систему. Предлагаемая реализация нечеткого поиска методом N-грамм выполняется одним запросом, что позволяет производить поиск в любой таблице и не требует предварительного построения индекса.

1 стартмани

28.12.2015    32637    73    vasvl123    9    

Создаем объекты для модуля Bootstarp на Русском Фоксе

Практика программирования Россия Абонемент ($m)

Создавайте свой модуль с объектами для модуля Bootstrap, пакуйте их fxp-файлы и создавайте сайты из этих кубиков. Разберем, как это делать. Все гениальное должно быть простым, как теория относительности.

1 стартмани

19.08.2018    7782    0    andreosh    3    

РусскийФокс и BootStrap

Практика программирования Россия Абонемент ($m)

РусскийФокс вносит новый технологический подход в сайтостроение. Теперь вы можете ограничиться знанием Русского Фокса и не иметь знаний по HTML, CSS, JavaScript, PHP, чтоб создавать сайты.

1 стартмани

16.08.2018    8153    1    andreosh    18    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    34068    31    informa1555    30    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут Промо

Практика программирования v8 Абонемент ($m)

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    53007    36    Demanoidos    60    

РусскийФокс. Изменение DBF-файла и назначение командных клавиш

Практика программирования Файловые протоколы обмена, FTP Россия Абонемент ($m)

- Шарапов, ты Русского Фокса знаешь ? - Конечно, Глеб. Я же программирую на Русском Фоксе. РусскийФокс (1C-подобный язык программирования) создает DBF-файлы и выгружает данные из DBF в XML.

1 стартмани

01.08.2018    7697    0    andreosh    2    

РусскийФокс. Создание DBF-файла, выгрузка в XML.

Практика программирования Россия Абонемент ($m)

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает DBF-файлы и выгружает данные из DBF в XML. Голосуйте за доклад о РусскийФокс на Инфостарт.

1 стартмани

28.07.2018    7574    2    andreosh    0    

РусскийФокс и ClickerMann заносят данные в 1С

Сервисные утилиты Практика программирования Россия Абонемент ($m)

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает сценарии для Clickermann. Сценарий заполняет справочник в 1С.

1 стартмани

21.07.2018    13304    1    andreosh    20    

Быстрое определение интервалов в запросе Промо

Практика программирования v8 Абонемент ($m)

В статье описывается новый метод определения интервалов между данными различных записей в запросе. В отличие от общеизвестного метода, время работы предлагаемого метода зависит от объема данных ЛИНЕЙНО. Это обеспечивает ему значительный выигрыш по быстродействию на больших объемах данных. В качестве иллюстрации возможностей метода приведен отчет, показывающий гистограмму распределения времени между продажами.

1 стартмани

01.10.2015    58436    35    ildarovich    41    

Работа с данными выбора

Практика программирования Работа с интерфейсом v8 Россия Абонемент ($m)

В управляемом интерфейсе заложена мощная возможность описывать связи реквизитов формы через параметры. Установка параметров связей позволяет ограничить выбор данных так, чтобы целостность данных была обеспечена на этапе ввода. Однако без дополнительного программирования задать можно только самые простые связи. Такие условия связи, как зависимость от реквизита через точку или зависимость через дополнительное отношение, заданное в регистре сведений - уже задать без программирования не получится.

1 стартмани

17.07.2018    62041    24    kalyaka    17    

РусскийФокс и OpenOffice, а также исследование объектов

Практика программирования Россия Абонемент ($m)

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . Взаимодействие с OpenOffice. GitHub https://github.com/UfaScript/RusFox

1 стартмани

12.07.2018    8027    1    andreosh    2    

РусскийФокс — 1С-подобный язык программирования

Практика программирования Математика и алгоритмы Россия Абонемент ($m)

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Знакомство.

1 стартмани

03.07.2018    12661    1    andreosh    50    

Хранение файлов в томах на диске (для УПП 1.3) Промо

Практика программирования v8 УПП1 Абонемент ($m)

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    65064    11    wowik    32    

Полезные примеры составления схемы компоновки данных #2

Практика программирования v8 v8::СКД 1cv8.cf Абонемент ($m)

Еще один набор примеров как решить частные задачи в СКД

1 стартмани

22.05.2018    37997    11    SITR-utyos    13    

Длинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR

Инструментарий разработчика Практика программирования Россия Абонемент ($m)

Расчеты любой точности в вашем программном продукте, поддерживающем стандарт COM. Размер/точность длинного числа зависит только от вашей оперативной памяти. Проект основан на исходниках библиотеки MPIR, Edition 3.0.0. Полностью написан на С/С++ (COM.DLL).

1 стартмани

12.04.2018    8175    1    bedvit    4    

Веб-разработка на 1С (1Script)

Практика программирования Абонемент ($m)

Дорогие коллеги, под новый год хочется сделать небольшой сюрприз. Я уже два года обещаю сделать движок веб-разработки для 1С-ников, и вот, наконец, есть что показать. Этим новогодним постом я открываю сериал "Веб-разработка для 1С-ников". Все, кто знаком с проектом OneScript – добро пожаловать! Остальные, тоже не стесняйтесь!

1 стартмани

28.12.2017    31977    22    Evil Beaver    82    

СКД. Использование встроенного макета, разделителя страниц Промо

Практика программирования v8::СКД 1cv8.cf Абонемент ($m)

Пример работы с макетом СКД для начинающих программистов. За основу взят справочник подразделений, который есть в большинстве конфигураций. Показано, как вывести заголовок, детальные записи, подвал группировки и общий подвал. Приведен пример вставки разделителя страниц. Отчет можно использовать в любой конфигурации 1С: 8.

1 стартмани

31.03.2017    17812    18    Vin_Tik    0    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

Практика программирования Универсальные печатные формы v8 БП3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    31328    56    kwazi    6    

Паузы при исполнении кода (Sleep для 1С)

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Решил проверить все найденные варианты паузы для 1С. В результате получилась обработка для тестирования и небольшая статья с итогом.

1 стартмани

28.11.2017    62613    17    swimdog    49    

Telegram-боты

Практика программирования v8 Абонемент ($m)

Описание теории, разбор архитектуры и пример реализации telegram-ботов. Сразу скажу, со структурированием изложения мало что могу поделать. :) редакция от 18.07.2018 Правки последней редакции выделены жирным.

1 стартмани

01.09.2017    39897    144    PLAstic    68    

Программа для изменения осей движения мыши - IMouse

Практика программирования Периферийные устройства Россия Абонемент ($m)

Программа предназначена для изменения движения курсора мыши.

1 стартмани

10.08.2017    15006    4    GubinDenis    17    

Умный дом на 1С + ардуино

Практика программирования v8 Абонемент ($m)

Конфигурация для автоматизации быта программиста 1C и не только. В данной статье будет рассказано, как можно использовать 1С для задач, не входящих в стандартные рамки этой платформы. Например, управление домом. В качестве периферии для подключения будет использован микроконтроллер (МК) Ардуино, но на нём не будет никакой логической нагрузки, весь процесс будет проходить на сервере 1С. Работа с пинами ввода/вывода происходит напрямую из 1С.

1 стартмани

07.08.2017    26601    21    sasha777666    64    

Расширения конфигураций 1С: учимся перехватывать методы

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

В этой статье я на примерах разберу некоторые механизмы расширений конфигураций 1С. А именно «перехваты» методов модуля объекта и «перехваты» событий формы и элементов формы. Данная статья написана с учебными целями, чтобы показать, как при помощи расширений конфигурации можно делать такие доработки, ради которых раньше приходилось снимать конфигурацию с поддержки.

1 стартмани

30.05.2017    158265    13    signum2009    48    

Регулярные выражения – это просто. Построитель и отладчик регулярных выражений

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Предлагается к использованию построитель регулярных выражений. Выполненный в виде внешней обработки, он позволит строить сложно-структурированные выражения на основе параметрического описания, тестировать их, и в результате получить программный код 1С.

1 стартмани

13.03.2017    36890    121    romasna    52    

Распознавание текста с помощью нейросетей Google Cloud Vision и 1С

Практика программирования v8 1cv8.cf Абонемент ($m)

Возможности Google Cloud Vision в распознавании текста.

1 стартмани

08.02.2017    36109    143    kiv1c    18    

Графическая схема. Управление при помощи XDTO.

Практика программирования v8 Абонемент ($m)

В статье описывается методика программного управления элементами графической схемы при помощи механизма XDTO. Приложена готовая к использованию библиотека функций для создания и удаления графических объектов, а также для связи элементов схемы соединительными линиями.

2 стартмани

16.01.2017    27609    122    Alxby    25    

Несколько шаблонов для доработки типовых конфигураций

Практика программирования Инструментарий разработчика v8 v8::УФ Абонемент ($m)

Предлагаю несколько каркасов для создания новых объектов в типовых конфигурациях. Это выжимка из кода нескольких конфигураций, которая позволит быстро и красиво создавать и дорабатывать объекты метаданных с соблюдением идеологии исходной системы

1 стартмани

03.10.2016    40629    98    json    25    

Полезные процедуры по работе с СКД и табличными документами (часть 2)

Практика программирования v8::СКД 1cv8.cf Абонемент ($m)

Еще несколько универсальных процедур

1 стартмани

27.09.2016    34969    36    json    19