MD5 Hash файла

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

Разработка - Защита и шифрование

59
Получение md5 хэша для файла

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

 

 

Функция  МД5(файл)
   
ScrCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
   
ScrCtrl.Language = "vbscript";
   
ScrCtrl.AddCode("
    |Function Hash()
    |Dim crypt: Set crypt = CreateObject(""CAPICOM.HashedData"")
    |crypt.Algorithm = 3
    |Dim stream: Set stream = CreateObject(""ADODB.Stream"")
    |stream.Type = 1 ' adTypeBinary
    |stream.Open
    |stream.LoadFromFile("""
+файл+""")
    |Do Until stream.EOS : crypt.Hash stream.Read() : Loop
    |Hash = crypt.Value
    |End Function
    |"
);
   
рез = ScrCtrl.Run("Hash");
    Возврат
рез;
КонецФункции

Кроме того, указав в этой функции другой алгоритм можно получить хэш SHA1, MD2, MD4, SHA-256, SHA-384 и SHA-512.

Подробнее http://msdn.microsoft.com/en-us/library/aa382443(VS.85).aspx

UPD: код для 1с8, любезно предоставленный в комментариях Mikelana

Функция  МД5(файл) 
    
    crypt = Новый COMОбъект("CAPICOM.HashedData");
    crypt.Algorithm = 3;    

    stream = Новый COMОбъект("ADODB.Stream");
    stream.Type = 1;
    stream.Open();
    stream.LoadFromFile(файл);
    Пока НЕ stream.EOS Цикл
        crypt.Hash(stream.Read());
    КонецЦикла; 

    Возврат crypt.Value;
    
КонецФункции
59

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

Комментарии
Избранное Подписка Сортировка: Древо
1. Арчибальд 2708 11.03.11 08:04 Сейчас в теме
Кто бы научил еще контрольную сумму считать... :|
2. d0dger 81 11.03.11 09:46 Сейчас в теме
Когда-то мучал CRC32 по таблице, добился только того что считает, но не всегда корректно - видимо не работает для бинарных файлов, подниму архив, вдруг удастся побороть...
3. cool.vlad4 45 11.03.11 10:00 Сейчас в теме
http://www.forum.script-coding.com/viewtopic.php?id=5565

DynamicWrapper выходных чисел не понимает, лучше используй DynamicWrapperX
Код:
Set Wrap = CreateObject("DynamicWrapperX")
Wrap.Register "ImageHlp.DLL", "MapFileAndCheckSum", "i=sUU", "r=u"

sHeader = 0
sCalcd = 0

ress = Wrap.MapFileAndCheckSum("c:\readme.txt", sHeader, sCalcd)

WScript.Echo sCalcd & " " & sHeader & " " & ress
4. Арчибальд 2708 11.03.11 12:04 Сейчас в теме
(3) А что все про CRC32? Мне CRC8 надо.
5. d0dger 81 11.03.11 12:05 Сейчас в теме
cool.vlad4,спасибо, попробовал, думал crc32, оказалось нет. Вдруг кому пригодиться код:
Функция ПолучитьCheckSum(Путь)
    ScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
    ScrptCtrl.Language = "VBScript";
    ScrptCtrl.AddCode("Function CheckSum
    |Set Wrap = CreateObject(""DynamicWrapperX"")
    |Wrap.Register ""ImageHlp.DLL"", ""MapFileAndCheckSum"", ""i=sUU"", ""r=u""
    |sHeader = 0
    |sCalcd = 0
    |ress = Wrap.MapFileAndCheckSum(""" + Путь + """, sHeader, sCalcd)
    |CheckSum = sCalcd
    |End Function");
    рез = ScrptCtrl.Run("CheckSum");
    Возврат рез;
КонецФункции
Показать
6. cool.vlad4 45 11.03.11 12:08 Сейчас в теме
(5) Не за, что , я наверное ссылкой вас с толку сбил, просто код взят из той ссылки (я уже не помню правда где)
библиотека msdn http://msdn.microsoft.com/en-us/library/ms680355(VS.85).aspx всегда поможет
ЗЫ враппер кстати в 1С тоже можно использовать, некогда просто было код на 1с-ке писать
7. d0dger 81 11.03.11 12:16 Сейчас в теме
(6) можно, но там проблемы с передачей параметров sHeader и sCalcd возникли. По крайней мере у меня...
8. pupkinSana 73 11.03.11 13:38 Сейчас в теме
уж проще формекс: сервис.ПолучитьХэшМД5(<?>,)
9. cool.vlad4 45 11.03.11 13:48 Сейчас в теме
(8) Где ты видел формекс под 8.1 и уж тем более под 8.2
11. Mikelana 25.08.11 15:36 Сейчас в теме
Вот для 8.* без ScriptControl


Функция  МД5(файл) 
	
	crypt = Новый COMОбъект("CAPICOM.HashedData");
	crypt.Algorithm = 3;	
	stream = Новый COMОбъект("ADODB.Stream");
	stream.Type = 1;
	stream.Open();
	stream.LoadFromFile(файл);
	Пока НЕ stream.EOS Цикл
		crypt.Hash(stream.Read());
	КонецЦикла; 

	Возврат crypt.Value;
	
КонецФункции
Показать
12. yoyoman 24.04.12 20:45 Сейчас в теме
Кириллицу как-то не корректно хеширует :(
А как можно подобным способом строку захешировать в md5?
13. d0dger 81 24.04.12 21:54 Сейчас в теме
(12) yoyoman, а какая кодировка кириллицы?
Можно написать
stream.charset = "windows-1251";
или
stream.charset = "UTF-8"

А чтобы закодировать строку можно попробовать нечто такое:
...
stream.Open();
stream.WriteText(Строка);
...
14. yoyoman 25.04.12 04:36 Сейчас в теме
(13) я себе такую функцию сделал для получения хеша строки (не файла):

Функция Hash(Значение,Алгоритм) 
	ВременныйФайл = ПолучитьИмяВременногоФайла("txt");
	Файл = Новый ТекстовыйДокумент;	
	Файл.УстановитьТекст(Значение);
	Файл.Записать(ВременныйФайл,"Windows-1251");
	ВК_Capicom = Новый COMОбъект("CAPICOM.HashedData");
	Если Алгоритм="sha1" тогда
		ВК_Capicom.Algorithm = 0;
	ИначеЕсли Алгоритм = "md5" тогда
		ВК_Capicom.Algorithm = 3;
	КонецЕсли;
	ВК_ADODB = Новый COMОбъект("ADODB.Stream");
	ВК_ADODB.Type = 1;
	ВК_ADODB.Open();
	ВК_ADODB.LoadFromFile(ВременныйФайл);	
	Пока НЕ ВК_ADODB.EOS Цикл
		ВК_Capicom.Hash(ВК_ADODB.Read());
	КонецЦикла; 
	Попытка
		УдалитьФайлы(ВременныйФайл);
	Исключение
	КонецПопытки;
	Возврат НРег(ВК_Capicom.Value);
КонецФункции
Показать

Функция работает нормально если ее кормить латиницей :)
Почему сделал через временный файл - потому что я дурак не понял как напрямую строку передавать :)
Указанная ниже конструкция возвращает неверный хеш для "asd". Как я понял это связано с кодировками, сообразить как все сделать нормально - я не смог :)
	ВК_Capicom = Новый COMОбъект("CAPICOM.HashedData");
	ВК_Capicom.Algorithm = 3;
	ВК_Capicom.Hash("asd");
	Возврат ВК_Capicom.Value;
15. yoyoman 25.04.12 04:47 Сейчас в теме
stream.charset = "Windows-1251"

Ругается
Произошла исключительная ситуация (ADODB.Stream): Операция не допускается в данном контексте.
16. d0dger 81 25.04.12 10:14 Сейчас в теме
ругается потому что тип файла - бинарный (stream.Type = 1;), для него нет кодировок, просто последовательность байтов.
Можно попробовать
stream.Type = 2;
stream.charset = "windows-1251";

а вообще я с кириллицей не воевал, это тема отдельных экспериментов )
17. irbis_triffle 1 21.05.12 21:48 Сейчас в теме
По-поводу хеша строки:
(нагло содрано с миста.ру, автору поста "aka MIK" - огромное спасибо!! ):
Функция MD5(КодируемаяСтрока) Экспорт
    //http://pajhome.org.uk/crypt/md5/index.html
 
    ScrptCtrl = CreateObject("MSScriptControl.ScriptControl");
    ScrptCtrl.Language = "JScript";
    ScrptCtrl.AddCode("
    |var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase    */
    |var b64pad = """"; /* base-64 pad character. ""="" for strict RFC compliance  */ 
    |var chrsz  = 8; /* bits per input character. 8 - ASCII; 16 - Unicode   */
    |function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
    |function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
    |function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
    |function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
    |function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
    |function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
    |function md5_vm_test()
    |{
    | return hex_md5(""abc"") == ""900150983cd24fb0d6963f7d28e17f72"";
    |}
    |function core_md5(x, len)
    |{
    | /* append padding */
    | x[len >> 5] |= 0x80 << ((len) % 32);
    | x[(((len + 64) >>> 9) << 4) + 14] = len;
    |
    | var a = 1732584193;
    | var b = -271733879;
    | var c = -1732584194;
    | var d = 271733878;
    |
    | for(var i = 0; i < x.length; i += 16)
    | {
    |  var olda = a;
    |  var oldb = b;
    |  var oldc = c;
    |  var oldd = d;
    |
    |  a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    |  d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    |  c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
    |  b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    |  a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    |  d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
    |  c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    |  b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    |  a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
    |  d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    |  c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    |  b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    |  a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
    |  d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    |  c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    |  b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
    |
    |  a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    |  d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    |  c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
    |  b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    |  a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    |  d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
    |  c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    |  b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    |  a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
    |  d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    |  c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    |  b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
    |  a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    |  d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    |  c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
    |  b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
    |
    |  a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    |  d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    |  c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
    |  b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    |  a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    |  d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
    |  c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    |  b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    |  a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
    |  d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    |  c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    |  b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
    |  a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    |  d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    |  c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
    |  b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
    |
    |  a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    |  d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
    |  c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    |  b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    |  a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
    |  d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    |  c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    |  b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    |  a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
    |  d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    |  c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    |  b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
    |  a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    |  d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    |  c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
    |  b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
    |
    |  a = safe_add(a, olda);
    |  b = safe_add(b, oldb);
    |  c = safe_add(c, oldc);
    |  d = safe_add(d, oldd);
    | }
    | return Array(a, b, c, d);
    |
    |}
    |
    |/*
    | * These functions implement the four basic operations the algorithm uses.
    | */
    |function md5_cmn(q, a, b, x, s, t)
    |{
    | return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
    |}
    |function md5_ff(a, b, c, d, x, s, t)
    |{
    | return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
    |}
    |function md5_gg(a, b, c, d, x, s, t)
    |{
    | return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
    |}
    |function md5_hh(a, b, c, d, x, s, t)
    |{
    | return md5_cmn(b ^ c ^ d, a, b, x, s, t);
    |}
    |function md5_ii(a, b, c, d, x, s, t)
    |{
    | return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
    |}
    |
    |/*
    | * Calculate the HMAC-MD5, of a key and some data
    | */
    |function core_hmac_md5(key, data)
    |{
    | var bkey = str2binl(key);
    | if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
    |
    | var ipad = Array(16), opad = Array(16);
    | for(var i = 0; i < 16; i++)
    | {
    |  ipad[i] = bkey[i] ^ 0x36363636;
    |  opad[i] = bkey[i] ^ 0x5C5C5C5C;
    | }
    |
    | var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
    | return core_md5(opad.concat(hash), 512 + 128);
    |}
    |
    |/*
    | * Add integers, wrapping at 2^32. This uses 16-bit operations internally
    | * to work around bugs in some JS interpreters.
    | */
    |function safe_add(x, y)
    |{
    | var lsw = (x & 0xFFFF) + (y & 0xFFFF);
    | var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    | return (msw << 16) | (lsw & 0xFFFF);
    |}
    |
    |/*
    | * Bitwise rotate a 32-bit number to the left.
    | */
    |function bit_rol(num, cnt)
    |{
    | return (num << cnt) | (num >>> (32 - cnt));
    |}
    |
    |/*
    | * Convert a string to an array of little-endian words
    | * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
    | */
    |function str2binl(str)
    |{
    | var bin = Array();
    | var mask = (1 << chrsz) - 1;
    | for(var i = 0; i < str.length * chrsz; i += chrsz)
    |  bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
    | return bin;
    |}
    |
    |/*
    | * Convert an array of little-endian words to a string
    | */
    |function binl2str(bin)
    |{
    | var str = """";
    | var mask = (1 << chrsz) - 1;
    | for(var i = 0; i < bin.length * 32; i += chrsz)
    |  str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
    | return str;
    |}
    |
    |/*
    | * Convert an array of little-endian words to a hex string.
    | */
    |function binl2hex(binarray)
    |{
    | var hex_tab = hexcase ? ""0123456789ABCDEF"" : ""0123456789abcdef"";
    | var str = """";
    | for(var i = 0; i < binarray.length * 4; i++)
    | {
    |  str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
    |      hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
    | }
    | return str;
    |}
    |
    |/*
    | * Convert an array of little-endian words to a base-64 string
    | */
    |function binl2b64(binarray)
    |{
    | var tab = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345­6789+/"";
    | var str = """";
    | for(var i = 0; i < binarray.length * 4; i += 3)
    | {
    |  var triplet = (((binarray[i  >> 2] >> 8 * ( i  %4)) & 0xFF) << 16)
    |        | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
    |        | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    |  for(var j = 0; j < 4; j++)
    |  {
    |   if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
    |   else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    |  }
    | }
    | return str;
    |}
    |");
    
    Хэш = "";
    Хэш = ScrptCtrl.Run("hex_md5", КодируемаяСтрока);
    ScrptCtrl = "";
    
    Возврат Хэш;
КонецФункции // MD5()
Показать


От себя добавлю, что для пользователей версии 8.* необходимо заменить
   ScrptCtrl = CreateObject("MSScriptControl.ScriptControl");

на
   ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
18. yandextesting 144 05.10.12 13:49 Сейчас в теме
в 8.3 реализовано на уровне платформы

...
Хеш = ПолучитьMD5_Сервер(ТекстДляХеша);
...

Функция ПолучитьMD5_Сервер(Текст)

ОбъектХеш = Новый ХешированиеДанных(ХешФункция.MD5);
ОбъектХеш.Добавить(Текст);
Возврат ОбъектХеш.ХешСумма;

КонецФункции // ПолучитьMD5_Сервер
Показать
NewLifeMan; loy; u_n_k_n_o_w_n; ya.Avoronov; ekaruk; BigB; Огонек; +7 Ответить
19. d0dger 81 05.10.12 13:53 Сейчас в теме
Интересно, а есть ограничения на размер строки в 8.3?
20. NastyMosk 13.05.13 08:06 Сейчас в теме
Спасибо большое! Очень помогла данная реализация. Перепробовала много алгоритмов, но результат не совпадал с результатом на принимающей файл стороне. Только этот вариант подошел
21. Angeros 09.08.13 12:57 Сейчас в теме
Что делать тем кто хочет хешировать картинки и выдается ошибка


Ошибка при вызове конструктора (COMОбъект)
crypt = Новый COMОбъект("CAPICOM.HashedData");
по причине:
Недопустимая строка с указанием класса

?
23. NAKIS 5 18.12.13 17:33 Сейчас в теме
Спасибо, если самому не получится реализовать, то качну)))
Но лень, это такая злая штука...))
Оставьте свое сообщение

См. также

Полезняшки по СКД и построителям. Просто код 36

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Универсальные функции

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    2148    Yashazz    31       

Полезные процедуры и функции для программиста 107

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

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

07.10.2019    5596    HostHost    21       

Отслеживание выполнения фонового задания 133

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    8020    ids79    14       

Сохранение запроса со всеми параметрами и временными таблицами 20

Статья Программист Нет файла v8 v8::УФ Россия Бесплатно (free) Универсальные функции

Функция сохранения запроса со всеми параметрами и временными таблицами в формате *.q1c для открытия в консоли запросов с диска ИТС.

13.05.2019    2373    Serge R    5       

Добавление возможности подключения внешних отчетов и обработок к объектам конфигурации при помощи расширения 10

Статья Программист Нет файла v8::УФ ERP2 Бесплатно (free) Универсальные функции

Часто приходится сталкиваться с тем, что необходимо внести изменения в типовую конфигурацию, но очень не хочется снимать её с поддержки. Для этого в 1С существует ряд инструментов. Эта короткая статья посвящена тому, как подучить возможность подключения внешних отчетов к объекту конфигурации при помощи расширения на примере 1С:ERP Управление предприятием 2 (проверено на 1С:ERP Управление предприятием 2 (2.4.6.230)).

15.04.2019    1981    user995537    0       

Иерархия справочника Сверху Вниз. Получаем произвольное количество родителей "верхнего" уровня 7

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Иерархия справочника Сверху Вниз. Функция для получения произвольного количества родителей "верхнего" уровня. На примере справочника "Номенклатура".

28.03.2019    1990    obsfromekb    11       

Доработка проведения типовых документов в УТ 11.4, КА 2.4, ЕРП 2.4 101

Статья Программист Нет файла v8 v8::УФ ERP2 УТ11 КА2 Россия УУ Бесплатно (free) Практика программирования Универсальные функции Разработка

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

22.03.2019    8656    ids79    14       

Добавление отчетов в типовые конфигурации 1С 200

Статья Программист Нет файла v8::УФ v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем)

Описание различных способов добавления общих и контекстных отчетов в конфигурации 1С, построенные на базе БСП. Основные моменты и нюансы.

07.03.2019    22934    ids79    32       

Расширение конструктора мобильного рабочего места для варианта "клиент 1С+RDP" (для любых wi-fi терминалов). Экосистема решений Simple WMS 20

Статья Программист Бизнес-аналитик Руководитель проекта Нет файла v8::УФ УУ Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Бесплатно (free) Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Универсальные функции Мобильная разработка

Развитие проекта «Конструктор мобильного клиента на Android» https://infostart.ru/public/976636/ для устройств не на Андроиде (работающих в режиме RDP). В отличие от варианта Android работа на терминалах происходит в режиме 1С:Предприятие через RDP а конфигурации мобильных клиентов полностью совместимы для обоих версий. Т.е. конфигурация единая, создается один раз и ее может читать как Android -устройство, так и 1С-клиент на RDP без необходимости какой либо переделки.

05.02.2019    5809    informa1555    0       

Работа со строками: от простого к сложному 25

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Простые примеры работы со строками, в конце более читаемый разбор сложных текстов.

14.01.2019    7376    Evg-Lylyk    17       

Нумерация колонок субконто при выгрузке набора записей регистра бухгалтерии в таблицу значений 6

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции

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

14.01.2019    2256    The Ded    3       

Подмена заголовка 1С 26

Статья Системный администратор Программист Нет файла Россия Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

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

08.12.2018    7509    moolex    26       

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке 463

Статья Программист Нет файла v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Зарплата Управление персоналом (HRM) Бесплатно (free) Универсальные функции

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1. Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур. Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.

14.11.2018    31421    GeterX    93       

Кадровые данные сотрудников в ЗУП 3.1 в отчетах 38

Статья Программист Нет файла v8 v8::СПР ЗУП3.x Россия Управление персоналом (HRM) Бесплатно (free) Универсальные функции

Параметры используемые для получения данных сотрудников в ЗУП 3.1. Пригодится для разработки отчетов как напоминалка.

07.11.2018    12794    fromlion    12       

Добавление расшифровки в стандартные и добавленные внешние отчеты со стандартной формой отчета на СКД 72

Статья Программист Нет файла v8::УФ v8::СКД ERP2 УТ11 Россия Бесплатно (free) Универсальные функции

Описан способ добавления расшифровки отчета на СКД как встроенного в систему, так и добавленного внешнего отчета.

27.09.2018    6492    bmk74    2       

Функция НайтиФайлы() в каталоге netshare на Linux - обход ошибки работы 6

Статья Программист Нет файла v8 Linux Бесплатно (free) Практика программирования Универсальные функции

Решение проблемы применения функции НайтиФайлы() в каталоге с netshare на Linux-сервере - не работает поиск файлов по указанной маске (шаблону)

19.09.2018    3212    drmaxart    1       

Простой способ программно открыть заполненную форму нового (незаписанного) документа в тонком клиенте 15

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции

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

09.06.2018    7342    Serge R    12       

Генерация временного ряда запросом 7

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Универсальные функции

Способ генерации последовательности дат средствами языка запроса 1С.

07.05.2018    5830    dim_zal    6       

Минимализмы 3 350

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    35394    ildarovich    44       

Танцы с бубном! Создаём демонстрационную базу 68

Статья Программист Нет файла v8 Бесплатно (free) Защита и шифрование

В статье кратко расскажу Вам о моём опыте создания демонстрационной версии базы данных 1С и способах защиты кода.

08.02.2018    12774    user748289    41       

Таблица значений в Таблицу HTML - функция с возможностью настройки цвета шапки, заголовков, выравнивания и размера колонок 83

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции

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

22.12.2017    18796    rpgshnik    21       

Пример преобразования двоичных данных в строку 26

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции

Доброго всем времени суток. Хочу поделиться маленьким решением маленькой проблемы. Думаю, будет интересно новичкам. Я не раз встречал на форумах вопрос: как преобразовать двоичные данные в строку? В частности, к примеру, частенько нужно получить хэш файла MD5 в текстовом виде, но как мы знаем 1С возвращает его в виде двоичных данных.

08.12.2017    12334    frkbvfnjh    19       

Функция сохранения картинок из книги Excel в каталог с определением координат на листе 8

Статья Программист Нет файла v8 Бесплатно (free) Загрузка и выгрузка в Excel Универсальные функции

Разбор файла *.xlsx как Web-архива, выгрузка изображений без потери качества, с определением положения изображений.

12.11.2017    7094    user634820_zergemoth    1       

Определяем контекст сеанса 1С программно (Тонкий/Толстый клиенты/HTTP-Сервис/Фоновое задание и т.д.) 31

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции

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

08.11.2017    15320    azubar    9       

Правила округления 5

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Универсальные функции

Округление числовых значений по трём правилам математики

30.10.2017    7652    dakork    4       

#Область ВНЕШНИЕ_ВЫЗОВЫ или MVC в 1С, библиотечность и упрощение интеграции кода 43

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Математика и алгоритмы Универсальные функции

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

12.10.2017    14430    for_sale    58       

Получение даты, зная день недели и его порядок в месяце 10

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции

Иногда бывает необходимость получить "Первый понедельник месяца" или "Вторую пятницу месяца". Есть несколько способов решения вопроса. Опишу один из них.

12.09.2017    8076    987ww765    10       

Разность дат 21

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции

Иногда требуется получить разность дат в виде типа: 5 дней 6 месяцев 4 года. Это можно сделать с помощью запроса, получив на выходе сразу 3 нужных числа, без последующих вычислений.

11.08.2017    9707    jun-ko    24       

Простой способ преобразовать UNICODE в строку или в структуру 23

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) Практика программирования Универсальные функции

Первая функция получает Строку, которая содержит строчки вида «Ключ=Значение». Вторая функция получает Структуру.

07.07.2017    7140    dimasts    5       

Исправление ошибки 1С УТ 11 (версия 11.3.2.157) с транспортным модулем УТМ ЕГАИС 2

Статья Программист Нет файла v8::ОУ УТ11 Розничная и сетевая торговля (FMCG) Россия УУ Розничная торговля Акцизы Бесплатно (free) Универсальные функции

В конфигурации 1C "Управление торговлей" (по крайней мере, в версии 11.3.2.157) после настройки соединения с фискальным регистратором и транспортным модулем "УТМ" ЕГАИС при попытке пробить чек на продажу единицы алкогольной продукции выдается ошибка (скрин приложен).

04.01.2017    9621    janibeck@mail.ru    0       

"Распределение в запросе" или "избавляемся от перебора" 182

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Математика и алгоритмы Универсальные функции

Хороший перебор - это отсутствие перебора. Рассмотрим пример замены полного перебора запросом.

16.12.2016    27750    alexandersh    45       

Пример работы с шаблоном Word через ole (клиент - сервер, тонкий клиент) - установка значений и заполнение таблицы 17

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

В примере показывается заполнение строк готовой таблицы, добавление новой таблицы, объединение ячеек, установка значений в "параметр".

09.11.2016    9980    gortrex    8       

Парсер JSON (Штатные средства 1С 8.3.6) 59

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Хочу поделиться функцией чтения json, реализованной с помощью штатных средств платформы.

29.09.2016    46261    dour-dead    21       

Программное создание графических схем (v.2): API для ГрафическойСхемы 73

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом Универсальные функции

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

27.09.2016    16856    serg_infostart    15       

Вычитание рабочих дней от текущей даты 7

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Универсальные функции

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

08.09.2016    9579    semenich_b    7       

Используем механизмы обмена данными БСП для произвольного обмена 147

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции Внешние источники данных БСП (Библиотека стандартных подсистем)

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

23.08.2016    27622    Патриот    22       

Склонение числа прописью 25

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции

Склоняет число прописью до 999999 Пример: до склонения "Не позднее 3 (Три) дней", после - "Не позднее 3 (Трех) дней"

18.08.2016    15825    maxvcb    27       

Отборы в отчётах. Нюансы работы компоновщика настроек. 132

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Открытие отчёта с предустановленным отбором, показанным пользователю. Изменение любых настроек в процессе работы отчёта. Взаимосвязи настроек.

15.08.2016    59105    Yashazz    23       

Автоматическое добавление новых реквизитов на форму (УФ) 38

Статья Программист Нет файла v8 v8::УФ Бесплатно (free) Работа с интерфейсом Универсальные функции

Идея такая: Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец. слово (можно не матерное). На форму объекта новый реквизит далее попадает автоматом в спец. группу "Дополнительно".

03.08.2016    16180    Патриот    23       

HOWTO: создание и отладка HTTP-сервиса в 1С:Предприятие 123

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) WEB Практика программирования Универсальные функции

Статья о том, как можно быстро создать HTTP-сервис в 1С:Предприятие и как выполнять его отладку.

25.07.2016    39353    serg_infostart    19       

Цикл ввода данных, пример решения 41

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

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

12.07.2016    11148    botokash    7       

Поиск несериализуемых значений при помещении в хранилище 12

Статья Программист Нет файла v8 Windows Бесплатно (free) Инструментарий разработчика Практика программирования Универсальные функции

В статье разобран пример, как найти несериализуемые значения в случае помещения в хранилище коллекций, содержащих вложенные элементы. В качестве хранилищ рассмотрены временное хранилище значений и переменные типа ХранилищеЗначения.

02.03.2016    20015    balanton    2       

Универсальные функции с примерами использования 241

Статья Программист Нет файла v8 Бесплатно (free) Универсальные функции

14 универсальных функций, с примерами использования - для обычного и управляемого интерфейса

26.02.2016    35334    unichkin    36       

Преобразование числа в строку в запросе 1С 8.x 21

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Универсальные функции

В запросах 1С предприятие 8.x есть ограничение: нельзя преобразовывать число в строку.

23.02.2016    32888    lastcontra    19