1С:БСП
1.13K subscribers
4 photos
39 links
Неофициальный канал.

Из чего состоит БСП и какие задачи решает?
http://v8.1c.ru/libraries/ssl/index.htm

Документация БСП
https://its.1c.ru/db/bspdoc

Стандарты разработки @v8std

Автор @zeegin
Download Telegram
Channel created
Добро пожаловать в канал @learn_ssl1c, в этом канале будем рассказывать про разные возможности библиотеки, киллерфичи и особенности ее использования. Присоединяйтесь и да прольем свет на большой и глубокий мир БСП!
БСП очень активно меняется, меняются подходы и механизмы, происходят пересмотры проектных решений и как маленькие доработочки так и глобальные переработки.

Очень сложно писать о том, что меняется постоянно, потому писать будем о том, что актуально для последней выпущенной БЕТА версии на момент публикации.

Нужно понимать, что это совсем не то, что может использоваться в вашем продукте, потому что все это должно "дойти" до продукта.

На эту публикацию актуальна версия 3.1.1.79. Список всех версий и даты их публикации можно найти по ссылке 
https://releases.1c.ru/total (необходимо иметь активный аккуант с доступом к ИТС)

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

Многие из вас видели возникающее окно Информационная база была перемещена....
Вся логика вычисления относится к подсистеме Регламентные задания.

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

Кто-то восстановил базу для проведения теста, и тут начинаются чудеса:
• обмены этой базы с продуктовыми базами ломают синхронизацию и портят продуктовые базы;
• на сайте появляются товары "Тест1" и "тЕсТ2";
• начинают рассылаться клиентам электронные письма и SMS сообщения.

Модулем расчета является общий модуль БлокировкаРаботыСВнешнимиРесурсами.

Механизм блокировки работы с внешними ресурсами:
• выполняет отключение регламентных заданий, работающих с внешними ресурсами;
• при наличии подсистемы Обсуждения отключает базу от сервера взаимодействия.

Блокировка может возникать в случае:
• входа пользователя в систему;
• старта выполнения регламентного задания, отмеченного как работающее с внешними ресурсами.

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

Блокировка возникает:
• Если информационная база была загружена из приложения в интернете (1С:Фреш)
• При перемещении базы между клиент-серверным и файловым режимом работы.
• В файловом режиме строки соединения у всех пользователей скорее всего разные, поэтому нужен внешний идентификатор базы.
Им является файл DoNotCopy.txt в папке с информационной базой. Если он не существует или идентификатор базы из файла не соответствует сохраненному в базе - база считается перемещенной.
• В клиент-серверном режиме работы контроллируется изменение имен серверов rphost, rmanager и имени информационной базы (без контроля регистра).
Если параметры были изменены - база считается перемещенной. Для масштабируемого кластера контроль имени rphost можно отключить на форме предупреждения.

Мое регламентное задание не работает с внешними ресурсами, будет ли оно заблокировано?

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

Кроме этого надо первой строкой обработчика регламентного задания вызывать ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания.
Это связано не только с необходимостью блокировки заданий при выявлении что это база - копия,
но еще и для корректной блокировки в случае обновления версии базы данных или при разрыве соединения подчиненного узла РИБ с главным и во многих других кейсах.
БСП и стандарты по библиотечной разработке. Как идеалогически правильно использовать БСП?

• Что из библиотеки можно использовать, что нельзя?
• Где искать то что можно использовать?
• БСП такая большая, что в ней невозможно разобраться!

Это самые популярные вопросы, которые возникают у тех, кто первый раз открыл БСП.

Попробуем разобраться:
Стандарт: Разработка конфигураций с повторным использованием общего кода и объектов метаданных https://its.1c.ru/db/v8std#content:2149184200:hdoc
Описывает: что есть программный интерфейс, что служебный программный, а что служебные процедуры и функции.

Программный интерфейс - это все то, что можно и нужно вызывать. Он версионируется. По нему соблюдается обратная совместимость со старыми версиями библиотеки. Используя его вы гарантируете, что совершаете легальное документируемое действие. Все мотоды программного интерфейса описываются документируемыми комментариями, по которым в дальнейшем собирается синтакс-помощник по БСП, вот он: https://its.1c.ru/db/bspdoc#content:2029:hdoc. (при желании имея поставку БСП можно его собрать самостоятельно, воспользовавшить обработкой в папке ExtFiles/Инструменты разработчика/ГенерацияОписанияПрограммногоИнтерфейса.epf)

Служебный программный интерфейс - не следует вызывать методы из этой группы. Это то, что нужно для динамической сцепки подсистем внутри самой БСП, благодаря этому интерфейсу можно использовать частичную поставку БСП, например только три базовые подсистемы Базовая функциональность, Обновление версии ИБ и Пользователи. Все остальные подсистемы могут расширять функционал при их наличии, но их отсутствие не препятствует работе с библиотекой. (Подробнее о том какие подсистемы от каких зависят можно посмотреть в документации https://its.1c.ru/db/bspdoc#content:11:hdoc:issogl1_зависимости_между_подсистемами_библиотеки а так же в поставляемой обработке ExtFiles/ПервоеВнедрениеБСП.epf)

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

Хотите следовать хорошему тону и использовать свой код повторно, так же, как в БСП? Используйте готовые шаблоны для разных типов модулей, их можно подсмотреть в стандарте Структура модуля https://its.1c.ru/db/v8std#content:2149184104:hdoc

Теперь вы знаете как и где искать готовые решения, при этом не заблудиться в дебрях реализации.
Длительные операции на сервере

Одноименный стандарт https://its.1c.ru/db/v8std#content:642

Зачем нужны длительные операции?
• Чтобы не зависал интерфейс пользователя;
• Чтобы веб-сервер и браузер не отваливались на таймауте длительного обращения;
• Чтобы дать возможность пользователю отменить операцию, когда ему надоело ждать.

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

Как использовать, на примере новой формы из которой будет выполняться длительная операции:
1. Создаем команду и делаем для нее клиентский обработчики
2. Делаем серверную контекстную функцию, например НачатьДлительнуюОперацию и делаем вызов, например такой:

&НаСервере
Функция НачатьДлительнуюОперацию()
ПараметрыПроцедуры = Новый Структура;
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
Возврат ДлительныеОперации.ВыполнитьВФоне("Обработки.МояОбработка.ВыполнитьДействие", ПараметрыПроцедуры, ПараметрыВыполнения);
КонецФункции

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

3. Делаем в клиентском обработчике команды

ДлительнаяОперация = НачатьДлительнуюОперацию();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ОповещениеОЗавершении = Новый ОписаниеОповещения("ПриЗавершенииДлительнойОперации", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);

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

4. Описываем обработчик события завершения длительной операции, как

&НаКлиенте
Процедура ПриЗавершенииДлительнойОперации(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ВывестиРезультат(Результат);
КонецПроцедуры

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

В ДемоБСП есть обработка демонстрирующая множество вариантов работы, Обработки._ДемоДлительнаяОперация.
Как правильно записывать данные с учетом блокировки транзакций

По просьбе @PlugFox, тут нет ничего от БСП, но тут есть порядок действий, которые надо использовать при ответственной записи в базу данных.

// Безответственное чтение - доверять данным нельзя
Ссылка = Запрос.Выполнить.БлаБла.Ссылка;

НачатьТранзакцию();
Попытка
// Надо ставить исключительную блокировку на изменяемые данные.
// Чтобы никто их не мог прочитать до конца транзакции.
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.Изменяемый");
ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка);
Блокировка.Заблокировать();

// Надо ставить разделяемую блокировку на читаемые данные.
// Чтобы никто их не мог записать до конца транзакции, но все могли читать.
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Читаемый");
ЭлементБлокировки.УстановитьЗначение("ИзменяемыйВИзмерении", Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Блокировка.Заблокировать();

// Ответственное чтение - доверять данным можно.
Объект = Ссылка.ПолучитьОбъект();
Читаемый = РегистрНакопления.Читаемый.СуперПуперВыборка();

// Выполнить установку пессимистической блокировки объекта от изменения другими режимами или пользователями.
Объект.Заблокировать();

// Изменение объекта
Объект.Реквизит = Читаемый;

// Запись измененного объекта и снятие объектной пессимистической блокировки.
Объект.Записать();

// Фиксация Транзакции и снятие блокировок на изменение и на чтение данных
ЗафиксироватьТранзакцию();

Исключение
// Отмена транзакции в случае ошибки в блоке транзакции.
ОтменитьТранзакцию();
// Проброс исходного исключения выше по стеку.
ВызватьИсключение;
КонецПопытки;
БСП редакция 3.1, версия 3.1.1.91 вышла в релиз, ура, товарищи!

https://releases.1c.ru/version_files?nick=SSL31&ver=3.1.1.91

Версия платформы 8.3.14.1694

1. Новая подсистема ИнтерфейсOData - позволяет настроить автоматический REST-сервис.
2. Классификатор банков, валют и стран мира теперь обновляются с помощью подсистемы БИП с портала 1C:Обновление программ.
3. ФайловаяСистемаКлиент научилась работать с новыми возможностями платформы ДействиеПередНачаломПомещенияФайлов.
4. РаботаСПочтовымиСообщениями научилась фильтровать небезопасное содержимое в почте.
5. Удалены объекты метаданных, которые были отмечены устаревшими более двух лет назад (в версии 2.3.3 и раньше), а также программный интерфейс, отмеченный устаревшим до версии 2.4.2.
6. Изменен порядок встраивания БСП, БИП и БТС совместно! Часть подсистем были перераспределены между библиотеками, следует очень внимательно выполнить последовательность встраивания по документации.
7. Благодаря перетасовки подсистем БСП, БИП и БТС все переопределяемые модули этих библиотек договариваются о расширениях возможноcтей друг друга независимо от пользователя.
Теперь при встраивании БИП или БТС не потребуется что-либо добавлять в переопределяемые модули. Переопределяемые модули библиотек будут содержать только прикладной код конфигурации.

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

Список всех изменений https://dl04.1c.ru/content/SSL/3_1_1_91/change.htm
Автоматизация тестов в БСП

62 подсистемы

1. Юнит тестирование (проверки АПИ каждой подсистемы)
2. Финальные сценарные автотесты (основные сценарии)
3. Дымовые автотесты (Monkey-тесты, открытие форм, перечитывание и т.п.)
4. Ручные сценарные тесты -> автоматические сценарные тесты

Vanessa-Automation - фреймворк для разработки сценарных автоматических тестов.

Первые результаты автоматизации (7 подсистем в 2018 году):

- Ручная проверка - 2 человека-дня
- Автоматическая проверка - 2 часа

Экономия трудозатрат:
- в 8 раз быстрее;
- исключает человеческие ресурсы;
- автоматическая регистрация ошибок также сокращает трудозатраты;
- Возможность расширения готовых автотестов – автоматизация новых сценариев

10% шагов – нереализуемые сценарным тестированием на Vanessa Automation:
- Взаимодействие с файловой системой в web-клиенте
- Ряд неуправляемых форм, например «Настройки формы»

Vanessa Automation позволяет расширить возможности сценарного тестирования за счет Sikulix.
С помощью Sikulix совместно с Vanessa Automation автоматизированы тесты по подсистеме Работа с файлами в веб-клиенте.

Презентация с семинара партнеров 28 сентября - 1 октября 2018 года
https://partners.v8.1c.ru/download_file_by_id?fileId=1130
(доступно только обладателям учетной записи партера)

Vanessa-Automation https://github.com/Pr-Mex/vanessa-automation
Пообщаться о тестах можно в группе https://t.me/testspro1c
​​Запрет редактирования реквизитов объектов

У некоторых объектов могут быть ключевые реквизиты, изменение которых может приводить к большим проблемам.

Например у Кассы указана Валюта или у Заказа клиента указана Организация.

Такие реквизиты лучше не давать редактировать, а если и давать - то с контролем используется ли текущий объект где-нибудь и что нужно будет проверить/исправить.

Лучше всего рядовым операционистам возможность такого изменения не давать.

В БСП за функционал отвечает подсистема Запрет редактирования реквизитов объектов

Специальная роль Редактирование реквизитов объектов дает право редактирования «ключевых» реквизитов объектов.

В меню еще отрастает команда Разрешить редактирование реквизитов.

Я хочу подключить к своему объекту запрет!

1. Обший модуль ЗапретРедактированияРеквизитовОбъектовПереопределяемый указать свой объект в подписке ПриОпределенииОбъектовСЗаблокированнымиРеквизитами.
2. Добавить в модуль менеджера объекта функцию ПолучитьБлокируемыеРеквизитыОбъекта, в которой вернуть список имен ключевых реквизитов/табличных частей объекта или реквизитов формы.
3. Добавить в модуль формы объекта процедуру:
&НаКлиенте Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) ЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект); КонецПроцедуры

4. Добавить в обработчики событий ПриСозданииНаСервере и ПослеЗаписиНаСервере код:
 ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);


Пример можно посмотреть в ДемоБСП в справочнике ДемоНоменклатура.

Документация разработчика https://its.1c.ru/db/bsp302doc#content:36:1
​​Адресный классификатор

КЛАДР больше как таковой не существует.

ФИАС – Федеральная информационная адресная система.
Приказ ФНС России от 06.07.2017 N ММВ-7-17/535@ «Об утверждении Стандарта форм документов, используемых налоговыми органами».

Куча всяких дополнительных кодов типа ОКАТО, ОКТМО, территориальных кодов ФНС, истории изменения адресных объектов и т.п.

Поддержан в БСП 3.0.1+

Теперь адреса бывают в административно-территориальном (старое) и муниципальном (новое) делении.
При этом в разном делении разный состав полей адреса!

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

Теперь возможен автоподбор адреса прямо в поле ввода адреса (при подключенной ИТС).

Документация для пользователя https://its.1c.ru/db/bspdoc#content:1853:hdoc