
# Правила создания общих модулей

При разработке общих модулей в 1С следует выбирать один из четырёх контекстов выполнения кода.

## Типы общих модулей и контексты выполнения

| № | Тип общего модуля                   | Пример наименования                         | Вызов сервера | Сервер | Внешнее соединение | Клиент (обычное приложение) | Клиент (управляемое приложение) |
|----|-------------------------------------|---------------------------------------------|---------------|--------|---------------------|-----------------------------|----------------------------------|
| 1  | Серверный                           | `ОбщегоНазначения` или `ОбщегоНазначенияСервер` |       +       |   +    |          +          |                             |                                  |
| 2  | Серверный для вызова с клиента      | `ОбщегоНазначенияВызовСервера`              |       +       |   +    |                     |                             |                                  |
| 3  | Клиентский                          | `ОбщегоНазначенияКлиент` или `ОбщегоНазначенияГлобальный` |               |        |                     |              +              |                +                 |
| 4  | Клиент-серверный                    | `ОбщегоНазначенияКлиентСервер`              |               |   +    |          +          |              +              |                +                 |

**Пояснения:**
- **Вызов сервера** — позволяет вызывать методы модуля с клиента на сервер.
- **Сервер** — методы выполняются на сервере.
- **Внешнее соединение** — доступность методов при внешнем соединении.
- **Клиент (обычное приложение)** — доступность методов в толстом клиенте.
- **Клиент (управляемое приложение)** — доступность методов в тонком клиенте и веб-клиенте.

## Рекомендации по выбору типа модуля

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

## Использование директив компиляции

Для управления выполнением кода в различных контекстах можно использовать директивы компиляции:

```1C
#Если Сервер Тогда
    // Код, выполняемый на сервере
#Иначе
    // Код, выполняемый на клиенте
#КонецЕсли
```

Это позволяет создавать универсальные модули, адаптирующие своё поведение в зависимости от контекста выполнения.

## Повторное использование возвращаемых значений

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

Настройка этого поведения осуществляется через свойство модуля:

- **Не использовать** — повторное использование отключено.
- **На время вызова** — результаты сохраняются на время выполнения функции.
- **На время сеанса** — результаты сохраняются на время сеанса пользователя.

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

---

Для получения более подробной информации и примеров рекомендуется ознакомиться с официальной документацией 1С:ИТС по [ссылке](https://its.1c.ru/db/v8std/content/469/hdoc).
