Библиотека математических функций 1.1

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

Разработка - Универсальные функции

Библиотека функций Математические функции Матрицы

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

Все функции писал сам. Надеюсь, кому-нибудь они будут полезны.

//кумулятивная функция нормального распределения
Функция NormCDF(x) Экспорт
    Base = 1/2+1/Sqrt(6.283185)*(x-Pow(x,3)/6+Pow(x,5)/40-Pow(x,7)/336+Pow(x,9)/3456-Pow(x,11)/42240);
	Если x < 0 Тогда
        Возврат 1-Base;
    Иначе	
        Возврат Base;
    КонецЕсли; 
КонецФункции 

//факториал числа
Функция Factor(x) Экспорт
    Result = 1;
    Для Индекс = 1 По x Цикл
        Result = Result*Индекс;
    КонецЦикла; 
    Возврат Result;
КонецФункции

//транспонирование матрицы
Функция TransMatrix(Знач х) Экспорт
    r1 = х.Количество();
    r2 = х[0].Количество();
    Result = Новый Массив(r2,r1);
	Для Индекс1 = 0 По r1-1 Цикл
		row = х[Индекс1];
        Для Индекс2 = 0 По r2-1 Цикл
            Result[Индекс2][Индекс1] = row[Индекс2];
        КонецЦикла; 
    КонецЦикла; 
    Возврат Result;	
КонецФункции 

//произведение матриц
Функция ProdMatrix(Знач х,Знач у) Экспорт
    кх1 = х.Количество();
    кх2 = х[0].Количество();
    ку1 = у.Количество();
    ку2 = у[0].Количество();
    Result = Новый Массив(кх1,ку2);
	Для Индекс1 = 0 По кх1-1 Цикл
		rowResult = Result[Индекс1];
        Для Индекс2 = 0 По ку2-1 Цикл
            rowResult[Индекс2] = 0;
            Для Индекс3 = 0 По кх2-1 Цикл
                rowResult[Индекс2] = rowResult[Индекс2]+х[Индекс1][Индекс3]*у[Индекс3][Индекс2];
            КонецЦикла; 
            rowResult[Индекс2] = Окр(rowResult[Индекс2],12);
        КонецЦикла; 
    КонецЦикла; 
    Возврат Result;	
КонецФункции

//обратная матрица
Функция InverseMatrix(Знач у) Экспорт
    х = CopyMatrix(у);
    Ранг = х.Количество();
    Result = IdentityMatrix(Ранг);
	Для Индекс = 0 По Ранг-1 Цикл
        Коэффициент = х[Индекс][Индекс];
        Если Коэффициент = 0 Тогда
            Поиск1 = Неопределено;
            Поиск2 = Неопределено;
            Для Индекс1 = Индекс По Ранг-1 Цикл
                Для Индекс2 = Индекс По Ранг-1 Цикл
                    Если х[Индекс2][Индекс1] <> 0 Тогда
                        Поиск1 = Индекс2;
                        Поиск2 = Индекс1;
                    	Прервать;
                    КонецЕсли;         
                КонецЦикла; 
                Если Поиск1 <> Неопределено Тогда
                    Прервать;
                КонецЕсли; 
            КонецЦикла;
            Если Поиск1 = Неопределено Тогда
                ВызватьИсключение "Матрица вырождена";
            КонецЕсли; 
            х = MatrixPermutation(х,Индекс,Индекс,Поиск1,Поиск2);
            Result = MatrixPermutation(Result,Индекс,Индекс,Поиск1,Поиск2);
		КонецЕсли; 
		rowResult = Result[Индекс];
        Для Индекс3 = 0 По Индекс Цикл
            rowResult[Индекс3] = Окр(rowResult[Индекс3]/Коэффициент,12);
		КонецЦикла;
		row = х[Индекс];
        Для Индекс3 = Индекс По Ранг-1 Цикл
            row[Индекс3] = Окр(row[Индекс3]/Коэффициент,12);
        КонецЦикла;
        Для Индекс4 = 0 По Ранг-1 Цикл
            Если Индекс4 <> Индекс Тогда
                Коэффициент = х[Индекс4][Индекс];
                Для Индекс5 = 0 По Индекс Цикл
                    Result[Индекс4][Индекс5] = Окр(Result[Индекс4][Индекс5]-rowResult[Индекс5]*Коэффициент,12);
                КонецЦикла;     
                Для Индекс5 = Индекс По Ранг-1 Цикл
                    х[Индекс4][Индекс5] = Окр(х[Индекс4][Индекс5]-row[Индекс5]*Коэффициент,12);
                КонецЦикла;     
            КонецЕсли; 
        КонецЦикла;
    КонецЦикла;
    Возврат Result;	
КонецФункции

//единичная матрица
Функция IdentityMatrix(Знач х) Экспорт
    Result = Новый Массив(х,х);
	Для Индекс1 = 0 По х-1 Цикл
		row=Result[Индекс1];
        Для Индекс2 = 0 По х-1 Цикл
            row[Индекс2] = ?(Индекс1 = Индекс2,1,0);
        КонецЦикла; 
    КонецЦикла; 
    Возврат Result;	
КонецФункции

//перемещение строк и колонок внутри матрицы
Функция MatrixPermutation(Знач х,Строка0,Столбец0,Строка1,Столбец1) Экспорт
    Result = CopyMatrix(х);
    кх1 = х.Количество();
    кх2 = х[0].Количество();
    Для Индекс1 = 0 По кх1-1 Цикл
        Для Индекс2 = 0 По кх2-1 Цикл
            Строка = Индекс1;
            Столбец = Индекс2;
            Если Строка = Строка0 Тогда
                Строка = Строка1;
            ИначеЕсли Строка = Строка1 Тогда
                Строка = Строка0;    
            КонецЕсли;
            Если Столбец = Столбец0 Тогда
                Столбец = Столбец1;
            ИначеЕсли Столбец = Столбец1 Тогда
                Столбец = Столбец0;    
            КонецЕсли;
            Result = х[Строка][Столбец];
        КонецЦикла; 
    КонецЦикла; 
    Возврат Result;	
КонецФункции

//копия матрицы
Функция CopyMatrix(Знач х) Экспорт
    r1 = х.Количество();
    r2 = х[0].Количество();
    Result = Новый Массив(r2,r1);
    Для Индекс1 = 0 По r1-1 Цикл
        Для Индекс2 = 0 По r2-1 Цикл
            Result[Индекс2][Индекс1] = х[Индекс2][Индекс1];
        КонецЦикла; 
    КонецЦикла; 
    Возврат Result;	
КонецФункции 

//метод наименьших квадратов
Функция MNK(Знач Matrix,Знач Value) Экспорт
    Trans = TransMatrix(Matrix);
    F1 = ProdMatrix(Trans,Matrix);
    F2 = InverseMatrix(F1);
    F3 = ProdMatrix(F2,Trans);
    Weights = ProdMatrix(F3,Value);
    Отклонения = SumMatrix(ProdMatrix(Matrix,Weights),OppositeMatrix(Value));
    Детерминация = 1-ProdMatrix(TransMatrix(Отклонения),Отклонения)[0][0]/ProdMatrix(TransMatrix(Value),Value)[0][0];
    Возврат Новый Структура("Коэффициенты,Детерминация",Weights,Детерминация);
КонецФункции

//матрица плюс скаляр
Процедура MatrixPlusScalar(Matrix,Scalar) Экспорт
    r1 = Matrix.Количество();
    r2 = Matrix[0].Количество();
	Для Индекс1 = 0 По r1-1 Цикл
		row = Matrix[Индекс1];
        Для Индекс2 = 0 По r2-1 Цикл
            row[Индекс2] = row[Индекс2]+Scalar;
        КонецЦикла; 
    КонецЦикла; 
КонецПроцедуры

//минус матрица
Функция OppositeMatrix(Знач х) Экспорт
    r1 = х.Количество();
    r2 = х[0].Количество();
    Result = Новый Массив(r1,r2);
	Для Индекс1 = 0 По r1-1 Цикл
		rowResult = Result[Индекс1];
		row = х[Индекс1]; 
        Для Индекс2 = 0 По r2-1 Цикл
            rowResult[Индекс2] = -row[Индекс2];
        КонецЦикла; 
    КонецЦикла; 
    Возврат Result;	
КонецФункции

//сумма матриц
Функция SumMatrix(Знач х,Знач у) Экспорт
    r1 = х.Количество();
    r2 = х[0].Количество();
    Result = Новый Массив(r1,r2);
	Для Индекс1 = 0 По r1-1 Цикл
		rowResult = Result[Индекс1];
		rowх = х[Индекс1];
		rowу = у[Индекс1]; 
        Для Индекс2 = 0 По r2-1 Цикл
            rowResult[Индекс2] = rowх[Индекс2]+rowу[Индекс2];
        КонецЦикла; 
    КонецЦикла; 
    Возврат Result;	
КонецФункции

//десятичное число в двоичное
Функция DecimalToBinary(х) Экспорт
    Остаток = х;
    Индекс = 0;
    Результат = 0;
    Пока Остаток > 0 Цикл
        Знак = Остаток%2;
        Остаток = (Остаток-Знак)/2;
        Результат = Результат+Знак*Pow(10,Индекс); 
        Индекс = Индекс+1;
    КонецЦикла; 
    Возврат Результат;	
КонецФункции

//коэффициент отклонения двух чисел
Функция RelativeDeviation(х,у,Num = 4) Экспорт
    Возврат Окр(?(х >= у,х/у,у/х),Num)-1;	
КонецФункции 

//модуль числа
Функция AbsValue(х) Экспорт
	Возврат Макс(х,-х);
КонецФункции  

//округление вверх
Функция RoundUp(x,Num = 1) Экспорт
	z = x/Num;
	res = Цел(z);
	Если z <> res Тогда
		z = res+1;
	КонецЕсли; 	
	Возврат z*Num; 
КонецФункции
 


 
 
 
 

 
 
 
 
 
 

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

Наименование Файл Версия Размер
Конфигурация с интегрированной библиотекой функций

.cf 7,59Kb
26.12.14
41
.cf 1.1 7,59Kb 41 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. lex27119 18.12.14 10:46 Сейчас в теме
Сам давно хотел написать в 1С функции для работы с матрицами
2. vasiliy_b 281 18.12.14 11:46 Сейчас в теме
Не плохо. Напишите пожалуйста в каких задачах применяете.
4. alex271 18.12.14 12:07 Сейчас в теме
(2) vasiliy_b,

Основное применение: задачи корреляционно-регрессионного анализа.
Или, для тех кому эта формулировка мало о чем говорит, функции применяются в задачах, где исследуются зависимости между какими-либо показателями.
ekaterinaeon; Andris_infostart; +2 Ответить
6. Andris_infostart 18.12.14 17:18 Сейчас в теме
(4) вопрос по применению данной обработки: "Подскажите, пожалуйста, возможно ли отображение полученных зависимостей в виде графиков и если да, то какими средствами пользуетесь?"
7. alex271 19.12.14 05:50 Сейчас в теме
(6) Andris_infostart,
При желании график можно построить для любых данных.
Функция MNK возвращает два вектора. Один вектор это коэффициенты регрессии, а другой коэффициенты детерминации. Это результаты оценки зависимости.
А что делать с этими результатами личное дело каждого, их можно анализировать программно или визуально, в т.ч. с использованием графиков.
Графики можно строить произвольным способом, в т.ч. средствами платформы 1С или с помощью внешних компонент.
3. necropunk 8 18.12.14 12:06 Сейчас в теме
Тоже спектр задач интересен. Кажется достаточно узкоспециализированной вещью.
5. hexus 3 18.12.14 12:13 Сейчас в теме
Спасибо за полезные инструменты. Иногда действительно нужны подобные функции. Обычно пишется на ходу и забывается до следующего раза. Тут все структурировано.
8. vano-ekt 841 19.12.14 09:51 Сейчас в теме
я как-то матрицы юзал для хитрых скидок в одной торговой самописке на 8.2
Правда не функциями, а запросом делал
9. infoengineer 19.12.14 12:30 Сейчас в теме
Более компактное решение для вычисления факториала с помощью рекурсивной функции:

Функция Факториал(n)
Возврат ?(n <= 1, 1, n * Факториал(n - 1))
КонецФункции
12. alex271 335 19.12.14 13:04 Сейчас в теме
(9) infoengineer,
Соглашусь, но не очень люблю рекурсию, поэтому как-правило заменяю ее циклами (для лучшего понимания).
13. pbazeliuk 1763 19.12.14 14:44 Сейчас в теме
(9) infoengineer, рекурсия на порядок больше использует памяти, чем цикл.
jif; Идальго; +2 Ответить
14. ruslan0277 4 19.12.14 15:09 Сейчас в теме
(13) pbazeliuk, правильная рекурсия она как произведение искусства - можно смотреть бесконечно. да и выглядит она более понятней и компактней.
cdrw3; starik-2005; +2 Ответить
17. alex271 335 22.12.14 13:36 Сейчас в теме
(14) ruslan0277,
Компактней да, соглашусь.
Насчет того, что рекурсия более понятна - вопрос очень спорный.
Когда код изобилует рекурсиями в нем становится очень трудно разобраться.
А красота кода в данном случае не самое главное. Самое главное в коде - это его производительность и потребление ресурсов.
25. Mr.Rm 23.12.14 11:56 Сейчас в теме
(17) Если от предлагаемых функций требуется производительность, то многое нужно переписать. Сейчас все сделано аккуратным переложением формул.
infoengineer; +1 Ответить
27. alex271 335 24.12.14 05:47 Сейчас в теме
(25) Mr.Rm,
Когда эти функции писались, самым главным была реализация функционала.
Часть проблем с производительностью я решил, весь функционал использующий эти функции отрабатывает достаточно быстро.
Если у Вас есть конкретные предложения по существенному улучшению производительности некоторых функций, то можете их обозначить.
Я предполагаю, что для функции получения обратной матрицы существуют альтернативные алгоритмы и, возможно, мой алгоритм не самый производительный.
В остальной части все написано достаточно оптимально на мой взгляд.
57. ilialin 29.12.14 12:02 Сейчас в теме
(9) infoengineer,
хоспади,
НИКОГДА НЕЛЬЗЯ ВЫЧИСЛЯТЬ ФАКТОРИАЛ РЕКУРСИЕЙ!!!!!!!

К сожалению, эта детская ошибка встречается в большинстве отечественных учебников по программированию. Как заходит речь о рекурсии, так обязательно следует пример с факториалом.
Рекурсия - интересный метод и существует четко определенный класс задач, где она себя прекрасно показывает (и которые проблематично решить без использования оной). Предназначение рекурсии - обход деревьев. Не надо совать ее в другие места.
Elv_Ra; Артано; Mr.Rm; +3 Ответить
58. 987ww765 267 30.12.14 08:50 Сейчас в теме
(57) ilialin, поясните безграмотному почему нельзя? Только потому что рекурсия предназначена для деревьев?
59. Артано 673 31.12.14 11:04 Сейчас в теме
(58) Думаю, что смысл в значительной потере производительности, ради экономии пары строк кода. Я бы конечно высказался не так категорично, но в данном случае претензию считаю обоснованной
10. mikmike 5 19.12.14 12:53 Сейчас в теме
А почему все названия по английски? Неудобно ж переключаться туда сюда.
11. alex271 335 19.12.14 13:02 Сейчас в теме
(10) mikmike,
Во-первых, подстановка работает.
А, во-вторых, главное алгоритм. Если кто-нибудь захочет, всегда можно переименовать.
15. TMV 14 20.12.14 10:12 Сейчас в теме
(11) alex271,
Во-первых, подстановка работает.
Как будет работать подстановка без переключения раскладки?
16. alex271 335 22.12.14 05:53 Сейчас в теме
(15) TMV,
После точки список экспортных функций отображается. Нужная, конечно, сразу может не отобразиться.
А, вообще, это личное дело каждого. Кому как удобно, так и называют.
Я их по английски назвал, т.к. это математические функции. В математике принято функции называть на английском языке.
18. Герасим 23.12.14 07:20 Сейчас в теме
А Окр() для округления чем не устраивает?
24. alex271 335 23.12.14 11:28 Сейчас в теме
(18) Герасим,
Функция RoundUp округляет вверх. Функция Окр() этого делать не позволяет.
Например, нужно чтобы 2,1 округлялось до 3, а не до 2. Как Вы это сделаете с помощью функции Окр()?
29. Герасим 24.12.14 09:09 Сейчас в теме
(24) alex271, виноват, поторопился)
63. 1cprogr_nsk 12.01.15 14:19 Сейчас в теме
зачем на округление вверх городить?!! можно стандартной это к (24) alex271,
Окр(x+0.49, num)
64. alex271 335 13.01.15 05:18 Сейчас в теме
(63) dr.death,
Не соглашусь с Вами.
Точность округления не известна, число которое нужно прибавить будет зависеть от точности.
Например x=2,0001 тогда Окр(x+0,49) = Окр(2,4901) = 2, а нужно 3
19. sashocq 191 23.12.14 09:48 Сейчас в теме
Я бы добавил к статье примечание, что для производительности лучше циклы записывать в одну строку:
Для Индекс1 = 0 По r1-1 Цикл Для Индекс2 = 0 По r2-1 Цикл Result[Индекс2][Индекс1] = х[Индекс1][Индекс2]; КонецЦикла; КонецЦикла;

Время выполнения цикла может уменьшиться в несколько раз. Тут где-то была статья на эту тему. Но листинг в статье, естественно, менять не нужно.
oleg212; Герасим; +2 4 Ответить
33. BorovikSV 1368 25.12.14 01:07 Сейчас в теме
(19) sashocq, производительность возрастает исключительно в режиме отладки, поскольку отладчику не нужно обрабатывать переход на новую строку, искать связанные точки останова и т.д.
В штатном режиме работы 1С предприятия выигрыш ничтожен, для того чтобы превращать структурированный алгоритм в спагетти.

Если быть до конца "дотошным", то :
смена номера строки для виртуальной машины 1С одна из самых "легких" операций.
Виртуальная машина 1С просто выполняет инструкцию вида <1,N>, где 1 - команда интерпретатору "смена текущей строки", N - номер строки.
Если отладчик не подцеплен, то задача сводится к присваиванию 32 разрядного числа некой 32 разрядной переменной, что в свою очередь выглядит как одна команда ассемблера MOV.
Остальные инструкции (увеличение счетчика цикла, проверка на выполнения условий цикла, сложение вычитание и т.д.) требуют помещение и извлечение значений (или переменных) из стека виртуальной машины, что вносит задержку.
К тому же манипуляции с числами занимают больше время чем может показаться. Ведь у 1С числа реализованы особым образом ("длинная арифметика"). И при каждой манипуляции с числом происходит нетривиальная работа, требующая от десятка до сотен машинных тактов.

Другим словами, длительностью выполнения инструкции <1,N>, можно пренебречь, а значит и лепить все в одну строку нет необходимости.
А если нужна быстрая математика - то напишите внешнюю компоненту, и получите прирост от 10 до 1000 раз.
Steelvan; borda4ev; bforce; Mr.Rm; alex271; +5 Ответить
20. sashocq 191 23.12.14 09:52 Сейчас в теме
Поставил "+" как только увидел функцию нормального распределения. Мне как-то понадобилась для одной необычной задачи: нужно было сгенерировать документы в базе случайными цифрами (но для достижения определенных значений за период). Много времени убил на поиск этой функции и, подозреваю, что она так и не правильно у меня заработала.
Кстати, это же ее приближение через ряд Тейлора? Я тогда до этого не додумался.
22. alex271 335 23.12.14 11:10 Сейчас в теме
(20) sashocq,
Совершенно верно, это приближение через ряд Тейлора
21. AlX0id 23.12.14 10:49 Сейчас в теме
В функции MNK есть вызов некоего Math - видимо, так общий модуль называется.. Нужно убрать наверн ;)
23. alex271 335 23.12.14 11:24 Сейчас в теме
(21) AlX0id,
Да, все верно.
Math можно убрать. Потом исправлю.
26. Asmody 23.12.14 15:03 Сейчас в теме
А чем обосновано использование передачи матриц по значению? Требованиями производительности или потребления ресурсов?
28. alex271 335 24.12.14 05:55 Сейчас в теме
(26) Asmody,
В данном случае скорее логикой разработки.
Чтобы передаваемые переменные не изменились, на всякий пожарный, передается только значение.
В принципе, можно проанализировать функции, и существенную часть этих условий выбросить.
30. Nebiros777 5 24.12.14 11:52 Сейчас в теме
Круть, дайте две!!! Коллекция закладок все пополняется и пополняется...
31. DAnry 7 24.12.14 15:03 Сейчас в теме
Плюсанул конечно. Безусловно, статья хорошая и полезная. Но, если честно, в практике програмирования бухгалтерского и управленческого учета в 1С, сложными математическими функциями пользуюсь крайне редко.
32. Mr.Rm 24.12.14 21:49 Сейчас в теме
Например:
Функция NormCDF(x) Экспорт
    x2=x*x;
    Base = 0.5+0.39894228*(x+x2*(x/-6+x2*(x/40+x2*(x/-336+x2*(x/3456+x2*x/-42240)))));
    Возврат ?(x < 0, 1-Base, Base );
КонецФункции 

Это быстрее примерно на 25%.
34. Mr.Rm 25.12.14 22:13 Сейчас в теме
Добавлю, все же, еще одну исправленную функцию.
Функция ProdMatrix(х, у) Экспорт
    кх1 = х.Количество();
    кх2_1 = х[0].Количество()-1;
    ку1 = у.Количество();
    ку2 = у[0].Количество();
    Result = Новый Массив(кх1,ку2);
	Для Индекс1 = 0 По кх1-1 Цикл
		х1=х[Индекс1];
		R1=Result[Индекс1];
        Для Индекс2 = 0 По ку2-1 Цикл
            R = 0;
            Для Индекс3 = 0 По кх2_1 Цикл
                R = R+х1[Индекс3]*у[Индекс3][Индекс2];
            КонецЦикла; 
            R1[Индекс2] = Окр(R,12);
        КонецЦикла; 
    КонецЦикла; 
    Возврат Result;    
КонецФункции
Показать

Округление кажется лишним, но пусть останется.
Не знаю, какой типичный размер матриц у автора, но уже для 4x4 разница вдвое.

И DecimalToBinary(х) тоже нужно переписать, даже не ради производительности.
35. alex271 335 26.12.14 06:07 Сейчас в теме
(34) Mr.Rm,
Округление в этих функциях добавлено не просто так. Я расскажу как оно появилось.
Я написал функцию получения обратной матрицы без округления, но она повисала даже на относительно небольших матрицах.
Проблема оказалась в формате числа. 1С позволяет хранить в переменной числа с очень большой точностью в несколько сотен знаков (я точно не помню, но где-то 400).
При вычислении обратной матрицы совершается большое количество операций, числа становятся длинными и производительность падает практически до нуля.
Поэтому пришлось добавить округление. В 1С жесткая типизация числа по размеру памяти для переменных отсутствует в отличие от других языков, что где-то является плюсом, а где-то минусом.
37. ildarovich 7094 26.12.14 08:27 Сейчас в теме
(35) alex271,
Проблема оказалась в формате числа. 1С позволяет хранить в переменной числа с очень большой точностью в несколько сотен знаков (я точно не помню, но где-то 400).
При вычислении обратной матрицы совершается большое количество операций, числа становятся длинными и производительность падает практически до нуля.
Поэтому пришлось добавить округление
наивно и не похоже на правду
54. alex271 335 29.12.14 08:11 Сейчас в теме
(37) ildarovich,
Тем не менее, все примерно так и было, года три назад
38. Идальго 134 26.12.14 09:17 Сейчас в теме
(35) alex271, боюсь ошибиться, но там вроде двойная точность используется. А с тормозами - да, я тоже сталкивался. Типизация спасает.
39. BorovikSV 1368 26.12.14 10:43 Сейчас в теме
(35) alex271,
В 1С жесткая типизация числа по размеру памяти для переменных отсутствует в отличие от других языков, что где-то является плюсом, а где-то минусом.


в 1С реализована так называемая длинная арифметика. Длинная арифметика всегда - плюс, тем более для бизнес приложений, и тем более что у вас все равно нет возможности использовать чистый DOUBLE. Функция ОКР как раз и является "поводком" для этой длинной арифметики.
Нужно также отметить что при делении 1С ограничивается точностью 27-28 знаками после запятой. Умножение же может довести точность до бесконечности.

Нужно также отдать должное 1С, она реализовала эту самую длинную арифметику довольно хорошо. Есть ряд библиотек которые тормозят не по детски над тем, что 1С делает почти мгновенно. Все таки рекомендую написать ВК по технологии Native и воткнуть ее в свою библиотеку в виде общего шаблона, и выиграете в скорости неимоверно
46. ildarovich 7094 26.12.14 12:41 Сейчас в теме
(39) BorovikSV,
в 1С реализована так называемая длинная арифметика
а пруфы какие-нибудь есть? Что конкретно вы подразумеваете под длинной арифметикой? Хотите сказать, что время выполнения сложения, умножения, деления, например, будет зависеть от числа разрядов в числе. А проверяли? Не заблуждение ли это?
48. Mr.Rm 26.12.14 13:38 Сейчас в теме
(46) ildarovich
Нет, не заблуждение. Если принять время умножения или деления однозначных чисел за единицу, то время умножения 16-разрядных будет примерно 2 единицы, их деления - 2.5. Для полноразрядных чисел формата 308.308 умножение в 90, а деление в 110 раз медленнее.
Легко проверить
49. ildarovich 7094 26.12.14 16:32 Сейчас в теме
50. Mr.Rm 26.12.14 17:16 Сейчас в теме
(49) ildarovich
Так я это и делал, прежде чем цифры писать. Платформа 8.3.5.1248.
51. ildarovich 7094 26.12.14 17:21 Сейчас в теме
(50) Mr.Rm, а приведите обработку или код, если можно ... хотя не нужно - уже нашел объяснение этого феномена.
Числовые величины и в 1С:Предприятии 7.7 и в 1С:Предприятии 8.x представляются как десятичные числа с фиксированной точкой и неограниченной точностью. Сделано это вполне сознательно, так как десятичные числа более адекватны для представления различных величин в программном обеспечении делового назначения.

Если еще точнее, то в 1С:Предприятии 7.7 используется система счисления с основанием 10000, а в 1С:Предприятии 8.x – система счисления с основанием 1000000000. Но, по сути, речь все равно идет о десятичной арифметике. Большее, но кратное десяти основание системы счисления выбрано для повышения эффективности вычислений.

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

В 1С:Предприятии 7.7 при делении точность результата ограничивалась 20-ю десятичными разрядами после точки.

В 1С:Предприятии 8.1 при делении точность результата определяется как точность делимого плюс три разряда по основанию 1000000000. То есть, при делении 1 / 3 результат будет представлен с точностью до 3-х разрядов по основанию 1000000000 или до 27-и десятичных разрядов. А при делении 0.1 / 3 результат будет с точностью до 4-х разрядов по основанию 1000000000 или до 36-и десятичных разрядов.
Хотя происхождение числа 308 все еще непонятно.
52. Mr.Rm 26.12.14 20:24 Сейчас в теме
(51) ildarovich
308 - это максимальная абсолютная величина порядка в стандартном double. Числа с бо́льшим количеством десятичных знаков не смогут быть корректно приведены к double для передачи во внешние функции или компоненты.

Из приведенного объяснения понятно, что используются binary-coded decimals неограниченного (теоретически, практически - см. выше) размера, разрядностью 16 бит в 7.7 и 32 бита в 8.x. Термин "система счисления с основанием ..." кажется тут неподходящим.

Подробнее только из кода ВМ можно понять.
53. ildarovich 7094 26.12.14 22:23 Сейчас в теме
(52) Mr.Rm,
Длинная арифметика позволяет работать с числами до 308 десятичных знаков целой и 306 дробной части
Но, кажется, до вызова функций, где требуется преобразование, это ограничение не существенно. То есть можно работать (умножать, делить, складывать, вычитать) с числами любой точности без ограничений. Получаем лишь замедление, которое нарастает не плавно, а скачками по 9-ть разрядов у операндов. До 9-ти разрядов - одно время. С 10-ти до 18-ти другое и так далее. Это связано с обработкой отдельных мега-разрядов. Кажется, что длительность умножения будет определяться как О(]М/9[ x ]N/9[), где N, M - число разрядов сомножителей, а ]x[ - ближайшее к x сверху целое.

Например, если 2 х 2 будет выполняться за время t, то 2000000000 х 2000000000 за 4t, а 2000000000000000000 х 2000000000000000000 за 8t.

Из (51) также следует, что высказанное в (39)
при делении 1С ограничивается точностью 27-28 знаков после запятой
это неточное утверждение.

Ну и добавлю по теме статьи.
Наиболее ценная в этой подборке функция вычисления обратной матрицы вызывает наибольшие опасения. Из-за очень вольного управления точностью. Могут быть случаи, когда, умножив матрицу на ее обратную, получим далекую от единичной матрицу. Хотя бы максимальный элемент выбирали для исключения. По виду это вроде Гаусса-Жордана метод? Кажется, у него самые большие проблемы с точностью.
В РАУЗ, например, при решении СЛАУ итерационный алгоритм применяется.
47. Mr.Rm 26.12.14 13:29 Сейчас в теме
(39) BorovikSV
При делении 1С дает до 54 знаков после запятой. Длинная арифметика позволяет работать с числами до 308 десятичных знаков целой и 306 дробной части, как раз по порядку double. Можно использовать дробную часть до 324 знаков, но начинаются проблемы при вызове математических функций, т.к. число преобразуется в double, а разрядной сетки не хватает.

Это приводит к очень плохим эффектам. Например, сделаем умножением в цикле x=10e-307 (кстати, в double умещается). Вычислим y=log10(x). И получим какой-то Not-a-Number: ТипЗнч(y) = Число, Строка(y) = ПустаяСтрока, y<0 = Да.
Более того, любые арифметические действия это свойство сохраняют. z=y+1; ТипЗнч(z) = Число, Строка(z) = ПустаяСтрока, и самое интересное z<0 = Да, что приводит к тому, что
Для i=y По 1 Цикл ... КонецЦикла; зависает напрочь.

Значения, возвращенные из мат. функций имеют стандартную разрядность double - 15 знаков.
36. alex271 335 26.12.14 07:17 Сейчас в теме
(34) Mr.Rm,
В версии 1.1 исправлены функции работы с матрицами для улучшения производительности
40. THXO 26.12.14 10:49 Сейчас в теме
http://forum.infostart.ru/forum24/topic122109/message1271074/#message1271074

Соглашусь, но не очень люблю рекурсию, поэтому как-правило заменяю ее циклами (для лучшего понимания).


Я считаю, что с таким тезисом глупо вести речь о программировании математики где либо.
да и вообще программист делать такие заявления права не имеет. это просто непрофессионально. имхо, да какое имхо - правда же.
41. BorovikSV 1368 26.12.14 11:13 Сейчас в теме
(40) THXO, Рекурсия может дать более лаконичный код, но при этом жрет стек.
И вообще сила программирования - в выполнении задачи разными способами.
Но в принципе рекурсию не любить невозможно :)
42. THXO 26.12.14 11:21 Сейчас в теме
(41) Лисп и Пролог в вузах сейчас не учат?)
44. Идальго 134 26.12.14 11:26 Сейчас в теме
(42) THXO, а для Лиспа и Пролога всё подругому? ))
43. Идальго 134 26.12.14 11:22 Сейчас в теме
(40) THXO, да фиг знает. Рекурсивные алгоритмы требуют операций со стеком, даже при той же сложности, а значит медленнее и жрут больше памяти. Поэтому не следует пользоваться рекурсией там, где без этого можно обойтись. Хз, именно это автор, по моему, хотел сказать. Что в этом непрофессионального или неверного?
45. THXO 26.12.14 11:32 Сейчас в теме
(43) "но не очень люблю рекурсию" - это свойство считаю крамольным)

также строитель может заявить "очень не люблю алебастр, предпочитаю бетон".
56. alex271 335 29.12.14 08:21 Сейчас в теме
(45) THXO,
У рекурсии достаточно минусов, они все названы в этой теме.
Я не вижу смысла ставить акцент на моей нелюбви рекурсии, обсуждение которой началось с того, что мне предложили изменить код вычисления факториала.
В библиотеке есть много других функций, а данная тема предназначена для обсуждения, прежде всего, библиотеки и ее функций.
55. alex271 335 29.12.14 08:15 Сейчас в теме
(40) THXO,
Что я люблю и что я не люблю - мое личное дело.
Почему Вы считаете, что у Вас есть право определять что мне писать, а что мне не писать?
60. THXO 31.12.14 14:57 Сейчас в теме
(55) я считаю крамольным свойство, а не вас. даже если его озвучит в той форме как у вас всевышний - я буду считать его еретиком)

зачем так подозрительно думать о своей собственной персоне? а то претензия ко мне как от женщины "сама придумала, сама обиделась".)
62. alex271 335 01.01.15 18:22 Сейчас в теме
61. ilialin 31.12.14 16:31 Сейчас в теме
"Для малой группы задач рекурсия позволяет создать простые, элегантные решения. Для несколько большей группы задач она позволяет создать простые, элегантные, трудные для понимания решения. Для большинства задач она создает исключительно запутанные решения - в таких случаях использование простых итераций обычно более понятно..." - Стив Макконнелл. Совершенный код.
----------
Какая цель преследовалась вами при рекомендации использовать рекурсию при вычислении факториала, вместо цикла? Компактность кода? Ну допустим. А что еще? Какие еще преимущества рекурсии в данном случае? А какие недостатки? А такие:
- трудность понимания, что делает данный код (ну ладно, в данном случае функция называется "Факториал", мы знаем как он считается, можем сообразить как работает код; но если цикл в данном случае понимается моментально, то рекурсия потребует больше времени на понимание);
- непредсказуемые затраты памяти;
- большее время выполнения.
Один плюс, три минуса.
----------
"В погоне за оптимизацией можно сделать программный код совершенно нечитаемым. <...> поддержка такого кода станет очень сложным делом. Человек, который не принимал участия в написании этого кода, скорее всего, просто не станет раскапывать этот кладезь оптимизации. А сам разработчик через полгода - год тоже с большим трудом сможет разобраться в том, что же он написал..." - Профессиональная разработка в системе "1С:Предприятие 8", 1 том.
987ww765; +1 Ответить
65. it-al 8 30.01.15 16:30 Сейчас в теме
Можно ли посчитать полином второй степени функцией
Функция MNK(Знач Matrix,Знач Value)
и что помещать в матрицы Matrix,Value
66. alex271 335 31.01.15 12:19 Сейчас в теме
(65) it-al,
Matrix - это матрица исходных данных (параметров), Value - вектор целевых значений. Подробнее смотрите ссылку ru.wikipedia.org/wiki/Метод_наименьших_квадратов
Оставьте свое сообщение

См. также

[Расширение] Контроль отрицательных остатков по регистру бухгалтерии при проведении Промо

Универсальные функции Инструментарий разработчика Учет ТМЦ Учет ТМЦ v8 1cv8.cf Россия БУ Абонемент ($m)

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

1 стартмани

17.08.2015    46605    156    ekaruk    32    

Парсинг Excel-файла

Загрузка и выгрузка в Excel Универсальные функции v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Шаблон внешней обработки для парсинга Excel без использования COM-объектов, с учетом клиент-серверного взаимодействия, на толстом, тонком и веб-клиенте. С учетом требований безопасности и отображением длительных операций.

1 стартмани

15.09.2020    1416    4    LamerSoft    0    

Дружелюбный интерфейс итогов в диалоге табличных частей, для Управляемых форм.

Работа с интерфейсом Адаптация типовых решений Универсальные функции v8 Абонемент ($m)

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

1 стартмани

14.09.2020    504    1    DrZombi    0    

Таблица значений в табличный документ (СКД)

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

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

1 стартмани

12.08.2020    3691    3    markivkin    2    

Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом Промо

Печатные формы документов Универсальные функции Email v8 КА1 БП2.0 УТ10 УПП1 Абонемент ($m)

Решение для интерактивной (нажал-отредактировал) отправки электронных писем и печатных форм через почтовый клиент (Thunderbird, Outlook) находящийся на локальном компьютере, из конфигурации 1С, развернутой под удаленным рабочим столом (RDP, remote-app). Подходит также для локального развертывания 1С. Представлен пример быстрой интеграции с конфигурациями "Управление торговлей 10.3", "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1", "Бухгалтерия предприятия 2.0".

1 стартмани

21.09.2018    23723    16    stvorl    0    

Нормализация адреса с помощью API Почты России

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

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

2 стартмани

11.08.2020    2007    5    Cerberdm    4    

Обработка чтения табличного документа (УФ)

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

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

1 стартмани

07.08.2020    1218    2    chum1roma    4    

Выполнение кода и получение данных запросов через HTTP сервис

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

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

2 стартмани

19.07.2020    2120    3    vladnet    7    

Лучшие методы сравнения таблиц значений Промо

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

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

1 стартмани

02.02.2015    107441    37    ildarovich    59    

Факториал числа N = N!

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

Алгоритмы расчета факториала числа

1 стартмани

28.06.2020    1160    Rustig    24    

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

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

Решаем следующую задачу. Например, в справочнике «Номенклатура» — 10 дополнительных реквизитов: "Материал", "Наименование на английском", "Наименование на французском" и т.д., и 20 дополнительных реквизитов в справочнике «Характеристики номенклатуры». Необходимо вывести все характеристики по ТЧ "Товары", так называемую «Спецификацию» по «Заказу клиента» или «Заказу поставщика».

2 стартмани

05.05.2020    1676    1    papche    7    

Универсальное хранилище настроек

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

Универсальная константа для хранения любых настроек, например интеграции с API. Легко вносить новые настройки без "ломания" выполнения кода в модулях.

1 стартмани

10.03.2020    5217    1    v.krivenko    17    

Генерация QR-кода программная и интерактивная (код открыт, управляемая форма, обычное и управляемое приложение, API) Промо

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

Обработку можно быстро и легко интегрировать в любую конфигурацию с и без БСП (Библиотека Стандартных Подсистем).

3 стартмани

04.02.2016    47315    173    TuneSoft    30    

Шаблоны внешних обработок (БСП, управляемые формы)

Обработки Печать Универсальные функции БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Набор из шаблонов для создания внешних обработок вида: Внешняя печатная форма, Отчет на СКД, Схема СКД для сегмента, Внешняя обработка (Самостоятельная, Заполнение объектов, Создание связанных объектов). Предварительно наполнены базовым функционалом и некоторыми механизмами для отладки.

1 стартмани

01.03.2020    3190    24    riposte    2    

Выгрузка любого запроса или таблицы значений в текст JSON

Обработка справочников WEB Универсальные функции Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Отчет позволяет выгрузить любые данные из 1С в JSON текст, выполнив произвольный запрос к данным.

1 стартмани

07.02.2020    8148    27    user796054    19    

Подпись PDF в новой версии 8.3.16

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

Проверяем новую возможность платформы 1С:Предприятие 8 по формированию подписей в PDF.

1 стартмани

23.12.2019    4827    8    kolya_tlt    7    

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7 Промо

Универсальные функции Практика программирования v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    27659    3    Serginio    1    

Простой способ загрузить файл Excel на тонком клиенте.

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

Самый простой способ загрузить файл Excel на тонком клиенте - это скопировать лист Excel в "табличный документ" на форме обработки и обрабатывать уже поля "табличного документа".

1 стартмани

30.10.2019    7634    2    John_d    16    

Версионирование объеков УТ 10 с возможностью перехода к сохраненной версии

Журнал регистрации Универсальные функции v8 УТ10 Абонемент ($m)

Версионирование объектов УТ 10.3 с возможностью перехода к сохраненной версии. Взята стандартная система версионирования УПП, добавлена возможность восстановления ранее сохраненной версии.

1 стартмани

28.10.2019    6938    27    art.prm    8    

Картинка вместо кнопки без html

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

Вариант замены стандартных кнопок на форме для тех, кого не устраивают кнопки 1С и нет особых возможностей делать все с использованием html. Тестировал работу на платформах 8.3.10, 8.3.13, 8.3.14

1 стартмани

23.10.2019    5432    4    zatoichi    3    

Автоматическая подстановка уничтожений временных таблиц в текст запроса Промо

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

Функция, которая сама подставляет в текст запроса "УНИЧТОЖИТЬ" в местах последнего использования ВТ.

1 стартмани

14.11.2015    19954    0    SeiOkami    3    

Выгрузка данных из дерева значений 1С в формат JSON иерархический список (Сериализация ДереваЗначений в JSON)

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

Тема: Иерархические списки при обмене данными. В интернете не удалось найти подобного решения. Обнаружена реализация только обратной операции JSON в дерево значений 1С или рассматриваются линейные списки (таблицы).

1 стартмани

22.10.2019    5757    6    mwoleg    7    

Универсальная подсистема ДМ

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

ДМ — дополнительные модули Это не альтернатива или дополнение БСП. Данная подсистема призвана быстро получить множество нужных функций в любой конфигурации. Для использования подсистемы изменения в конфигурацию вносить не надо. Обычные формы поддерживаются частично, т.к. с каждым годом таких конфигураций попадается всё реже. Разработка ведётся с 2009 года, но именно этот релиз был подготовлен на платформе 8.3.16.1063 и применяется на 8.3.15 с включенной совместимостью 8.2

1 стартмани

22.10.2019    4172    4    strange2007    10    

Вывод QR-кода типовыми средствами.

Универсальные печатные формы Сканер штрих-кода Универсальные функции v8 КА1 УТ10 УПП1 Абонемент ($m)

Вывод QR-кода типовыми средствами. На данный момент очень часто нужно вывести в печатную форму QR-код. Показываю как на примере типового кода из УТ11 это сделать. Можно использовать в любых конфигурациях с обычными формами.

1 стартмани

21.10.2019    16284    28    Емельянов Алексей    47    

Полезные функции БСП Промо

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

Список часто востребованных, по моему мнению, функций из состава Библиотеки стандартных подсистем 2.2.

1 стартмани

01.02.2015    63289    25    spec8s    31    

Генерация QR кода для любых конфигураций 1С (обычные и управляемые формы)

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

Для генерации используется компонента типовой конфигурации УТ11, встроенная в общий макет "КомпонентаПечатиQRКода". Ниже приведены процедуры, чтобы сделать обработку самостоятельно (только для УФ).

1 стартмани

11.10.2019    10115    46    dm1try    0    

Универсальное удаление движений регистров накопления по всем непроведенным документам

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

Попалась база КА 2.4 с движениями по регистрам, у которых регистратор был непроведен или помечен на удаление. Написал небольшую обработку по удалению таких записей из регистров.

1 стартмани

27.09.2019    8765    12    John_d    16    

1С REST API клиент. Обмен из 1С с сайтом/магазином WordPress/WooCommerce с помощью REST API

Универсальные обработки WEB Универсальные функции Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 1cv8.cf УУ Абонемент ($m)

Обмен 1С с сайтом на WordPress и магазином Woocommerce. Внешняя обработка сделана как REST API клиент сайта WordPress, позволяет разработчику публиковать/изменять/удалять/просматривать посты/страницы/товары/фотографии (в связке с товаром/страницей) на сайте/магазине WordPress/Woocommerce. Обработки сделаны с использованием обычных форм, демо-формы использования в комплекте.

10 стартмани

29.07.2019    7580    11    osivv    14    

Регулярные выражения без COM объектов и внешних компонент Промо

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

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

1 стартмани

09.02.2015    24356    8    boogie    38    

Экспортные процедуры и функции общих модулей БП 3.0, ЗУП 3.1, УТ 11

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

Таблицы экспортных процедур и функций общих модулей конфигураций БП КОРП 3.0, ЗУП КОРП 3.1, УТ 11 + обработка по формированию такой таблицы из любой конфигурации.

14.06.2019    9242    22    SanchoD    29    

Создание и запуск скрипта для ввода текста на базе AutoHotkey

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

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

1 стартмани

28.01.2019    5717    1    Wezoowy    1    

Подписка на события, преобразование объекта в JSONAPI, отправка в RabbitMQ

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

Обработка содержит функции: - сериализация объекта 1с в JSONAPI - отправка в RabbitMQ по HTTP

1 стартмани

26.02.2018    11290    21    yaxinr    3    

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

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

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

1 стартмани

14.02.2015    103488    98    daMaster    90    

Свертка таблицы значений. С блэкджеком и всем остальным

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

Функция свертки таблицы значений. Умеет в отличие от стандартного метода все, что можно делать на языке запросов.

1 стартмани

22.01.2018    10870    2    dusha0020    10    

Определение MIME-типа файла

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

Небольшая, но полезная функция для определения MIME-типа файла по его расширению. Сэкономит время разработчикам.

1 стартмани

12.01.2018    10615    8    o.nikolaev    4    

Запуск приложений на клиенте из RDP-сессии

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

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

1 стартмани

30.10.2017    11756    6    GusevNA    4    

Универсальная функция получения таблицы дат за период. С любым интервалом (день, неделя, месяц, квартал и т.д.) Промо

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

Небольшая функция, возвращающая таблицу значений со всеми датами за период. Интервал дат можно задать любой: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Полугодие, Год.

1 стартмани

14.06.2014    38264    17    mtv:)    6    

Простые подсистемы: Библиотека подсистем

Инструментарий разработчика Универсальные обработки Универсальные функции v8 Абонемент ($m)

Библиотека простых подсистем и наработок, облегчающих жизнь разработчика и внедренца, предоставляя относительно готовые решения. Логическое развитие линейки публикаций "Простые подсистемы". Базируются на БСП. Вошли часть ранее опубликованных подсистем и новые. Всего 5 штук (будет больше).

1 стартмани

26.10.2017    11223    9    pbabincev    1    

Шаблон внешней обработки регламентного задания с формой настройки параметров выполнения

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

Шаблон внешней обработки призван упростить программисту процесс реализации внешнего регламентного задания. Пригоден к использованию во всех конфигурациях на управляемых формах, в которых присутствует подсистема "Дополнительные отчеты и обработки" из состава библиотеки стандартных подсистем (БСП) версии 2.1 и выше.

1 стартмани

28.05.2017    25317    179    Bassgood    10    

Универсальная процедура по загрузке файла из интернета

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

Передаем в процедуру всего два параметра: откуда взять и куда положить. Остальное она сделает сама

1 стартмани

17.05.2017    16436    12    json    3    

Сравнение строк с выводом различий Промо

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

Обработка созданная с целью представить реализованный мной алгоритм сравнения строк. Реализована на 1С 8.1, однако будет работать и на более поздних версиях.

1 стартмани

15.05.2014    22237    21    bahbah    16    

Правильный вопрос

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

Заметили, что пользователи бездумно кликают по первой попавшейся кнопке, не удосужившись прочитать текст предупреждения или вопроса? Данная функция призвана решить данную проблему!

1 стартмани

15.05.2017    11530    0    SvoyakMartin    15    

Web сервис 1С

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

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

1 стартмани

21.03.2017    30807    94    hiduk    34    

Набор математических функций

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

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

1 стартмани

12.01.2017    14228    4    SvoyakMartin    17    

Включаем звук в 1С. Доступно и всерьез. Промо

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

Как сделать воспроизведение звука в 1С без внешних компонентов? Решаем средствами интернета. Для тонкого, толстого и web-клиента.

1 стартмани

30.12.2013    80967    150    sikuda    37    

Сравнение строк. Наибольшая общая последовательность

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

Заданы две строки Строка1 и Строка2. Требуется найти наибольшую общую подпоследовательность (НОП) этих строк.

1 стартмани

14.11.2016    9871    2    Alex_YAM    4    

Набор процедур для парсера консоли запросов

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

Данный набор функций и процедур необходимо вставить в Консоль запросов для управляемого приложения 1С 8.2 - 8.3 (Такси) http://infostart.ru/public/64522/, и вы получите возможность разбирать сложные запросы на вложенные, вносить необходимые правки и собирать измененные подзапросы в запрос. Данный модуль не содержит консоли!!! Ее придется отдельно скачать по ссылке http://infostart.ru/public/64522/

1 стартмани

09.11.2016    9913    4    blockcode    5    

Организация выбора месяца из списка (универсально + НЕ модально )

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

Пришлось столкнуться с такой проблемой, как выбор месяца из ниспадающего списка (с элементами вида "НазваниеМесяца Год") с возможностью изменения года. Хочу предложить универсальный вариант реализации данного механизма на основе механизма http://infostart.ru/public/167549/ ЗЫ: основные отличия: - вместо "НачалоВыбораИзСписка" работаем с "ОбработкаВыбора" без модальности - Обратное преобразование в дату не только на русском - Универсальность процедур. Одна функция выбирается в нескольких полях.

1 стартмани

09.11.2016    14021    13    igorkosmos    5    

Показать, повернуть и увеличить картинку в 1С Промо

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

Не нашел универсального средства для тонкого и web-клиента для просмотра изображений c увеличением и поворотом. Сделал. В хозяйстве нужная вещь.

1 стартмани

20.12.2013    30658    53    sikuda    19    

Отладка/доработка модуля менеджера "на лету"

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

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

1 стартмани

23.10.2016    29547    20    json    22    

Автоматическое разбиение строки на подстроки по ширине колонки / ячейки или по количеству символов

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

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

1 стартмани

21.10.2016    15646    3    SvoyakMartin    3    

Сверка таблиц при разработке через тестирование

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

Данная статья про инструмент, который я использую уже продолжительное время, и который, по моему мнению, заслуживает внимания. Также опишу несколько примеров его применения.

1 стартмани

09.10.2016    15611    10    json    1