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

22.03.22

Разработка - БСП (Библиотека стандартных подсистем)

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

 

Введение

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

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

В качестве платформы я использую 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
 
КонецФункции

 

Заключение

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

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

 

Предыдущие материалы

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

Типовые методы конфигурации "Зарплата и управление персоналом", которые пригодятся каждому ЗУП программисту и не только

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Возможности работы со строками при помощи БСП, которые должен знать каждый программист

 

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

См. также

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1088    PROSTO-1C    0    

12

БСП (Библиотека стандартных подсистем) Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    978    PROSTO-1C    4    

10

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

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

04.10.2024    1830    MadRave    11    

24

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

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

10.09.2024    1819    MadRave    1    

17

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

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1254    n_mezentsev    10    

8

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

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4105    John_d    10    

52

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5354    PROSTO-1C    12    

52
Отзывы
36. quazare 3800 08.04.22 08:35 Сейчас в теме
Желающие скачать разные примеры работы с БСП и прочее - сделать можно на моем телеграмм канале
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Артано 795 31.08.20 02:30 Сейчас в теме
ПроверитьПроведенностьДокументов() -возвращает массив непроведенных документов из списка переданных ссылок на документы. Интересно, сколько лет нужно этим кхм... людям чтобы научиться именовать методы и объекты.
Риник; firma_unix; dabu-dabu; Jestery; ivanov660; CyberCerber; brr; zqzq; A1WEB; UniversaLL; davdykin; rpgshnik; +12 Ответить
2. davdykin 25 31.08.20 06:45 Сейчас в теме
(1)Я думаю переименований 5-10.. и еще штук 5 перенос из одного модуля в другой...
maksa2005; CrazyVirus; DrAku1a; Артано; A1WEB; +5 Ответить
3. quazare 3800 31.08.20 07:07 Сейчас в теме
По собственному применению БСП, могу сказать что методы в ней последнее время очень быстро устаревают - такая тенденция.
В частности касается работы "длительных операций".

Напишу статью в дальнейшем по применению длительных операций.
4. klimsrv 18 31.08.20 07:38 Сейчас в теме
После того как "ПолучитьНомерНаПечать" уехал в "НомерНаПечать" стараюсь не использовать как БСП, так и вообще разные типовые процедуры и функции конфигураций, становится себе дороже.
корум; maksa2005; user717534; user1346935; slicem; oninfostart; modestry; ybatiaev; AlkB; Yashazz; Serega-artem; Azamatex; surikateg; A1WEB; zqzq; garik79; +16 Ответить
5. Артано 795 31.08.20 09:44 Сейчас в теме
(4) Тут как раз рецепт простой. Любой вызов типового модуля или объекта, нужно оборачивать в свой метод, и если функциональность переедет, то проблем не будет особых
ludoedka; prince64; ubnkfl; Алексей Воробьев; +4 Ответить
7. Darklight 33 31.08.20 10:46 Сейчас в теме
6. Darklight 33 31.08.20 10:44 Сейчас в теме
(4)Может выпустить надстройку над БСП (и другими типовыми библиотеками) - где разместить функциональность в небольшом количестве ) модулей (не 1С Совместимых, зато лаконичных) - так, чтобы минимизировать последующие переносы/удаления функций - а если таковые и будут - то делать обратную совместимость (с указанием obsolete и выводом таких вызовов в ж/р (для последующего выявления и исправления в коде), можно и спец инструмент добавить - анализирующий код на предмет вызовов таких obsolete (устаревших) функций).

Именовать модули можно достаточно лаконично и обобщённо. Я бы выделил несколько общих "классов" - и сосредоточил в них функциональность - как-будто это действительно классы-расширения (хелперы - как их ещё называют в других языках). В принципе - подключив расширения IDE и препроцессор можно было бы даже реализовать авто-привязку этих функций прям к исходным обеъктам (например к документу объекту/ссылке или к печатной форме: расширение IDE бы позволяло бы видеть эти функции именно в контексте объектов которым они привязаны (через точку_, ну а далее либо делать сразу подстановку нужного вызова из общего модуля, либо оставлять так как есть - а замену уже будет делать препроцессор - например при передаче из IDE в ИБ через агента-конфигуратора - как это делает EDT, просто тут возникает доп звено трансляции).
Варианты модулей (спойлер)

И так далее (вообще так модулей может набежать достаточно много - больше сотни - в лёгкую - но все они будут сжатыми представителями общей функциональности, и могут содержать достаточно много процедур - но все они - лишь переадресация в другие модули - где они уже будут иметь реализацию алгоритмов).

И никакого деления на отдельные серверные и клиентские модули или модули мобильного приложения (это всё можно разделить внутри директивами препрцессора, например "#ЕСЛИ Клиент ТОГДА #КОНЕЦЕСЛИ" ).

Отдельно нужен будет модуль для универсального вызова сервера (с общей функцией универсального вызова (с преобразованием типов при необходимости), в т.ч для удобного вызова на сервере функциональности из обработок).
Отдельно нужен будет модуль для универсального фонового вызова функции (с общей функцией универсального вызова (с преобразованием типов при необходимости), несмотря на то, что есть модуль "ФоновоеЗаданиеМенеджер", в т.ч для удобного вызова в фоне функциональности из обработок).
Отдельно нужен будет модуль для универсального внешнего вызова функции (с общей функцией универсального вызова как COM таки WS соединений, с кешированием соединений, с преобразованием типов при необходимости, несмотря на то, что есть модуль "ВнешниеСоединениеМенеджер").
Отдельно можно сделать модуль для универсального вызова функции внешней компоненты (с общей функцией универсального вызова, с кешированием внешних компонент, с преобразованием типов при необходимости, несмотря на то, что есть модуль "ВнешнияКомпонентаМенеджер", в т.ч для удобного вызова во внешнем контексте функциональности из обработок).
Отдельно нужен будет модуль для универсального кешированного вызова (с общей функцией универсального вызова, с преобразованием типов при необходимости, несмотря на то, что есть модуль "КешированиеМенеджер").
Это всё-чтобы не плодить кучу лишних модулей и сделать работу с данной функциональностью наиболее удобной!

А вот для привилегированных вызовов такой модуль делать не стоит - ибо это уже вопросы безопасности.


Можно всё это разбить даже на несколько отдельных частей - базовые и расширенные (устанавливаемые путём объединения конфигураций)

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

Ну, как написал, это может быть единая библиотека (набор библиотек) не только для БСП но и для других стандартных библиотек.... кстати, не обязательно, даже типовых - просто выпускать доп расширения (ставящиеся объединение конфигураций), которые будут соблюдать общий принцип именования пространства имён.

Так же можно делать модули с улучшенным функционалом - если сообщество напишет лучшие алгоритмы, чем будут в стандартных библиотеках - именовать переадресацию на их реализацию можно в таких общих модулях (устанавливаемых отдельно):
СтрокаМенеджерРасширение
СтрукутраМенеджерРасширение

Но это только для пересекающегося функционала.


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

Вообще тут много чего ещё можно придумать!
Например привнести поддержку элементов АОП - коли не типовые функции будут вызываться вместо типовых в самом низу иерархии вызовов (с последующей переадресацией) - то этими вызовами можно управлять более расширено!

Так же я, настоятельно бы, ввёл модуль
СобытияФормыМенеджер - через который бы осуществлял бы ручную "подписку" (и ручную инициация событий) для различных событий формы (на которые в платформе не возможно обобщённо подписаться).
Ну и вообще добавил ещё и общий модуль
СобытияМенеджер - для всех остальных событий, на которые тоже нельзя универсально подписаться (по сути - просто некоторые встроенные обработчики, но, не только платформенные - тут могут быть и БСП-шные функции)

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


ну, а если уж совсем по-хорошему - то для функций такой библиотеки можно будет создать правильные описания (комментарии) и на их основе сгенерировать справку по использованию (а-ля синтаксиис-помошник) - которой ТАК НЕ ХВАТАЕТ для БСП (и других стандартных библиотек), в которой можно будет делать поиск (и видеть для каких версий платформы и БСП предназначена та или иная функциональность - и делать фильтр по этим версиям, и не только по версия - а например по подсистемам тоже).
Fynjy2; user598655_ilia-bers; mikleRo; dabu-dabu; nporrep; dock; Артано; +7 Ответить
10. Артано 795 31.08.20 10:54 Сейчас в теме
(6) Да, разумно, правда это еще несколько слоёв абстракции, которые нужно будет поддерживать
user717534; +1 Ответить
12. Darklight 33 31.08.20 11:03 Сейчас в теме
(10)да - 1-2 слоя абстракции тут будет - да нужно будет поддерживать - но это же лучше, чем неожиданно переставший работать алгоритм - из-за того, что 1С куда-то опять перенесла/переименовала функцию или изменила её аргументы.

Хотелось бы чтобы такой проект был открытым - т.е. его смогло бы поддерживать сообщество! (например через GitHub, коли у 1C и у Infostart ещё нет такого сервиса; хотя тут лучше бы подошла функциональность Wikipedia (эдакий "wikihub.ru" - имя, увы, занято) - но такого сервиса мне вообще ещё не известно).

Да, забыл добавить - что считаю, что у каждой функции (как-минимум, которой больше 2-3-х аргументов) в такой библиотеке должна быть версия, принимающая один аргумент "Структура" - в котором должны быть все параметры - во-первых это удобно так вызывать функции с большим числом аргументов - во-вторых это надёжно при дальнейшей модификации таких функций, в-третьих их вызов, в таком виде, становится более лаконичным и понятным - т.к. все аргументы задаются поименовано! В-четвёртых, это упрощает универсальный вызов таких функций!
13. AnderWonder 27 31.08.20 11:08 Сейчас в теме
(10) (12) вы с дуба впали что-ли, никто никогда не будет страдать такой ерундой
asupsam; ixijixi; +2 2 Ответить
14. Darklight 33 31.08.20 11:19 Сейчас в теме
(13)Ну почему - свою БСП (А1Э) тут уже предлагали - не вижу в этом ничего плохого! Если 1С скатывается в помойку - то спасение утопающих - дело рук самих утопающих! Разработка такой библиотеки-прослойки не такая уж сложная задача - ведь речь не идёт и том, чтобы полностью переписать БСП - а речь только об организации статической прослойки-переадресации - и её можно делать постепенно - расширяя охват стандартных библиотек! А если сообщество будет это делать сообщая - то это куда лучше - чем каждый будет это делать для себя - как в (5) или вообще стараться не использовать БСП и писать всё самостоятельно (возможно дёргая код из БСП) как предложено в (4). Ну а будь хорошая справка (а-ля синтаксис-помощник с удобными фильтрами и поиском) - то и не возникла бы такая статья как эта (потому-что для очень многих - БСП сейчас как чёрный ящик с запутанным кодом, в котором сложно разбираться, который сложно устанавливать и поддерживать) - вот и не особо хотят с ним связываться!

Вот на других платформах (языках) сообщество часто рождает свои-параллельные наборы библиотек - как раз когда стандартные это сообщество не очень удовлетворяют! И ничего - бредом это никто не считает - наоборот - это эволюция! Зачастую - подталкивающая к развития и стандартные библиотеки! Которые, правда, в отличии от 1С, обычно гораздо более консервативны!
1С - это просто ХАОС - может даже в рамках разных билдов одного релиза менять API своих библиотек - а это вообще кошмар!

Когда, по хорошему, в рамках одной подредакции должна соблюдаться прочти 100% обратная совместимость (исключение - только критичные ошибки). А в рамках одной редакции - должна, как можно статичнее, выдерживаться общая линия выстраивания API этой редакции - без существенных перестановок алгоритмов!
oninfostart; dabu-dabu; sashad00; leoxz; BackinSoda; Артано; +6 Ответить
15. AnderWonder 27 31.08.20 11:25 Сейчас в теме
(14) в том-то и дело, что предлагают много лет, но только результата нет - не думали почему? А ответ прост: слишком большие трудозатраты. Только новичек может с пылу жару решить - а напишу ка свою БСП - идеальную и оптимальную для всеобщего счасться!))) Профи то знают на самом деле что почем. К тому же БСП на самом деле не так уж плоха, поэтому нет смысла особо дергаться.
16. Darklight 33 31.08.20 11:27 Сейчас в теме
(15)БСП ужасна - и с каждым годом только хуже (как и весь типовой код, в принципе). А постоянные переносы/удаления - это просто кошмар! На мой взгляд - этот гнойный нарыв созрел - уже пора его лечить!
user598655_ilia-bers; +1 Ответить
17. AnderWonder 27 31.08.20 11:33 Сейчас в теме
(16) этот "гнойный нарыв" спокойно переживет любое лечение, если таковое вообще когда-либо будет)
SergeyTerentyev; user598655_ilia-bers; ubnkfl; asupsam; ixijixi; +5 Ответить
18. Darklight 33 31.08.20 11:34 Сейчас в теме
(17)Отравляя, убивая и отпугивая разработчиков от инфраструктуоы 1С
20. AnderWonder 27 31.08.20 11:42 Сейчас в теме
(18) 1. А никто и не обещал что будет легко) 2. Профи таким не напугаешь, а если это отгоняет всяких демпингующих начинающих то для нас это только хорошо.
И между прочим, вы бы посмотрели на библиотеки в той же Java - по сравнению с некоторыми из них БСП покажется воплощением разума и порядка.
AllexSoft; TimkoNzt; asupsam; nporrep; +4 Ответить
22. Darklight 33 31.08.20 16:37 Сейчас в теме
(20)
А никто и не обещал что будет легко)

Точно так же можно ответить и на Ваш пост (15)

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

Ручной обработки функций БСП тут не так уж много - всё связано только с классификацией и постепенным написанием нового кода к ним текстовых описаний - что по силе сообществу при публикации в общий доступ такой конфигурации (или организации web-сайта).

Постепенно можно повышать качество алгоритмов автогенерации.

В этот инструмент далее нужно добавить алгоритм сравнения версий сигнатур функций из разных версий БСП - с отчётом о выявленных расхождениях - и быстрыми средствами для генерации заплаток! Ну и для быстрого выявления и добавления новых функций БСП (и других библиотек).


ну а про инструмент поиска мест использования устаревших функций (помеченных именно как obsolete) я уже писал - тут тоже ничего сложного!


Так можно обрабатывать таким инструментом не только БСП и стандартные библиотеки - а вообще любые библиотеки - и навешать на это инструмент много дополнительных расширений функционала для ещё более полезного и широкого применения при обработке не только типового но и не типового кода!

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

А редактировать всё сообща - через предложения и голосования - потипо того, как устроена wikipedia
А потом на основе таких общих решений - генерировать pull-реквксты на Github

Тогда сообщество само может влиять на качество такой библиотеки (конечно под присмотром опытных кураторов)!

По такому пути и на той же инфораструктуре можно дальше разрабатывать и модифицировать и не типовые библиотеки!
23. AnderWonder 27 31.08.20 17:22 Сейчас в теме
(22)
А вообще-то, нет тут ничего сложного - сделать спец конфу по разбору функций типовых модулей и автогенерации для них обёрток

ваша наивность прям таки умиляет. Вернемся к этому обсуждению года через 3.
Eriksson; +1 Ответить
38. senya0609 24.03.23 10:13 Сейчас в теме
(23)Прошло 3 года.
Как успехи с созданием спец конфы по разбору типовых модулей ?
24. Darklight 33 31.08.20 17:43 Сейчас в теме
(6)Префиксы к именам общих модулей, наверное, всё-таки стоит добавить. Особенно учитывая, что ставиться такая прослойка, скорее всего, будет через расширение конфигурации.

Вот только мне КРАЙНЕ НЕ НРАВЯТСЯ ПРЕФИКСЫ СЛЕВА ОТ ИМЕНИ СУЩНОСТИ - Я ЗА ПРЕФИКСЫ В ВИДЕ ОКОНЧАНИЙ - тогда будет как-то так:
СправочникМенеджер_НеБСП
ДокументМенеджер_НеБСП
РегистрСведенийМенеджер_НеБСП
....

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

Префикс СПРАВА - это гораздо удобнее при использовании всплывающих подсказок и ручном наборе тоже!
Я всегда делаю префиксы только СПРАВА!

Префикс "_НеБСП" - это как отсылка к "NoSQL" - т.е. мы пойдём иным путём! ;-)
о можно и другой префикс выбрать, например "_Не1С" :-D

Ещё - у расширений нет пространств имён - поэтому формально каждое расширение должно иметь свой уникальный префикс - это крайне неудобно - поэтому если данная remap-прослойка-библиотека будет составной из нескольких конфигураций - то они должны все сливаться через объединение в одну конфигурацию-расширение с единым префиксом содержимого!
По идеи - пересечения функций должны быть практически исключены - либо должен, в описании, быть задан приоритет установки с замещением или иные пометки - когда нужно вручную совмещать код!

Префиксы - это ЗЛО - 1С с этим боролась и снова напоролась - нужны пространства имён!
Эх... если бы платформа 1С поддерживала ссылки на процедуры/функции - то можно было бы через них сделать эмуляцию пространств имён, и, в т.ч., вложенные пространства имён!

Впрочем, вложенные пространства имён отчасти эмулировать можно через вызов функции - возвращающей ссылку на другой модуль (и так с произвольным уровнем вложенности) - но это не очень красиво архитектурно!
oninfostart; Артано; +2 Ответить
30. Cyberhawk 135 03.09.20 11:05 Сейчас в теме
(24)
мне КРАЙНЕ НЕ НРАВЯТСЯ ПРЕФИКСЫ СЛЕВА ОТ ИМЕНИ СУЩНОСТИ - Я ЗА ПРЕФИКСЫ В ВИДЕ ОКОНЧАНИЙ
Это называется "суффиксы" или (на худой конец) - "постфиксы"
Fynjy2; Merkalov; maksa2005; Sindbad_M; dabu-dabu; athena; МимохожийОднако; +7 Ответить
31. Darklight 33 03.09.20 11:28 Сейчас в теме
(30)Я знаю, но вот решил выразиться именно, Вы уж простите
19. sys1c 31.08.20 11:41 Сейчас в теме
(4)а еще бывает функция устаревает, они пишут
//не использовать
а часть кода конфигурации все равно в нее ссылается.
в УТ 11.4 такое встречал
21. Darklight 33 31.08.20 16:36 Сейчас в теме
(19)Я вот сегодня наткнулся на функцию, которую просто внутри заремили и никаких больше приписок не сделали - т.е. после обновления - функция тупо стала возвращать "неопределено" (причём ранее - для неё это было почти легитимно-допустимым значением для возврата), и оставили в общем модуле в таком виде.
Вот и разбирайся потом - почему алгоритм стал работать иначе! Причём без ошибок - просто иначе!
А я тут желал чтобы в ж/р по таким функциям сообщения писались - до такого 1С вообще ещё не скоро дорастёт!

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

А пока налицо - полное неуважение к программистам и к пользователям - у которых это всё потом будет выливаться в ошибки и лишние затраты времени!

Вот надо ещё в стандарт "1С Сомевтимо" внести правило - запрещающие использовать obsolete функции, и почаще проверять хотя бы типовые конфигурации на выполнение этих правил!
dabu-dabu; +1 Ответить
25. ixijixi 1913 31.08.20 19:39 Сейчас в теме
(21) И тут Остапа понесло)
AnderWonder; +1 Ответить
27. Артано 795 01.09.20 06:39 Сейчас в теме
(21) типовые конфигурации проверку на 1с Совместимо не проходят, и кажется, никогда не проходили. Многие тиражки с лейблом, спустя определенное время после присвоения, тоже начинают набирать ошибки как снежный ком.
28. Drivingblind 233 01.09.20 11:34 Сейчас в теме
(4) подобная ситуация с "ОбщегоНазначенияКлиентСервер.СообщитьПользователю". Его разделили на "ОбщегоНазначенияКлиент" и "ОбщегоНазначенияСервер" в новых релизах БСП
8. AnderWonder 27 31.08.20 10:47 Сейчас в теме
Бесполезная информация и вот почему.
1. Описание достойное Капитана Очевидности - "Функция 2.3 ..ИнформационнаяБазаФайловая.. Определяем является ли информационная база файловой" - какая неожиданность! Практически все функции БСП не нуждаются в доп. описании, их названия говорят сами за себя ну и уж если возникнет необходимость, то проще прочитать описание в модуле или глянуть в код.
2. Описана незначительная часть функций. Да и не нужно их описывать, все есть в модулях и документации к БСП.
3. Несколько версий БСП, с разными программными интерфейсами. При этом 3-я линейка далеко не самая распространенная.
asupsam; Поручик; nporrep; artbear; +4 2 Ответить
26. Yashazz 4790 31.08.20 23:27 Сейчас в теме
(8) Вдобавок, это всё почти чистый копилефт из официального описания, каковое уж для 80-90% разработчиков давно на сайте доступно. Да, там оно тоже напрочь устаревшее и совершенно неактуальное, но зато подробно)

Бесполезная публикация, сбор хайпа и плюсиков и никакого практического эффекта.
Йожкин Кот; asupsam; +2 Ответить
9. Поручик 4692 31.08.20 10:48 Сейчас в теме
Делали БСП для упрощения работы, оказалось для геморроя.
Merkalov; maksa2005; user598655_ilia-bers; immemor; tka4enk0; Summer_13; Drivingblind; A1WEB; sys1c; Serega-artem; ivanov660; Azamatex; Darklight; +13 1 Ответить
11. AnderWonder 27 31.08.20 11:00 Сейчас в теме
(9) все же геморрой от использования БСП чаще гораздо меньше геморроя когда без него. А проблемы его типичны для большинства программных библиотек.
SergeyTerentyev; Ali1976; ubnkfl; kalyaka; o.nikolaev; nporrep; +6 Ответить
29. Casey1984 3 03.09.20 08:20 Сейчас в теме
Еще часто использую ОбщегоНазначения.СсылкаСуществует(ПроверяемаяСсылка), возвращает Булево - Истина, если ссылка не битая и не пустая.
marku; user598655_ilia-bers; +2 Ответить
32. пользователь 05.09.20 05:50
Сообщение было скрыто модератором.
...
33. МимохожийОднако 142 06.09.20 07:28 Сейчас в теме
Было бы интересно увидеть статью "Как находить нужные функции в БСП?"
svetlana2007; user1346935; benzol45; +3 Ответить
34. A1WEB 59 09.11.20 15:47 Сейчас в теме
(33) БСП - это тот ещё шедевр. Но все же ответ на ваш вопрос прост - в документации.
ИТС => Инструкции по разработке на 1С => БСП => Версия => Глава 4. Программный интерфейс.
Очевидно, что можно пользоваться только функциями, которые описаны в программном интерфейсе. А то не редко можно видеть бессмысленные возмущения типо что-там переименовали или переместили в другой модуль - явно это не из программного интерфейса было сделано.
Veetavas; MVK80; +2 Ответить
35. slicem 9 07.04.21 07:21 Сейчас в теме
Делая очередное обновление и имея несколько десятков внешних отчетов, планирую уйти с БСП и больше никогда её не использовать. Переписывать всё каждый раз ради, по сути, рюшечек?
36. quazare 3800 08.04.22 08:35 Сейчас в теме
Желающие скачать разные примеры работы с БСП и прочее - сделать можно на моем телеграмм канале
37. Mark72 19.07.22 17:37 Сейчас в теме
Оставьте свое сообщение