Закрываем приложение в пользовательском режиме и возвращаемся в конфигуратор, открываем общую форму РабочийСтол.
Рис. 6-48. Общая форма РабочийСтол
Переключаемся в модуль формы. Сейчас он абсолютно пуст.
Рис. 6-49. Модуль формы РабочийСтол
Для каждой таблицы формы (а их у нас две) создадим по одной процедуре их заполнения.
Начнем с таблицы Остатки. По условиям задачи она должна отображать пользователю текущие (актуальные) остатки в кошельках. Назовем процедуру ЗаполнитьОстатки(). Внутри процедуры нужно будет обратиться к регистру Кошельки и получить оттуда актуальные остатки. Не вдаваясь в особенности методов регистров и синтаксиса встроенного языка, решение нашей задачи выглядит следующим образом – см. рис. 6-50:
НаСервере
Процедура ЗаполнитьОстатки() Остатки.Загрузить(РегистрыНакопления.Кошельки.Остатки());
КонецПроцедуры
Рис. 6-50. Процедура ЗаполнитьОстатки()
Метод «РегистрыНакопления.Кошельки.Остатки()» обращается к регистру Кошельки и получает оттуда актуальные остатки.
Метод «Остатки.Загрузить()» помещает полученные из регистра данные в таблицу Остатки.
При желании можно более подробно изучить особенности использованных в процедуре методов, обратившись к встроенному в платформу 1С:Предприятие синтаксис-помощнику. Для этого достаточно установить курсор на интересующий метод и нажать Ctrl+F1.
Для второй таблицы Затраты пишем похожий код, только получать будем не остатки, а обороты, и не из регистра Кошельки, а из регистра Затраты. Процедуру назовем ЗаполнитьЗатраты() – см. рис. 6-51:
НаСервере
Процедура ЗаполнитьЗатраты() Затраты.Загрузить(РегистрыНакопления.Затраты.Обороты());
КонецПроцедуры
Рис. 6-51. Процедура ЗаполнитьЗатраты()
Здесь метод «РегистрыНакопления.Затраты.Обороты()» обращается к регистру Затраты и получает оттуда текущие обороты по использованным статьям.
Метод «Затраты.Загрузить()» помещает полученные из регистра данные в таблицу Затраты.
Осталась самая малость – как-то инициировать выполнение только что созданных процедур. Для этого воспользуемся предопределенной для формы процедурой, срабатывающей на ее открытие - ПриОткрытии(). Здесь писать придется еще меньше – воспользуемся встроенным механизмом активации таких процедур. Нажимаем кнопку Процедуры и функции (Ctrl+Alt+P).
Рис. 6-52. Процедуры и функции
К слову, этот механизм позволяет быстро найти и пользовательские процедуры или функции – на рис. 6-52 как раз видны в самом верху две наши.
В списке ниже находим процедуру <ПриОткрытии> и дважды кликаем по ней мышью или жмем кнопку Перейти.
Рис. 6-53. Выбор ПриОткрытии
В появившемся диалоге создания процедуры выбираем вариант Создать на клиенте и нажимаем ОК.
Рис. 6-54. Варианты создания процедуры
В итоге получаем в модуле формы новую процедуру, которая будет срабатывать при открытии формы пользователем.
Рис. 6-55. ПриОткрытии
Осталось только добавить в эту процедуру вызов двух, созданных ранее для обновления табличек. Имена процедур можно просто скопировать, не забывая скобки после них и завершающий строку символ «точка с запятой» («;»).
А можно воспользоваться встроенный в текстовый редактор конфигуратора механизм автозаполнения, набрав первые буквы нужной нам процедуры, нажав на клавиатуре комбинацию Ctrl+Пробел, выбрав в появившемся списке нужную и нажав Enter.
В итоге код процедуры ПриОткрытии() должен выглядеть аналогично изображенному на рис. 6-56.
НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗаполнитьОстатки(); ЗаполнитьЗатраты();
КонецПроцедуры
Рис. 6-56. Заполненная процедура ПриОткрытии()
Запускаем пользовательский режим, соглашаемся с предложением об обновлении конфигурации и проверяем работоспособность созданного только что функционала.
Рис. 6-57. Заполнение таблиц
После запуска видно, таблица остатков по кошелькам заполнилась и отражает корректные данные. Таблица оборотов пока пуста. Зафиксируем еще одну трату – например, обед на сумму 300 рублей.
Создаем новый документ Расход.
Рис. 6-58. Создание нового документа Расход
В открывшемся окне нового документа заполняем поле Сумма и переходим к полю Кошелек.
Рис. 6-59. Заполнили сумму, перешли к кошельку
Будем считать, что за обед расплачивались наличными. В поле Кошелек выбираем уже существующий элемент Наличные. Можно просто начать набирать нужное слово, можно воспользоваться кнопкой быстрого выбора.
Рис. 6-60. Выбор кошелька
В поле Цель при попытке выбора нам будет предложено выбрать тип значения – Кошелек или Статья. Так как мы фиксируем расход – выбираем Статья.
Рис. 6-61. Выбор типа цели
В открывшемся списке кошельков добавляем в группу Затраты новый элемент – Обед. И после сохранения, выбираем его.
Рис. 6-62. Статья цели
По желанию заполняем поле Комментарий и сохраняем созданный документ в системе с регистрацией записей в регистрах – кнопка Провести и закрыть.
Рис. 6-63. Сохранение и проведение документа
Возвращаемся на рабочий стол и обнаруживаем, что таблица оборотов по прежнему пуста.
Рис. 6-64. Рабочий стол
При этом, если проверить список записей регистра Затраты (через системное меню Все функции…) – там будет все заполнено.
Рис. 6-65. Регистр Затраты
Это ошибка? Нет. Дело в том, что обновление таблиц рабочего стола мы привязали к событию «при открытии» – т.е. таблицы будут обновляться момент открытия формы рабочего стола. А в данный момент времени открытия как такового не случилось – мы просто вернулись после создания документа к уже открытой форме.
Чтобы инициировать обновление табличек можно перезапустить пользовательский режим – закрыть приложение и запустить его заново. Либо закрыть форму рабочего стола и тут же открыть ее заново.
Рис. 6-66. Закрыть рабочий стол
Рис. 6-67. Открыть рабочий стол
Вот, теперь все отображается как надо – все данные в табличках актуальны. Можно считать, что поставленная в начале мастер-класса задача реализована.
Но согласитесь, требовать от пользователя перезапуска приложения только ради обновления данных в табличках – это слишком. Кроме этого, набор доступных пользователю средств сейчас довольно примитивен. А к таблицам регистров и вовсе нужно лазить через системное меню. Юзабилити нашего решения хромает на обе ноги. Тем более, на мобильном устройстве вряд ли у пользователя возникнет желание постоянно что-то перезапускать и копаться в дебрях системных настроек.
Потратим еще немного времени для того, чтобы привести внешний вид и функционал нашего приложения к более-менее приличному виду, удобному для использования в повседневной жизни.