В процессе разработки на платформе 1С:Предприятие часто возникают задачи, требующие отслеживания действий пользователя, например, подсчета количества открытий конкретной формы. Рассмотрим, как решить эту задачу, какие механизмы платформы лучше всего подходят для реализации счетчиков и на какие технические нюансы стоит обратить внимание при написании кода.
Самый простой способ сохранить значение, которое будет доступно после закрытия формы — это использовать константы. Константа в 1С — это объект метаданных, предназначенный для хранения постоянных или редко изменяемых значений. Чтобы реализовать счетчик запусков, выполним следующие шаги:
КоличествоЗапусков и типом данных Число (укажите достаточную длину, например, 10).Рассмотрим пример реализации такого алгоритма:
&НаКлиенте
Процедура ПриОткрытии()
УвеличитьСчетчикЗапусков();
КонецПроцедуры
&НаСервере
Процедура УвеличитьСчетчикЗапусков()
Количество = Константы.КоличествоЗапусков.Получить();
Константы.КоличествоЗапусков.Установить(Количество + 1);
КонецПроцедуры
Или более компактный вариант записи кода:
&НаСервере
Процедура УвеличитьСчетчикЗапусков()
Константы.КоличествоЗапусков.Установить(Константы.КоличествоЗапусков.Получить() + 1);
КонецПроцедуры
При использовании констант для высокоинтенсивных операций, таких как подсчет каждого открытия формы, важно учитывать архитектурные риски. Платформа 1С при записи значения в константу накладывает монопольную блокировку на таблицу констант. Если форма открывается сотнями пользователей одновременно, это может вызвать задержки в работе системы из-за возникновения очереди на запись.
Рассмотрим альтернативные подходы для различных задач:
ХранилищеОбщихНастроек. Это штатный механизм платформы для сохранения пользовательских предпочтений, который лучше подходит для индивидуальных настроек.Пользователь и ресурсом КоличествоЗапусков. Это позволит избежать конфликтов доступа, так как записи разных пользователей хранятся в разных строках регистра.При использовании механизмов хранения данных, которые предполагают чтение текущего значения перед его изменением, всегда существует риск потери данных, если два пользователя выполнят операцию одновременно. В профессиональной разработке 1С мы используем метод ЗаблокироватьДанныеДляИзменения(). Это гарантирует, что между моментом, когда мы считали число 5, и моментом, когда мы записали число 6, никакой другой процесс не успеет изменить это значение на свое.
Заключение: Для учебных задач и небольших проектов использование Константы является вполне допустимым и понятным методом. Однако, переходя к промышленной разработке, всегда анализируйте частоту обращений к данным. Если логика вашего приложения подразумевает массовое использование функции, отдавайте предпочтение Регистрам сведений или Хранилищу настроек, чтобы обеспечить стабильную и быструю работу системы для всех пользователей.