Июльское обновление стандартов 1С: один новый, два переписаны
1С обновила систему стандартов разработки. Коротко о том, что поменялось и что стоит проверить в своём коде.
Новый стандарт: Разработка правил регистраций (#std799)
Правила регистрации — алгоритмы проверок, фильтров и отборов данных, которые участвуют в обменах. Обычно их хранят в макете плана обмена: так их выгружает Конвертация данных. Теперь стандарт требует размещать правила в модулях конфигурации, например отдельным общим модулем — менеджером регистрации.
Зачем: код в модуле попадает в синтаксическую проверку платформы и в остальные проверки конфигурации, его проще отлаживать без внешних обработок и дешевле переводить при выпуске WE-версий.
Ещё два требования:
— в правилах регистрации запрещено переключать привилегированный и безопасный режимы;
— исправления ошибок в правилах обмена поставлять расширениями (патчами).
#std411: параметры выбора — три новых пункта
Самое заметное: не задавайте Режим изменения связанного значения = Очищать. Безусловная очистка ломает два сценария:
— повторный выбор того же ведущего значения обнуляет зависимый реквизит, хотя ничего не изменилось;
— если зависимое значение допустимо для нескольких ведущих, оно очистится, оставаясь корректным.
Вместо этого — код условной очистки. В стандарте есть готовый пример: запрос выбирает первые две подходящие характеристики и возвращает текущее значение, если оно всё ещё годится.
Исключение (п. 4.1): если повторно выбрать то же ведущее значение технически невозможно (например, это флажок) и связь строго один-к-одному — Очищать допустимо.
Ещё два пункта:
— параметры выбора стоит задавать и для объектов, которые не редактируются интерактивно: они работают в отборах отчётов и динамических списков;
— префикс Отбор. в имени параметра выбора — тогда значения приедут в ДанныеЗаполнения обработчика ОбработкаЗаполнения и новый объект создастся уже заполненным.
#std542: доступ к файловой системе — переписан целиком
Стандарт переструктурирован: шесть разделов вместо прежних пяти, два из них новые.
«Работа с двоичными данными и потоками». Не гоняйте данные через временные файлы, если хватит ПотокВПамяти. Классический антипаттерн: записать ТекстовыйДокумент во временный файл, прочитать из него ДвоичныеДанные, удалить файл — хотя данные и так были в памяти. И закрывайте потоки после чтения, иначе течёт память.
«Безопасность файловой системы» — восемь пунктов, которые полезно прогнать по своему коду:
— нельзя хранить путь или имя файла в реквизитах формы: на клиенте их подменят сторонними средствами, и серверный код полезет в произвольный файл;
— нельзя передавать путь к файлу в параметры серверных процедур форм и экспортных методов серверных общих модулей — их тоже можно вызвать с клиента;
— расширение файла, пришедшее с клиента, проверять по белому списку;
— перед работой с файлом на сервере убеждаться, что он лежит во временном каталоге или другом специально предусмотренном месте.
Плюс актуализированы методы передачи файлов: ПоместитьФайлНаСерверАсинх, НачатьПомещениеФайлаНаСервер и парные для скачивания вместо старых ПоместитьФайл и НачатьПомещениеФайла.
Разборы с примерами кода и скриншотами:
https://v8std.ru/std/799/
https://v8std.ru/std/411/
https://v8std.ru/std/542/
#std799 #std411 #std542
Post #159
2.02K
- 🔥 8
- ❤ 3
- 👍 3
- 🥰 1
- 🙏 1