Опубликован: 06.12.2011 | Уровень: для всех | Доступ: платный
Лекция 6:

Программная работа со справочниками, обработки, простые отчеты

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

&НаКлиенте
Процедура ВывестиСписокСправочников(Команда)
  ВывестиИменаСправочников();
КонецПроцедуры

Процедура ВывестиИменаСправочников()
  Для каждого Справочник из Метаданные.Справочники Цикл
        Сообщить (Справочник.Имя);
  КонецЦикла;
КонецПроцедуры

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

Вывод списка справочников

Рис. 5.6. Вывод списка справочников

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

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

Настройка нового реквизита формы

увеличить изображение
Рис. 5.7. Настройка нового реквизита формы

Добавим еще один реквизит – назовем его ИмяСправочника, тип Строка, длина100. Сюда пользователь будет вводить имя справочника, в котором он хочет создать новый элемент. На нашей форме теперь имеются три логически связанных элемента. Удобно объединить их в одну группу, чтобы пользователь сразу мог понять, что они работают вместе. Для этого можно сгруппировать элементы. В командной панели вкладки Элементы нажмем на кнопку Добавить, появится окно – Тип элемента ( рис. 5.8.), среди списка элементов, представленных в котором, можно найти несколько видов групп.

Добавление новой группы на форму

Рис. 5.8. Добавление новой группы на форму

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

Добавление новой группы на форму

увеличить изображение
Рис. 5.9. Добавление новой группы на форму
Лариса Дятчина
Лариса Дятчина

Код 

&НаКлиенте

Процедура ОсновноеКонтактноеЛицоПриИзменении(Элемент)

Если НЕ ПроверитьЗаполнениеРеквизита() Тогда

 Сообщить("Выбранное контактное лицо, "+Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента.");

КонецЕсли;

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

 

&НаСервере

Функция ПроверитьЗаполнениеРеквизита()

 Возврат (Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);  

КонецФункции

&НаСервере

Процедура УстановитьНомерПредставителя()

 

 Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения;

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

При проверке выдает ошибку:

{Справочник.Контрагенты.Форма.ФормаСписка.Форма(12,11)}: Переменная не определена (Объект)
 Возврат (<<?>>Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);   (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,2)}: Переменная не определена (Объект)
 <<?>>Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,32)}: Переменная не определена (Объект)
 Объект.ТелефонКонтактногоЛица=<<?>>Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(6,41)}: Переменная не определена (Объект)
 Сообщить("Выбранное контактное лицо, "+<<?>>Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента."); (Проверка: Тонкий клиент)

 

работаю на версии 1С:Предприятие 8.3 (8.3.10.2650)

максим матасов
максим матасов
Леонид Альбрехт
Леонид Альбрехт
Россия, Екатеринбург, 10, 2004
Оксана Максимова
Оксана Максимова
Россия, Екатеринбург, Уральский государственный университет им. А. М. Горького, 2013