Библиотека продвинутых функций Фиксина для повторного использования кода.

21.03.12

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

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

Скачать исходный код

Наименование Файл Версия Размер
Конфигурация библиотеки функций
.cf 117,38Kb
673
.cf 117,38Kb 673 Скачать

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

В библиотеке собраны функции разных авторов, большинство из них написал Осипов Сергей (Гений 1С).

Начало библиотеки было положено 22 сентября 2006 года.

Использование библиотеки абсолютно свободное.

В настоящее время библиотека реализована в виде набора общих модулей и некоторых других прикладных объектов 1С, оформленных в подсистему «Библиотека функций».

Принципы реализации

Все модули имеют префикс «бф».

Глобальные модули имеют префикс «бфГлоб».

Ведется история изменений и доработок библиотеки, хранится в модуле «бфИсторияБиблиотеки».

Шаблон модуля объявлен в модуле «бфШаблон».

В библиотеке не используются процедуры, всегда используются функции.

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

Все локальные переменные, используемые функциями, объявляются.

Описание функций

Каждая функция имеет описание. Описание записывается в первой секции комментариев внутри функции.

В комментариях указываются:

·        Автор – автор разработки

·        Назначение – назначение разработки

·        Описание – описание разработки

·        Параметры – описание входящих и исходящих параметров

·        Результат – описание результата функций

Состав

DOM

Объектная модель документа в браузере.

Даты и время

Работа с датой и временем.

Диалоги

Работа с диалогами. Предупреждения, сообщения.

Запросы

Функции, упрощающие работу с запросами.

ИНН

Функции для работы с ИНН.

Коллекции

Функции для работы с коллекциями значений.

Кэш

Функции для серверного и клиентского кэширования значений.

Лингво

Функции для работы в языковых приложениях.

ИНН

Функции для работы с ИНН.

Макеты

Функции для работы с табличными макетами 1С (MXL).

Математика

Математические функции. Геометрия. Случайные числа.

Обмены

Функции для работы с планами обмена и обмена данными.

Объекты

Функции для работы с прикладными объектами 1С.

Отчеты

Функции для работы с отчетами. Получение некоторых отчетов по коллекциям, автоматические построители отчетов по коллекциям.

Построитель

Функции для работы с построителем

Сериализация

Функции для сериализации (превращения в строку) значений.

Система

Функции для работы с операционной системой.

СКД

Функции для работы с системой компоновки данных (СКД).

Строки

Функции для работы со строками.

Типы

Функции для работы с типами 1С.

Файлы

Функции для работы с файлами.

Формы

Функции для работы с формами.

Хранилище

Функции для работы с хранилищем. Обмен между файлами и хранилищем.

Язык

Некоторые усовершенствования языка программирования 1С.

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2848    1    John_d    9    

56

GUID в 1С 8.3 - как с ними быть

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

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4967    atdonya    22    

51

Переоткрытие внешних обработок

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

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

30.11.2023    4085    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    9309    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2191    24    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16322    141    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7342    quazare    8    

110
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
99. dandrontiy 10.04.12 14:16 Сейчас в теме
(98)
Когда получаешь данные запросом через ком соединение, то при обращении к ресурсам, которые являются документами, справочниками, перечислениями - получим значение COMobject, и получить от него через точку наименование, код, ну или реквизит - не получится. попробуй сам. поэтому для получения этих параметров и надо сделать функции на стороне той базы, куда по OLE подключаемся, туда передаем полученный COM объект и там уже получаем то что надо и возвращаем.
Для получения цифры, строки и даты - такое не надо.

Кстати еще странный глюк - когда получаем цифру по внешнему соединению, бывает такая ситуация:
имеем в базе реквизит например 10.2, ну десять знаков в целой части, два после запятой. и допустим там записано значение 99.00, так вот ИНОГДА, и непонятно когда и от чего можно получить не 99.00, а 98.9999999999
Вообще непонятно от чего такое происходит. Может кто сталкивался и знает от чего такое шаманство происходит ?
100. fixin 4253 10.04.12 14:36 Сейчас в теме
(99) почему не получится? Получится. ;-) В отладчике можно посмотреть, там эти поля по латински называются.
Хотя кошернее действительно сделать функции-обертки, согласен.
101. dandrontiy 10.04.12 15:53 Сейчас в теме
(100) А как узнать какие латинские названия использовать ?
Не сочти за спам, действительно интересно. Если можно программно узнать как называются по латински эти поля, то эти обертки нафиг не нужны. Но я вот узнать как названия полей - не знаю, и как потом к ним обращаться то? comobject[ing-name] прокатит ?
102. fixin 4253 10.04.12 16:57 Сейчас в теме
(101) В отладчике разверни ком-объект и посмотри.
Код вроде CODE назначается. Или _CODE.
Обращаться так: Объект._Code наверное прокатит и Объект["_Code"]
103. dandrontiy 10.04.12 17:10 Сейчас в теме
(102) В отладчике здорово конечно, но как я программно узнаю, что реквизит контрагента ИНН называется на самом деле Объект["_something_shit"]
104. fixin 4253 10.04.12 18:17 Сейчас в теме
(103) Просто Объект.ИНН в ОЛЕ Можно.
105. dandrontiy 16.04.12 09:38 Сейчас в теме
Вот иногда хочется лог выполняемых операций посмотреть.
Конечно есть возможность делать просто Сообщить("бла бла бла"), но это не очень помогает когда еще например отладчиком пользуешься попутно. в отладчике то не видно, что ты там насообщал...
поэтому я использую такой прием - делаю таблицу значений и в неё всё что надо запихиваю - и вывести всегда можно и в форму и в отладчике тоже получить доступ к тому что там насообщал...

для удобства использую функцию, которая всё что надо помещает в табличку.
итак:

Перем Лог;
Перем ЛогНомерСтрок;
Перем ЛогВсегоСтрок;


Процедура Лог(Текст,Колонка = 0)
Если Колонка = 0 Тогда
Колонка = "Сообщение";
КонецЕсли;
Попытка
Номер = Число(Колонка);
Колонка="n"+Номер+"";
Исключение
КонецПопытки;
Колонка = СтрЗаменить(Колонка," ","");

Кол = Лог.Колонки.Найти(Колонка);
Если Кол = Неопределено Тогда
Лог.Колонки.Добавить(Колонка);
Кол = Лог.Колонки.Найти(Колонка);
ЛогНомерСтрок.Вставить(Колонка,0);
КонецЕсли;
Строка = ЛогНомерСтрок.Получить(Колонка);
Если Строка+1 > ЛогВсегоСтрок Тогда
Лог.Добавить();
ЛогВсегоСтрок = ЛогВсегоСтрок+1;
КонецЕсли;
Лог[Строка][Колонка] = Текст;
ЛогНомерСтрок.Вставить(Колонка,ЛогНомерСтрок.Получить(Колонка)+1);
КонецПроцедуры

При инициализации надо еще задать начальные значения....
Лог = Новый ТаблицаЗначений;
ЛогНомерСтрок = Новый Соответствие;
ЛогВсегоСтрок = 0;



Записываем в лог просто вызовом Лог("бла бла бла"); или Лог("бла бла бла","Ахтунг"); или Лог("бла бла бла",100);
Если второй параметр задан - то сообщение будет в отдельной колонке.
106. dandrontiy 27.04.12 15:23 Сейчас в теме
Поиск по полному коду справочника.

Как ни удивительно штатного механизма поиска по полному коду справочника нет.
А бывает что нужно. Можно сделать так:

Функция НайтиСправа(Знач Стр, Знач Разделитель);
	Предыдущий = 0;
	ПозРазделителя = Найти(Стр, Разделитель);
	Пока ПозРазделителя > 0 Цикл
		Предыдущий = ПозРазделителя+Предыдущий;
		Стр = Сред(Стр,ПозРазделителя+1);
		ПозРазделителя = Найти(Стр, Разделитель);
	КонецЦикла;
	Возврат Предыдущий;
КонецФункции

Функция ОтделитьРазделителем(Стр, Знач Разделитель)
	ПраваяЧасть = ""; 
	ПозРазделителя = НайтиСправа(Стр, Разделитель); 
	ДлинаРазделителя = СтрДлина(Разделитель); 
	Если ПозРазделителя > 0 Тогда 
		ПраваяЧасть = Сред(Стр, ПозРазделителя + 1); 
		Стр = СокрЛП(Лев(Стр, ПозРазделителя - 1));
	КонецЕсли; 
	Возврат(ПраваяЧасть); 
КонецФункции

Функция ДобавитьУсловие(Номер,Код,Запрос,СтрЗапрос)
	СС="";
	Для ТТ=1 По Номер Цикл
		СС = ""+СС+".Родитель";
	КонецЦикла;
	Если Номер=0 Тогда
		СтрЗапрос = СтрЗапрос+"
		|	Справочник.Код  = &Код0";
		Запрос.УстановитьПараметр("Код0",Код);
	Иначе
	    СтрЗапрос = СтрЗапрос+"
		|	И Справочник"+СС+".Код = &Код"+Номер;
		Запрос.УстановитьПараметр("Код"+Номер,Код);
	КонецЕсли;
	Номер = Номер + 1;
КонецФункции

Функция НайтиСправочник(СправочникТип,СправочникПолныйКод)
	Если Метаданные.Справочники.Найти(СправочникТип) = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	Если СправочникПолныйКод = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	Т = СправочникПолныйКод;
	СтрЗапрос="";
	Номер=0;
	Запрос = Новый Запрос;
	Код = ОтделитьРазделителем(Т, "/");
	Пока НЕ ПустаяСтрока(Код) Цикл
		ДобавитьУсловие(Номер,Код,Запрос,СтрЗапрос);
		Код = ОтделитьРазделителем(Т, "/");
	КонецЦикла;
	ДобавитьУсловие(Номер,Т,Запрос,СтрЗапрос);
	Запрос.Текст = "ВЫБРАТЬ
	               |	Справочник.Ссылка
	               |ИЗ
	               |	Справочник."+СправочникТип+" КАК Справочник
	               |ГДЕ
	               |	"+СтрЗапрос;
	ТЗСправочники = Запрос.Выполнить().Выгрузить();
	Если ТЗСправочники.Количество() = 0 Тогда
		Сообщить("Не нашли элемент Справочника"+СправочникТип+"  Полный код: "+СправочникПолныйКод);
		Возврат Неопределено;
	Иначе
		Сообщить("Нашли "+СправочникТип+" "+ТЗСправочники[0].Ссылка);
		Возврат ТЗСправочники[0].Ссылка;
	КонецЕсли;
КонецФункции
Показать
107. fixin 4253 03.05.12 11:04 Сейчас в теме
(106) возможно, но не рекомендую использовать Сообщить внутри функций библиотеки.
108. luns 28.05.12 16:15 Сейчас в теме
(106), (107) ехали медведи на велосипеде:

СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоКоду (FindByCode)
Синтаксис:
НайтиПоКоду(<Код>, <Поиск по полному коду>, <Родитель>, <Владелец>)
Параметры:
<Код> (обязательный)
Тип: Число, Строка. Искомый код.
Строка или число в зависимости от настроек справочника в конфигураторе.
<Поиск по полному коду> (необязательный)
Тип: Булево. Определяет режим поиска по полному коду. Истина - искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом "/".
Значение по умолчанию: Ложь
109. fixin 4253 28.05.12 17:17 Сейчас в теме
111. Altair777 644 12.07.12 14:17 Сейчас в теме
(109) Сергей, а для какой платформы эта конфигурация?
В описании - Конфигурация для 1С: Предприятие 8.1; 1С: Предприятие 8.2
При попытке загрузить твою конфу в чистую базу выдается предупреждение "Структура конфигурации несовместима с текущей версией программы".

Платформа 8.2.15.301
113. fixin 4253 12.07.12 14:50 Сейчас в теме
(111) для 81. чтобы открыть в 82, нужно создать базу в 81 и конвернтнуть в 82. Файл конфигурации в 82 октрывается без проблем из 81
114. Altair777 644 12.07.12 15:04 Сейчас в теме
(113) это я уже сделал. Но! У меня не установлена 8.1, пришлось коллегу просить.
А ты не мог бы выложить отдельную конфу для 8.2? Ведь не у всех установлена 8.1.
115. fixin 4253 12.07.12 15:22 Сейчас в теме
(114) нет, это усложнит процесс обновления...
а что устанавливать 1с, просто нужно иметь каталог bin от 1с81. 1с8 - программа портабельная.
116. Altair777 644 12.07.12 16:27 Сейчас в теме
(115) как часто ты обновляешь эту публикацию? :)
Ты можешь держать конфигурацию разработки в 8.1, а перед выкладыванием на сайт отдельно конвертировать в 8.2 и выкладывать обе.
Согласись, что этим ты облегчишь жизнь многим.
117. fixin 4253 12.07.12 17:18 Сейчас в теме
(116) я имею право не облегчать жизнь многим? когда соскочу с 81, тогда буду выгладывать только в 82.
118. Altair777 644 12.07.12 17:33 Сейчас в теме
(117) так ты до сих пор на 8.1? Уже 8.3 появилась.
Отсталый ты человек..... :)
110. andrei.k 10.06.12 14:52 Сейчас в теме
Спасибо за статью, есть пару дельных вещей. Хочется узнать как это все будет работать в режиме управляемых форм.
112. Altair777 644 12.07.12 14:31 Сейчас в теме
Функция ЭтоБуква(С) Экспорт
//Назначение: Проверяет, является ли символ буквой
//ДатаСоздания: 20080101
//Автор: Fixin
//Тестирована: Да
	Возврат ЭтоРусскаяБуква(С) ИЛИ ЭтоЛатинскаяБуква(С);
КонецФункции

Функция ЭтоРусскаяБуква(С) Экспорт
//Назначение: Проверяет, является ли символ русской буквой
//ДатаСоздания: 20080101
//Автор: Fixin
//Тестирована: 
	Возврат Найти("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ", ВРег(С))<>0;
КонецФункции

Функция ЭтоЛатинскаяБуква(С) Экспорт
//Назначение: Проверяет, является ли символ латинской буквой
//ДатаСоздания: 20080101
//Автор: Fixin
//Тестирована: 
	Возврат Найти("ABCDEFGHIJKLMNOPQRSTUVWXYZ", ВРег(С))<>0;
КонецФункции
Показать


У меня это так:

Функция ЭтоБуква(С) Экспорт
//Назначение: Проверяет, является ли символ буквой
//Автор: Altair
//Тестирована: Да
	Возврат Нрег(С) <> Врег(С);
КонецФункции
119. SeiOkami 3432 04.01.13 17:31 Сейчас в теме
Мдас... помотрел я наконец эту коллекцию... Я, далеко не "продвинутый" ОдинЭсником, раз не могу понять смысл функций, таких как:

Функция ДобавитьМесяцы(Дата, КоличествоМесяцев) Экспорт
Возврат ДобавитьМесяц(Дата, КоличествоМесяцев);
КонецФункции

Функция ЕстьПравоАдминистрирования() Экспорт
Возврат ПравоДоступа("Администрирование", Метаданные);
КонецФункции

Функция МассивИзЗначения(Зн) Экспорт
Перем С;
С=Новый Массив();
С.Добавить(Зн);
Возврат С;
КонецФункции

Ну и тем более раздел ГлобОтладка... Что-то не встречалось таких случаев отладки...


А так, очень хороший наборик, спасибо =)
120. undo 19.04.13 20:07 Сейчас в теме
Зачетная библиотека, и комментарии к ней то же стоят много, много лазил по Мисте многое прочитал оттуда, но эта статья не попадалась, и стала своего рода откровением. С проблемами отладки сталкивался и не однократно, но никогда не приходили в голову такие простые вещи. После прочтения я понял, что по результатам учебного года меня оставят на второй год :)
Оставьте свое сообщение