Решаем задачи автоматизации
На базе программ 1С
И собственных решений
А потом обслуживаем
По разумным ценам
Контроль вносимых изменений. Исключение избыточной нагрузки. Мгновенный отклик 1С, исключение простоев в работе.
На общих модулях лежит обязанность хранения процедур и функций, которые вызываются из других мест системы 1С. Считается хорошим тоном размещение кода, вызывающегося несколько раз, в процедуре в общем модуле. Это правило универсально для всех конфигураций, поэтому любой разработчик 1С должен уметь работать с этими объектами конфигурации. Для этого нужно понимать все нюансы и уметь правильно использовать предоставленные платформой возможности.
После создания функции в одном из модулей объекта возникла потребность использовать аналогичный алгоритм в другом месте. Самое правильно, что можно здесь сделать – перенести код в общий модуль, но перед этим необходимо создать его. Чтобы это сделать, нам нужно зайти в конфигуратор и в дереве конфигурации найти вкладку «Общие». Затем выделить «Общие модули» и воспользоваться кнопкой в виде белого плюса на зеленом кружке.
Справа откроются свойства добавленного общего модуля, и нам предстоит разобраться, что обозначает каждое из них. Они могут быть различной направленности, поэтому, перед тем как настраивать новый объект, желательно определиться, что мы там будем хранить. Если что, в будущем можно будет изменить свойства в соответствии с задачами:
Бывают ситуации, когда требуется создать общий модуль с вызовами процедуры на сервере и клиенте с отличиями в алгоритме. Для разграничения кода используются директивы препроцессора с проверкой. В результате для серверного вызова это будет один код, а для клиентского – другой.
Процедура АлгоритмСерверКлиент() Экспорт
#Если ТонкийКлиент Тогда
// код выполняется, если вызов процедуры пришел с клиента
ПоказатьОповещениеПользователя("На клиенте");
ИначеЕсли Сервер Тогда
// код выполняется, если вызов процедуры пришел с сервера
ПеременнаяСервер = "Серверный вызов";
#КонецЕсли
КонецПроцедуры
Рассмотрим ситуацию, когда у нас два события на форме документа задействуют одну процедуру перемножения количества и цены в табличной части. Это достаточно распространенный алгоритм, так как он встречается во многих документах закупки и реализации. Перенесем код процедуры в общий модуль, который необходимо предварительно создать, чтобы получить возможность использовать этот код в других документах.
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
ПересчетСуммы();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
ПересчетСуммы();
КонецПроцедуры
&НаКлиенте
Процедура ПересчетСуммы()
СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
СтрокаТЧ.Сумма = СтрокаТЧ.Количество * СтрокаТЧ.Цена;
КонецПроцедуры
Так как для нашей задачи нам хватает вызова с клиента и не нужны данные из базы, ставим только флаг «Клиент». Если вы хотите в дальнейшем использовать этот же модуль для более сложных расчетов, то отметьте в свойствах еще и «Сервер». Подготовительный этап завершен и можем переходить к написанию кода.
Создадим экспортную процедуру в модуле и перенесем туда алгоритм расчета суммы из процедуры в модуле формы. В качестве параметра процедуры на входе будет использоваться строка табличной части. В модуле формы документа меняем вызовы процедуры в том же модуле на вызов процедуры из общего модуля.
Процедура РассчитатьСтроку(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Фрагмент 1
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
//вызов процедуры из общего модуля
РасчетыВСистеме.РассчитатьСтроку(Элементы.Товары.ТекущиеДанные);
//ПересчетСуммы();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
//вызов процедуры из общего модуля
РасчетыВСистеме.РассчитатьСтроку(Элементы.Товары.ТекущиеДанные);
//ПересчетСуммы();
КонецПроцедуры
&НаКлиенте
Процедура ПересчетСуммы()
СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
СтрокаТЧ.Сумма = СтрокаТЧ.Количество * СтрокаТЧ.Цена;
КонецПроцедуры
Фрагмент 2
При запуске системы мы не заметим разницы, но такую структуру кода читать и сопровождать намного удобнее. Конечно, в данном примере количество кода не может показать всей пользы. В случае сложного алгоритма для десятков объектов конфигурации выигрыш в объеме кода и его структуры скажется и на быстродействии системы. Помимо этого опытные разработчики 1С рекомендуют в модулях формы не описывать алгоритмы, а помещать их в правильно настроенные общие модули.
При разработке общих модулей следует учитывать общепринятые правила по их созданию:
Правильно созданные модули помогут вам намного быстрее ориентироваться в структуре конфигурации и делать доработки. Если вы видите возможность сделать полезную функцию универсальной и вынести ее в общий модуль, то сделайте это. В будущем вы и ваши коллеги будете благодарны за это решение.
Подпишитесь на рассылку и получайте самые свежие статьи 1 раз в месяц специально для вас
«Обращение в нашу компанию гарантирует, что мы сделаем все необходимое и даже больше, чтобы вы остались довольны и рекомендовали нас своим друзьям и деловым партнерам!»
Вы успешно отправили ваше обращение для нашего директора.
Ответ поступит на адрес почты, указанной вами в форме отправки.