Глобальные полезности

  • Автор темы Hryv
  • Дата начала
V

Vladal

Вот еще полезности:

Назначение: Определение модуля (абсолютного значения) числа.
Входные параметры: Исследуемое число
Выходные параметры: Искомый модуль числа
Код:
Функция МодульЧисла(ИсследуемоеЧисло)

Возврат Макс(ИсследуемоеЧисло, -ИсследуемоеЧисло);

КонецФункции // МодульЧисла()
Как вариант - условие
Код:
?(Число < 0, -Число, Число)
 
V

Vladal

Упаковка и распаковка ZIP-архивов штатными средствами 1С 8.
Можно задавать уровень сжатия, пароль и комментарий к архиву.
Удобная обертка к ЗаписьZipФайла.

Код:
Функция фсЗапоковатьАрхив(пФайл, пАрхив, пБазоваяПапка = "", пПароль = "", пКомментарий = "", пОшибка = "") Экспорт
Попытка
лАрхив = Новый ЗаписьZipФайла(пАрхив, пПароль, пКомментарий, МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, );
Исключение
пОшибка = ОписаниеОшибки();
Возврат Ложь;
КонецПопытки; 
Попытка
лАрхив.Добавить(пБазоваяПапка + ?(ПустаяСтрока(пБазоваяПапка), "", "\") + пФайл);				
Исключение
пОшибка = ОписаниеОшибки();
Возврат Ложь;
КонецПопытки; 
Попытка
лАрхив.Записать();
Исключение
пОшибка = ОписаниеОшибки();
Возврат Ложь;
КонецПопытки; 
Возврат Истина;
КонецФункции // фсЗапоковатьАрхив()

Функция фсРаспаковатьАрхив(пПуть, пАрхив, пСохронятьПапки = Истина, пПароль = "", пКомментарий = "", пОшибка = "") Экспорт
Попытка
лАрхив = Новый ЧтениеZipФайла(пАрхив, пПароль);
Исключение
пОшибка = ОписаниеОшибки();
Возврат Ложь;
КонецПопытки; 
Попытка 
пКомментарий = лАрхив.Комментарий;
лАрхив.ИзвлечьВсе(пПуть, ?(пСохронятьПапки, РежимВосстановленияПутейФайловZIP.Восстанавливать, РежимВосстановленияПутейФайловZIP.НеВосстанавливать));
Исключение
пОшибка = ОписаниеОшибки();
Возврат Ложь;
КонецПопытки; 
Попытка
лАрхив.Закрыть();
Исключение
пОшибка = ОписаниеОшибки();
Возврат Ложь;
КонецПопытки; 
Возврат Истина;
КонецФункции // фсРаспаковатьАрхив()
 
V

Vladal

Функция формирует синоним переменной из идентификатора, как это делает платформа 1С8.
Используется при визуализации таблицы значений, давая читабельные для пользователей названия колонок:

ТипДокументовРасчета → Тип документов расчета
Сумма → Сумма
ДокументыДляЕНВД → Документы для ЕНВД
СуммаСНДС → Сумма с НДС
СуммаБезНДС → Сумма без НДС
ДляФНСЗаКвартал → Для ФНС за квартал
ПФРДляОтчетности → ПФР для отчетности

Источник:
Код:
// Моя первоначальная функция
// Формирует синоним переменной.
// Пример: на входе "ИмяПеременнойАБВГ", на выходе "Имя переменной АБВГ"
//
// Параметры
// ИмяРеквизита - Строка. Имя переменной, имя колонки таблицы
//
// Возвращаемое значение:
// Строка - Представление переменной
//
Функция СформироватьСиноним(ИмяРеквизита)

Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;

Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));

ДлинаСтроки = СтрДлина(ИмяРеквизита);
Для ъ=2 По ДлинаСтроки Цикл
Символ = Сред(ИмяРеквизита, ъ, 1);
ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
Прописная = Символ = ВРег(Символ);
ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
СледПрописная = СледСимвол = ВРег(СледСимвол);

// Варианты:
Если НЕ ПредПрописная И Прописная Тогда
Синоним = Синоним + " " + Символ;
ИначеЕсли Прописная И НЕ СледПрописная Тогда
Синоним = Синоним + " " + Символ;
Иначе
Синоним = Синоним + Символ;
Конецесли;
КонецЦикла;

Возврат Синоним;

КонецФункции // СформироватьСиноним()



// Переделанная nick-max функция
Функция Синоним(Знач Имя) Экспорт

НовоеИмя = "";
Имя = СтрЗаменить(Имя, "СНДС", "_сНДС"); 
Имя = СтрЗаменить(Имя, "ВПФР", "_вПФР"); 
Длина = СтрДлина(Имя);
Для Индекс = 1 По Длина Цикл

Символ = Сред(Имя, Индекс, 1);

Если Символ = НРег(Символ) Тогда 
НовоеИмя = НовоеИмя + Символ;
Продолжить;
КонецЕсли;

Если Символ = ВРег(Символ) Тогда

Если Индекс > 1 Тогда
НовоеИмя = НовоеИмя + " "
КонецЕсли;

Аббревиатура = (Сред(Имя, Индекс, 3) = ВРег(Сред(Имя, Индекс, 3))) И (Длина - Индекс > 1);
Предлог = (Сред(Имя, Индекс, 2) = ВРег(Сред(Имя, Индекс, 2))) И (Длина > Индекс);

Если Аббревиатура Тогда
ДлинаАббревиатуры = 3;

Пока Сред(Имя, Индекс, ДлинаАббревиатуры) = ВРег(Сред(Имя, Индекс, ДлинаАббревиатуры)) 
И Индекс + ДлинаАббревиатуры <= Длина + 1 Цикл

ДлинаАббревиатуры = ДлинаАббревиатуры + 1
КонецЦикла;

ДлинаАббревиатуры = ДлинаАббревиатуры - 1;

Если (Индекс + ДлинаАббревиатуры - 1) = Длина Тогда
НовоеИмя = НовоеИмя + Сред(Имя, Индекс, ДлинаАббревиатуры);
Иначе
ДлинаАббревиатуры = ДлинаАббревиатуры - 1;
НовоеИмя = НовоеИмя + Сред(Имя, Индекс, ДлинаАббревиатуры) + " " + НРег(Сред(Имя, Индекс + ДлинаАббревиатуры, 1));
КонецЕсли;

Индекс = Индекс + ДлинаАббревиатуры;
Продолжить;
КонецЕсли; 


Если Предлог Тогда
НовоеИмя = НовоеИмя + НРег(Символ) + " " + НРег(Сред(Имя, Индекс + 1, 1)) + " ";
Индекс = Индекс + 1;
Продолжить;
КонецЕсли; 


НовоеИмя = НовоеИмя + НРег(Символ); 


КонецЕсли; 

КонецЦикла;

НовоеИмя = СтрЗаменить(НовоеИмя, "_", " ");
НовоеИмя = ВРег(Лев(НовоеИмя, 1)) + Прав(НовоеИмя, СтрДлина(НовоеИмя) - 1);
Возврат НовоеИмя;

КонецФункции
 
B

beroev1991

Кое что полезное, действительно есть. Попробуем воплотить
 
P

puh14

Немного грабель и алгоритма их поиска. Предложили мне базы на новый сервак перенести, базы файловые, восьмерка бп3, зуп и семерочные. Сервер терминальный 64 бит. Вроде никаких грабель нет, а они есть ;-). После переноса пользователи стали жаловаться на вылеты программы, в журнале отображалось что-то типа

Имя сбойного приложения: 1cv8c.exe, версия: 8.3.5.1428, отметка времени: 0x54bd64a9
Имя сбойного модуля: KERNELBASE.dll, версия: 6.1.7601.17514, отметка времени 0x4ce7bafa
Код исключения: 0xe06d7363
Смещение ошибки: 0x0000b727
Идентификатор сбойного процесса: 0x10e4
Время запуска сбойного приложения: 0x01d03f72a10de886
Путь сбойного приложения: C:\Program Files (x86)\1cv8\8.3.5.1428\bin\1cv8c.exe
Путь сбойного модуля: C:\Windows\syswow64\KERNELBASE.dll
Код отчета: 85acf405-ab66-11e4-9350-001e67b9183b

Понятно, что ничего не понятно. Переустановка платформы\замена версии ничего не дает. Подрубил технологический журнал, вижу что 1с дампы собирает, а последнее сбойное действие отловить не могу - в эксепшинах пусто. Тогда мы пошли другим путем - у мелкомягких есть утилитка - называется process monitor. Она показывает какой процесс в системе что делал - какие ветки регистра читал\модифицировал, какие папочки\файлы создавал\читал\лочил\разлочивал, к каким длл обращался и т.п. Вот в нем то и увидел я, что сбор дампа начинается после создания и чтения файла в имени которого есть JobShelduer, тут то я и понял, что вылет обусловлен регламентной задачей. Вот только какой - их там много. Мониторя дальше поймал таки строчку с созданием файла, найденную гуглем. Оказалось сбоила регламентная задача обновление индекса полнотекстового поиска данных, ну и заодно задача по слиянию таких индексов. Так как этот поиск никому не уперся - отрубил задачу и все стало хорошо. Чуть позднее напишу про криптографию - там с граблями тоже все хорошо.
 
V

Vladal

Решал задачу с округлением суммы с округлением до 5 (50, 500, и т.д.) в большую сторону.

СуммаДо5 = Окр(Сумма*2+4.999, -1, РежимОкругления.Окр15как20)/2;
СуммаДо50 = Окр(Сумма*2+49.99, -2, РежимОкругления.Окр15как20)/2;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!