Материал: Клиент-серверный вариант работы системы «1С. Предприятие». методические указания к выполнению лабораторных работ по теме «Информационная база. Конфигурация. Справочники. Документы». Петрухнова Г.В

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
    1. Именование объектов вида «Справочник» и «Документ»

Интересно обратить внимание на разницу в употреблении единственного и множественного числа при именовании объектов вида Справочник и Документ.

Если открыть дерево типовой конфигурации, то можно увидеть, что все объекты, расположенные в ветке Справочники, как правило, именованы во множественном числе, в ветке Документы - в единственном числе.

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

При создании в конфигураторе объекта вида Справочник ему дается наименование во множественном числе (Товары). При этом подразумевается, что в БД этот объект будет состоять из элементов, описывающих конкретные товары (в единственном числе).

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

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

    1. Автоматический пересчет суммы в строках документа

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

Те предопределенные формы объектов, которые уже использовались, система 1С:Предприятие по умолчанию создавала сама. Теперь же возникла необходимость слегка изменить логику работы формы документа, поэтому создадим свою собственную форму документа ПриходнаяНакладная для того, чтобы в ней с помощью встроенного языка описать необходимый алгоритм. И система будет использовать нашу форму вместо формы по умолчанию.

Вернемся в конфигуратор и откроем окно редактирования объекта конфигурации Документ ПриходнаяНакладная (можно дважды щелкнуть правой клавишей мышки) и перейдем на закладку Формы. Ни одна из основных форм документа пока не задана. Чтобы создать форму документа, нажмем кнопку открытия   со значком лупы в поле ввода или кнопку Добавить над списком форм.

Система вызовет еще один полезный инструмент разработчика – конструктор формы.

Этот инструмент также построен по принципу «мастеров»: ввод данных в определенной последовательности и передвижение кнопками Далее и Назад.

Выберем тип формы Форма документа и нажмем кнопку Готово, согласившись тем самым со всем, что нам предложила система.

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

Редактор форм объединяет несколько окон взаимосвязанных между собой редакторов. Не будем разбирать подробно работу с редактором форм, а остановимся лишь на тех моментах, которые нужны для выполнения простейших действий, связанных с нашей задачей.

Рассмотрим в режиме просмотра окно формы документа, расположенное внизу, а также окно редактора элементов формы, расположенное слева в верхней части окна редактора форм.

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

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

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

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

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

Рассмотрим три элемента табличной части: МатериалыКоличество, МатериалыЦена и МатериалыСумма. Сделаем так, чтобы каждый раз при изменении значения в поле Количество или в поле Цена, в поле Сумма автоматически устанавливалось значение, равное произведению значений полей Количество и Цена.

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

    1. Обработчик события

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

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

Найдем в списке событие ПриИзменении и нажмем кнопку открытия со значком лупы в поле ввода.

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

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

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

&НаКлиенте

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

СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

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

КонецПроцедуры

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

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

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

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

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

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

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

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

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

    1. Процедура для обработки нескольких

событий

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

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

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

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

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

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

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

КонецПроцедуры

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

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

В модуле формы изменим текст обработчика.

&НаКлиенте

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

СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

КонецПроцедуры

Первая строка процедуры осталась без изменений. А во второй строке вместо непосредственного расчета суммы вызываем процедуру РассчитатьСумму() из общего модуля РаботаСДокументами и передаем ей в качестве параметра текущую строку табличной части.

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

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

Поскольку в модуле формы уже написана нужная процедура, по логике можно было бы сопоставить ее также и другому событию другого элемента управления, расположенного в форме. Однако стандарты разработки конфигураций фирмы «1С» не  допускают такого решения.

Согласно стандартам разработки фирмы «1С» у каждого события должен быть свой обработчик. Если одинаковые действия должны выполняться при изменении разных элементов управления (например, при нажатии нескольких кнопок), то в этом случае следует поступать следующим образом:

  • создается отдельная процедура (функция), выполняющая необходимые действия;

  • для каждого элемента управления создается отдельный обработчик с именем, назначаемым по умолчанию;

  • из каждого обработчика вызывается требуемая процедура (функция).

Источник: https://studfile.net/preview/16569062/