Особенности разработки расширений для прохождения аудита 1С:Фреш, или как успешно пройти аудит

03.06.25

Разработка - Рефакторинг и качество кода

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

Введение

Помимо разработки для клиентов, компания «Эм Си Арт» занимается также разработкой собственных продуктов. Одно из решений разрабатывается, в том числе, для публикации в магазине расширений 1С:Фреш. 1С:Фреш – облачное решение для работы с 1С без использования своего «железа», покупки лицензий и т.д. Нужно просто оплатить, залить свою базу и можно пользоваться. Т.к. сервис облачный, то имеются некоторые ограничения и требования к публикуемым решениям. Естественно, во Фреше и на ИТС (информационно техническое сопровождение) есть ряд статей и рекомендаций для успешного прохождения аудита, но в некоторых особенностях сразу все равно не разобраться. В статье раскрыты нюансы (с которыми столкнулся автор) работы с регламентными заданиями, добавления новых объектов для хранения данных, запроса разрешений на выполнение небезопасных операций, повторной отправки расширения на аудит, удаления объектов, использования «попытка исключение».

 

Использование регламентных заданий расширением во Ф реше

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

 
 Создание и запуск регламентного задания

 

Выше представлен один из вариантов кода, который может создавать и/или запускать регламентные задания методами БСП. Если такой код отправить на аудит во Фреш, то он, скорее всего, пройден не будет, во всяком случае в таком исполнении регламентные задания работать не будут. Дело в том, что во Фреше регламентные задания добавляются с помощью Команды расширения [1]. А они в свою очередь запускаются механизмом очереди заданий в модели сервиса, у которого свои рег. задания. Т.е. прямо в коде не выйдет создавать и/или запускать регламентные задания. Сходу из статьи [1] можно не понять, как правильно нужно реализовывать работу регламентных заданий для Фреша, поэтому далее рассмотрим это более подробно.

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

 
 ПрефиксРасширения_КомандаРасширения

 

В общем модуле представлен код для выполнения команды расширения. Его можно так и назвать: "КомандаРасширения" (само собой добавится префикс расширения). В свойствах данного модуля проставлена галка "Сервер". В статье [1] сказано, что при добавлении расширения в свою базу будет доступна настройка расписания для каждой команды расширения, т.е. пользователь при пользовании расширением не сможет легко и просто управлять расписанием регламентного задания. Также важно, что минимальный период выполнения, который можно выставить, равен 300 секундам. Вариант решения первой проблемы есть.  

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

Таким образом получилось не просто адаптировать работу кода по регламентному заданию во Фреше, но и оставить возможность пользователю управлять расписанием внутри расширения (а не в его настройках). Единственное, что отличается от кода для коробочных решений: минимальный период исполнения регламентного задания - 300 секунд. 

 

Добавление новых объектов для хранения данных

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

 

Рисунок 1. Замечания при добавлении объектов для хранения данных

 

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

 

Рисунок 2. Исправление замечаний при добавлении объектов для хранения данных

 

 

Запрос разрешений на выполнение небезопасных операций

Все расширения, отчеты и обработки добавляемые во Фреш должны быть полностью работоспособными в безопасном режиме [2]. Один из важных вопросов касается того, как будет реализован обмен данными с внешним сервисом. В нашем случае были использованы http запросы. При добавлении расширения для прохождения аудита указываются адреса ресурсов, с которыми планируется соединение, порты и протоколы. А что делать в случае, когда неизвестно заранее, с каким ресурсом будет обмениваться данными пользователь? Да, кейсы бывают разными и в этом случае пользователь сам указывает адрес ресурса для обмена данными. Если верить статье [3] на ИТС, то есть возможность указывать, что необходим доступ сразу ко всем интернет ресурсам, что решает упомянутую проблему. К сожалению, этот вопрос при общении со специалистами Фреша довести до конца не удалось. Было предложено 2 варианта: отправлять запрос с клиента (там ограничений нет) или использовать прокси. Первый вариант был отвергнут, потому что большинство кода исполняется на сервере, а клиент с сервера нельзя вызвать, поэтому был реализован второй вариант.

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

 

Повторная отправка расширения на аудит

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

 

Удаление объектов

Отдельное внимание стоит уделить удалению объектов с помощью расширения, например, элементов справочников. Даже если Вы сильно уверены в том, что при удалении объекта не будет нарушена ссылочная целостность, такие манипуляции без контроля ссылочной целостности не пройдут аудит, т.е. контроль ссылочной целостности при удалении объектов во Фреше обязателен. Ниже представлен пример кода, который удаляет нужные объекты с контролем ссылочной целостности.

 
Удаление объектов с контролем ссылочной целостности

Из кода видно, что сначала удаляемые объекты необходимо пометить на удаление, а потом получить список помеченных объектов с помощью функции НайтиПомеченныеНаУдаление с указанием нужных объектов метаданных. Просто так удалить помеченные объекты с контролем ссылочной целостности не выйдет, т.к. для этого необходим монопольный режим. Вероятно, при каждом таком процессе пользователи будут недовольны невозможности работы с базой. По этим причинам в представленном примере используется специальная штатная обработка для удаления помеченных объектов без использования монопольного режима.

 

Привилегированный режим и использование "попытка исключение"

Осталось рассмотреть пару небольших и тоже важных моментов. При операциях, связанных с получением доступа к данным, например, выполнение запроса или получение объекта по ссылке, рекомендуется использование привилегированного режима. Это связано с тем, что у пользователя, от имени которого запущен код, может не быть прав на получение данных, используемых в коде. Чтобы потом не разбираться с правами каждого такого пользователя, стоит использовать этот режим, также важно не забывать его отключать.

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

 

Заключение

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

 

Список источников

1. ООО "1С-Софт". Расширения конфигурации, запускающие регламентные задания: [Электронный ресурс]., 2020 // URL:https://1cfresh.com/articles/so_confext_job. (Дата обращения: 30.05.2025).

2. ООО "1С-Софт". Рекомендации по подготовке расширений конфигурации, дополнительных отчетов и обработок: [Электронный ресурс]., 2017 // URL:https://1cfresh.com/articles/so_addprocess_fastaudit. (Дата обращения: 30.05.2025).
3. ООО "1С-Софт". Облачная подсистема Фреш: [Электронный ресурс]., 2020 // URL:https://its.1c.ru/db/freshpub#content:3599:hdoc:issogl2_42.4.3.3_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D0%B3%D0%BE_%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B0_%D0%B8_%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B5%D0%B9_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8. (Дата обращения: 30.05.2025).

Облако 1С: Фреш разработка доп. расширения аудит

См. также

Рефакторинг и качество кода Программист Платформа 1С v8.3 Абонемент ($m)

Конфигурация для хранения стандартов и сохранения их в формате PDF.

2 стартмани

05.05.2025    2984    comptr    7    

15

Рефакторинг и качество кода Платформа 1С v8.3 Абонемент ($m)

Методический материал для собеседования. Помогает облегчить общение между кандидатом и работодателем.

5 стартмани

05.05.2025    3229    vasilev2015    93    

23

Рефакторинг и качество кода Программист Стажер Бесплатно (free)

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

21.04.2025    7979    RPGrigorev    31    

54

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

Методика, описанная в статье, выработана при переезде с 1С:ДО 2.1 на 1С:ДО 3.0. Может также применяться при переходе с 1С:УПП на 1C:ERP, 1C:ERP на 1C:ERP УХ и т. п. Учтены все необходимые доработки при переезде на новую конфигурацию и предупреждены возможные ошибки.

21.04.2025    1813    PROSTO-1C    4    

4

Рефакторинг и качество кода Программист Платформа 1С v8.3 Россия Бесплатно (free)

Диалог "Вопрос" использовался очень интенсивно в старых версиях кода и также его используют в УФ довольно часто. Иногда очень неудобно использовать рефакторинг через асинхронные вызовы ПоказатьВопрос и ВопросАсинх по разным причинам. Есть ещё одно решение, как избежать больших переделок кода, когда Вы не планируете его использовать где-то на других платформах и Веб-клиентах.

26.03.2025    1432    ksuman    7    

3

HighLoad оптимизация Рефакторинг и качество кода Технологический журнал Программист Платформа 1С v8.3 Россия Бесплатно (free)

Технологии бегут вперёд, но боль производительности 1С остаётся вечной: инфраструктура, код или настройки? Пока ИИ не научился чинить всё «на лету», мы автоматизировали ключевое — диагностику. Читайте статью — показываем, как превратить хаос диагностики в понятные графики и цифры. Спойлер: это работает даже если ваша 1С — «чёрный ящик» на старом железе.

19.03.2025    4302    EFSOL_oblako    9    

8

Рефакторинг и качество кода Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

17.03.2025    3607    Bukaska    5    

8
Оставьте свое сообщение