Учебный курс: Подготовка на 1С:Специалист по платформе 1С:Предприятие 8.3
Задачи оперативного учета – тема № 5:
Пример реализации учета номенклатуры в различных единицах измерения
Ранее для нашей задачи мы уже разработали учетную схему, пояснили некоторые нюансы решения, а также создали все необходимые объекты конфигурации. В данном разделе завершим разработку нашей конфигурации и протестируем ее на конкретном примере.
Создание общих алгоритмов
Чтобы общая функция получения коэффициента пересчета была доступна для вызова из модулей форм документов, возможны два варианта ее размещения:
- В модуле менеджера справочника «Единицы измерения»
- В общем модуле.
Эти два варианта практически равноценны, можно использовать любой из них. Для общих модулей имеется больше настроек, чем для модулей менеджеров. В частности, можно использовать возможность кэширования возвращаемых значений функций. (Это означает, что при повторном вызове функции будет возвращено ранее вычисленное значение, без повторного обращения к данным). Коэффициент пересчета единиц измерения считаем условно-постоянным, он изменяется достаточно редко, поэтому использование общего модуля с установленным свойством повторного использования возвращаемых значений будет несколько более оптимальным с точки зрения производительности.
Добавим общий модуль ОбщегоНазначенияПовИсп со следующими свойствами:
- Сервер – Истина
(т.к. потребуется обращение к таблицам базы данных) - Вызов сервера – Истина
(т.к. функции этого модуля будут вызываться из клиентских модулей – модулей форм документов) - Повторное использование возвращаемых значений – На время сеанса
(Заметим, что даже если это свойство установлено в значение «На время сеанса», время сохранения ранее вычисленных значений функций не превышает 20 минут с момента последнего к ним обращения. А для нашей задачи такая задержка обновления коэффициента пересчета некритична)
Рисунок 1 – Свойства общего модуля ОбщегоНазначенияПовИсп
В общем модуле напишем экспортную функцию ПолучитьКоэффициент:
Функция ПолучитьКоэффициент(ЕдиницаИзмерения) Экспорт Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ЕдиницыИзмерения.Коэффициент |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Ссылка = &ЕдиницаИзмерения |"; Запрос.УстановитьПараметр("ЕдиницаИзмерения", ЕдиницаИзмерения); РезультатЗапроса = Запрос.Выполнить(); // 1. Проверка результата запроса на пустоту Если РезультатЗапроса.Пустой() Тогда Возврат 0; КонецЕсли; // 2. Открытие выборки и получение данных Данные = РезультатЗапроса.Выбрать(); Данные.Следующий(); Возврат Данные.Коэффициент; КонецФункции
Обратим внимание, что всегда желательно делать проверку результата запроса на пустоту (п. 1):
Если РезультатЗапроса.Пустой() Тогда …
перед открытием выборки (п. 2):
Данные = РезультатЗапроса.Выбрать();
Дело в том, что на открытие выборки система всегда тратит некоторые ресурсы, и если запрос пуст, то эти траты окажутся напрасными.
Заметим также, почему в данном случае предпочтительнее использовать именно запрос. Казалось бы, данная функция могла быть гораздо проще:
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии закрыты