Создание конфигураций 1С: добавляем обработку
Автор уроков и преподаватель школы: Владимир Милькин
Продолжаем изучение азов создания конфигураций на 1С.
Оглавление
На этом уроке мы вместе создадим новую обработку, а затем напишем для неё команды, которые демонстрируют работу со справочником "Сотрудники".
Возвращаемся в конфигуратор и открываем дерево конфигурации.
Добавляем новую обработку
Правой кнопкой нажимаем на разделе "Обработки" и выбираем пункт "Добавить":
Открылось окно создания новой обработки. Перейдём на закладку "Основные" и укажем в качестве имени обработки "ОбработкаСправочников":
Создаём форму для обработки
Перейдём на закладку "Формы" нажмём на зелёный плюсик, чтобы добавить новую форму (визуальное представление нашей обработки):
Появился конструктор создания формы. Оставим всё по умолчанию и нажмём "Готово":
Открылась новая форма:
Создаём новую команду для формы
Перейдём на закладку "Команды"->"Команды формы":
Добавим новую команду (зелёный плюсик):
И в свойствах новой команды укажем имя "ВыводВсехСотрудников":
Нажмём в её же свойствах на лупу рядом с полем "Действие", чтобы задать обработчик команды. Выберем вариант создания обработчика "НаКлиенте" и нажмём "ОК":
Нас перенесло в модуль формы в процедуру-обработчик команды "ВыводВсехСотрудников":
Пишем код обработчика команды
Теперь наша задача написать код на внутреннем языке 1С, который будет перебирать все элементы справочника "Сотрудники".
Сразу хочу сказать, что этот код нельзя писать прямо в процедуре "ВыводВсехСотрудников", так как она выполняется на клиенте (обратите внимание на специальную строчку перед процедурой "&НаКлиенте"). Попытка прочитать данные из базы в клиентской процедуре всегда будет приводить к ошибке (пока просто запомните это).
Поэтому давайте допишем в конце модуля процедуру такого вида:
Обратите внимание, что перед ней я указал признак "&НаСервере". Это означает, что она будет выполняться на сервере, а значит мы можем из неё читать данные справочника.
Теперь организуем вызов этой процедуры из клиентской "ВыводВсехСотрудников":
Тут логика такая:
- Пользователь вызывает команду "ВыводВсехСотрудников" (например, нажатием на кнопку, которой у нас ещё правда нет)
- Команда запускает одноименную процедуру-обработчик "ВыводВсехСотрудников" на клиенте (ведь кнопка, а значит и команда находятся на клиенте)
- Клиентская процедура "ВыводВсехСотрудников" делает вызов серверной процедуры "ВыводВсехСотрудниковНаСервере"
- Серверная процедура "ВыводВсехСотрудниковНаСервере" читает данные справочника из базы и выводит их в окно сообщений
Нам осталась самая малость - написать код процедуры "ВыводВсехСотрудниковНаСервере", который пробегается по элементам справочника "Сотрудники" и выводит их в окно сообщений.
Это на самом деле несложно. Обход всех справочников в 1С однотипен. А значит научившись это делать сейчас со справочником "Сотрудники", вы сможете делать также и с любыми другими справочниками.
Для доступа к данным справочника используется менеджер, доступ к которому осуществляется так:
Менеджер = Справочники.Сотрудники; |
В этом предложении ключевая часть находится справа от знака равно. Слева - это просто переменная, в которую мы сохраняем менеджер, чтобы работать с ним дальше. Имя этой переменной могло быть не только "Менеджер", но и любое другое - хоть "Барабашка".
Что представляет из себя менеджер справочника? Менеджер - это ещё не сами данные справочника. Менеджер - это некоторый программный объект (можете представлять его себе в виде чёрного ящика), через который мы можем что-либо делать со справочником.
Менеджер справочника - это как бы такая прослойка между нашим кодом и данными справочника. И получается, что, если нам требуется прочитать все элементы справочника, то мы не можем этого сделать напрямую. Мы можем только попросить об этом нашу прослойку между нами и справочником, то есть менеджер.
Чтобы сделать это - необходимо вызвать встроенный в менеджер метод "Выбрать". Вызывается он через точку после имени переменной, в которой хранится менеджер, и возвращает коллекцию элементов справочника:
Менеджер = Справочники.Сотрудники; Выборка = Менеджер.Выбрать(); |
Что представляет из себя выборка? Выборка (опять же это только имя переменной, в которую мы сохраняем результат работы метода "Выбрать" и оно могло бы быть любым другим) представляет из себя коллекцию, но не такую, как например массив или список значений.
Выборка представляет собой объект - опять же думайте о нём как о ящике, но ещё не сами данные. Особенность этого объекта в том, что он умеет перебирать элементы нужного нам справочника. Причём перебирает он их динамически. Это означает, что использование выборки не считывает все элементы справочника сразу, а выбирает их порциями из базы данных.
Такой подход позволяет достаточно быстро обходить с помощью выборки большие списки справочников, не загружая их в память компьютера все сразу.
Чтобы получить очередную порцию данных из выборки, необходимо вызвать у выборки встроенный в неё метод "Следующий". Получение порций данных (одна порция соответствует одному элементу справочника) обычно происходит в цикле:
Пока Выборка.Следующий() Цикл КонецЦикла; |
Когда данные (элементы справочника) в выборке закончатся, метод "Следующий" вернёт Ложь и цикл прекратится.
После каждого вызова метода "Следующий" (при условии, что он вернул "Истина") выборка будет содержать в себе все поля с данными только считанного элемента справочника, обращаться к которым можно по именам через точку:
Пока Выборка.Следующий() Цикл Сообщить(Выборка.ИмяПоляСправочника1); Сообщить(Выборка.ИмяПоляСправочника2); // и т.д. КонецЦикла; |
Получается в один момент - мы работаем с данными только одного из элементов справочника. И тут мы можем или сразу их вывести пользователю (методом "Сообщить") или, к примеру, мы можем сложить их в другую коллекцию (массив), чтобы потом уже за раз с ними что-нибудь сделать. Всё зависит от задачи, которую мы решаем.
Значит код процедуры "ВыводВсехСотрудниковНаСервере" напишем таким образом:
Превращаем команду в кнопку
Давайте проверять! Для этого перетащим нашу команду на форму, чтобы она превратилась в кнопку:
Готово!
Теперь запустим 1С:Предприятие (меню "Отладка"->"Начать отладку"), откроем нашу обработку (меню "Сервис"->"Обработка справочников") и нажмём кнопку "Вывод всех сотрудников":
Всё получилось!
Ну раз такое дело - со следующего урока начинаем создавать более интересные проекты.
Для учеников
Обязательно повторяйте все действия, которые мы выполняем на уроках данного модуля. Теория, не подкреплённая практикой - ничего не значит.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
С уважением, Владимир Милькин