gifts2017

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

Опубликовал Валерий Березуцких (spec8s) в раздел Программирование - Универсальные функции

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

 

1.
// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы
// по ссылке на объект.
ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты)
 
Пример:
РеквизитыКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Контрагент, "Наименование, ИНН, КПП");
 
Скажете, что можно написать Контрагент.Наименование проще, чем обращаться к функции, но не многие знают, что обращение через точку считывает значение всех реквизитов объекта, что не производительно для объектов с реквизитами типа ХранилищеЗначения например.
 
2.
// Проверяет наличие ссылок на объект в базе данных
ОбщегоНазначения.ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь,  ДругиеИсключения = Неопределено)
 
Пример:
Если ОбщегоНазначения.ЕстьСсылкиНаОбъект(Контрагент) Тогда
     Продолжить;
КонецЕсли;
 
Можно использовать в своей обработке, например при удалении данных проверять ссылки, к тому же в отличии от встроенной функции НайтиСсылки, работает параметр ИсключаемыеОбъекты, что не есть плохо.
 
3.
//Позволяет определить, есть ли среди реквизитов объекта реквизит с переданным именем
ОбщегоНазначения.ЕстьРеквизитОбъекта(ИмяРеквизита, МетаданныеОбъекта)
 
Пример:
Для Каждого ДокументОбъект Из МассивДокументов Цикл
     Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Организация", ДокументОбъект.Метаданные()) Тогда
          ДокументОбъект.Организация = Организация;
     КонецЕсли;
КонецЦикла;
 
 
4. 
// Получает файл из Интернета по протоколу http(s), либо ftp и сохраняет его по указанному пути на сервере.
ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина)
 
5.
// Проверяет, является ли текущий или указанный пользователь полноправным.
Пользователи.ЭтоПолноправныйПользователь()
 
Пример:
Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
     ВызватьИсключение НСтр("ru = 'У Вас нет доступа!'");
КонецЕсли;
 
6.
// Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули
ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь)
 
Пример:
НомерНаПечать = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать("УТПД-00023", Истина, Истина);
//НомерНаПечать будет равен строке "23"
 
Полезно для тех кто делает дополнительные печатные формы.
 
7.
// Возвращает курс валюты на дату.
РаботаСКурсамиВалют.ПолучитьКурсВалюты(Валюта, ДатаКурса)
 
Пример:
//Получение курса валюты документа на 30 января 2014 года
Курс = РаботаСКурсамиВалют.ПолучитьКурсВалюты(ВалютаДокумента, Дата(2014, 01, 30));
 
8.
// Подставляет параметры в строку. Максимально возможное число параметров - 9.
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки,
     Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
     Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
     Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено)
 
Очень полезная функция, номер параметра задается знаком процента, пример:
Шаблон = "Недостаточно номенклатуры %1 на складе %2 в количестве %3 шт.";
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Номенклатура, Склад, КоличествоОстаток);
 
Советую более подробно посмотреть все функции модуля СтроковыеФункцииКлиентСервер.

9.
// Открывает Проводник Windows и выделяет указанный файл.
// пример: ""С:\Temp\report.txt"
ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(Знач ПолноеИмяФайла)
 10.
// Запускает выполнение процедуры в фоновом задании
ДлительныеОперации.ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, 
 Знач Параметры, Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь)
Будет полезно для операций длительных по времени, запустили и дали возможность пользователю работать дальше.
 
Для отображения состояния на клиенте существует метод:
ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(Знач ВладелецФормы, Знач ИдентификаторЗадания)
 
Так же выложил обработку с перечнем функций в модуле объекта для изучения по клавише F12.
 
 
 

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

Наименование Файл Версия Размер Кол. Скачив.
Список функции БСП (в модуле объекта обработки)
.epf 5,82Kb
01.02.15
34
.epf 5,82Kb 34 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Игорь Юсупов (OtTech) 02.02.15 09:34
Вместо этого
ФизЛицо = Пользователи.ТекущийПользователь().ФизическоеЛицо;

Пользователь = Пользователи.ТекущийПользователь();

не проще будет?

Пользователь = ПараметрыСеанса.ТекущийПользователь;
ФизическоеЛицо = ПараметрыСеанса.ТекущийПользователь.ФизическоеЛицо;

Во всех типовых работает без проблем.
2. Юлия Зарецкая (Liily) 02.02.15 10:01
этот код вообще не рабочий, если внимательно посмотреть

Всё работает.. СП пишет:

Глобальный контекст (Global context)
ПользователиИнформационнойБазы (InfoBaseUsers)
Использование:
Только чтение.
Описание:
Тип: МенеджерПользователейИнформационнойБазы.
Используется для управления списком пользователей информационной базы.
Доступность:
Сервер, толстый клиент, внешнее соединение.

Функции полезные. Имеет смысл вообще поразбираться в БСП и использовать уже написанные функции, чтобы не изобретать велосипед.
3. Артем Целовальников (slazzy) 02.02.15 10:07
(1) OtTech,
не проще будет?

Проще, но хуже. Всё дело в одном слове - стандартизация. В конфигурациях с использованием БСП рекомендуется использовать процедуры из модуля ПользователиКлиентСервер и никак иначе.
4. Призрак (davdykin) 02.02.15 10:10
В свете вышесказанного, а как можно с ней поразбираться? Т.е. есть какая-либо справочная информация по ней?
5. Артем Целовальников (slazzy) 02.02.15 10:16
(4) davdykin, вообще во всех модулях из БСП есть программный интерфейс(важные функции для работы) и они детально описаны, заходите - читаете :) в основном самые частые функции в модулях ОбщегоНазначения... таких модулей как минимум несколько. Ну и на ИТС есть документация по БСП
6. ediks (ediks) 02.02.15 10:30
(2) Вы хотите сказать, что у функция ПользователиИнформационнойБазы.ТекущийПользователь() возвращает элемент справочника Пользователи?
Мне кажется, что Вы ошибаетесь, и код действительно нерабочий.
МенеджерПользователейИнформационнойБазы.ТекущийПользователь (InfoBaseUsersManager.CurrentUser)
МенеджерПользователейИнформационнойБазы (InfoBaseUsersManager)
ТекущийПользователь (CurrentUser)
Синтаксис:

ТекущийПользователь()
Возвращаемое значение:

Тип: ПользовательИнформационнойБазы.
Описание пользователя, аутентифицированного в текущем сеансе. Если список пользователей информационной базы пустой, то в качестве текущего пользователя будет возвращен пользователь с пустым именем и идентификатором объекта, полученного методом НайтиПоИмени, если в параметре указано пустое имя.
7. Юлия Зарецкая (Liily) 02.02.15 10:48
(6)
Мне кажется, что Вы ошибаетесь, и код действительно нерабочий.

Точно.. Посмотрела повнимательней. Именно так не работает. Извините.
8. Валерий Березуцких (spec8s) 02.02.15 14:11
(7) Liily, нерабочий, тут нужно внимательнее смотреть на тип получаемого значения.
9. Алексей 1 (AlX0id) 02.02.15 22:48
(1) OtTech,
Сегодня это параметр сеанса ТекущийПользователь, завтра - предопределенный элемент справочника, послезавтра - запись регистра сведений (все приведенные данные являются выдумкой автора и совпадения случайны) ) На текущий момент, может быть и проще, в будущем - хуже.
10. Марина Чирина (chmv) 03.02.15 09:59
Библиотека нужна, но лучше бы её писала сама фирма 1с
11. rasswet (rasswet) 04.02.15 10:59
спасибо за хорошее оформление и наличие примеров.
kuzyara; chmv; spec8s; +3 Ответить
12. Анатолий Авдеев (~ADm!t_@vd~) 04.02.15 14:11
Плюсую. Для себя по мере надобности тоже выдергиваю обращения к БСП и общим модулям, в виде шаблонов, чтобы потом не искать...
13. Роман Анисимов (RomanBor) 05.02.15 07:27
(10) chmv,
Библиотека нужна, но лучше бы её писала сама фирма 1с

вроде бы и пишет сама 1С называется Библиотека Стандартный Подсистем, или я чего то не знаю
14. Марина Чирина (chmv) 05.02.15 12:54
Я имею ввиду стандартные конфигурации + встроенные функции системы
15. Константин Юрин (kostyaomsk) 06.03.15 09:26
Также программисту-разработчику полезно знать и заглядывать при доработке типовых конфигураций в первую очередь в общие модули (ОбщегоНазначения, ОбщегоНазначенияКлиентСервер, ОбработкаТабличныхЧастей, где прячутся очень нужные, универсальные функции и обычно без привязки к структуре метаданных. Если за 2 минуты ничего не приглянулось, приходится писать самому :( Вот только в модуле ОбщегоНазначения на примере Розницы 1.0 столько же полезного:
- Функция ЭтоСсылка(Тип) Экспорт
// Проверить, что значение имеет ссылочный тип данных.
//
// Параметры:
// Значение - ссылка на объект, - элемент справочника, документ, ...
//
// Возвращаемое значение:
// Булево - Истина, если тип значения ссылочный.
//
2. Функция ЗначениеСсылочногоТипа(Значение) Экспорт
3. // Проверяет физическое наличие записи в информационной базе данных о переданном значении ссылки
//
// Параметры:
// ЛюбаяСсылка - значение любой ссылки информационной базы данных
//
// Возвращаемое значение:
// Истина - ссылка физически существует;
// Ложь - ссылка физически не существует
//
Функция СсылкаСуществует(ЛюбаяСсылка) Экспорт
Функция ЕстьНеЦифры(Знач СтрокаПроверки) Экспорт
Функция ПолучитьВладельцаХарактеристики(Номенклатура) Экспорт
Функция ПолучитьЗначениеПеременной(ИмяПараметра, Кэш = Неопределено, КэшИзменен = Ложь) Экспорт - Вот эта фунция при использвании в обработках проведения документов и перелопачиванию справочников позволяет в разы убыстрить работу, т.к. переменные читаются из базы только один раз и остаются в ОЗУ.
Процедура ЗаписатьНаборЗаписейНаСервере(ИмяРегистра, Регистратор, ТаблицаДвижений = Неопределено) Экспорт
Продолжать можно бесконечно. Самое веселое, что не найдешь функцию, напишешь, а потом вот она под носом была :)
Прикрепленные файлы:
deevil; Shmell; kentavr27; diliak72; spec8s; +5 Ответить
16. Андрей Волин (kser87) 13.03.15 14:34
(1) OtTech,

ФизЛицо = Пользователи.ТекущийПользователь().ФизическоеЛицо;

Пользователь = Пользователи.ТекущийПользователь();

не проще будет?

Пользователь = ПараметрыСеанса.ТекущийПользователь;
ФизическоеЛицо = ПараметрыСеанса.ТекущийПользователь.ФизическоеЛицо;

Не проверял, но скорее всего БСП-шная функция засунута в повторное использование. Поэтому типовую использовать правильнее
17. v p (vitaliy1911) 16.06.15 20:17
меня всегда дико радовала функция Просклонять в общем модуле ОбщегоНазначения. как она работает - загадка, но для различных отчетов вещь незаменимая
Vortigaunt; +1 Ответить
18. Никита Грызлов (nixel) 13.01.16 13:55
19. Андрей Акулов (DrAku1a) 06.09.16 03:08
1. - Костыль, фирменный - от 1С.
3. - Есть реквизит в метаданных, серьёзно? За этим - в отдельный модуль ходить?
МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита)<>неопределено

6. Оставляем только цифры от номера (без лидирующих нулей):
Цифры="123456789";
НомерОбъекта = СтрЗаменить(СтрЗаменить(СокрЛП(НомерОбъекта), " ", ""), Символы.НПП, "");
Пока НомерОбъекта<>"" и Найти(Цифры, Лев(НомерОбъекта, 1)=0 Цикл
НомерОбъекта = Сред(НомерОбъекта, 2);
КонецЦикла;
...Показать Скрыть
Это ещё - не самый оптимальный вариант.

PS.В целом же, модуль содержит много полезных и нужных функций.
20. Сан Саныч (herfis) 06.09.16 09:41
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку

С 8.3.6 реализовано функцией платформы "СтрШаблон"
Гораздо удобнее пользовать именно ее, т.к. вызов гораздо короче и код читабельнее выходит.
А БСПшную скорее всего в очередной версии библиотеки задиприкейтят.
21. Капитан Немо (capitan) 06.09.16 10:08
Идея хорошая, сам год назад пытался сделать вики в интернете по БСП, но не взлетело.
Тут надо всем сообществом браться и делать что-то типа синтаксис помощника хотьбы и chm.
Подозреваю у самих 1С он есть - а так надо из текстов модулей парсить.
К тому же периодически 1С перетасовывает карты. И функции которые прекрасно работали канут в лету.

Жизнь — странная штука. Когда у тебя на руках все козыри, она делает ход конем.
22. Сан Саныч (herfis) 06.09.16 12:56
Идея хорошая, сам год назад пытался сделать вики в интернете по БСП, но не взлетело. 

Понятно, почему не взлетело. Ведь идея так себе - скорее для новеньких/ленивых.
Опытный разработчик обычно всегда знакомится с докой и API новых для него подсистем, чтобы не изобретать велосипедов и писать хороший код.
Если новую конфу в руки берешь - первым делом общие модуля листаешь.
23. Капитан Немо (capitan) 08.09.16 12:52
(22) herfis,
Если новую конфу в руки берешь - первым делом общие модуля листаешь.

А не упаришься общие модуля читать ?
Сами 1С частенько не знают что у них в соседних модулях есть.
Хочется примера? набери в глобальном поиске Новый ФТПСоединение
В том то и дело, что у всех мало мальски приличных систем апи документирован.
Намедни на aliexpess читал апи. Оченнно даже приличное апи.
В гуглопереводе с китайского )
blackjack666; +1 Ответить
24. андрей николаев (c300pm) 08.09.16 13:15
25. rus tam (rusikgluki) 12.09.16 00:50
большое спасибо за ооочень хорошую статью..
26. binx (binx) 23.09.16 19:08
Жаль только что у 1С нет публичного справочника функций стандартных подсистем
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа