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

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

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

Вроде бы не нужна в 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
30.10.14
276
.epf 7,13Kb 276 Скачать
Предыдущая версия

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

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

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

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

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

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

Всем - помните, что значения хеш-а совершенно не обязательно должны быть уникальными :( При работе с хеш-функцией вполне могут быть коллизии, об этом нужно всегда помнить!
8. kosilov 261 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 1184 15.05.10 07:15 Сейчас в теме
(8) Спасибо, хорошие примеры.

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

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

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

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

Кроме этого править такую форму записи очень сложно. Поэтому, если команды отрабатываются 1 раз, то нет особого смысла записывать их в 1 строку.
24. kosilov 261 19.05.10 23:31 Сейчас в теме
Забавно, но еще 2%-3% прироста скорости можно получить переведя текст на анлийский вариант.
Прикрепленные файлы:
26. kosilov 261 20.05.10 22:04 Сейчас в теме
Есть тут ещеодин момент, незнаю как онотразится на стойкости функции.
Изначально функция расчитывалась (смотри ссылку на теорию в заголовке) на анлийский алфавит (или по крайней мере на 255 символов). У нас для русских букв мы имеем юникод 2 байта (КодСимвола(Сред(СтрокаХэш,к,1)) для русской буквы даст число больше 255).
27. alexk-is 6465 20.05.10 23:11 Сейчас в теме
КодСимвола("z") = 122
КодСимвола("я") = 1103
КодСимвола("ё") = 1105
28. tormozit 5824 22.05.10 14:37 Сейчас в теме
Может кому пригодится такой вариант подсчета хеша. http://www.forum.mista.ru/topic.php?id=483601
29. GSoft 2854 30.05.10 23:33 Сейчас в теме
Ребят а кто делал или встречал функции шифрования-дешифрования на 1С
30. tdr1225 36 31.05.10 10:39 Сейчас в теме
(29) CodeString() в v7icq.dll (Абадонна)
31. vet7777 525 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 297 07.07.11 09:44 Сейчас в теме
А как, например, расчитать хэш для файла (эксель, дбф и т.п.)?
Передавать в качестве строки биты данных?
33. JohnyDeath 297 07.07.11 10:34 Сейчас в теме
Написал вот так:
Функция ХэшФайла(Знач ИмяФайла) Экспорт
	двФайл = Новый ДвоичныеДанные(ИмяФайла);
	СтрокаФайла = Base64Строка(двФайл);
	Возврат Из_Число_В_16(ХэшБлоками(СтрокаФайла,, 5381, 33));
КонецФункции	//ХэшФайла

Насколько это правильно?
36. fixin 3977 07.12.11 01:54 Сейчас в теме
да, мне тоже актуально. Делаю подпись документа, просто сцепляя гуиды его реквизитов. Так вот для этих целей как раз и годится хэш. МД5 вычисляется долго или через внешние компоненты. Надо поизучать эту методику, заранее плюсанул...
37. Foxx 102 08.12.11 00:36 Сейчас в теме
Вот если кому интересно - оптимизированный вариант хэш функции (http://infostart.ru/public/100845/). На строках более килобайта - прирост до 50% по скорости.
38. Serj1C 479 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 81 20.05.14 22:00 Сейчас в теме
А сталкивался кто нибудь, как в 1С запросе посчитать хэш от полученной строки?
Цель - получить таблицу с хешем документов, сравнив её с другой такой же таблицей - понять, какие документы отличаются. И всю эту операцию провернуть на сервере.
41. ildarovich 7022 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 81 15.06.17 19:53 Сейчас в теме
Я очень извиняюсь, вопрос у меня не совсем (совсем не) по 1С.
Хочется утилитку, которую можно запускать из командной строки (ну и из 1С) чтобы она быстро считала хеш функции файлов.
Цель - сопоставление торрентов и уже скачанных файлов. Если есть такая приблуда всё в одном - тоже интересно.
Проблема в следующем - есть куча скачанных торентами файлов и есть сами файлы торренты - их надо сопоставить.
В ручную это я сделать вообще не представляю как.
Извините за частичный оффтоп. Любые ссылки и наводки куда копать - будут очень полезны.
45. silberRus 67 20.08.19 14:36 Сейчас в теме
(44) Такую написать самому недолго на 1с: Поток + ХешФункция
и скорость будет норм.
Оставьте свое сообщение

См. также

daСклонение: склонение ФИО, должностей, чисел, прилагательных, существительных на языке 1С + ТестЦентр Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

14.02.2015    100932    97    daMaster    90    

Сравнение реального дохода со средним доходом из API.HH.RU

Зарплата Управленческие v8 v8::СПР ЗУП3.x УУ Абонемент ($m)

Внешняя обработка на управляемой форме для 1С:Предприятие 8.3 по интеграции с HH.RU используя HH REST API. Ключевые функции: получение списка вакансий по должностям (Ключ для работы не нужен); расчет среднего дохода; Тестирование проводилось на платформе 1С:Предприятие 8.3 (8.3.13.1513) Зарплата и управление персоналом, редакция 3.1 (3.1.11.68) совместно с API.HH.RU.

1 стартмани

11.11.2019    3817    4    solaru    2    

Конфигурация для рекламного агентства

Управление услугами и сервисом Управление взаимоотношениями с клиентами (СRM) Производство готовой продукции (работ, услуг) Управление взаимоотношениями с клиентами (СRM) Производство готовой продукции (работ, услуг) v8 Реклама, PR и маркетинг УУ Абонемент ($m)

Данная конфигурация выполнена для решения тестового задания: Цель задания: 1) Понять, на каком из клиентов сколько мы заработали;  2) Понять, по какому виду СМИ сколько мы заработали;  3) Проследить по каждой услуге: у кого за сколько купили и кому за сколько продали, с возможностью перейти в соответствующий документ. Реализовано с помощью: 1. Справочники - контрагенты, номенклатура 2. Документы - Поступление услуг, реализация услуг 3. Отчеты - отчет по контрагентам, номенклатуре и движений.

1 стартмани

21.05.2019    4369    0    solaru    0    

Загрузка номенклатуры в УТ 10.3 из Excel файла с генерацией штрихкодов

Загрузка и выгрузка в Excel Обработка справочников Оптовая торговля Розничная торговля Учет ТМЦ Оптовая торговля Розничная торговля Учет ТМЦ v8 УТ10 Россия Абонемент ($m)

Обработка позволяет генерировать новые номенклатурные позиции на основе данных из файла Excel с последующей генерацией штрихкодов (ШК). Может быть полезна при больших поступлениях товаров на склад, где ручное создание и присваивание штрихкода  (ШК) может занимать много времени.

1 стартмани

24.03.2017    7708    7    solaru    0    

Под капотом управляемых форм

Практика программирования v8 1cv8.cf Бесплатно (free)

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

26.08.2013    263597    0    Evil Beaver    266    

[NotaBene] Универсальный отчет по таблице значений

Практика программирования v7.7 1cv7.md Россия Абонемент ($m)

1C v.7.7 Готовое решение. Не требует настройки. Не требует допрограммирования. Данная обработка решает часто встречающуюся задачу вывода в "красивом" виде таблицы значений (полученной, например, из запроса). Поддерживается произвольное группирование данных, отключение/включение группировок, в т.ч и создание "шахматок" (типа "продажи понедельно"). Обработка может использоваться как и в отладочных целях (для нормального просмотра ТЗ), так и в составе вполне рабочих отчетов. По крайней мере, я неоднократно клиентам данную обработку ставил вместо того, чтобы каждый раз писать замороченные выводы данных. И клиенты довольны, и мне - проще...

2 стартмани

07.05.2007    28416    3    CheBurator    62