Хранилище для текста программы на встроенном языке это

Щелкните правой кнопкой мыши на поле ввода в колонке Количество и откройте для него палитру свойств (пункт контекстного меню Свойства). Прокрутите список до конца, и вы обнаружите перечень событий, которые могут быть связаны с этим полем ввода.

С большинством элементов управления связаны различные события, и именно с их помощью разработчик может влиять на ход работы программы.

Среди событий, связанных с полем ввода, найдите событие При изменении. Это событие возникает после изменения значения поля ввода.

Щелкните по кнопке с лупой в конце поля ввода, и система создаст заготовку процедуры обработчика этого события в модуле нашей формы (рис. 3.10).

Рис. 3.10. Выберем событие «При изменении», и система создаст заготовку процедуры в модуле формы…

Модуль – это «хранилище» для текста программы на встроенном языке. В конфигурации существует большое количество модулей, которые расположены в различных ее точках. Они могут принадлежать некоторым объектам конфигурации (например, формам), а могут существовать сами по себе (принадлежать всей конфигурации в целом). Текст программы, содержащийся в модулях, будет использоваться платформой в заранее известные моменты работы системы 1С:Предприятие.

Хранилище конфигурации. Работаем с 1С правильно.

В модуль формы, в процедуру МатериалыКоличествоПриИзменении() добавим следующий текст (листинг 3.1):

Листинг 3.1. Процедура МатериалыКоличествоПриИзменении()

СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

Объясним назначение этих строк.

В первой строке мы обращаемся к программному объекту ЭлементыФормы. Этот объект является коллекцией значений, содержащей все элементы управления, расположенные на нашей форме. Каждый элемент управления формы можно получить, указав его имя в качестве свойства объекта ЭлементыФормы. В данном случае мы обращаемся к элементу управления с именем Материалы (ЭлементыФормы.Материалы).

Этот элемент управления отображает строки табличной части нашего документа. Получить ту строку, в которой в настоящее время осуществляется редактирование, можно при помощи свойства программного объекта ТабличноеПоле – ТекущиеДанные. Таким образом, в результате выполнения первой строки переменная СтрокаТабличнойЧасти будет содержать объект ДокументТабличнаяЧастьСтрока.ПриходнаяНакладная.Материалы, в котором находятся редактируемые данные.

Во второй строке вычисляется сумма как произведение количества и цены. Объект ДокументТабличнаяЧастьСтрока. позволяет обратиться к данным конкретной колонки, указав имя колонки в качестве свойства объекта (например, СтрокаТабличнойЧасти.Количество).

Теперь посмотрим, как это работает. В окне программы откроем список документов ПриходнаяНакладная и откроем любой из двух созданных нами документов. Если теперь вы поменяете количество в любой строке документа, то сумма в строке будет пересчитана автоматически.

Замечательно. Но теперь хотелось бы и для поля Цена сделать то же самое. А если заглянуть вперед, то мы увидим, что подобное автоматическое заполнение поля Сумма может нам понадобиться и в других документах. Поэтому лучше будет поместить расчет суммы в некотором «общедоступном» месте, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм.

Основы работы с хранилищем конфигурации 1С

Для описания таких «общедоступных» мест служат объекты конфигурации Общий модуль, расположенные в ветке Общиеà Общие модули. Процедуры и функции, содержащиеся в этих модулях, могут быть доступны для любых объектов конфигурации.

Создание процедуры обработки события в общем модуле

Для того чтобы алгоритм, выполняемый при обработке события, был доступен для разных документов, мы создадим общий модуль и перенесем в него нашу процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры из общего модуля.

Создадим объект конфигурации Общий модуль в ветке Общие à Общие модули и назовем его РаботаСДокументами. Он будет содержать следующий текст (листинг 3.2):

Листинг 3.2. Процедура РассчитатьСумму()

Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт

СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

Ключевое слово Экспорт в конце оператора Процедура как раз указывает на то, что эта процедура может быть доступна из других программных модулей.

Затем в модуле нашей формы изменим текст нашего обработчика (листинг 3.3):

Листинг 3.3. Процедура МатериалыКоличествоПриИзменении()

Таким образом, теперь вместо непосредственного расчета суммы мы будем вызывать процедуру из общего модуля и передавать ей в качестве параметра нужную нам строку табличной части.

Проверим, как это работает, и убедимся, что ничего не изменилось.

Теперь осталось и для поля Цена установить такой же обработчик.

Создайте обработчик события При изменении для поля ввода, которое расположено в колонке Цена, и повторим в нем вызов процедуры РассчитатьСумму из общего модуля (листинг 3.4):

Листинг 3.4. Процедура МатериалыЦенаПриИзменении()

Запустим 1С:Предприятие в режиме отладки и убедимся, что теперь сумма в строках табличной части документов Приходная накладная пересчитывается как при изменении количества, так и при изменении цены.

Читайте также:
Программы питания для новичков

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

Информационные системы / Курсовая_6_семестр / Учебники / Радченко М.Г. 1С- Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы (2013) (1)

Занятие 4 14 1 Мы хотим, чтобы каждый раз, когда меняется значение в поле Количество или в поле Цена , в поле Сумма автоматически устанавливалось значение, равное произведению значений полей Количество и Цена . Очевидно, что для этого нужно написать на встроенном языке команду, похожую на Сумма = Количество*Цена , которая будет выполняться при изменении значения поля Количество или Цена . Но как «поймать» эти моменты изменения? Обработчик события Как мы уже видели, система сама умеет работать с теми объектами, которые описаны в дереве конфигурации: показывать их данные, добавлять новые элементы и пр.

То есть у нее есть некие «стандартные представления» о том, как это все должно работать. Но, как правило, разработчиков эти «стандартные представления» устраивают только в самых простых случаях. Реальные задачи гораздо разнообразнее. Поэтому у системы существуют события , которые связаны с самыми различными моментами ее «стандартного» функционирования.

В том числе события, связанные с функционированием форм и элементов, расположенных в этих формах. Используя встроенный язык, разработчик может «вклиниться» в эти события и описать собственный алгоритм того, что должно происходить при наступлении этого события. Что мы сейчас и сделаем.

Дважды щелкнем на элементе формы МатериалыКоличество или правой кнопкой мыши откроем для него палитру свойств (пункт контекстного меню Свойства ). Прокрутив список до конца, мы увидим перечень событий, которые могут быть связаны с этим полем. Очевидно, что нам нужно событие ПриИзменении , которое возникает послеизменениязначенияполя.Найдемеговспискесобытийи нажмем кнопку открытия со значком лупы в поле ввода (рис.

4.21). Система предложит окно для выбора типа обработчика события, который мы хотим создать (рис. 4.22). Оставим без изменения вариант Создать на клиенте , предложенный по умолчанию. Пока мы не будем более подробно рассматривать этот момент.

Вернемся к этому вопросу позднее в разделе «Директивы компиляции» на стр. 205.

142 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 4.21. Создание обработчика события «ПриИзменении» поля табличной части «Количество» Рис. 4.22.

Окно для выбора типа создаваемого обработчика события После этого система создаст шаблон процедуры обработчика этого события в модуле нашей формы и откроет закладку Модуль редактора формы (рис. 4.23). Модуль – это «хранилище» для текста программы на встроенном языке. Модулей существует несколько, и каждый из них предназначен для описания алгоритмов, относящихся к тому или иному моменту работы программы. В данном случае это модуль формы, так как обработчики всех интерактивных событий, связанных с элементами формы, помещаются именно в модуль формы.

Занятие 4 14 3 Рис. 4.23. Шаблон обработчика события «ПриИзменении» поля табличной части «Количество» В модуль формы, в процедуру МатериалыКоличествоПриИзменении() мы и добавим следующий текст (листинг 4.1). Листинг 4.1.

Процедура «МатериалыКоличествоПриИзменении()» СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные; СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена; Объясним назначение этих строк. В первой строке мы сначала создаем переменную СтрокаТабличнойЧасти , в которую будет помещен объект, содержащий данные, находящиеся в строке табличной части, которую нам нужно пересчитать.

Мягкая типизация данных встроенного языка позволяет сделать это, не объявляя переменную и ее тип заранее. Мы создаем переменную прямо по ходу работы, и ее тип определяется типом значения, которое она содержит. Поскольку мы находимся в модуле формы, то в нем доступны все свойства и методы объекта встроенного языка УправляемаяФорма . Поэтому мы можем обращаться к ним напрямую.

В данном случае после знака равенства мы обращаемся к коллекции элементов формы, используя одно из свойств объекта УправляемаяФорма – свойство Элементы . Коллекция элементов формы является объектом встроенного языка ВсеЭлементыФормы , содержащим все элементы формы. То есть это программный аналог корня дерева элементов формы. Каждый элемент формы можно получить, указав его имя в качестве свойства этого объекта, то есть через точку от него. В данном случае мы обращаемся к табличной части документа Материалы ( Элементы.Материалы ).

144 1С:Предприятие 8.3. Практическое пособие разработчика Табличная часть документа представляет собой объект встроенного языка ТаблицаФормы . Получить ту строку, в которой в настоящее время осуществляется редактирование, можно при помощи свойства программного объекта ТаблицаФормы – ТекущиеДанные ( Элементы.Материалы.ТекущиеДанные ). Таким образом, в результате выполнения первой строки процедуры обработчика переменная СтрокаТабличнойЧасти будет содержать объект ДанныеФормыСтруктура . Этот объект содержит данные, находящиеся в текущей строке табличной части документа ( Элементы.Материалы.ТекущиеДанные ). Получив этот объект, мы можем обратиться к данным конкретной колонки табличной части, указав имя колонки в качестве свойства объекта.

Читайте также:
Программа комплексного развития систем коммунальной инфраструктуры это

Например, используя обращение СтрокаТабличнойЧасти.Количество , мы получаем число, которое находится в редактируемой строке в колонке Количество . Таким образом, во второй строке процедуры обработчика вычисляется значение колонки Сумма как произведение значений колонок Количество и Цена . В режиме «1С:Предприятие» Теперь посмотрим, как это работает. Запустим «1С:Предприятие» в режиме отладки, откроем список документов Приходные накладные и откроем любой из двух созданных нами документов.

Если теперь вы поменяете количество в любой строке документа, то сумма в строке будет пересчитана автоматически. Одна процедура для обработки нескольких событий Итак, мы убедились, что при изменении количества в любой строке документа Приходная накладная сумма в этой строке пересчитывается автоматически. Замечательно. Но теперь хотелось бы и для поля Цена сделать то же самое. А если заглянуть вперед, то мы увидим, что подобное автоматическое заполнение поля Сумма может нам понадобиться и в других документах.

Занятие 4 14 5 Поэтому лучше будет поместить расчет суммы в некоторое «общедоступное» место, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм. Для описания таких «общедоступных» мест служат объекты конфигурации Общий модуль , расположенные в ветке Общие  Общие модули . Процедуры и функции, содержащиеся в этих модулях, могут быть доступны для любых объектов конфигурации.

Поэтому создадим общий модуль и перенесем в него нашу процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры из общего модуля. В режиме «Конфигуратор» Общий модуль Добавим объект конфигурации Общий модуль . Для этого раскроем ветвь Общие в дереве объектов конфигурации, нажав на + слева от нее. Затем выделим ветвь Общие модули и нажмем кнопку Добавить в командной панели окна конфигурации (рис. 4.24).

Рис. 4.24. Создание общего модуля в дереве объектов конфигурации

146 1С:Предприятие 8.3. Практическое пособие разработчика Откроется окно для ввода текста модуля и окно палитры его свойств. Дадимимямодулю– РаботаСДокументами иустановимвегосвойствах флажок Клиент (управляемое приложение) , а флажок Сервер снимем. Это означает, что экземпляры этого модуля будут скомпилированы в контексте тонкого клиента и в контексте веб-клиента (рис. 4.25).

Рис. 4.25. Свойства общего модуля Внесем в модуль следующий текст (листинг 4.2). Листинг 4.2. Процедура «РассчитатьСумму()» Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена; КонецПроцедуры Прокомментируем этот код.

В процедуру РассчитатьСумму() мы передаем переменную СтрокаТабличнойЧасти , которую мы определили в обработчике события ПриИзменении поля Количество . Она содержит данные редактируемой строки табличной части документа ПриходнаяНакладная . Теперь, используя эту переменную, мы можем получить доступ к данным колонок табличной части и рассчитать сумму как произведение цены на количество. Ключевое слово Экспорт в заголовке процедуры указывает на то, что эта процедура может быть доступна из других программных модулей.

Занятие 4 14 7 Теперь в модуле нашей формы изменим текст обработчика Материа- лыКоличествоПриИзменении (листинг 4.3). Листинг 4.3.

Процедура «МатериалыКоличествоПриИзменении()» РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти); КонецПроцедуры Мы видим, что первая строка процедуры осталась без изменений. А во второй строке вместо непосредственного расчета суммы мы вызываем процедуру РассчитатьСумму() из общего модуля РаботаСДокументами и передаем ей в качестве параметра текущую строку табличной части.

Проверим, как это работает, и убедимся, что ничего не изменилось. Теперь осталось и для поля Цена установить такой же обработчик. Так как однажды мы уже написали в модуле формы нужную нам процедуру, то мы просто могли бы сопоставить ее также и другому событию другого элемента управления, расположенного в форме.

Однако стандарты разработки конфигураций фирмы «1С» не допускают такого решения. Узнай больше! Согласно стандартам разработки фирмы «1С» у каждого события должен быть свой обработчик. Если одинаковые действия должны выполняться при изменении разных элементов управления (например, принажатиинесколькихкнопок),товэтомслучаеследуетпоступать следующим образом: • создается отдельная процедура (функция), выполняющая необходимые действия; • для каждого элемента управления создается отдельный обработчик с именем, назначаемым по умолчанию; • из каждого обработчика вызывается требуемая процедура (функция). Поэтому мы создадим обработчик события ПриИзменении для поля табличной части МатериалыЦена так же, как мы делали это для поля МатериалыКоличество , и повторим в нем вызов процедуры РассчитатьСумму из общего модуля (листинг 4.4).

Читайте также:
Как научиться создавать программы для iOs

148 1С:Предприятие 8.3. Практическое пособие разработчика Листинг 4.4.

Процедура «МатериалыЦенаПриИзменении()» РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти); КонецПроцедуры В режиме «1С:Предприятие» Запустим «1С:Предприятие» в режиме отладки и убедимся, что теперь сумма в строках табличной части документов ПриходнаяНакладная пересчитывается как при изменении количества, так и при изменении цены. Документ «Оказание услуги» Теперь мы аналогичным образом создадим второй документ, необходимый нам, – Оказание услуги . Для этого потребуется выполнить уже знакомые нам действия, которые мы выполняли по созданию документа Приходная накладная (стр. 125). В режиме «Конфигуратор» Добавим новый объект конфигурации Документ и назовем его Оказа- ниеУслуги . На закладке Основные определим, как будет представлен документ в интерфейсе «1С:Предприятия». Представление объекта задавать не будем, вместо него будет использоваться Синоним объекта. Представление списка зададим как Оказание услуг . На закладке Подси- стемы отметим, что документ будет доступен в подсистемах Оказание услуг и Бухгалтерия . На закладке Данные создадим реквизиты документа: Склад , тип СправочникСсылка.Склады . Выберем для свойства Значение заполнения предопределенный элемент Основной справочника Склады ; Клиент , тип СправочникСсылка.Клиенты . Установим свойство Проверка заполнения в значение Выдавать ошибку ; Мастер , тип СправочникСсылка.Сотрудники . Установим свойство Проверка заполнения в значение Выдавать ошибку .

Занятие 4 14 9 Создадим табличную часть этого документа ПереченьНоменклатуры с реквизитами: Номенклатура , тип СправочникСсылка.Номенклатура ; Количество , тип Число , длина 15 , точность 3 , неотрицательное; Цена , тип Число , длина 15 , точность 2 , неотрицательное, Сумма , тип Число , длина 15 , точность 2 , неотрицательное. Установим для табличной части в целом и для каждого ее реквизита свойство Проверка заполнения в значение Выдавать ошибку . На закладке Формы создадим основную форму документа.

Для поля ПереченьНоменклатурыКоличество создадим обработчик события ПриИзменении (выполняющийся на клиенте), в котором будем вызывать процедуру РассчитатьСумму из общего модуля Рабо- таСДокументами . При этом откроется модуль формы с шаблоном обработчика события ПереченьНоменклатурыКоличествоПриИзменении , который мы пока заполнять не будем, а перейдем в окно элементов формы на закладку Форма и аналогичным образом создадим обработчик события ПереченьНоменклатурыЦенаПриИзменении для поля ПереченьНомен- клатурыЦена . Далее модуль формы документа ОказаниеУслуги нужно заполнить следующим образом (листинг 4.5). Листинг 4.5. Модуль формы документа «ОказаниеУслуги» РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти); КонецПроцедуры РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти); КонецПроцедуры В заключение отредактируем командный интерфейс, чтобы в разделе Оказание услуг была доступна команда создания новых документов. Для этого откроем окно редактирования объекта конфигурации Подсистема ОказаниеУслуг и нажмем кнопку Командный интерфейс . В открывшемся окне отразятся все команды данной подсистемы.

150 1С:Предприятие 8.3. Практическое пособие разработчика В группе Панель действий.Создать включим видимость у команды Оказание услуги: создать (рис. 4.26). Рис. 4.26. Настройка командного интерфейса подсистемы В результате наших действий

в дереве объектов конфигурации
документ ОказаниеУслуги будет
выглядеть следующим образом

(рис. 4.27).

Источник: studfile.net

Разработка в 1С. Ч.9. Модули.

Модуль — это хранилище текста программы на встроенном языке.

Модуль управляемого приложения. Выполняется при старте 1С:Предприятия в режимах тонкого клиента и веб-клиента. Процедуры и функции, хранящиеся в нём, доступны всем остальным модулям, кроме модуля внешнего соединения. В контексте модуля управляемого приложения доступны экспортируемые процедуры и функции общих модулей.

Общий модуль. В отличие от модуля управляемого приложения никогда невыполняется, а лишь служит хранилищем процедур и функций для остальных модулей.

Модули объектов. Вызываются при создании экземпляра соотвествующего объекта. При записи изменённых данных объекта в базу данных используются обработчики событий, расположенные в модуле объекта.

Модули форм. Вызывается при создании объекта «УправляемаяФорма» , то есть тогда, когда открывается форма какого-либо элемента.

Модуль сеанса. Автоматически выполняется при старте 1С в момент загрузки конфигурации. В отличие от модуля управляемого приложения не содержит экспортируемых процедур и предназначен для инициализации параметров сеанса и выполнения действий, связанных с сеансом работы.

Модуль внешнего соединения. Хранит процедуры и функции, предназначенные для сессии внешнего соединения.

Модуль менеджеров. У каждого объекта конфигурации в системе есть свой менеджер , управляющий этим объектом. С помощью менеджера можно содавать объекты, работать с формами и макетами объектов. В модуле менеджера хранятся процедуры и функции, расширяющие его функционал. Если процедуры и функции из модуля объекта применяются только к конкретному экземпляру объекта базы данных, то процедуры и функции из модуля менеджера предназначены для самого объекта конфигурации.

Источник: dzen.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru