Пояснительная записка
.pdfСписок использованных источников
1.Радченко М.Г., Хрусталева Е.Ю. 1С:Предприятие 8.2. Практическое пособие разработчика. Примеры и типовые приемы. - M.: OOO «1С-Паблишинг», 2009. - 876 с.
2.Курс лекции по ООП. Учебное пособие. – Рыбинск: РГАТА, 2008. – 88 с.
3.Буч Г., Рамбо Д., Джекобсон А. – Язык UML. Руководство пользователя. – М.: ДМК, 2000. – 432 с.
4.Федеральный закон РФ от 27 июля 2006 года № 152-ФЗ «О персональных данных».
5.Радченко М.Г. 1С:Предприятие 8.2. Коротко о главном. Новые возможности версии 8.2. - M.: OOO «1С-Паблишинг», 2009. – 416 с.
6.Современные технологии объектно-реляционного отображения. - Материалы сайта http://lib.custis.ru.
7.Кустова Т.Н., Коновал О.В. Методические рекомендации по техникоэкономическому обоснованию дипломных работ студентов специальности 220400 программное обеспечение вычислительной техники и автоматизированных систем. Учебно-методическое пособие. – Рыбинск: РГАТА, 2003. – 39 с.
8.Сергеев С.Ф. Введение в инженерную психологию и эргономику иммерсивных сред. Учебное пособие. – СПб.: СПбГУ ИТМО, 2011. – 258 с.
9.СанПиН 2.2.2/2.4.1340-03 «Требования к организации и оборудованию рабочих мест с ПЭВМ для взрослых пользователей».
10.Габец А.П., Гончаров Д.И. 1С:Предприятие 8.0. Простые примеры разработки. - M.: OOO «1С-Паблишинг», 2005. - 424 с.
11.Методические указания к выполнению дипломного проекта (работы) по специальности 230105 Программное обеспечение вычислительной техники и автоматизированных систем. Учебно-методическое пособие. – Рыбинск: РГАТУ, 2006. – 27 с.
137
12.Сакова Н.В.. Раздел «Безопасность жизнедеятельности» в дипломном проекте». Учебно-методическое пособие. – Рыбинск: РГАТА, 2010. – 30 с.
13. Синтаксис-помощник. Встроенная справочная система технологической платформы 1С:Предприятие 8.2.
138
Приложение А (обязательное)
Исходные коды основных модулей
В данном приложении приведены примеры исходного кода основных модулей и модулей объектов конфигурации:
Модуль обычного приложения;
Модуль «Общие функции» (глобальный);
Модуль объекта документа «Заявка клиента»;
Модуль управляемой формы документа «Заявка клиента»;
Модуль формы справочника «Графики работы»;
Модуль формы обработки «Рабочий стол»;
Модуль документа «Договор об оказании платных медицинских услуг».
Модуль обычного приложения.
Процедура ПередЗавершениемРаботыСистемы(Отказ)
Ответ = Вопрос("Завершить работу с программой?", РежимДиалогаВопрос.ДаНет); Отказ = (Ответ = КодВозвратаДиалога.Нет);
КонецПроцедуры
Процедура ПередНачаломРаботыСистемы(Отказ)
УправлениеПользователями.ПроверитьВозможностьРаботыПользователя(Отказ);
КонецПроцедуры
Процедура ПриНачалеРаботыСистемы()
ПользовательОпределен = Ложь; ОписаниеОшибкиОпределенияПользователя = ""; Если
УправлениеПользователями.ОпределитьТекущегоПользователя(ОписаниеОшибкиОпределенияПоль зователя) Тогда
ПользовательОпределен = ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь);
КонецЕсли;
Если Не ПользовательОпределен Тогда Если ПустаяСтрока(ОписаниеОшибкиОпределенияПользователя) Тогда
ОписаниеОшибкиОпределенияПользователя = "Ошибка идентификации пользователя. Обратитесь к администратору";
КонецЕсли; Предупреждение(ОписаниеОшибкиОпределенияПользователя); ЗавершитьРаботуСистемы(Ложь); Возврат;
КонецЕсли;
ЗаголовокСистемы = Константы.ЗаголовокСистемы.Получить(); УстановитьЗаголовокСистемы(ЗаголовокСистемы); УстановитьРабочийСтол();
КонецПроцедуры
Процедура УстановитьРабочийСтол()
139
ОснФорма = Обработки.ПанельФункций.ПолучитьФорму("Форма"); Оснформа.Открыть();
конецпроцедуры
Модуль «Общие функции» (глобальный)
Функция ПоследнийдоговорКлиента(Клиент) Экспорт
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| ДоговорОсновной.Ссылка |ИЗ
| Документ.ДоговорОсновной КАК ДоговорОсновной |ГДЕ
| ДоговорОсновной.ПометкаУдаления = &ПометкаУдаления | И ДоговорОсновной.Проведен = &Проведен | И ДоговорОсновной.Клиент = &Клиент
|
|УПОРЯДОЧИТЬ ПО | ДоговорОсновной.Дата УБЫВ";
Запрос.УстановитьПараметр("ПометкаУдаления", Ложь); Запрос.УстановитьПараметр("Проведен", Истина); Запрос.УстановитьПараметр("Клиент", Клиент); Рез = Запрос.Выполнить().Выбрать();
Если Рез.Следующий() Тогда возврат Рез.ссылка;
Иначе
возврат Документы.ДоговорОсновной.ПустаяСсылка(); КонецЕсли;
КонецФункции
Функция ТекущийРегистратор() Экспорт
ТекПользователь = ПараметрыСеанса.ТекущийПользователь; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| Регистратор.Ссылка |ИЗ
| Справочник.Регистратор КАК Регистратор |ГДЕ | Регистратор.Пользователь = &Пользователь
| И Регистратор.ПометкаУдаления = ЛОЖЬ"; Запрос.УстановитьПараметр("Пользователь", ТекПользователь); Рез = Запрос.Выполнить().Выбрать(); Если Рез.Следующий() Тогда
возврат Рез.ссылка;
иначе
возврат справочники.Регистратор.ПустаяСсылка(); КонецЕсли;
КонецФункции
Функция Текущийспециалист() Экспорт
ТекПользователь = ПараметрыСеанса.ТекущийПользователь; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| Специалист.Ссылка |ИЗ
| Справочник.Специалист КАК Специалист
140
|ГДЕ | Специалист.Пользователь = &Пользователь
| И Специалист.ПометкаУдаления = ЛОЖЬ"; Запрос.УстановитьПараметр("Пользователь", ТекПользователь); Рез = Запрос.Выполнить().Выбрать(); Если Рез.Следующий() Тогда
возврат Рез.ссылка;
иначе
возврат справочники.Специалист.ПустаяСсылка(); КонецЕсли;
КонецФункции
Функция ПолучитьСвободныеДниСпециалиста(Специалист, Дата) Экспорт
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| |
ЧасыПриемаСпециалистаСрезПоследних.День КАК Дата |
|ИЗ |
|
| РегистрСведений.ЧасыПриемаСпециалиста.СрезПоследних( |
|
| |
&Дата, |
| |
Специалист = &Специалист |
| |
И Состояние = &Состояние) КАК |
ЧасыПриемаСпециалистаСрезПоследних |ГДЕ
| ЧасыПриемаСпециалистаСрезПоследних.День >= &Дата"; Запрос.УстановитьПараметр("специалист", специалист); Запрос.УстановитьПараметр("Состояние", Перечисления.СостояниеЧаса.Свободен); Запрос.УстановитьПараметр("Дата", Дата); Рез = Запрос.Выполнить().Выгрузить(); Рез.Свернуть("Дата"); Рез.Сортировать("Дата"); Результат = новый списокЗначений; Для каждого Стр из Рез цикл
Результат.Добавить(Стр.Дата); Конеццикла; возврат результат;
КонецФункции
Функция ПолучитьСвободныеЧасыДняспециалиста(Специалист, День, Дата) Экспорт
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| ЧасыПриемаСпециалистаСрезПоследних.ЧасыРаботы КАК Время, | ЧасыПриемаСпециалистаСрезПоследних.ЧасыРаботы.НачалоЧаса КАК
НачалоЧаса,
| ЧасыПриемаСпециалистаСрезПоследних.Состояние, | ЧасыПриемаСпециалистаСрезПоследних.День |ИЗ
|
РегистрСведений.ЧасыПриемаСпециалиста.СрезПоследних(&ДатаСреза, ) КАК ЧасыПриемаСпециалистаСрезПоследних
|ГДЕ | ЧасыПриемаСпециалистаСрезПоследних.Специалист = &Специалист
| И ЧасыПриемаСпециалистаСрезПоследних.День = &День | И ЧасыПриемаСпециалистаСрезПоследних.Состояние = &Состояние
| И ЧасыПриемаСпециалистаСрезПоследних.День >= &Дата"; Запрос.УстановитьПараметр("специалист", специалист); Запрос.УстановитьПараметр("Состояние", Перечисления.СостояниеЧаса.Свободен); Запрос.УстановитьПараметр("Дата", Дата); Запрос.УстановитьПараметр("День", День); Запрос.УстановитьПараметр("Датасреза", Дата);
141
Рез = Запрос.Выполнить().Выгрузить(); Рез.Сортировать("НачалоЧаса"); Результат = новый списокЗначений; Для каждого Стр из Рез цикл
Результат.Добавить(Стр.Время); Конеццикла; возврат результат;
КонецФункции
Модуль объекта документа «Заявка клиента»
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ЧасыПриемаСпециалиста.Записывать = Истина;
Движения.ЧасыПриемаСпециалиста.Очистить();
Движение = Движения.ЧасыПриемаСпециалиста.Добавить();
Движение.Период = Дата;
Движение.Специалист = Специалист;
Движение.ЧасыРаботы = Время;
Движение.День = ДатаПриема;
Если СостояниеЗаявки = Перечисления.СостояниеЗаявки.Отклонена Тогда Движение.Состояние = Перечисления.СостояниеЧаса.Свободен;
Иначе Движение.Состояние = Перечисления.СостояниеЧаса.Забронирован;
КонецЕсли;
НачатьпроцессЗаписи();
КонецПроцедуры
Функция СформироватьЗаписьНаприем() Экспорт
ОбЗаписьНаПрием = Документы.ЗаписьНаПрием.СоздатьДокумент();
ОбЗаписьНаПрием.Заполнить(ЭтотОбъект.Ссылка);
ОбЗаписьНаПрием.Дата = ОбщегоНазначения.ПолучитьРабочуюДату();
ОбЗаписьНаПрием.ЗаявкаКлиента = ссылка;
Текпользователь = ПараметрыСеанса.ТекущийПользователь;
ОбЗаписьНаПрием.Регистратор =
справочники.Регистратор.НайтиПоРеквизиту("Пользователь",Текпользователь);
ОбЗаписьНаПрием.Записать();
Возврат ОбЗаписьНаприем.Ссылка;
КонецФункции
142
Процедура НачатьПроцессЗаписи()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗаписьНаПрием_Веб.Ссылка
|ИЗ
| БизнесПроцесс.ЗаписьНаПрием_Веб КАК ЗаписьНаПрием_Веб
|ГДЕ
| ЗаписьНаПрием_Веб.ПорождающийДокумент = &ПорождающийДокумент";
Запрос.УстановитьПараметр("ПорождающийДокумент", Ссылка);
Рез = Запрос.Выполнить().Выбрать();
Если не Рез.Следующий() Тогда БП = БизнесПроцессы.ЗаписьНаПрием_Веб.СоздатьБизнесПроцесс();
БП.Дата = Дата;
БП.ПорождающийДокумент = ссылка;
БП.записать();
БП.Старт();
КонецЕсли;
КонецПроцедуры
Модуль управляемой формы документа «Заявка клиента»
&НаСервереБезКонтекста Функция ПолучитьПрофильСпециалистаНаСервере(ТекДанные)
Возврат ТекДанные.Профильспециалиста;
КонецФункции
&НаСервере Процедура ОбработкаВыбораСпециалистаСервер(ДанныеВыбора)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЧасыПриемаСпециалистаСрезПоследних.Специалист.Ссылка КАК Ссылка
|ИЗ
|РегистрСведений.ЧасыПриемаСпециалиста.СрезПоследних(&Дата, )
КАК ЧасыПриемаСпециалистаСрезПоследних";
Если ЗначениеЗаполнено(Объект.профильспециалиста) Тогда Запрос.УстановитьПараметр("ПрофильСпециалиста", Объект.профильспециалиста);
Запрос.Текст = Запрос.Текст + " |ГДЕ
143
|ЧасыПриемаСпециалистаСрезПоследних.Специалист.ПрофильСпециалиста = &ПрофильСпециалиста";
КонецЕсли;
Запрос.УстановитьПараметр("Дата", ОбщегоНазначения.ПолучитьРабочуюДату());
Рез = Запрос.Выполнить().Выгрузить();
Рез.Свернуть("ссылка");
Для каждого стр из Рез Цикл ДанныеВыбора.Добавить(стр.ссылка);
Конеццикла;
КонецПроцедуры
Функция ПолучитьДниСпециалиста(Специалист)
возврат ОбщиеФункции.ПолучитьСвободныеДниСпециалиста(Специалист,
ОбщегоНазначения.ПолучитьРабочуюДату());
КонецФункции
Функция ПолучитьВремяДня(Специалист, День)
возврат Общиефункции.ПолучитьСвободныеЧасыДняспециалиста(Специалист,День,ОбщегоНазначения.Пол учитьРабочуюДату());
КонецФункции
Процедура ОбновитьДни(спец)
СписокДат = ПолучитьДниСпециалиста(спец);
ТаблицаДни.Очистить();
Для каждого эл из списокДат Цикл НовСтр = ТаблицаДни.Добавить();
НовСтр.День= Эл.Значение;
КонецЦикла;
Конецпроцедуры
Процедура Обновитьчасы(спец, День)
Списокчасов = ПолучитьВремяДня(спец, День);
ТаблицаВремя.Очистить();
Для каждого эл из списокчасов Цикл
144
НовСтр = Таблицавремя.Добавить();
НовСтр.Время= Эл.Значение;
КонецЦикла;
Конецпроцедуры
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Объект.СостояниеЗаявки = Перечисления.СостояниеЗаявки.Новая;
КонецПроцедуры
&НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи)
Окна = ПолучитьОкна();
Для сч = 0 По Окна.Количество() - 1 Цикл Если Окна[сч].Основное Тогда НашеОкно = Окна[сч];
КонецЕсли;
КонецЦикла;
ОткрытьФорму("Обработка.ПанельФункций.Форма.ФормаКлиента",,,, НашеОкно);
КонецПроцедуры
Процедура НовыйКлиентПриИзменении(Элемент)
если Объект.НовыйКлиент Тогда Элементы.ПрофильСпециалиста.Видимость = истина;
Элементы.Совет11.Видимость = истина;
КонецЕсли;
КонецПроцедуры
Процедура Таблица3ПриАктивизацииСтроки(Элемент)
Если Таблицавремя.Количество() Тогда Объект.Время = Элементы.Таблица3.ТекущиеДанные.время;
конецЕсли;
КонецПроцедуры
Процедура Таблица2ПриАктивизацииСтроки(Элемент)
Если ТаблицаДни.Количество() > 0 Тогда
145
Объект.ДатаПриема = Элементы.таблица2.ТекущиеДанные.день;
Обновитьчасы(Элементы.таблица1.ТекущиеДанные.Специалист,
Элементы.таблица2.ТекущиеДанные.день);
Конецесли;
КонецПроцедуры
Процедура Далее(Команда)
Элементы.ПощникЗаписи.ТекущаяСтраница =
Элементы.ПощникЗаписи.ПодчиненныеЭлементы.ВыборВремени; //обновим содержимое таблиц ТаблицаВремя.Очистить();
ТаблицаДни.Очистить();
ТаблицаСпециалист.Очистить();
Если ЗначениеЗаполнено(Объект.Специалист) Тогда НовСтр = ТаблицаСпециалист.Добавить();
НовСтр.Специалист = Объект.специалист;
сп = Объект.специалист;
Иначе списокВрачей = новый Массив;
ОбработкаВыбораСпециалистаСервер(списокВрачей);
Для каждого эл из списокврачей Цикл всегоДней = ПолучитьДниСпециалиста(эл);
Если всегоДней.Количество() = 0 Тогда продолжить;
конецЕсли;
НовСтр = ТаблицаСпециалист.Добавить();
НовСтр.Специалист = Эл;
КонецЦикла;
сп = ТаблицаСпециалист[0].специалист;
КонецЕсли;
Обновитьдни(сп);
Если ТаблицаДни.Количество() > 0 Тогда Обновитьчасы(сп, ТаблицаДни[0].День);
КонецЕсли;
КонецПроцедуры
Процедура СпециалистНачалоВыбораИзсписка(Элемент, СтандартнаяОбработка)
МассивВыбора = новый Массив;
ОбработкаВыбораСпециалистаСервер(МассивВыбора);
146