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