Введение
Всем привет! Данный материал посвящен дальнейшему описанию возможностей типовой поставляемой конфигурации для разработчиков "Библиотека стандартных подсистем" (БСП). В настоящей статье, я опишу часть "основ" библиотеки - базовый функционал общего назначения, который уже можно использовать (т.е мы ничего не придумываем сами, используем готовые решения и экономим собственное и чужое время) в любых конфигурациях, основанных на БСП.
В данной статье, я буду описывать и приводить примеры функций и процедур модуля общего назначения БСП, которые, на мой взгляд, наиболее полезны для разработчика и я, достаточно часто, применяю их в своей практике программирования.
В качестве платформы я использую 1С:Предприятие 8.3.17.1549 (64 бит) и последнюю конфигурацию Розница 2.3.5.32. В указанную конфигурацию встроена БСП 3.1.2.457 версии (отмечу, что не самая последняя, на момент написания статьи - последняя 3.1.3).
Итак, давайте перейдем к описанию:
Полезные функции и процедуры общего модуля БСП
Работа с данными в базе
Функция 1.1
ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты, ВыбратьРазрешенные = Ложь, КодЯзыка = Неопределено) Экспорт
Данная серверная функция позволяет получить выбранные реквизиты (Знач Реквизиты) по ссылке - Ссылка. Пример применения данной функции вот такой:
&НаСервере
Функция ОбщегоНазначенияОбр(ВыбСсылка)
ВыбранныеРеквизитыОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВыбСсылка,"Ссылка, КассаККМ, Магазин, Организация, СуммаДокумента, СуммаВозвратов",Ложь);
Возврат ВыбранныеРеквизитыОбъекта; // Возврат структуры "Ключ - значение"
КонецФункции
Очень удобно, когда ты можешь получить сразу необходимую структуру по любой ссылке в допустимой степени без использования запросов и дополнительного кода.
Функция 1.2
ЗначенияРеквизитовОбъектов(Ссылки, Знач Реквизиты, ВыбратьРазрешенные = Ложь) Экспорт
Более универсальная функция, повторяющая смысл предыдущей, но в качестве ссылок уже можно передавать массив. Пример такой:
&НаСервере
Функция ОбщегоНазначенияОбр()
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000001",Дата('20160101')));
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000002",Дата('20160101')));
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000003",Дата('20160101')));
ВыбранныеРеквизитыОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивСсылок,"Ссылка, КассаККМ, Магазин, СуммаДокумента",Ложь);
Возврат ВыбранныеРеквизитыОбъекта; // Возврат соответствия "Ключ - значение"
КонецФункции
Для "базовых вещей" данные функции очень даже применимы. В БСП есть рекомендация использовать именно эти функции, а не обращаться к реквизитам через точку.
Функция 1.3
ПроверитьПроведенностьДокументов(Знач Документы) Экспорт
Данная функция возвращает массив непроведенных документов. Если документы проведены - массив пустой. Пример использования:
&НаСервере
Функция ОбщегоНазначенияОбр()
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000001",Дата('20160101')));
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000002",Дата('20160101')));
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000003",Дата('20160101')));
НепроведенныеДокументы = ОбщегоНазначения.ПроверитьПроведенностьДокументов(МассивСсылок);
Возврат НепроведенныеДокументы; // Возврат массив непроведенных документов
КонецФункции
Одна из удобных базовых функций для работы, на мой взгляд. В данном примере мне будет возвращен массив с 2 элементами, т.к. 2 документа из 3-х у меня не проведены.
ОбщегоНазначенияОбр(ВыбСсылка).Количество() // 2
Функция 1.4
ПровестиДокументы(Документы) Экспорт
Еще одна интересная функция, которая проводит документы, а так же возвращает массив документов с описанием ошибок, если не удалость провести:
&НаСервере
Функция ОбщегоНазначенияОбр()
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000001",Дата('20160101')));
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000002",Дата('20160101')));
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000003",Дата('20160101')));
НепроведенныеДокументы = ОбщегоНазначения.ПровестиДокументы(МассивСсылок);
Возврат НепроведенныеДокументы; // Возврат массив непроведенных документов описанием ошибки проведения
КонецФункции
Здесь, функция вернула мне массив такого содержания, где видно какой документ не удалось провести и почему:
Рис.1. Элементы массива содержат структуры с описанием ошибки и ссылки.
Функция 1.5
ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь) Экспорт
Данная функция осуществляет простую проверку - есть ли ссылки на объект или нет. Возвращает "истину" или "ложь".
&НаСервере
Функция ОбщегоНазначенияОбр(ВыбСсылка)
Результат = ОбщегоНазначения.ЕстьСсылкиНаОбъект(ВыбСсылка);
Возврат Результат; // Вернул "Истина" - тк на объект где-то есть ссылка
КонецФункции
Функция 1.6
МестаИспользования(Знач НаборСсылок, Знач АдресРезультата = "") Экспорт
Данная функция возвращает таблицу значений с указанием, где используется передаваемый объект:
&НаСервере
Функция ОбщегоНазначенияОбр()
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000001",Дата('20160101')));
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000002",Дата('20160101')));
МассивСсылок.Добавить(Документы.ОтчетОРозничныхПродажах.НайтиПоНомеру("ТДРТ-000003",Дата('20160101')));
Результат = ОбщегоНазначения.МестаИспользования(МассивСсылок);
Возврат Результат; // Таблица значений, с "ответом" где используется объект или объекты
КонецФункции
Например, документ "Отчет о розничных продажах" имеет ссылку в документе "Выемка денежных средств из кассы ККМ", что показывает нам результат этот функции:
Рис.2. Строка таблицы значений с результатом использования Ссылки. Ссылка - Данные
Работа с окружением базы
Функция 2.1
ОписанияПодсистем() Экспорт
Данная функция возвращает массив структур, содержащий информацию о системах и стандартных библиотеках, включенных в конфигурацию (то же самое, что содержимое файла Версии библиотек.txt при поставки конфигурации. Например:
&НаСервере
Функция ОбщегоНазначенияОбр()
Результат = ОбщегоНазначения.ОписанияПодсистем();
Возврат Результат; // Массив структур с описанием подсистем
КонецФункции
Результат такой:
Рис.3. В конфигурацию включена подсистема маркировки 10.1.18.
Функция 2.2
ОбщиеПараметрыБазовойФункциональности() Экспорт
Данная функция возвращает структуру с настройками базовой функциональности конфигурации. Интересным содержанием структуры является такие как МинимальнаяВерсияПлатформы и РекомендуемыйОбъемОперативнойПамяти.
Обращение к функции вот так:
&НаСервере
Функция ОбщегоНазначенияОбр()
Результат = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности();
Возврат Результат; // Структура базовой функциональности
КонецФункции
Функция 2.3
ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт
Определяем является ли информационная база файловой (Истина) или серверной (Ложь).
&НаСервере
Функция ОбщегоНазначенияОбр()
Результат = ОбщегоНазначения.ИнформационнаяБазаФайловая();
Возврат Результат; // Вернул "Истина" или "Ложь"
КонецФункции
Функция 2.4
ОперативнаяПамятьДоступнаяКлиентскомуПриложению() Экспорт
Данная функция возвращает объем оперативной памяти, которая доступна приложению (в гигабайтах). Вот у меня в системе доступно 3.9 гб:
&НаСервере
Функция ОбщегоНазначенияОбр(ВыбСсылка)
Результат = ОбщегоНазначения.ОперативнаяПамятьДоступнаяКлиентскомуПриложению();
Возврат Результат; // Вернул число 3.9 гб
КонецФункции
Функция 2.5
РедакцияКонфигурации() Экспорт
Данная функция возвращает номер (строка) редакции конфигурации:
&НаСервере
Функция ОбщегоНазначенияОбр(ВыбСсылка)
Результат = ОбщегоНазначения.РедакцияКонфигурации();
Возврат Результат; // 2.3
КонецФункции
Функция 2.6
ЭтоWindowsКлиент() Экспорт
Данная функция возвращает Истина, если пользователь работает по windows на клиенте. Так же есть группа подобных функций, позволяющих определять где работает пользователь: ЭтоWindowsСервер(), ЭтоLinuxКлиент(), ЭтоLinuxСервер(), ЭтоMacOSКлиент(), ЭтоВебКлиент(), ЭтоМобильныйКлиент(), КлиентПодключенЧерезВебСервер(). Все функции работают через привилегированный режим.
Работа с датами
Функция 3.1
ПредставлениеЛокальнойДатыСоСмещением(ЛокальнаяДата) Экспорт
Данная функция возвращает дату со смещением по часовому поясу, в описании по формату "YYYY-MM-DDThh:mm:ssTZD" :
&НаСервере
Функция ОбщегоНазначенияОбр()
Результат = ОбщегоНазначения.ПредставлениеЛокальнойДатыСоСмещением(ТекущаяДата());
Возврат Результат; // 2020-08-30Т15:09+08:00
КонецФункции
Функция 3.2
ИнтервалВремениСтрокой(ВремяНачала, ВремяОкончания = Неопределено) Экспорт
Полезная функция, возвращающая интервал времени строкой, в пример - вернет "1 день":
&НаСервере
Функция ОбщегоНазначенияОбр()
Результат = ОбщегоНазначения.ИнтервалВремениСтрокой(ТекущаяДата()-24*60*60, ТекущаяДата());
Возврат Результат; // 1 день
КонецФункции
Функция 3.3
ТекущаяДатаПользователя(ИмяПользователя = Неопределено) Экспорт
Данная функция вернет текущую дату пользователя по его имени:
&НаСервере
Функция ОбщегоНазначенияОбр()
Результат = ОбщегоНазначения.ТекущаяДатаПользователя("Admin");
Возврат Результат; // 30.08.2020 0:00:00
КонецФункции
Заключение
Спасибо за прочтенный материал. Знаю, что в той или иной степени, на ресурсе уже были подобные статьи с описанием подобного функционала. Со своей стороны хочу отметить, что данная статья - это своего рода "моя индивидуальная выжимка собственного опыта", накопленного при работе с типовыми конфигурациями на основе БСП. Предполагаю, что данная статья-шпаргалка будет полезна как и мне (чтобы не забыть возможности), так и вам - "если что-то не знали" - пожалуйста, тут есть что узнать и запомнить.
Если вам интересен мой практический подход и информация, которую вы сможете реально использовать, если у вас есть желание, чтобы данный комплекс статей наполнялся практическими материалы для программистов - я не откажусь от поддержки как данной статьи, так и всего комплекса статей в целом.
Предыдущие материалы
Так же, я прошу посмотреть мои предыдущие статьи, посвященные базовым возможностям типовых конфигураций:
Возможности работы со строками при помощи БСП, которые должен знать каждый программист