Разработка справочной системы, отладка
Цель лекции: научиться снабжать прикладные решения справочной системой, освоить методы отладки.
2.1. Справочная система
В предыдущей лекции мы разрабатывали документ, которым реализуется начисление заработной платы. Несложно было заметить, что если предложить заполнить этот документ пользователю, которому незнакома наша конфигурация, у него, скорее всего, возникнут вопросы. Среди них, например, могут быть следующие:
- Как правильно заполнять поле "Исходные данные" для различных видов расчета"?
- Все ли виды расчета требуют заполнения полей "Дата начала" и "Дата окончания"?
- Каким образом формируются движения документа?
Как правило, такая же ситуация характерна и для реально применяющихся конфигураций. Не всегда интуитивно понятно, как именно следует заполнять то или иное поле, как пользоваться теми или иными документами. Для того чтобы помочь пользователю освоить конфигурацию, научиться эффективно и правильно ей пользоваться, существует возможность включения в состав конфигурации справочной системы. По умолчанию справочные материалы, которые можно найти, запустив конфигурацию в режиме 1С:Предприятие, содержат некоторые стандартные разделы, описывающие общие особенности всех конфигураций, пользовательского интерфейса, общие приемы работы. А сведения о созданных разработчиком объектах может добавить в систему лишь он сам.
Для того, чтобы добавить в справочную систему конфигурации главу, посвященную какому-либо объекту, например, в нашем случае это документ НачислениеЗарплаты, нужно в конфигураторе, в окне редактирования свойств объекта, перейти на вкладку Прочее, рис. 2.1, и установить галочку Включать в содержимое справки - это позволит включить создаваемый справочный раздел в общую систему справки, которая доступна в режиме 1С:Предприятие по команде главного меню Справка>Справка.
Далее следует создать главу справки, посвященную документу. Для того чтобы перейти к окну редактирования справочной информации, нужно нажать на кнопку Справочная информация, которая расположена на той же вкладке Прочее.
При нажатии на эту кнопку будет открыто окно HTML-редактора, рис. 2.2, которое содержит три вкладки.
- На вкладке Редактирование производится визуальное редактирование текста. Здесь текст можно вводить, форматировать (с помощью панелей инструментов Форматирование и Редактирование ), в этом же режиме в документ можно добавлять таблицы, рисунки (команда главного меню Элементы ), ссылки.
- На вкладке Текст можно просмотреть и отредактировать HTML-код документа.
- Вкладка Просмотр предназначена для просмотра готового документа.
Документ автоматически сохраняется при закрытии.
Мы ввели в документ руководство по использованию документа, теперь посмотрим, как получить доступ к справке по документу из режима 1С:Предприятие.
Как уже было сказано, при установке флажка Включать в содержание справки, глава, посвященная документу, становится доступной из общей справки к программе, вызываемой из меню Справка>Справка, рис. 2.3.
А именно, здесь, в дополнение к уже существующему стандартному разделу 1С:Предприятие, появляется раздел Конфигурация, который содержит нашу справку.
Получить доступ к этой информации можно и из окна документа Начисление зарплаты или из окна списка этих документов, рис. 2.4.
Здесь для доступа к справке служит кнопка со значком вопроса в командной панели формы. При нажатии на эту кнопку появится окно Выбор главы, которое содержит список доступных глав справки. Это - стандартная глава Общая информация о формах и справка к документу - Начисление зарплаты. Выберем эту главу и нажмем на кнопку Показать. Отобразится окно с введенной ранее справочной информацией, рис. 2.5.
Пользователь нашей конфигурации сможет получить доступ к этому разделу справки, воспользовавшись системой поиска по справке. Для этого ему нужно будет выполнить команду главного меню программы Справка>Поиск по справке и ввести в окно поиска ключевые слова, которые, по его мнению, должны привести к справке, посвященной документу Начисление зарплаты, рис. 2.6.
2.2. Автоматизация заполнения регистра сведений
Регистр сведений, данные которого используются при расчете оклада, можно заполнять вручную. Но гораздо удобнее реализовать автоматическое заполнение этого регистра. Сейчас мы напишем обработку, которая реализует эту функцию.
В обработке мы будем создавать записи регистра сведений РабочиеДниПоГрафику, заполняя данные по заданному графику за заданный период. В качестве периода мы будем указывать диапазон месяцев, за который хотим заполнить график. Так же мы будем указывать график, по которому хотим заполнить регистр.
Напомним, что в справочнике ГрафикиРаботы есть реквизит Примечание. Этот реквизит, для правильной работы нашей обработки, должен будет содержать номера дней в неделе, которые мы хотим, в соответствии с выбранным графиком, установить как выходные. Так, для графика, предназначенного для шестидневной рабочей недели, мы должны будем указать в реквизите Примечание номер выходного дня. Это - воскресенье, то есть - день №7. Для пятидневного графика это будут суббота и воскресенье, то есть - дни 6 и 7.
Создадим новую обработку, назовем ее ЗаполнениеГрафиков.
На вкладке Данные добавим следующие реквизиты:
НачалоПериода | - тип Дата, состав даты - Дата ; |
КонецПериода | - тип Дата, состав даты - Дата ; |
График | - тип СправочникСсылка.ГрафикиРаботы ; |
Создадим форму обработки, укажем, что реквизитам формы должны соответствовать поля ввода, рис. 2.7.
Теперь введем код, который будет выполняться при нажатии на кнопку Выполнить.
Процедура КнопкаВыполнитьНажатие(Кнопка) ТекущаяДата = НачалоПериода; ДлинаСутокВСекундах = 60*60*24; Пока ТекущаяДата<=КонецПериода Цикл ЗаписьРегистра = РегистрыСведений.РабочиеДниПоГрафику.СоздатьМенеджерЗаписи(); ЗаписьРегистра.Дата = ТекущаяДата; ЗаписьРегистра.График = График; ЗаписьРегистра.РабочийДень = ?(Найти(График.Примечание, ДеньНедели(ТекущаяДата))>0,0,1); ЗаписьРегистра.Записать(); ТекущаяДата = ТекущаяДата+ДлинаСутокВСекундах; КонецЦикла; КонецПроцедуры
Рассмотрим особенности этого кода.
Переменная ТекущаяДата будет использована в цикле при заполнении реквизита Дата записи регистра.
Переменная ДлинаСутокВСекундах применяется для хранения количества секунд в сутках. На это значение будет увеличиваться переменная ТекущаяДата в цикле.
С помощью переменной ЗаписьРегистра мы будем создавать записи в регистре. В каждой итерации цикла создается новая запись.
Заполнение реквизитов Дата и График записи регистра вряд ли вызовет дополнительные вопросы. А вот заполнение реквизита РабочийДень потребует некоторых объяснений.
?(Найти(График.Примечание, ДеньНедели(ТекущаяДата))>0,0,1)
Здесь мы используем сокращенную форму записи оператора Если. Его можно расшифровать следующим образом: ЕСЛИ(УСЛОВИЕ, ТОГДА, ИНАЧЕ).
Если условие выполняется, вместо оператора подставляется то, что указано в разделе Тогда, если не выполняется - то, что указано в разделе Иначе.
Команда Найти(График.Примечание, ДеньНедели(ТекущаяДата))>0 позволяет проверить, есть ли в реквизите Примечание графика, по которому идет заполнение регистра, номер дня недели текущей даты, который мы получаем с помощью функции ДеньНедели. Эта функция возвращает номер дня недели - 1 - для понедельника, 2 - для вторника, и так - до 7 - для воскресенья.
В итоге, если в нашей конструкции будет проверен день, который является по графику выходным, в реквизит РабочийДень записи регистра будет записан 0, если нет - 1.
Команда Записать() записывает сформированную запись.
Команда ТекущаяДата = ТекущаяДата+ДлинаСутокВСекундах позволяет перейти к следующему дню и цикл повторяется.
Проверим правильность работы только что созданной обработки. Прежде чем запускать ее, уточним, верно ли заполнен реквизит Примечание для каждого из графиков, рис. 2.8.