Готовишься к экзамену?
Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.
В общих модулях
нельзя описывать переменные, процедуры и функции без ключевого слова "Экспорт"
Неправильно: ключевое слово «Экспорт» нужно только тем процедурам/функциям, к которым планируется обращаться из других модулей. Внутренние (неэкспортные) процедуры и функции в общем модуле допустимы, но переменные на уровне модуля объявлять нельзя.
нет ограничений на описание переменных, процедур, функций
Неправильно: общий модуль предназначен для хранения процедур и функций, а раздел объявления переменных (как отдельная «шапка» модуля) в нем отсутствует; также он не предназначен для размещения «основной программы».
нельзя описывать переменные
Правильно: общий модуль содержит только процедуры и функции, поэтому переменные можно создавать лишь внутри процедур/функций (локально), а не в виде переменных модуля.
Пояснение
Как это связано с автоматическим заполнением «Ведомости в кассу» и как работать правильно:
1) Почему общий модуль удобен при автозаполнении ведомости
Логику подбора сотрудников и сумм (например, по кнопке «Заполнить» или при выполнении своей команды) удобно держать в одном месте - в общем модуле, чтобы ее можно было переиспользовать из формы документа, обработок, регламентных заданий и т. п.
2) Главное ограничение общего модуля
В общем модуле нельзя завести «переменную модуля» (в стиле «Перем …;» в отдельном разделе). Поэтому нельзя рассчитывать на хранение состояния/кэша в переменной на уровне общего модуля.
3) Как хранить данные и настройки, если «очень надо помнить что-то между вызовами»
Вместо переменных модуля используйте подходы, которые не ломают архитектуру:
- передавайте значения параметрами в процедуры/функции (самый надежный способ);
- храните настройки автозаполнения в регистре сведений/справочнике (например, отборы по подразделениям, правила исключения сотрудников, приоритеты);
- используйте параметры сеанса/настройки пользователя (когда это действительно пользовательская настройка);
- для временных данных на время выполнения - локальные переменные внутри процедуры/функции.
4) Практический пример (идея)
В общем модуле можно сделать экспортную функцию, которая возвращает строки для табличной части «Ведомости в кассу», а в модуле формы документа лишь вызвать ее и загрузить результат. Например:
- Функция ПолучитьДанныеДляВедомости(Организация, Месяц, ДатаВыплаты, ВидВыплаты) Экспорт
- Процедура ЗаполнитьВедомость(ДокументОбъект) Экспорт
Все рабочие переменные (запрос, таблица значений, промежуточные суммы) - только внутри этих методов.
5) Напоминание про «почему не заполняется ведомость» (частая причина)
Автозаполнение ведомости зависит от настроек выплаты у сотрудника и типа ведомости (касса/банк/на счета). Если сотруднику задан способ выплаты, не совпадающий с выбранным типом ведомости, он может не попасть в заполнение - это важно учитывать, если вы пишете свой алгоритм подбора.
Вывод: общий модуль - правильное место для общего алгоритма автозаполнения ведомости, но проектируйте его без переменных уровня модуля: данные передавайте параметрами и храните настройки в подходящих хранилищах конфигурации.