Автор: Павел Грибов
1С: Генератор строки из случайных символов
Задача: с генерировать строку длинной N из случайных символов.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Функция ГенерацияСлучайногоСимвола(длн) ГСЧ = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах()); СлучайнаяСтрока = ""; // генерируем случайное число из 6-ти символов, например "d0c8Yf" Для Сч = 1 по длн Цикл Набор = ГСЧ.СлучайноеЧисло(1,3); Если Набор = 1 Тогда // это число СлучайныйСимвол = ГСЧ.СлучайноеЧисло(0,9); ИначеЕсли Набор = 2 Тогда // это Большая буква латиницы СлучайныйСимвол = Символ(ГСЧ.СлучайноеЧисло(65,90)); ИначеЕсли Набор = 3 Тогда // это маленькая буква латиницы СлучайныйСимвол = Символ(ГСЧ.СлучайноеЧисло(97,122)); КонецЕсли; СлучайнаяСтрока = СлучайнаяСтрока + СлучайныйСимвол; КонецЦикла; Возврат(СлучайнаяСтрока); КонецФункции Сообщить(ГенерацияСлучайногоСимвола(10)); |
1С: Приведение номера документа к числу
Задача: преобразовать номер документа вида ТП1-000234 в число 234. Т.е. убрать префикс и лидирующие нули.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
&НаСервере Функция УбратьЛидирующиеНули(НомерДокумента) Попытка НомерДокумента = Формат(Число(НомерДокумента), "ЧГ="); Исключение НомерДокумента = СтрЗаменить(СокрЛ(СтрЗаменить(СокрП(НомерДокумента), "0", " ")), " ", "0"); Префикс = ""; Пока КодСимвола(НомерДокумента) < 48 Или КодСимвола(НомерДокумента) > 57 Цикл Префикс = Префикс + Лев(НомерДокумента, 1); НомерДокумента = Сред(НомерДокумента, 2); КонецЦикла; Если Не ПустаяСтрока(Префикс) Тогда НомерДокумента = Префикс + УбратьЛидирующиеНули(НомерДокумента); КонецЕсли; КонецПопытки; Возврат НомерДокумента; КонецФункции &НаСервере функция ИзвлечьНомерДоговора(номер) мм=СтрРазделить(номер,"-"); возврат УбратьЛидирующиеНули(мм[1]); конецфункции |
1С: Блокировка документа для изменения другими пользователями.
Задача: в одном самописном документе необходимо запретить одновременную работу в нём другим пользователям, если оный уже кем-то открыт.
Решение:
При открытии документа его необходимо блокировать следующим образом:
1 2 3 4 5 6 7 8 9 10 |
&НаСервере Процедура ПриОткрытииНаСервере() ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ПриОткрытииНаСервере(); КонецПроцедуры |
Удаляем кукисы, время жизни которых более заданного
Задача: есть сайт, на котором кукисы устанавливаются движком. Где не известно. Настроек нет (или есть, но лень-не кому копаться). Необходимо принудительно сократить время жизни куков до заданного.
Решение:
Из сложных нюансов: браузер не позволяет читать время истечения жизни (и путь) установленных кукисов. От слова никак и вообще. Защита такая..
Ну если с путем всё в принципе не так важно — просто вставлять код трущий кукисы на КАЖДОЙ странице, а не только на «начальной», то кукисы прочитаются, то со временем жизни возможен только «хук». А именно: читаем все куки. Записываем все ключи куков в локасторадж браузера с датой истечения сегодня+(какое-то количество дней). При следующем открытии страницы — проверяем дату истечения в сторадже. Если меньше текущей — трем кукисы.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
dayssavecookies=7; function deleteLCookie(name) { document.cookie.split(";").forEach(function(el) { if(!el.indexOf(name)) { var date = new Date(0); document.cookie = el + "=; path=/; expires=" + date.toUTCString(); } }); } function getAllCookies(){ var pairs = document.cookie.split(";"); var cookies = {}; for (var i=0; i<pairs.length; i++){ var pair = pairs[i].split("="); cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('=')); } return cookies; } // получаю текущие куки браузера cooks_values=getAllCookies(); // получаю текущие сохраненные в сторадже куки - даты if (localStorage["cooks_dates"]==undefined){ ls_dates=new Map(); } else { ls_dates=JSON.parse(localStorage["cooks_dates"]) }; // если кука в сторадже нет, то добавляю, если истек - ту удаляю и из стораджа и из куков for (key in cooks_values) { console.log(key); console.log(cooks_values[key]); // если новый кук - добавляем if (ls_dates[key]==undefined){ console.log("--add to localstorage"); datec = new Date(Date.now() + 86400e3*dayssavecookies); ls_dates[key]=datec; }; // если кук истек в локальном хранилище - трём его в куках и в локальном хранилище if (new Date(ls_dates[key])<Date.now()){ delete(ls_dates[key]); deleteLCookie(key); }; } localStorage.setItem("cooks_dates", JSON.stringify(ls_dates)); |