Особенности разработки расширений для прохождения аудита 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)

Представьте ситуацию: вы пишете обработку для отправки email-уведомлений клиентам. Чтобы подключиться к серверу почты, вам нужны: логин, пароль, SMTP-адрес. Что делает большинство программистов?

1 стартмани

23.06.2025    583    markbraer    6    

1

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

Обработка позволяет анализировать структуру методов в модуле и легко составлять её структуру, канонизировать, используя стандарты 1С.

3 стартмани

20.06.2025    719    14    MikeLetto    3    

7

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

Тестовая база обновлена через все ключевые релизы, всё протестировано, остатки сведены, вы готовы обновить «боевую» базу, но…по замерам для этого потребуется целая неделя, а у вас есть всего пара выходных. Знакомая ситуация? Расскажем, как увеличить скорость отработки промежуточных конфигураций!

18.06.2025    1150    1c-izh    12    

7

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

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

2 стартмани

05.05.2025    3516    comptr    7    

15

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

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

5 стартмани

05.05.2025    4094    vasilev2015    108    

25

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

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

21.04.2025    9388    RPGrigorev    31    

54

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

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

21.04.2025    2298    PROSTO-1C    4    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Nedovizin 07.06.25 08:53 Сейчас в теме
Интересно, а как сделать загрузку из excel в расширении для конфигурации в Фреш?
2. MC4RT 15 09.06.25 10:12 Сейчас в теме
(1) Вопрос касается общей логики или именно требований со стороны Фреша (вопрос слишком широкий))? Абсолютно точно работу с файлами нужно сделать рабочей в безопасном режиме: п.3.1 https://1cfresh.com/articles/so_addprocess_fastaudit. В п.3.3 сказано, что ограничения касаются только серверного кода.
Если у Вас уже есть рабочее расширение под Вашу задачу, то попробуйте отправить на аудит, а там уже при отказе сообщат, что нужно исправить.

У меня не было опыта работы с файлами пользователей во Фреше, но можно попробовать подумать в сторону временного файла (на них ограничений нет), а работа с двоичными данными доступна и на клиенте.
3. infosoft-v 981 09.06.25 11:46 Сейчас в теме
Спасибо за отличную и подробную информацию. Очень полезно.
Прошу, подскажите новичку в 1С Фреш , как загрузить свое расширение в облако?
Я тестирую на аккаунте своей компании и не могу найти способа добавить (загрузить) свое расширение с локального компьютера в 1С Фреш. Читая документацию на портале, я пришел к выводу, что для загрузки своих расширений в облако требуется сперва получить статус разработчика 1С Фреш, отправив заявление в 1С. Так и есть, или я просто не могу найти нужную кнопку?
4. MC4RT 15 09.06.25 11:59 Сейчас в теме
(3) Рад, что информация была полезна. Да, со статусом разработчика именно такая ситуация, плюс должны быть права в абоненте на работу с расширениями, если я не ошибаюсь. Статус разработчика я не получал, все делал через свою обслуживающую организацию. Подозреваю, у Вас тоже должна быть обслуживающая организация. Узнать это Вы можете в "Менеджере сервиса". Должно быть поле "Меня обслуживает". Если обслуживающая организация, действительно, есть, то связываетесь с ними и сообщаете, что Вам нужно залить во Фреш свое расширение. Может потребоваться выдача определенных прав их специалистам. Собственно, они уже и отправляют расширение на аудит и уведомляют о результатах.
5. MC4RT 15 09.06.25 12:22 Сейчас в теме
Кстати, стоило описать в статье, но напишу тут, т.к. только вспомнил: аудит не является панацеей от каких то ошибок в коде, он в основном нацелен на проверку соответствия решения требованиям Фреша, т.к. они явно заинтересованы в том, чтобы у них не лег сервис. Один из примеров: из за одной незначительной ошибки я, однажды, положил в базе при тестировании все регламентные задания, от чего аудит не уберег.
Оставьте свое сообщение