World 1C

Блог для программистов и пользователей платформы 1С:Предприятие

Управляемое приложение. Базовые приёмы разработки (часть 1)

С выходом платформы 1С:Предприятие 8.2 подход к разработке принципиально изменился. Это касается как интерфейса (появились “управляемые формы”, которые не “рисуются”, а описываются), так и разделения функциональности между клиентом и сервером. Подробнее об это можно узнать здесь. И хотя с момента выхода новой платформы уже и прошло достаточно много времени, начинающий разработчик, а иной раз и программист со стажем зачастую сталкивается с тем, что не знает с чего начать изучение её новых возможностей. В этой статье я приведу некоторые простые примеры, которые помогут начать знакомство с этими возможностями.
Начинать будем с самого простого, не углубляясь в тонкости клиент-серверного взаимодействия и другие сложные механизмы работы платформы. За основу для разработки возьмём конфигурацию из статьи “Ограничение доступа на уровне записей (RLS)” (скачать). В ней уже есть несколько справочников (Контрагенты, Организации и Пользователи).
Создадим документ “Корректировка долга” с реквизитами “Организация”, “Контрагент” и “Сумма”, который будет менять состояние взаиморасчетов с контрагентами (уменьшать или увеличивать долг контрагентов).
Документ “Корректировка долга” Регистр “Взаиморасчеты”

Создадим регистр накопления “Взаиморасчеты” с двумя измерениями (“Организация”, “Контрагент”) и одним ресурсом – “Сумма”. Выберем документ “Корректировка долга” в качестве регистратора для регистра “Взаиморасчеты”.

Регистр “Взаиморасчеты”

Опишем предопределенную процедуру “ОбработкаПроведения” документа “Корректировка долга”.

// обработка проведения документа "Корректировка долга"
Процедура ОбработкаПроведения(Отказ, Режим)
  Движения.Взаиморасчеты.Записывать = Истина;
  Движение = Движения.Взаиморасчеты.Добавить();
  Движение.ВидДвижения = ?(Сумма > 0,ВидДвиженияНакопления.Приход, ВидДвиженияНакопления.Расход);
  Движение.Период = Дата;
  Движение.Организация = Организация;
  Движение.Контрагент = Контрагент;
  Движение.Сумма = ?(Сумма > 0,Сумма,-Сумма);
КонецПроцедуры

Как видно из кода, документ будет выполнять по регистру “Взаиморасчеты” движения с видом “Приход” (увеличивать долг) в случае, если значение реквизита “Сумма” больше нуля, и движения с видом “Расход” (уменьшение долга) в случае отрицательного значения реквизита “Сумма”.

Стоит отметить, что нулевое значение суммы не возможно в силу наложенного на данный реквизит ограничения – свойство “Проверка заполнения” для него установлено в значение “Выдавать ошибку”. Аналогичные ограничения установлены и для других реквизитов документа “Корректировка долга”. Эта новая (по сравнению с предыдущими релизами платформы 1С) возможность позволяет сократить время разработки, избавив программиста от необходимости писать код проверки заполненности реквизитов документа. А вот как эта проверка выглядит в пользовательском режиме:
Работа свойства “Проверка заполнения”для реквизита “Сумма”

 

Приступим к разработке управляемой формы документа “Корректировка долга”. На закладке “Элементы” добавим группу “НомерДата”.
Форма документа “Корректировка долга”
Добавим в группу реквизиты “Номер” и “Дата” и изменим свойства группы на следующие: Группировка – Горизонтальная, Отображение – Нет, Отображать заголовок – нет. Ниже расположим реквизит “Организация”, а под ним группу “КонтрагентСумма” с реквизитами “Контрагент” и “Сумма” (свойства аналогичны свойствам группы “НомерДата”). Для реквизита “Сумма” установим значение свойства “Ширина” равным 10.
Установим связь между реквизитам “Организация” и “Контрагент”. Для этого воспользуемся свойствами “Связи параметров выбора” и “Параметры выбора” реквизита “Контрагент”. Они должны быть установлены следующим образом.
Свойства поля “Контрагент” формы документа “Корректировка долга”
В результате такой настройки, при заполнении реквизита “Контрагент” справочник будет открываться с установленным отбором по организации, выбранной в реквизите документа, а при очистке поля “Контрагент” поле “Организация” будет очищаться вместе с ним.
Далее перейдем на закладку “Командный интерфейс” и установим флаг “Видимость” в группе “Перейти” навигационной панели. Благодаря этому мы сможем переходить к движениям, выполненным документом “Корректировка долга” по регистру “Взаиморасчеты”, прямо из формы документа. Замечу, что по нажатию на гиперссылку рядом с флажком “Видимость” открывается окно настройки видимости по ролям. Таким образом, при желании мы можем снять видимость данного пункта для отдельных ролей.
Командный интерфейс формы документа “Корректировка долга”

Основная часть готова. Осталось навести немного красоты. Начнём с модификации командного интерфейса рабочего стола (правая кнопка мыши на корне конфигурации, пункт выпадающего меню “Открыть командный интерфейс рабочего стола”).

Командный интерфейс рабочего стола

Здесь мы переместим справочники “Организации” и “Контрагенты” из панели навигации “Обычное” в панель навигации “Важное”. Благодаря такой настройке эти справочники будут выделены жирным шрифтом и находится в верхней части левой панели рабочего стола.
В панели действий “Создать” установим флаги напротив пунктов “Контрагент: создать” и “Корректировка долга: создать”. Таким образом пользователь будет иметь возможность быстро добавлять новых контрагентов и документы корректировки долга из панели действий “Создать” в верхней части рабочего стола.

Навигационные панели рабочего стола

Теперь займёмся заполнением рабочего стола (правая кнопка мыши на корне конфигурации, пункт выпадающего меню “Рабочая область рабочего стола”). Сюда будем выводить документы “Корректировка долга”, сгруппированные по контрагентам, и список контрагентов с дополнительной колонкой “Сумма долга”. Для этого нам понадобится ещё по одной управляемой форме для каждого из этих объектов. С помощью конструктора форм создадим ещё одну форму списка для документа “Корректировка долга”. Откроем свойства реквизита “Список” на закладке “Реквизиты” окна редактирования формы. В палитре свойств перейдем по гиперссылке “Открыть” свойства “Настройка списка”.

Настройка динамического списка документов “Корректировка долга”

В открывшемся окне перейдем на вкладку “Группировка” и добавим группировку по полю “Контрагент”.

Настройка динамического списка документов “Корректировка долга”

Аналогичным образом создадим дополнительную форму списка для справочника “Контрагенты”. В свойствах динамического списка установим флаг “Произвольный запрос” и перейдём по гиперссылке “Открыть” свойства “Настройка списка”. В конструкторе запроса преобразуем текст следующим образом:

ВЫБРАТЬ
 СправочникКонтрагенты.Ссылка,
 СправочникКонтрагенты.ВерсияДанных,
 СправочникКонтрагенты.ПометкаУдаления,
 СправочникКонтрагенты.Предопределенный,
 СправочникКонтрагенты.Родитель,
 СправочникКонтрагенты.ЭтоГруппа,
 СправочникКонтрагенты.Код,
 СправочникКонтрагенты.Наименование,
 СправочникКонтрагенты.Организация,
 ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаОстаток, 0) КАК СуммаДолга
ИЗ Справочник.Контрагенты КАК СправочникКонтрагенты
 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Взаиморасчеты.Остатки КАК ВзаиморасчетыОстатки
 ПО СправочникКонтрагенты.Ссылка = ВзаиморасчетыОстатки.Контрагент
Вернемся к форме “Рабочая область рабочего стола”.  Выберем в качестве шаблона рабочего стола вариант “Две колонки одинаковой ширины”. В левую колонку добавим только что созданную форму списка документа “Корректировка долга”, а в правую – справочника “Контрагенты”.
Настройка рабочей области рабочего стола

На этом всё. Посмотрим как теперь выглядит наш рабочий стол в пользовательском режиме.

В следующей статье мы разработаем отчет “Ведомость взаиморасчетов”

Скачать пример

 

Поделиться
  • Twitter
  • Добавить ВКонтакте заметку об этой странице
  • Facebook
  • Одноклассники
  • LiveJournal
  • Мой Мир
  • В закладки Google
  • FriendFeed
  • Блог Я.ру

, ,

6 комментария(ев) к “Управляемое приложение. Базовые приёмы разработки (часть 1)
  • Марина:

    Большое спасибо. Пригодилось

  • Общий рабочий стол – это-то плёвое и понятное дело!
    Каверзный вопрос:
    А можно ли в 1С Предприятие (управляемое приложение) сделать рабочие столы на каждую подсистему?
    Заранее спасибо за информацию!

    • admin:

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

      • Вот именно про последнее я и имел в виду. Кто-нибудь слышал – разрабы вообще собираются двигаться в этом направлении?

        • admin:

          На партнёрском форуме 1С эта тема обсуждается с 2008 года. Основное пожелание разработчиков конфигураций состоит в том чтобы 1С добавила в платформу обработчик события перехода пользователя по подсистемам. За счёт этого можно было бы видоизменять рабочий стол, а также выполнять какие-либо другие действия (например, открытие одной или нескольких форм) при переходе по подсистемам. Но до настоящего времени в платформе ничего не изменилось в этом плане. На сколько я понимаю фирма 1С почему-то не считает это целесообразным. Хочу заметить, что с появлением интерфейса “Такси” задача открытия каких-либо форм при переходе по подсистемам стала неактуальной в связи с тем, что при щелчке по подсистеме открывается подменю со списком объектов.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>