6. Объектная модель прикладного решения
#4

Готовишься к экзамену?

Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.

Перейти в бота

В общих модулях

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

Пояснение

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