97248

Автоматизированная система для учета услуг в фотосалоне

Дипломная

Информатика, кибернетика и программирование

Учет услуг оказанных фотосалоном, для реализации которой необходимо хранить наименование услуги, количество оказанных услуг, фамилию, имя и отчество специалиста, который производил выполнение заказа, общая стоимость заказа. Хранение данных об услугах, будет обеспечивать хранение наименований абсолютно всех услуг, которые может предоставить фотосалон и их стоимость.

Русский

2015-10-15

6.01 MB

9 чел.

Изм.

Лист

№ докум.

Подпись

Дата

Лист

 53

53535353535353Печатная форма «Акт выполненных работ»

2

РК 230701.409.02 ПЗ

Изм.

Лист

№ докум.

Подпись

Дата

Лист

 53

53535353535353Печатная форма «Акт выполненных работ»

2

РК 230701.409.02 ПЗ

Содержание

А где 1????????????????????

Введение 3

2 Системный проект 6

2.1 Проектирование интерфейса 6

2.2 Используемые компоненты (структура метаданных) 11

2.3 Описание входных и выходных данных 15

3 Технический проект 16

3.1 Выбор и обоснование состава технических и программных средств 16

3.2 Физическая структура программы 17

4 Экономическая часть 18

5 Экспериментальная часть 28

6 Охрана труда 35

Заключение 48

Список использованной литературы 49

Тексты процедур 50


Введение

Создание малого бизнеса в нашей стране считается делом рискованным. Так как малому предприятию тяжело выжить в условиях современной экономики. Создание предпринимательства в сфере малого бизнеса больше всего подвержено колебаниям экономики. А тут ещё и финансовый кризис.

Однако, малые предприятия (как правило) составляют основу национальной экономики. И если создание предприятия малого бизнеса - это риск, то отсутствие таких предприятий - это крах для отечественной экономики.

Конечно, государство старается как-то поддержать и стимулировать создание и работу малого бизнеса, но зачастую поддержки этой не хватает даже на то, чтобы просто выжить на рынке. Поэтому очень многие мелкие магазины и производства вынуждены закрываться.

В современном мире  каждый человек ставит перед собой цель достичь финансового благополучия, для возможности удовлетворения своих  потребностей и потребностей своей семьи.  А знания в области организации малого бизнеса один из наиболее доступных способов достижения этой цели. Но какую бы деятельность ни выбрал предприниматель в ней всегда будут затраты, и их нужно сокращать.

И в этом поможет  автоматизирование систем, которое  с каждым днем обретает все более важный смысл на каждом из предприятий. Таким образом, с помощью  грамотной маркетинговой стратегии, направленной на  потребителя,  учитывающей активно изменяющееся положение на рынке, предприятие может получать  высокую стабильную прибыль с максимально сжатыми затратами на производство.

И связано это с тем, что благодаря автоматизации некоторых процессов  можно в разы увеличить скорость работы персонала и как следствие, повысить производительность и прибыль. Так же автоматизирование  процессов может сократить  количество работников,  а значит, предприятие может сэкономить на выплате заработной платы.

В данном проекте  в качестве разрабатываемого  объекта будет программный продукт,  разработанный для фотосалона «Проекция». Основными задачами, которого будет являться: автоматизирование  учета услуг предоставляемых фотосалоном.

Целью дипломной работы - является создание автоматизированной системы   для учета услуг в фотосалоне.


1 Постановка задачи

Проанализировав  деятельность фотосалона,  методы учета услуг и совершения заказов, а так же определив среду для написания программного продукта,  мы можем определить задачи, которые должна будет выполнять наша система:

  1.  Учет услуг оказанных фотосалоном, для реализации которой необходимо хранить наименование услуги,  количество  оказанных услуг, фамилию, имя и отчество  специалиста, который производил выполнение  заказа, общая стоимость заказа
  2.  Хранение данных об услугах, будет обеспечивать  хранение наименований абсолютно всех услуг, которые может предоставить фотосалон и их стоимость
  3.  Хранение данных о клиенте, будет обеспечивать хранение  имени  заказчика, или названия организации, которая произвела заказ и номер телефона по которому можно связаться с заказчиком
  4.  Хранение образцов документов связанных с совершением заказа: акты о выполнении заказа, отчет об остатках материалов, отчет об оказанных услугах.

Основным достоинством программы является практически полностью автоматизированный  процесс регистрации заказа: все, что необходимо сделать работнику - это выбрать услугу из выпадающего списка услуг и прописать количество предоставляемых услуг, стоимость услуги  и сумма заказа будут рассчитаны автоматически, сформирован  акт об оказании услуги.  

 


2 Системный проект

2.1 Проектирование интерфейса 

Создание системного проекта (по другому, модели требований к будущей системе) является первой фазой разработки собственно системы автоматизации, на которой требования заказчика уточняются, формализуются и документируются, так как если требования нигде не зафиксированы, то их вроде-бы и не существует. Системный проект строится на основе модели “как должно быть” и результатов обследования предприятия в части выявления требований к будущей системе.

Фактически на этом этапе дается ответ на вопрос: "Что должна делать будущая система?". Именно здесь лежит ключ к успеху всего проекта автоматизации. В практике создания больших программных систем известно немало примеров неудачной реализации именно из-за неполноты и нечеткости определения системных требований.

Системный проект должен включать:

  1.  комментарии к функциональной модели (спецификации процессов нижнего уровня в текстовом виде);
  2.  перечень подсистем, требования к способам и средствам связи для информационного обмена между компонентами, требования к функциям системы;

Основными услугами, которые предоставляет фотосалон, естественно является  фото:

  1.  На паспорт ( различных размеров, цветное, черно-белое);
  2.   На различные документы;
  3.  Фотосессии;  
  4.  распечатка фотографий со съемных носителей;

Так же фотосалон предоставляет ряд услуг связанных с нанесением изображений на различную сувенирную продукцию:

  1.  Брелки;  
  2.  Кружки;  
  3.  Футболки;
  4.  Тарелки;

 Другая  сувенирная продукция;

Учет услуг в фотосалоне будет производиться очень просто. У каждой услуги  будет  своя стоимость, которая будет определена как средняя рыночная стоимость таких услуг.

Заказы же  будут осуществляться   следующим образом: клиент приходит в фотосалон и в порядке «живой» очереди ждет своего времени приема, далее он объясняет работнику фотосалона,  какую услугу он бы хотел получить, после этого работник оформляет квитанцию с номером заказа надо вставить о том, какие услуги и в каком количестве будет предоставлены, и срок выполнения заказа.  Далее  начинается непосредственное выполнение заказа  если это фото, то это фотографирование и распечатка фотографий,  если же это изготовление сувениров, то он передает заказ  вместе с квитанцией на выполнение в другой отдел, который занимается изготовлением и оформлением сувенирной  продукции. По истечению срока выполнения заказа клиент приносит чек ????????? а если оплаты не было об оплате услуг  и забирает свой заказ. Работник салона в свою очередь составляет акт о выполнении  услуг.

Следующий раздел В мире миллиарды вычислительных устройств. Еще больше программ для них. И у каждой свой интерфейс, являющийся «рычагами» взаимодействия между пользователем и машинным кодом. Не удивительно, что чем лучше интерфейс, тем эффективнее взаимодействие.

Однако далеко не все разработчики и даже дизайнеры, задумываются о создании удобного и понятного графического интерфейса пользователя.

Для себя я начала (только от третьего лица)с постановки вопросов: общие принципы, какие элементы интерфейса(ЭИ) создать, какой у них должен быть дизайн, где их правильно размещать и как они должны себя вести.

Ниже я постараюсь ответить на эти вопросы.

Общие принципы:

Интерфейс должен быть интуитивно понятным. Таким, чтобы пользователю не требовалось объяснять как им пользоваться.

Для упрощения процесса изучения необходима справка. Буквально — графическая подсказка, объясняющая значение того или иного ЭИ. Полное руководство должно быть частью интерфейса, доступной в любой момент.

Какие ЭИ создать?(не должно быть раздумий, все глаголы только в повелительном наклонении)

Разработка интерфейса обычно начинается с определения задачи или набора задач, для которых предназначен продукт.

  1.  Простое должно оставаться простым. Не усложняйте интерфейсы. Постоянно думайте о том, как сделать интерфейс проще и понятнее.
  2.  Пользователи не задумываются над тем, как устроена программа. Все, что они видят — это интерфейс. Поэтому, с точки зрения потребителя именно интерфейс является конечным продуктом.
  3.  Интерфейс должен быть ориентированным на человека, т.е. отвечать нуждам человека и учитывать его слабости. Нужно постоянно думать о том, с какими трудностями может столкнуться пользователь.
  4.  Думайте о поведении и привычках пользователей. Не меняйте хорошо известные всем ЭИ на неожиданные, а новые делайте интуитивно понятными.

А теперь перейдем непосредственно к  описанию интерфейса разработанного продукта. В программе будет 3 подсистемы и рабочий стол.

Подсистема – это основой элемент для построения интерфейса 1С:Предприятия. Подсистемы позволяют выделить в конфигурации функциональные части, на которые логически разбивается создаваемое прикладное решение. Таким образом, наличие подсистем определяет структуру программы, организует весь пользовательский интерфейс, позволяет «рассортировать» различные документы, справочники по логически связанным с ними  разделам, в которых пользователю будет удобнее с ними работать. При этом каждому конкретному пользователю будут видны лишь те разделы, которые нужны ему в процессе работы.

  1.   «Оказание услуг»  - в этой подсистеме будет находиться все что связано с оказанием услуг (лишняя фраза), в ней будут храниться данные о клиентах, которые заказывают те или иные услуги, данные о наименованиях услуг, и их цены. Здесь же будет справочник «Персонал» - он необходим для того, чтобы в каждом акте об оказании услуги можно было проставить работника, который предоставлял эту услугу, это в свою очередь поможет насчитывать сотрудникам заработную плату. Так же в этой подсистеме содержится ряд отчетов, это отчеты о затраченных материалах, отчеты о выручке персонала, и отчет по оказанным услугам.

Рисунок 1 – состав подсистемы «Оказание услуг» 

Все прямоугольниками нумерация рисунков в пределах раздела 2.1.1 и т.д.

  1.  «Расчет заработной платы» в данной подсистеме будет находиться все что связанно убрать????????? с заработной платой,  виды графиков, начисления персоналу, перерасчеты, справочник «Персонал» - в нем будет указываться какую должность занимает тот или иной работник, так же здесь содержится отчет по выручке персонала.

Рисунок 2 – Состав подсистемы «Расчет заработной платы»

Так же ка и на предыдущем рисунке

  1.  «Учет материалов» в данной подсистеме находится вся информация о материалах, поступивших на предприятие, «ушедших» с предприятия, приходные накладные, документы по продажам, отчеты по материалам и оказанным услугам, цены на услуги, и возможность контроля остатков материалов.

Рисунок 3 – состав подсистемы «Учет материалов» 

2.2 Используемые компоненты (структура метаданных)

В данном разделе будет описано какие документы были созданы разработчиком для работы персонала, а так же будут описаны документы которые создает пользователь в ходе своей работы.

 переименовать «Акт об оказании услуг»  - этот документ будет фиксировать то, какие услуги были предоставлены, и какие заготовки были израсходованы при оказании этой услуги. У этого документа так же есть ряд своих реквизитов:

  1.  Услуга;
  2.  Количество;
  3.  Цена;
  4.  Сумма;

Реквизит «Услуга» будет предоставлять информацию о том,  какая услуга была предоставлена, реквизит « Количество»  - то, в каком объеме была предоставлена услуга, « Цена» -  хранит информацию о том, в каком количестве  предоставлялись услуги, а  реквизит « Сумма» - на какую сумму в общем сделан заказ.   Так же на форме документа есть поля « заказчик» и « Сотрудник». В поле заказчик будет указываться имя заказчика, или название организации,  которая производит заказ.   Поле «Сотрудник»  будет предоставлять информацию о том, какой из сотрудников произвел выполнение заказа.

Для удобства работы с программой мной были добавлены два общих модуля « Работа со справочниками» и «Работа с документами». В этих модулях прописан код, для того чтобы при изменении(в модуле производятся вычисления……………) количества услуг или цены по которой предоставляется услуга, сумма по строке пересчитывалась автоматически.

В этом же документе была создана печатная форма документа,  на этой форме отображена информация о том какого числа были оказаны услуги, на какую сумму получился заказ, сколько товарных позиций, количество оказанных услуг и стоимость каждой услуги. Так же на форме располагаются данные о названии фирмы исполнителя, и заказчика , имеются места для подписи обеих сторон.

Справочник – клиенты(название с большой буквы в кавычках), в нем будут храниться  данные о наших заказчиках. Для того чтоб описать какие именно данные будут храниться  необходимо создать несколько реквизитов,  а именно:

  1.  Номер заказа;
  2.  Заказчик;
  3.  Телефон заказчика.

В реквизите «номер заказа»  будет храниться номер заказа по порядку(Что ели номера закончатся??????????????????).  

В реквизите «Заказчик» хранится информация о том, кто сделал заказ.

 Следующий элемент это справочник «Персонал». Этот справочник служит для  удобства ведения документации: сюда входит и простота заполнения документов, и возможность исправления ошибок допущенных сотрудниками без оформления новых документов, с помощью этого справочника руководитель организации может контролировать работу персонала. У этого справочника так же есть ряд реквизитов:

  1.  Имя;
  2.  Фамилия;
  3.  Отчество;
  4.  Должность;
  5.  Наименование;

Реквизиты «Имя, Фамилия, Отчество»  будут хранить информацию о том, как зовут сотрудников нашего фотосалона.  Реквизит  «должность» будет хранить информацию о том, какую должность занимает тот или иной сотрудник.

Регистр накопления «Продажи» - в нашей программе он нужен для того, чтобы можно было учитывать предоставленные услуги, ведь у услуг не затрачивается какой-либо материал, и их нельзя учитывать по израсходованным материалам.

 Следующим документом конфигурации является регистр сведений    «Цены на услуги» этот регистр хранит в себе информацию о  ценах на услуги и сувенирную продукцию предоставляемую фотосалоном.  Так же этот регистр содержится в подсистеме «Учет материалов» описание подсистемы можно посмотреть на рисунке 3, страница 10.

Отчет «Выручка работников» - наглядно отображает информацию о том, на какую сумму, в каком количестве и какой работник предоставил услугу. Так же этот отчет необходим для формирования заработной платы работника. Этот отчет содержится в подсистеме «Расчет заработной платы» описание подсистемы можно посмотреть на рисунке 2, страница 10.

Отчет «Оказанные услуги» - отображает информацию, только об оказанных услугах, их цену, стоимость с наценкой, количество предоставленных услуг и конечную сумму выручки. Так же этот справочни к содержится в подсистеме «Учет материалов» описание подсистемы можно посмотреть на рисунке 3, страница 10.

Следующий элемент конфигурации это справочник «Услуги». Здесь будут храниться данные о том, какие услуги предоставляет наш фотосалон. У этого справочника, так же как и у других есть ряд своих реквизитов, но эти реквизиты стандартные  « Наименование», «Код».   Этот справочник иерархический, в нем есть две группы:

  1.  «Сувениры» - здесь хранится та сувенирная продукция, которую может предоставить на салон;
  2.  «Фотоуслуги»   там находится вся информация об услугах предоставляемых и ????????????????

«Виды графиков работ» - это справочник, который предоставляет информацию о том, какие графики есть в фотосалоне. В нашем случае это график работы администрации, и график работы персонала.

«Виды расчетов» - это объект конфигурации в котором содержится информация о том, какие расчеты могут производиться с заработной платой, а именно :  

  1.  начисление оклада;
  2.  начисление премий;
  3.  вычеты за невыход на работу;

«Изменения Начислений» - документ который будет содержать информацию о изменившихся начислениях, например к голому окладу начислили премию, или из начисленной заработной платы вычли за невыход на работу.

«Начисления» - это объект конфигурации, в котором содержатся все данные о произведенных начислениях.

В документ «Перерасчет» -  вносится информация о перерасчетах в заработной плате сотрудников.

Документ «Приходная накладная»  будет фиксировать  поступления заготовок.

И почти последний элемент нашей конфигурации это регистр накопления   «Остатки  Материалов», этот регистр будет учитывать изменения, вносимые новыми документами, и благодаря этому мы можем отслеживать, сколько и каких материалов у нас «ушло» и сколько осталось.

В  отчете «Материалы» можно увидеть информацию о том, какие материалы пришли в фотосалон,  сколько материалов было израсходовано при оказании услуг, и сколько материалов у нас осталось с учетом всех произошедших изменений. А стоимость??????????????????????

Отчет «Начисления сотрудникам» - показывает какому сотруднику сколько было начислено. Начисление складывается из нескольких составляющих: оклад, премия, и вычеты за невыход не работу (если таковой случай был)

2.3 Описание входных и выходных данных

 Входными и выходными данными в нашем случае будет являться всевозможная информация о предоставляемых услугах, их цене количестве. Информация о клиенте номер телефона и название организации, или имя человека сделавшего заказ. Так же будет храниться информация о работниках фотосалона.

Документ «Акт об оказании услуги» - входными данными тут является, имя заказчика, наименование и количество предоставленных услуг, конечная сумма заказа, а так же имя работника предоставившего услугу, и в конечном итоге будет сформирован акт об оказании услуги.

В справочнике «Персонал» входными данными будут являться фамилия, имя, отчество и должность нашего работника, исходными данными будет – рабочая карточка.

В справочнике «Клиенты» входящими данными будет имя клиента, или название организации, и телефон, выходящими данными – клиентская база, сформированная из множества визиток клиентов.

 В отчете «Материал»  входящие данные: поступившие и «ушедшие» материалы, выходящие данные – конечный остаток материалов, а в отчете  «Оказанные услуги» входящими данными являются оказанные услуги и сумма на которую этих услуг было оказано, выходными данными тут является сумма выручки.

 В документе «Приходная накладная» входные данные – поступившие материалы, выходных данных у этого документа нет это как???????????????????.

Документ «Остатки материалов»  - входящие данные поступившие материалы, выходящие данные – ушедшие материалы.

3. Технический проект 

3.1. Выбор и обоснование состава технических и программных средств

Причины по которым я решила разрабатывать свой программный продукт в системе 1С:

  1.  во-первых,  1С обладает понятным интерфейсом  
  2.  во- вторых, система обладает конфигурируемостью (конфигурируемость -возможность настройки системы под  конкретное предприятие)   
  3.  в-третьих,  код  программы пишется на русском  языке, что является  огромным плюсом    при написании  самой программы.  

Так же  гибкость платформы позволяет применять 1С:Предприятие 8 в самых разнообразных областях:

  1.  автоматизация производственных и торговых предприятий, бюджетных и финансовых организаций, предприятий сферы обслуживания и т.д.
  2.  поддержка оперативного управления предприятием;
  3.  автоматизация организационной и хозяйственной деятельности;
  4.  ведение бухгалтерского учета с несколькими планами счетов и произвольными измерениями учета, регламентированная отчетность;
  5.  широкие возможности для управленческого учета и построения аналитической отчетности, поддержка многовалютного учета;
  6.  решение задач планирования, бюджетирования и финансового анализа;
  7.  расчет зарплаты и управление персоналом;

В нашем случае основным конкурентом является   «1С Фотостудия», функции, которые выполняет этот программный продукт, схожи с теми, что выполняет наша программа.   

Основной гипотезой является то, что новый программный продукт привлечет внимание своей узкой направленностью в области фото искусства, а это значит, что не придется разбираться с множеством ненужных функций, и переплачивать за «мертвый груз» в рабочей программе,  а так же высокая автоматизация процесса совершения заказа.

  1.  Физическая структура программы

Все элементы конфигурации связаны между собой логически,  Например документ «Акт об оказании услуг связан» со справочником «Остатки материалов» ведь после того как была оказана услуга, на предприятии уменьшилось количество материалов, что непосредственно отражается в этом справочнике, так же этот документ связан с со справочником «Услуги», ведь услуги которые мы предоставляем выбираются именно из этого справочника.  Все связи конфигурации можно увидеть на рисунке 4.

Рисунок 4 – физическая структура программы 

Здесь еще должен быть скрин с папкой программы и пояснения по подпапкам и типам файлов

4. Экономическая часть

Из раздела убрать всю нумерацию подпунктов оставить только заголовки 

4.1 Расчет стоимости программы и экономического эффекта ее внедрения

Данные, которые нам потребуются для расчетов:

  1.  Время разработки
  2.  Коэффициент использования машины
  3.  Заработная плата программиста
  4.  Стоимость компьютера
  5.  Срок эксплуатации
  6.  Накладные расходы
  7.  Сумма потребляемой мощности
  8.  И др. расходы  ( стоимость машинного часа времени, прибыль, НДС и т.д.)

Весь расчет можно разделить на несколько этапов.

Расчет стоимости одного часа машинного времени

 

Стоимость одного  часа машинного времени вычисляем по формуле:

                                                                                                      (4.1.1)

где   Сэкс – годовые эксплуатационные расходы, руб.;

        Тэф – годовой эффективный фонд времени, час;

        Кисп - коэффициент использования машины и времени разработчика.

Коэффициент использования машины принимаем 0,9.

Эффективный фонд времени

Годовой эффективный фонд времени рассчитываем по формуле:

                               Тэфф=(tрд*Nсмрд)-(tпт* Дрд* Nсм)                                            (4.1.2)

где   tрд– продолжительность рабочего дня, час; (8ч)

Nсм – количество смен;

Дрд– количество рабочих дней; (247)

tпт– регламентированные потери рабочего времени (1 час принимаем самостоятельно).

На предприятии продолжительность смены 8 часов, работа идет в 1 смену, в году 247рабочих дней, за рабочим предусмотрен регламентированный перерыв 1 час. Эффективный фонд времени будет равен:

Тэффг=(8*1*247)–(1*247*1)=1729 часа

Программа выполняется две недели ( 80 часов), поэтому нам необходимо найти эффективный фонд времени за месяц(Тэффм), потом за 1 день, и умножить на 14.

                                                       Тэффм=                                                                                    (4.1.3)

где  Тэффг- эффективный  фонд времени годовой

        12 – количество месяцев в году  

                                                        =144час.

Эффективный фонд времени дневной рассчитывается по формуле :

                                                                                                      (4.1.4)

где  Тэффм – эффективный фонд времени месячный

        2– количество недель  в месяце

=72час.

С учетом среднестатистических данных, 5 дневной рабочей неделей и 8 часовым рабочим днем, принимаем время  разработки программы 80 часов

( 72+8)

2.1.2  эксплуатационные расходы

Эксплуатационные расходы рассчитываются по формуле :

                                       Сэкс=ЗПср.годгодн.р.э                                                                      (4.1.5)

где  ЗПср.год – среднегодовая заработная плата разработчика, он же занимается обслуживанием. Работу выполняет техник – программист с заработной платой (ЗПср.мес.) в размере 15 000  рублей . +25% премия + 15% районный коэффициент ( Уральский)

         Агод – годовые амортизационные отчисления, руб.

          Сн.р – накладные расходы, руб.

          Сэ – стоимость потребляемой электроэнергии за год, руб.

В первую очередь произведем расчет трудовых затрат

                           ЗПср..мес = оклад + премия + УК                                            (4.1.6)

где  ЗПср.мес   - заработная плата среднемесячная

       оклад  15 000 руб.

       премия 25 %

      УК – уральский коэффициент ( 15%)

                                               Премия =                                                  (4.1.7)

         Премия =  = 3750 руб.

                                         УК= (оклад +премия)*                                        ( 4.1.8)

 

УК = (15 000 + 3750) *  = 2 812,5 руб.           

                         

ЗПср.мес  = 15 000 + 3750+2812,5=21 562,5 руб

                                  ЗПср.год= ЗПср.мес* Ч * 12 (руб.)                                           (4.1.9)

где  Ч – численность рабочих, 1 чел.

        12 – количество месяцев в году

        ЗПср.мес   - заработная плата среднемесячная

ЗПср.год= 21 562,5 *1*12= 258 750 руб.

Так как программа выполняется за 2 недели затраты на оплату труда будут составлять:           258 750/12/2=10 781,25 руб.

Во вторую очередь рассчитаем амортизационные отчисления  по оборудованию, применяемому для разработки программы по формуле:

                                            Агодком *                                                         (4.1.10)

где   Скомп– стоимость компьютера,  30 тыс. руб.

На –норма амортизации

                                               На=                                                                                                (4.1.11)

где  Т – срок эксплуатации ( 3 года)

На=   = 33,3 %    

Агод=30 000 *  = 9 990 руб.

                                            Амес = руб.                                                           (4.1.12)

где  Агод – годовые амортизационные отчисления

       12 – количество месяцев в году

                                            Амес =  = 832,5 руб.   

Ап/месс=832,5/2=416,25 руб.  

Накладные расходы (Снр) в условиях предприятия равняются 60% от заработной платы техника-программиста. Сюда включаются затраты на содержание помещения, оборудования, управленческие затраты.

                                      Снр = ЗПср.год. *                                                   (4.1.13)

Снр =10 781,25 *  =  6 468,75 руб

                                                Сэ = Мn * Tэфдэисп                                                            (4.1.14)

где   Мn– сумма потребляемой мощности (0,4 кВт)

  Tэфд – годовой фонд рабочего времени, дневной (за 2 недели)  = 80ч.

   Цэ– стоимость 1 кВт = 1.25 руб.

   Кисп– коэффициент использования мощности, принимается 0,9

Сэ =0,4 * 80*1,25*0,9=36.00руб

Исходя из выше полученных данных получаем :

Сэксп = 10 781,25 + 416,25  + 6 468,75 +36= 17 702,25руб.

По полученным значениям рассчитываем стоимость машинного часа, рассчитывается по формуле 2.1:

                                       Смч =  = 245,86 руб.

Расчет стоимости разработки программы

Расчет времени разработки программы  

Время разработки программы  рассчитывается  по следующим этапам: где номер и название таблицы????????????????????

№ п/п

Этапы разработки

Время, час

1

2

3

4

5

6

Постановка задачи

Выбор метода решения

Составление алгоритма

Выбор языка программирования

Составление программы

Отладка

4

3

20

1

26

     26

Итого:

В том числе машинное время:

80

      72

Стоимость разработки программы

Стоимость разработки программы рассчитывается по формуле:

                                   Ср = ЗПр.чел*n1 + Смчас * n2                                                                       (4.1.15)

где   Ср–стоимость разработки программы;

      ЗПр.чел– средняя часовая заработная плата разработчика техника-программиста с отчислениями на социальные нужды;

Смчас– стоимость машинного часа;

n1и n2 – соответственно количество чел.-часов разработчика и машинных часов.

                                   (4.1.16)

где  Tэфд – годовой фонд рабочего времени, дневной (за 2 недели)  = 80ч.

ФЗПгод– годовой фонд заработной платы, определяется по формуле :

ФЗПгод= ЗПср.год + обязательные отчисления в фонды                              (4.1.17)

Отчисления на социальные нужды 30,2, в том числе:

– пенсионный фонд 22%;

– фонд медицинского страхования 5,1%;

– фонд социального страхования 2,9%;

– налог на травматизм 0,2%.

Отчисления определяются в % от годового фонда заработной платы.

       ФЗПгод= 10 781,25+  = 10 781,25+3 255,94= 14 037,19руб.

Рассчитываем среднечасовую заработную плату по формуле (4.1.16):

                                           ЗПр.чел== 175,46 руб.

Вычисляем стоимость разработки программы  по формуле(4.1.15):

                         Ср =  175,46*8+245,86*80 = 21 072,48руб.

 Цена программного продукта

Цена разработанной программы в рыночной экономике рассчитывается на основе принципов рыночного ценообразования. Для этого производится аналитические расчеты и оценки.

Программное обеспечение имеет две особенности существенно отличающих его от других видов товаров. С одной стороны это авторское произведение. С другой стороны созданную программу легко размножить (затраты на копии ничтожно малы).

Цены устанавливаются в зависимости от их назначения и разработки: уникальные, по заказу, специализированные и универсальные рыночные.

Определяющими факторами для формирования рыночной цены являются:

– потребность (спрос) в программных продуктах определенного типа;

– количество потенциальных покупателей и их финансовые возможности;

– наличие конкурентов;

– качество;

– удобство в пользовании;

– реклама.

Необходим анализ реальных ситуаций, возникающие на рынке программных средств. Первоначальные затраты на разработку программы являются постоянными затратами, возмещения которых, как правило в существующих экономико-математических моделях не учитывается. Как правило, продавцы пытаются получить максимальную выручку от продажи. В этом случае поиск рыночной цены можно записать в виде оптимально модели:

                                        Вр = Ц * Кс –> макс.                                              (4.1.18)

где  Вр– выручка, руб.;

      Ц – искомая цена, руб.;

      Кс – количество копий, которые будут проданы по цене «Ц» 1.

Цена – денежное выражение стоимости. Она включает в себя полную себестоимость, установленный размер прибыли, НДС, определяется по формуле :

                       Цена = С/Спол + прибыль + НДС                                          (4.1.20)

где  Цена – денежное выражение стоимости программы;

       С/Спол – стоимость разработки программы (Ср);

       Прибыль – зависит от стоимости разработки программы (Ср);

       НДС – налог на добавленную стоимость, 18% от суммы стоимости разработки программы и прибыли;

Стоимость разработки программы (Ср) –  21 072,48  руб ( была посчитана по формуле 4.1.15 );

Согласно задания, прибыль составляет 19% от полной себестоимости.

Прибыль = 4 003,77 руб.

НДС =  = 4 513,73руб.

Цена = 21 072,48+4003,77+4 513,73=29 589,98 руб.

5. Экспериментальная часть 

5.1 Тестирование программного продукта

На рабочем столе находится два пункта «Акт об оказанных услугах» и «Клиент» каждая из этих функций нужна для быстрого доступа к самым важным компонентам программы, если нажать на «Акт об оказании услуги» то, Вы перейдете к моменту создания документа о предоставлении услуг рисунок 5.

Рисунок 5 – создание акта об оказании услуг.

Если перейти к клиенту то, откроется форма добавления нового клиента рисунок 6.

Рисунок 6 – форма добавления клиента

Следующий элемент это Регистр накопления «Продажи» - в нашей программе он нужен для того, чтобы можно было учитывать предоставленные услуги рисунок 7.

Рисунок 7 – регистр накопления продажи

Если перейти по ссылке «Персонал», то откроется форма справочника, в котором можно увидеть информацию о уже работающих сотрудниках, и создать новых если имеется необходимость рисунок 8.

Рисунок 8 – справочник персонал

Стоимость материалов, тут само название говорит за себя в этом регистре задается стоимость пришедших материалов рисунок 9.

Рисунок 9 – регистр «Стоимость материалов»

Если перейти в справочник «Услуги» то, там можно увидеть две группы элементов, в которых хранятся предоставляемые услуги рисунок 10.

Рисунок 10 – справочник «Услуги»

«Цены на услуги» если открыть этот регистр, то можно увидеть все услуги, которые предоставляет фотосалон и задать у них цену рисунок 11.

Рисунок 11 – регистр «Цены на услуги»

Отчет «Выручка работников» показывает на какую сумму каждый работник оказал услуг рисунок 12.

Рисунок 12 –отчет «Выручка работников»

Отчет материалы показывает, сколько и каких материалов «пришло», «ушло» и осталось в фотосалоне рисунок 13.

Рисунок 13 – отчет «Материалы»

Отчет «Оказанные услуги» - отображает информацию, только об оказанных услугах, их цену, стоимость с наценкой, количество предоставленных услуг и конечную сумму выручки рисунок 14.

Рисунок 14 - Отчет «Оказанные услуги»

«Виды графиков работ», содержат информацию о том, какие графиги есть на предприятии рисунок 15.

Рисунок 15- Виды графиков работы

«Виды расчетов» - содержат в себе поля для расчетов рисунок 16.

Рисунок 16 - «Виды расчетов»

«Графики работы» - файл в котором содержатся рабочие графики ( периоды работ) рисунок 17.

Рисунок 17 – графики работы

«Изменения начислений» регистр, который содержит данные о изменениях в начислениях сотрудникам рисунок 18.

Рисунок 18 – Изменения начислений

«Перерасчет» - это документ, в котором хранятся произведенные перерасчеты рисунок 19.

Рисунок 19 - Перерасчет

Отчет «Начисления сотрудникам» отображает информацию о том, сколько было начислено каждому сотруднику с учетом всех вычетов рисунок 20.

Рисунок 20 – Начисления сотрудникам

Отчет «Расчетные листки»  показывает каждому сотруднику, как ему начислялась заработная плата, с учетом всех начислений и всех вычетов

Рисунок 21- отчет «Расчетные листки»

Окно с начислением премии, здесь можно установить какой процент от оклада человек получит в качестве  премии рисунок 22.

Рисунок 22- отчет «Расчетные листки»

Документ «Приходная накладная» отображает поступление материалов на предприятие рисунок 23.

Рисунок 23 – приходная накладная

Регистр «Остатки материалов» отображает документы, в следствии работы которых с предприятия «уходят» материалы рисунок 23.

Рисунок 23 – Остатки материалов

Задачи – каждый день работникам на рабочем всплывает напоминание об обзвоне клиентов у которых готов заказ

Рисунок 24 – «Задачи»

А где скрины с ролями??????????????????????????????????

6. Охрана труда 

6.1 На рабочем месте программиста

Настоящие государственные санитарно-эпидемиологические правила и нормативы (далее - Санитарные правила) разработаны в соответствии с Федеральным законом "О санитарно-эпидемиологическом благополучии населения" от 30 марта  1999  года  №  52-ФЗ  (Собрание  законодательства Российской Федерации, 1999, № 14, ст.1650) и Положением о государственном санитарно-эпидемиологическом  нормировании,  утвержденным  постановлением Правительства Российской Федерации от 24 июля 2000 года №  554  (Собрание законодательства Российской Федерации, 2000, № 31, ст.3295).

Санитарные правила действуют  на  всей  территории  Российской Федерации  и  устанавливают  санитарно-эпидемиологические    требования к персональным электронно-вычислительным машинам (ПЭВМ) и условиям труда.

Требования Санитарных  правил  направлены  на  предотвращение неблагоприятного  влияния   на   здоровье   человека     вредных факторов производственной среды и трудового процесса при работе с ПЭВМ.

Настоящие Санитарные правила определяют санитарно-эпидемиологические требования к:

     - проектированию, изготовлению и эксплуатации отечественных ПЭВМ, используемых на производстве, в обучении, в быту, в игровых автоматах на базе ПЭВМ;

     - эксплуатации импортных ПЭВМ, используемых на производстве, в обучении, в быту и в игровых комплексах (автоматах) на базе ПЭВМ;

     -   проектированию, строительству и   реконструкции   помещений, предназначенных для  эксплуатации  всех  типов  ПЭВМ,  производственного оборудования и игровых комплексов (автоматов) на базе ПЭВМ;

 - организации рабочих мест с ПЭВМ, производственным оборудованием и игровыми комплексами (автоматами) на базе ПЭВМ.

Требования Санитарных правил распространяются:

     - на условия и организацию работы с ПЭВМ;

    - на вычислительные электронные цифровые машины персональные, портативные; периферийные устройства вычислительных комплексов (принтеры, сканеры, клавиатура, модемы внешние, электрические компьютерные сетевые устройства, устройства хранения информации, блоки бесперебойного питания и пр.), устройства отображения информации (видеодисплейные терминалы (ВДТ) всех типов) и игровые комплексы на базе ПЭВМ.

Требования   Санитарных   правил   не     распространяются на проектирование, изготовление и эксплуатацию:

     - бытовых телевизоров и телевизионных игровых приставок;

    - средств визуального отображения информации микроконтроллеров, встроенных в технологическое оборудование;

     - ПЭВМ транспортных средств;

     - ПЭВМ, перемещающихся в процессе работы.

Ответственность за выполнение настоящих санитарных правил возлагается на юридических лиц и индивидуальных предпринимателей, осуществляющих:

- разработку, производство и эксплуатацию ПЭВМ, производственное оборудование и игровые комплексы на базе ПЭВМ;

 -   проектирование, строительство и реконструкцию помещений, предназначенных для эксплуатации ПЭВМ в промышленных, административных общественных зданиях, а также в образовательных и культурно-развлекательных учреждениях.

Индивидуальными предпринимателями и юридическими лицами в процессе производства и эксплуатации ПЭВМ должен осуществляться производственный контроль за соблюдением настоящих Санитарных правил.

Рабочие места с использованием ПЭВМ должны соответствовать требованиям настоящих санитарных правил.

ПЭВМ должны соответствовать требованиям настоящих санитарных правил и каждый их тип подлежит санитарно-эпидемиологической экспертизе с оценкой в испытательных лабораториях, аккредитованных в установленном порядке.

Перечень продукции и контролируемых гигиенических параметров вредных и опасных факторов представлены в таблице 1.

Таблица 1(номер в пределах раздела)- Перечень продукции и контролируемые гигиенические параметры

Вид продукции

Код ОКП

Контролируемые гигиенические параметры

Машины вычислительные электронные цифровые, машины вычислительные электронные цифровые персональные (включая портативные ЭВМ)

40 1300,

 40 1350,

 40 1370

Уровни электромагнитных полей (ЭМП), акустического шума, концентрация вредных веществ в воздухе, визуальные показатели ВДТ, мягкое рентгеновское излучение*

Устройства периферийные: принтеры, сканеры, модемы, сетевые устройства, блоки бесперебойного питания

40 3000

Уровни ЭМП, акустического шума, концентрация вредных веществ в воздухе

Устройства отображения информации (видеодисплейные терминалы)

40 3200

Уровни ЭМП, визуальные показатели, концентрация вредных веществ в воздухе, мягкое рентгеновское излучение*

Автоматы игровые с использованием ПЭВМ

96 8575

Уровни ЭМП, акустического шума, концентрация вредных веществ в воздухе, визуальные показатели ВДТ, мягкое рентгеновское излучение*

* Контроль мягкого рентгеновского излучения осуществляется только для видеодисплейных терминалов с использованием электронно-лучевых трубок.

Допустимые уровни звукового давления и уровней звука, создаваемого ПЭВМ,  не  должны  превышать  значений, представленных в таблице 2.

Таблица 2 -Допустимые значения уровней звукового давления в октавных полосах частот и уровня звука, создаваемого ПЭВМ

Уровни звукового давления в октавных полосах со средне-геометрическими частотами

Уровни звука в дБА

31,5 Гц

63Гц

125 Гц

250 Гц

500Гц

1000 Гц

2000 Гц

4000 Гц

8000 Гц

86 дБ

71 дБ

61 дБ

54 дБ

49 дБ

45 дБ

42 дБ

40 дБ

38 дБ

50

Временные допустимые уровни электромагнитных полей (ЭМП), создаваемых ПЭВМ, не должны превышать значений, представленных в таблице 3.

Таблица 3- Временные допустимые уровни ЭМП, создаваемых ПЭВМ

Наименование параметров

ВДУ ЭМП

Напряженность электрического поля  

в диапазоне частот 5 Гц - 2 кГц

25 В/м

в диапазоне частот 2 кГц - 400 кГц

2,5 В/м

Плотность магнитного потока  

в диапазоне частот 5 Гц - 2 кГц

250 нТл

в диапазоне частот 2 кГц - 400 кГц

25нТл

Поверхностный электростатический потенциал экрана видеомонитора

500В

Допустимые   визуальные   параметры   устройств   отображения информации представлены в таблице 4.

Таблица 4 Допустимые визуальные параметры устройств отображения информации

Параметры

Допустимые значения

1

Яркость белого поля

Не менее 35 кд/кв.м

2

Неравномерность яркости рабочего поля

Не более ± 20%

3

Контрастность (для монохромного режима)

3:1

4

Временная нестабильность изображения (непреднамереное изменение во времени яркости изображения экрана дисплея)

Не должна фиксироваться

5

Пространственная нестабильность изображения (непреднамеренное изменнение положения фрагментов изображения экрана)

Не более 2*10L-4L, где L - расстояние наблюдения

Концентрации вредных веществ, выделяемых ПЭВМ в воздух помещений, не должны превышать предельно допустимых концентраций (ПДК), установленных для атмосферного воздуха.

Мощность экспозиционной дозы мягкого рентгеновского излучения в любой точке на расстоянии 0,05м от экрана и корпуса ВДТ (на электроннолучевой трубке) при любых положениях регулировочных устройств не должна превышать 1 мкЗв/час (100 мкР/час).

Конструкция ПЭВМ должна обеспечивать возможность поворота корпуса в горизонтальной и вертикальной плоскости с фиксацией в заданном положении для обеспечения фронтального наблюдения экрана ВДТ. Дизайн ПЭВМ должен предусматривать окраску корпуса в спокойные мягкие тона с диффузным рассеиванием света. Корпус ПЭВМ, клавиатура и другие блоки и устройства ПЭВМ должны иметь матовую поверхность с коэффициентом отражения 0,4 - 0,6 и не иметь блестящих деталей, способных создавать блики.

Конструкция ВДТ должна предусматривать регулирование яркости  и контрастности.

Документация на проектирование,  изготовление  и  эксплуатацию ПЭВМ не должна противоречить требованиям настоящих санитарных правил.

Помещения для эксплуатации ПЭВМ  должны  иметь   естественное и искусственное освещение. Эксплуатация ПЭВМ в помещениях без естественного освещения допускается только при соответствующем  обосновании  и  наличии положительного  санитарно-эпидемиологического  заключения,    выданного в установленном порядке.

Естественное и искусственное освещение должно соответствовать требованиям действующей нормативной документации. Окна в помещениях, где эксплуатируется вычислительная техника, преимущественно должны быть ориентированы на север и северо-восток.

Оконные проемы должны быть оборудованы регулируемыми устройствами типа: жалюзи, занавесей, внешних козырьков и др.

Не допускается размещение мест пользователей ПЭВМ   во всех образовательных и культурно-развлекательных учреждениях для детей и подростков в цокольных и подвальных помещениях.

Площадь на одно рабочее место пользователей ПЭВМ с ВДТ на базе электроннолучевой трубки (ЭЛТ) должна составлять не менее    6 м2, в помещениях культурно-развлекательных учреждений и с ВДТ на базе плоских дискретных экранов (жидкокристаллические, плазменные) - 4,5 м2.

При использовании ПВЭМ с ВДТ на базе ЭЛТ (без вспомогательных устройств - принтер, сканер и др.), отвечающих требованиям международных стандартов безопасности компьютеров, с  продолжительностью  работы  менее 4-х часов в день допускается минимальная площадь 4,5 м2 на  одно  рабочее место  пользователя  (взрослого  и  учащегося  высшего  профессионального образования).

Для внутренней отделки  интерьера  помещений,  где  расположены ПЭВМ, должны использоваться диффузно-отражающие материалы с коэффициентом отражения для потолка - 0,7 - 0,8; для стен - 0,5 - 0,6; для пола - 0,3 - 0,5.

Полимерные материалы  используются  для  внутренней   отделки интерьера помещений  с  ПЭВМ  при  наличии  санитарно-эпидемиологического заключения.

Помещения, где размещаются рабочие места с ПЭВМ,  должны  быть оборудованы  защитным   заземлением   (занулением)   в     соответствии с техническими требованиями по эксплуатации.

Не следует размещать  рабочие  места  с  ПЭВМ  вблизи  силовых кабелей  и  вводов,  высоковольтных   трансформаторов,   технологического оборудования, создающего помехи в работе ПЭВМ.

В производственных помещениях, в которых работа с использованием ПЭВМ является вспомогательной, температура, относительная влажность и скорость движения воздуха на рабочих местах должны соответствовать действующим санитарным нормам микроклимата производственных помещений.

В производственных помещениях, в которых работа с использованием ПЭВМ является основной (диспетчерские, операторские, расчетные, кабины и посты управления, залы вычислительной техники и др.) и связана с нервно-эмоциональным напряжением, должны обеспечиваться оптимальные параметры микроклимата для категории работ 1а и 1б в соответствии с действующими санитарно-эпидемиологическими нормативами микроклимата производственных помещений. На других рабочих местах следует поддерживать параметры микроклимата на допустимом уровне, соответствующем требованиям указанных выше нормативов.

В помещениях, оборудованных ПЭВМ, проводится ежедневная влажная уборка и систематическое проветривание после каждого часа работы на ПЭВМ.

Уровни положительных и отрицательных аэроионов в воздухе помещений, где расположены ПЭВМ, должны соответствовать действующим санитарно-эпидемиологическим нормативам.

Содержание вредных химических веществ в воздухе производственных помещений, в которых работа с использованием ПЭВМ является вспомогательной, не должно превышать предельно допустимых концентраций вредных веществ в воздухе рабочей зоны в соответствии с действующими гигиеническими нормативами.

Содержание вредных химических веществ в производственных помещениях, в которых работа с использованием ПЭВМ является основной (диспетчерские, операторские, расчетные, кабины и посты управления, залы вычислительной техники и др.), не должно превышать предельно допустимых концентраций загрязняющих веществ в атмосферном воздухе населенных мест в соответствии с действующими гигиеническими нормативами.

Содержание вредных химических веществ в воздухе помещений, предназначенных для использования ПЭВМ во всех типах образовательных учреждений, не должно превышать предельно допустимых среднесуточных концентраций для атмосферного воздуха в соответствии с действующими санитарно-эпидемиологическими нормативами.

В производственных помещениях при выполнении основных или вспомогательных работ с использованием ПЭВМ уровни шума на рабочих местах не должны превышать предельно допустимых значений, установленных для данных видов работ в соответствии с действующими санитарно-эпидемиологическими нормативами.

В помещениях всех образовательных и культурно-развлекательных учреждений для детей и подростков, где расположены ПЭВМ, уровни шума не должны превышать допустимых значений, установленных  для  жилых  и общественных зданий.

При выполнении работ с использованием ПЭВМ в производственных помещениях уровень вибрации не должен превышать допустимых значений вибрации для рабочих мест (категория 3, тип "в") в соответствии с действующими санитарно-эпидемиологическими нормативами.

В помещениях всех типов образовательных и культурно-развлекательных учреждений, в которых эксплуатируются ПЭВМ, уровень вибрации не должен превышать допустимых значений для жилых и общественных   зданий в соответствии с действующими санитарно-эпидемиологическими нормативами.

Шумящее оборудование (печатающие устройства, серверы и т.п.), уровни шума которого превышают нормативные, должно  размещаться вне помещений с ПЭВМ.

Рабочие столы следует  размещать  таким   образом, чтобы видео дисплейные терминалы были ориентированы боковой стороной к световым проемам, чтобы естественный свет падал преимущественно слева.

Искусственное освещение в помещениях для эксплуатации ПЭВМ должно осуществляться системой общего равномерного освещения. В производственных и административно-общественных помещениях, в случаях преимущественной работы с документами, следует применять системы комбинированного освещения (к общему освещению  дополнительно устанавливаются светильники местного освещения,  предназначенные для освещения зоны расположения документов).

Освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300 - 500 лк. Освещение не должно создавать бликов на поверхности экрана. Освещенность поверхности экрана не должна быть более 300 лк.

Следует ограничивать прямую блёскость от источников освещения, при этом яркость светящихся поверхностей (окна, светильники и др.), находящихся в поле зрения, должна быть не более 200 кд/м2.

Следует ограничивать отраженную блёскость на рабочих поверхностях (экран, стол, клавиатура и др.) за счет правильного выбора типов светильников и расположения рабочих мест по отношению к источникам естественного и искусственного освещения, при этом яркость  бликов на экране ПЭВМ не должна превышать 40 кд/м2 и яркость потолка не должна превышать 200 кд/м2.

Показатель ослепленности для источников общего искусственного освещения в производственных помещениях должен быть не более 20.

Показатель дискомфорта в административно-общественных помещениях не более 40, в дошкольных и учебных помещениях не более 15.

Яркость светильников общего освещения в зоне углов излучения от 50 до 90 градусов с вертикалью в продольной и поперечной плоскостях должна составлять не более 200 кд/м2, защитный угол светильников должен быть не менее 40 градусов.

Светильники местного освещения должны иметь не просвечивающий отражатель с защитным углом не менее 40 градусов.

Следует ограничивать неравномерность распределения яркости в поле зрения пользователя ПЭВМ, при этом соотношение  яркости между рабочими поверхностями не должно превышать 3:1 - 5:1, а между рабочими поверхностями и поверхностями стен и оборудования 10:1.

В качестве источников света при искусственном освещении следует применять преимущественно люминесцентные лампы   типа ЛБ и компактные люминесцентные лампы (КЛЛ). При устройстве  отраженного освещения в производственных и административно-общественных помещениях допускается применение металло-галогенных ламп. В светильниках местного освещения допускается применение ламп накаливания,  в   том числе галогенные.

Для освещения помещений с ПЭВМ следует применять светильники с зеркальными параболическими решетками, укомплектованными электронными пуско-регулирующими аппаратами (ЭПРА).  Допускается использование многоламповых светильников  с  электромагнитными  пуско-регулирующими аппаратами (ЭПРА), состоящими из равного числа опережающих и отстающих ветвей.

Применение светильников без рассеивателей и экранирующих решеток не допускается.

При отсутствии светильников с ЭПРА лампы многоламповых светильников или рядом расположенные светильники общего освещения следует включать на разные фазы трехфазной сети.

Общее освещение при использовании люминесцентных светильников следует выполнять в виде сплошных или прерывистых линий светильников, расположенных сбоку от  рабочих  мест,  параллельно   линии зрения пользователя при рядном расположении видеодисплейных  терминалов. При периметральном расположении компьютеров  линии  светильников  должны располагаться локализовано над рабочим столом ближе к его переднему краю, обращенному к оператору.

Коэффициент запаса (Кз) для осветительных установок общего освещения должен приниматься равным 1,4.

Коэффициент пульсации не должен превышать 5%.

Для обеспечения нормируемых значений освещенности в помещениях для использования ПЭВМ следует проводить чистку стекол оконных  рам и светильников не реже двух раз в год и проводить своевременную замену перегоревших ламп.

 Временные допустимые уровни ЭМП, создаваемых ПЭВМ на рабочих местах пользователей, а также в помещениях образовательных, дошкольных и культурно-развлекательных учреждений, представлены в таблице 5.

Таблица 5 Временные допустимые уровни ЭМП, создаваемых ПЭВМ на рабочих местах

Наименование параметров

ВДУ ЭМП

Напряженность электрического поля  

в диапазоне частот 5 Гц - 2 кГц

25 В/м

в диапазоне частот 2 кГц - 400 кГц

2,5 В/м

Плотность магнитного потока  

в диапазоне частот 5 Гц - 2 кГц

250 нТл

в диапазоне частот 2 кГц - 400 кГц

25нТл

Напряженность электростатического поля

15 кВ/м

Предельно допустимые значения визуальных параметров ВДТ, контролируемые на рабочих местах, представлены в таблице 6.

Таблица 6- Визуальные параметры ВДТ, контролируемые на рабочих местах

Параметры

Допустимые значения

1

Яркость белого поля

Не менее 35 кд/кв.м

2

Неравномерность яркости рабочего поля

Не более ± 20%

3

Контрастность (для монохромного режима)

3:1

4

Временная нестабильность изображения (мелькание)

Не должна фиксироваться

5

Пространственная нестабильность изображения (дрожание)

Не более 2*10L-4L, где L - расстояние наблюдения

При размещении рабочих мест с ПЭВМ расстояние между рабочими столами с видеомониторами (в направлении тыла поверхности одного видеомонитора и экрана другого видеомонитора), должно быть не менее 2,0 м, а расстояние между боковыми поверхностями видеомониторов - не менее 1,2 м.

Рабочие места с ПЭВМ в помещениях с источниками вредных производственных факторов должны размещаться в изолированных кабинах с организованным воздухообменом.

Рабочие места с ПЭВМ при выполнении творческой работы, требующей значительного умственного напряжения или высокой концентрации внимания, рекомендуется изолировать друг от друга перегородками высотой 1,5 - 2,0 м.

Экран видеомонитора должен находиться от глаз пользователя на расстоянии 600 - 700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов.

Конструкция рабочего стола должна обеспечивать оптимальное размещение на рабочей поверхности используемого оборудования с учетом его количества и конструктивных особенностей, характера выполняемой работы.

При этом допускается использование рабочих столов различных конструкций, отвечающих современным требованиям эргономики. Поверхность рабочего стола должна иметь коэффициент отражения 0,5 - 0,7.

Конструкция рабочего стула (кресла) должна обеспечивать поддержание рациональной рабочей позы при работе на ПЭВМ позволять изменять позу с целью снижения статического напряжения мышц шейно-плечевой области и спины для предупреждения развития утомления. Тип рабочего стула (кресла) следует выбирать с учетом роста пользователя, характера и продолжительности работы с ПЭВМ.

 Рабочий стул (кресло) должен быть подъемно-поворотным, регулируемым по высоте и углам наклона сиденья и спинки, а также расстоянию спинки от переднего края сиденья, при этом регулировка каждого параметра должна быть независимой, легко осуществляемой и иметь надежную фиксацию.

 Поверхность сиденья, спинки и других элементов стула (кресла) должна быть полумягкой, с нескользящим, слабо электризующимся и воздухопроницаемым покрытием, обеспечивающим легкую очистку от загрязнений.

Заключение

В ходе дипломной работы мной была написана (ты только писала???????????????) программа для учета услуг в фотосалоне  в системе 1С предприятие.  Все поставленные цели были достигнуты. Программа производит учет услуг, хранит документы и данные, необходимые для создания и учета услуг.  

Так же  имеется возможность расчета прибыли и автоматической наценки.

В заключение можно сказать о том, что разработка приложений не остановится на разработанном приложении (масло масляное). Ведь технологии и условия предоставления услуг не стоят на месте.

Во время написания дипломной работы, мной было получено множество теоретических и практических знаний, в области разработки автоматизированных рабочих мест, а так же в области

Список использованной литературы 

  1.  http://www.interface.ru
  2.  М.Г. Радченко «1С: Предприятие. Практическое пособие для разработчиков» ООО «1С-Паблишинг», СПб:Питер, 2007 г.
  3.   «1С: Предприятие. Руководство разработчика прикладных решений» ООО «1С-Паблишинг» Москва, Фирма «1С», 2009 г.
  4.  Н.Н. Карпухина «Экономические информационные системы: Разработка прикладного решения средствами 1С: Предприятия» Учебное Пособие, М:МГУПи, 2013 г.

Тексты процедуры

Общий модуль «Работа со справочниками»

Функция РозничнаяЦена(АктуальнаяДата,ЭлементУслуги) Экспорт

 //Создать вспомогательный объект Отбор.

 Отбор=Новый Структура("Услуга",ЭлементУслуги);

 //Получить актуальные значения ресурсов регистра.

ЗначенияРесурсов=РегистрыСведений.Цены.ПолучитьПоследнее

(АктуальнаяДата,Отбор);

 Возврат ЗначенияРесурсов.Цена;

КонецФункции

Общий модуль «Длительные операции»

Функция ФормаДлительнойОперации() Экспорт

 

Возврат ПолучитьФорму("ОбщаяФорма.ДлительнаяОперация");

КонецФункции

Общий модуль «Работа с документами»

Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт

 

Наценка = СтрокаТабличнойЧасти.Наценка;

Цена = СтрокаТабличнойЧасти.Цена;

Сумма = СтрокаТабличнойЧасти.Сумма;

Стоимость = СтрокаТабличнойЧасти.Стоимость;

Количество = СтрокаТабличнойЧасти.Количество;

 

Если Наценка = 0 Тогда

 СтрокаТабличнойЧасти.Наценка = 1.2;

КонецЕсли;

Если Стоимость <> 0 Тогда

    СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Стоимость * СтрокаТабличнойЧасти.Наценка;

 СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

ИначеЕсли Стоимость = 0 И Цена <> 0 И Количество <> 0 Тогда

 СтрокаТабличнойЧасти.Стоимость = СтрокаТабличнойЧасти.Цена /СтрокаТабличнойЧасти.Наценка;

 СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

КонецЕсли;

                

КонецПроцедуры

Общий модуль «Проведение расчетов»  

Процедура РассчитатьНачисления(НаборЗаписейРегистра,ТребуемыйВидРасчета,СписокСотрудников)Экспорт

   

   Регистратор=НаборЗаписейРегистра.Отбор.Регистратор.Значение;

   

  //Рассчитать первичные записи.

   Если ТребуемыйВидРасчета=ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда

       

       Запрос=Новый Запрос;

       Запрос.Текст=

       "Выбрать

       |isnull(НачисленияДанныеГрафика.ЗначениеПериодДействия,0) КАК Норма,

    |isnull(НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия,0) КАК Факт,

       |НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки

       |ИЗ

       |РегистрРасчета.Начисления.ДанныеГрафика(Регистратор=&Регистратор И

       |ВидРасчета=&ВидРасчета И Сотрудник В(&СписокСотрудников))

       |КАК НачисленияДанныеГрафика";

       

       Запрос.УстановитьПараметр("Регистратор",Регистратор);

       Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета);

       Запрос.УстановитьПараметр("СписокСотрудников",СписокСотрудников);

       

       ВыборкаРезультата=Запрос.Выполнить().Выбрать();

       

       Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл

           СтруктураНомер=Новый Структура("НомерСтроки");

           СтруктураНомер.НомерСтроки=ЗаписьРегистра.НомерСтроки;

           ВыборкаРезультата.Сбросить();

           Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда

               Если ВыборкаРезультата.Норма=0 Тогда

                   Сообщение=Новый СообщениеПользователю;

                   Сообщение.Текст="Вид рассчета:Оклад-Нет рабочих дней в заданном периоде";

                   Сообщение.Сообщить();

                   ЗаписьРегистра.Результат=0;

               Иначе

                  //Рассчитать оклад по фактическому периоду и исходным данным                    ЗаписьРегистра.Результат=ЗаписьРегистра.ИсходныеДанные;///

ВыборкаРезультата.Норма)*ВыборкаРезультата.Факт;                        

                   Сообщение=Новый СообщениеПользователю;

                   Сообщение.Текст="Выполнен расчет"+ЗаписьРегистра.Регистратор+"-"+ЗаписьРегистра.ВидРасчета+"-"+ЗаписьРегистра.Сотрудник;

                   Сообщение.Сообщить();

               КонецЕсли;

           КонецЕсли;

       КонецЦикла;    

       

      //Рассчитать вторичные записи

   ИначеЕсли ТребуемыйВидРасчета=ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда   

       Запрос=Новый Запрос;

       Запрос.Текст=

       "ВЫБРАТЬ

       |    НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки,

       |    НачисленияБазаНачисления.РезультатБаза КАК База

       |ИЗ

       |    РегистрРасчета.Начисления.БазаНачисления(&ИзмеренияОсновного,&ИзмеренияБазового,,Регистратор=&Регистратор И ВидРасчета=&ВидРасчета И Сотрудник В(&СписокСотрудников))

       |КАК НачисленияБазаНачисления";

       

       Измер=Новый Массив(1);

       Измер[0]="Сотрудник";

       

       Запрос.УстановитьПараметр("ИзмеренияОсновного",Измер);

       Запрос.УстановитьПараметр("ИзмеренияБазового",Измер);

       Запрос.УстановитьПараметр("Регистратор",Регистратор);

       Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета);

       Запрос.УстановитьПараметр("СписокСотрудников",СписокСотрудников);

       

       ВыборкаРезультата=Запрос.Выполнить().Выбрать();

       

       Для Каждого ЗаписьРегистра ИЗ НаборЗаписейРегистра Цикл

           СтруктураНомер=Новый Структура("НомерСтроки");

           СтруктураНомер.НомерСтроки=ЗаписьРегистра.НомерСтроки;

           Выборкарезультата.Сбросить();

           Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер)Тогда

               ЗаписьРегистра.Результат = ЗаписьРегистра.ИсходныеДанные;//ВыборкаРезультата.База*(10/100);

               Сообщение=Новый СообщениеПользователю;

               Сообщение.Текст="Выполнен расчет"+ЗаписьРегистра.Регистратор+"-"+ЗаписьРегистра.ВидРасчета+"-"+ЗаписьРегистра.Сотрудник;

               Сообщение.Сообщить();

           КонецЕсли;

       КонецЦикла;

КонецЕсли;    

КонецПроцедуры

Процедура  ПерерассчитатьНачисления(ТребуемыйВидРасчета) Экспорт

  // Здесь следует выбрать из набора записей перерасчета записи в следующей последовательности:

  // записи  документа1  для сотрудников из списка,

  // записи  документа2  для сотрудников из списка и т. д.

  Запрос = Новый Запрос(

  "ВЫБРАТЬ

  |        НачисленияПерерасчет.ОбъектПерерасчета,

  |        НачисленияПерерасчет.Сотрудник

  |ИЗ

  |        РегистрРасчета.Начисления.Перерасчет  КАК НачисленияПерерасчет

  |ГДЕ

  |        НачисленияПерерасчет.ВидРасчета  = &ТребуемыйВидРасчета

  |ИТОГИ ПО

  |        НачисленияПерерасчет.ОбъектПерерасчета");

  Запрос.УстановитьПараметр("ТребуемыйВидРасчета", ТребуемыйВидРасчета);

  СписокСотрудников = Новый СписокЗначений;

  // Перебрать  группировку по регистратору.

  ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

  Пока ВыборкаПоРегистратору.Следующий() Цикл

     Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;

     // Перебрать  группировку по сотрудникам для выбранного  регистратора

     // и создать  список  сотрудников.

     ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();

     СписокСотрудников.Очистить();

     Пока ВыборкаПоСотрудникам.Следующий() Цикл

        СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);

     КонецЦикла;

     // Получить  набор  записей  регистра расчета для выбранного регистратора.

     НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();

     НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;

     НаборЗаписей.Прочитать();

     РассчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета,  СписокСотрудников);

     НаборЗаписей.Записать( , Истина);

     // Очистить перерассчитанные  записи в перерасчете.

     НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();

     НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;

     НаборЗаписейПерерасчета.Записать();

  КонецЦикла;

КонецПроцедуры

Процедура  ПерерассчитатьНачисления(ТребуемыйВидРасчета) Экспорт

  // Здесь следует выбрать из набора записей перерасчета записи в следующей последовательности:

  // записи  документа1  для сотрудников из списка,

  // записи  документа2  для сотрудников из списка и т. д.

  Запрос = Новый Запрос(

  "ВЫБРАТЬ

  |        НачисленияПерерасчет.ОбъектПерерасчета,

  |        НачисленияПерерасчет.Сотрудник

  |ИЗ

  |        РегистрРасчета.Начисления.Перерасчет  КАК НачисленияПерерасчет

  |ГДЕ

  |        НачисленияПерерасчет.ВидРасчета  = &ТребуемыйВидРасчета

  |ИТОГИ ПО

  |        НачисленияПерерасчет.ОбъектПерерасчета");

  Запрос.УстановитьПараметр("ТребуемыйВидРасчета", ТребуемыйВидРасчета);

  СписокСотрудников = Новый СписокЗначений;

  // Перебрать  группировку по регистратору.

  ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

  Пока ВыборкаПоРегистратору.Следующий() Цикл

     Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;

     // Перебрать  группировку по сотрудникам для выбранного  регистратора

     // и создать  список  сотрудников.

     ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();

     СписокСотрудников.Очистить();

     Пока ВыборкаПоСотрудникам.Следующий() Цикл

        СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);

     КонецЦикла;

     // Получить  набор  записей  регистра расчета для выбранного регистратора.

     НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();

     НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;

     НаборЗаписей.Прочитать();

     РассчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета,  СписокСотрудников);

     НаборЗаписей.Записать( , Истина);

     // Очистить перерассчитанные  записи в перерасчете.

     НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();

     НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;

     НаборЗаписейПерерасчета.Записать();

  КонецЦикла;

КонецПроцедуры

Общий модуль «Журнал регистрации»

// Подсистема "Базовая функциональность".

// Внутренние процедуры и функции для работы с журналом регистрации.

// Служебный программный интерфейс

// Выполняет чтение событий журнала регистрации в соответствии с установленным отбором

// Параметры:

//  ПараметрыОтчета - Структура, содержит параметры для чтения событий журнала регистрации

// АдресХранилища - Адрес временного хранилища, куда помещается итоговый результат

// Журнал - ТаблицаЗначений, содержащая записи журнала регистрации

// ОтборЖурналаНаКлиенте - Структура, настройки отбора для чтения записей журнала регистрации

// КоличествоСобытий - Число, ограничивает число считываемых событий журнала

// УникальныйИдентификатор - УникальныйИдентификатор, уникальный идентификатор формы

// МенеджерВладельца - менеджер объекта, в форме которого отображается журнал регистрации,

//необходим для обратного вызова функций оформления

// ДобавлятьДополнительныеКолонки - Булево, определяет необходимость обратного вызова для добавления дополнительных колонок

//

Процедура ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища) Экспорт

 

Журнал = ПараметрыОтчета.Журнал;

ОтборЖурналаНаКлиенте = ПараметрыОтчета.ОтборЖурналаРегистрации;

КоличествоСобытий = ПараметрыОтчета.КоличествоПоказываемыхСобытий;

УникальныйИдентификатор = ПараметрыОтчета.УникальныйИдентификатор;

МенеджерВладельца = ПараметрыОтчета.МенеджерВладельца;

ДобавлятьДополнительныеКолонки = ПараметрыОтчета.ДобавлятьДополнительныеКолонки;

 

// Удаление ранее подготовленных временных данных

ОписанияАдресов = Журнал.ВыгрузитьКолонку("АдресДанных");

Для каждого Адрес Из ОписанияАдресов Цикл

 Если ЗначениеЗаполнено(Адрес) Тогда

  УдалитьИзВременногоХранилища(Адрес);

 КонецЕсли;

КонецЦикла;

 

// Подготовка Отбора

Отбор = Новый Структура;

Для Каждого ЭлементОтбора Из ОтборЖурналаНаКлиенте Цикл

 Отбор.Вставить(ЭлементОтбора.Ключ, ЭлементОтбора.Значение);

КонецЦикла;

ПреобразованиеОтбора(Отбор);

 

// Выгрузка отбираемых событий

СобытияЖурнала = Новый ТаблицаЗначений;

ВыгрузитьЖурналРегистрации(СобытияЖурнала, Отбор, , , КоличествоСобытий);

СобытияЖурнала.Колонки.Добавить("НомерРисунка", Новый ОписаниеТипов("Число"));

СобытияЖурнала.Колонки.Добавить("АдресДанных",  Новый ОписаниеТипов("Строка"));

Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда

 СобытияЖурнала.Колонки.Добавить("ПредставлениеРазделенияДанныхСеанса", Новый ОписаниеТипов("Строка"));

КонецЕсли;

 

ПравилаУстановкиРисунка = Неопределено;

 

Если ДобавлятьДополнительныеКолонки Тогда

 // Добавление дополнительных колонок

 МенеджерВладельца.ДобавитьДополнительныеКолонкиСобытия(СобытияЖурнала);

КонецЕсли;

 

ПроверенныеПользователи = Новый Массив();

ПсевдонимыСлужебныхПользователей = Новый Соответствие();

 

Для Каждого СобытиеЖурнала Из СобытияЖурнала Цикл

 

 // Заполнение номеров картинок строк

 МенеджерВладельца.УстановитьНомерРисунка(СобытиеЖурнала);

 

 Если ДобавлятьДополнительныеКолонки Тогда

  // Заполнение дополнительных полей, определенных только у владельца

  МенеджерВладельца.ЗаполнитьДополнительныеКолонкиСобытия(СобытиеЖурнала);

 КонецЕсли;

 

 // Преобразование массива метаданных в список значений

 СписокПредставленийМетаданных = Новый СписокЗначений;

 Если ТипЗнч(СобытиеЖурнала.ПредставлениеМетаданных) = Тип("Массив") Тогда

  СписокПредставленийМетаданных.ЗагрузитьЗначения(СобытиеЖурнала.ПредставлениеМетаданных);

 Иначе

  СписокПредставленийМетаданных.Добавить(Строка(СобытиеЖурнала.ПредставлениеМетаданных));

 КонецЕсли;

 СобытиеЖурнала.ПредставлениеМетаданных = СписокПредставленийМетаданных;

 

 // Преобразование массива "ПредставлениеРазделенияДанныхСеанса" в список значений

 Если ОбщегоНазначенияПовтИсп.РазделениеВключено()

  И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда

  ПредставлениеРазделенияДанныхСеанса = СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса;

  СписокРеквизитовРазделенияДанных = Новый СписокЗначений;

  СписокРеквизитовРазделенияДанных.ЗагрузитьЗначения(ПредставлениеРазделенияДанныхСеанса);

  СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса = СписокРеквизитовРазделенияДанных;

 КонецЕсли;

 

 // Обработка данных специальных событий

 Если СобытиеЖурнала.Событие = "_$Access$_.Access" Тогда

  СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор);

  Если СобытиеЖурнала.Данные <> Неопределено Тогда

   СобытиеЖурнала.Данные = ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", "...");

  КонецЕсли;

  

 ИначеЕсли СобытиеЖурнала.Событие = "_$Access$_.AccessDenied" Тогда

  СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор);

  Если СобытиеЖурнала.Данные <> Неопределено Тогда

   Если СобытиеЖурнала.Данные.Свойство("Право") Тогда

    СобытиеЖурнала.Данные = НСтр("ru = 'Право:'") + " " + СобытиеЖурнала.Данные.Право;

   Иначе

    СобытиеЖурнала.Данные = НСтр("ru = 'Действие:'") + " " + СобытиеЖурнала.Данные.Действие +

     ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", ", ...");

   КонецЕсли;

  КонецЕсли;

  

 ИначеЕсли СобытиеЖурнала.Событие = "_$Session$_.Authentication"

       ИЛИ СобытиеЖурнала.Событие = "_$Session$_.AuthenticationError" Тогда

  СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор);

  СобытиеЖурналаДанные = "";

  Если СобытиеЖурнала.Данные <> Неопределено Тогда

   Для каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл

    Если ЗначениеЗаполнено(СобытиеЖурналаДанные) Тогда

     СобытиеЖурналаДанные = СобытиеЖурналаДанные + ", ...";

     Прервать;

    КонецЕсли;

    СобытиеЖурналаДанные = КлючИЗначение.Ключ + ": " + КлючИЗначение.Значение;

   КонецЦикла;

  КонецЕсли;

  СобытиеЖурнала.Данные = СобытиеЖурналаДанные;

  

 ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.Delete" Тогда

  СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор);

  СобытиеЖурналаДанные = "";

  Если СобытиеЖурнала.Данные <> Неопределено Тогда

   Для каждого КлючИЗначение Из СобытиеЖурнала.Данные Цикл

    СобытиеЖурналаДанные = КлючИЗначение.Ключ + ": " + КлючИЗначение.Значение;

    Прервать;

   КонецЦикла;

  КонецЕсли;

  СобытиеЖурнала.Данные = СобытиеЖурналаДанные;

  

 ИначеЕсли СобытиеЖурнала.Событие = "_$User$_.New"

       ИЛИ СобытиеЖурнала.Событие = "_$User$_.Update" Тогда

  СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор);

  ИмяПользователяИБ = "";

  Если СобытиеЖурнала.Данные <> Неопределено Тогда

   СобытиеЖурнала.Данные.Свойство("Имя", ИмяПользователяИБ);

  КонецЕсли;

  СобытиеЖурнала.Данные = НСтр("ru = 'Имя:'") + " " + ИмяПользователяИБ + ", ...";

  

 КонецЕсли;

 

 УстановитьПривилегированныйРежим(Истина);

 // Уточнение имени пользователя

 Если СобытиеЖурнала.Пользователь = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда

  СобытиеЖурнала.ИмяПользователя = НСтр("ru = '<Неопределен>'");

  

 ИначеЕсли СобытиеЖурнала.ИмяПользователя = "" Тогда

  СобытиеЖурнала.ИмяПользователя = Пользователи.ПолноеИмяНеУказанногоПользователя();

  

 ИначеЕсли ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь) = Неопределено Тогда

  СобытиеЖурнала.ИмяПользователя = СобытиеЖурнала.ИмяПользователя + " " + НСтр("ru = '<Удален>'");

 КонецЕсли;

 

 Если ПроверенныеПользователи.Найти(СобытиеЖурнала.Пользователь) = Неопределено Тогда

  

  ПроверенныеПользователи.Добавить(СобытиеЖурнала.Пользователь);

  

  Если Пользователи.ЭтоНеразделенныйПользователь(СобытиеЖурнала.Пользователь) Тогда

   

   ПсевдонимСлужебногоПользователя = Пользователи.ПолноеИмяСлужебногоПользователя(СобытиеЖурнала.Пользователь);

   

   ПсевдонимыСлужебныхПользователей.Вставить(СобытиеЖурнала.Пользователь, ПсевдонимСлужебногоПользователя);

   СобытиеЖурнала.ИмяПользователя = ПсевдонимСлужебногоПользователя;

   

  КонецЕсли;

  

 Иначе

  

  ПсевдонимСлужебногоПользователя = ПсевдонимыСлужебныхПользователей.Получить(СобытиеЖурнала.Пользователь);

  Если ПсевдонимСлужебногоПользователя <> Неопределено Тогда

   СобытиеЖурнала.ИмяПользователя = ПсевдонимСлужебногоПользователя;

  КонецЕсли;

  

 КонецЕсли;

 

 // Преобразование идентификатора в имя для использования в дальнейшем при установке отборе

 СобытиеЖурнала.Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь);

 УстановитьПривилегированныйРежим(Ложь);

 

КонецЦикла;

 

ПоместитьВоВременноеХранилище(Новый Структура("СобытияЖурнала",

        СобытияЖурнала), АдресХранилища);

 

КонецПроцедуры

// Создает пользовательское представление отбора журнала регистрации

//

// Параметры:

// ПредставлениеОтбора - Строка, строка, содержащая пользовательское представление отбора

// ОтборЖурналаРегистрации - Структура, значения отбора журнала регистрации

// ОтборЖурналаРегистрацииПоУмолчанию - Структура, значения отбора журнала регистрации по умолчанию

//          (не включаются в пользовательское представления)

//

Процедура СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации,

ОтборЖурналаРегистрацииПоУмолчанию = Неопределено) Экспорт

ПредставлениеОтбора = "";

// Интервал

ДатаНачалаИнтервала    = Неопределено;

ДатаОкончанияИнтервала = Неопределено;

Если Не ОтборЖурналаРегистрации.Свойство("ДатаНачала", ДатаНачалаИнтервала) Или

  ДатаНачалаИнтервала = Неопределено Тогда

 ДатаНачалаИнтервала    = '00010101000000';

КонецЕсли;

Если Не ОтборЖурналаРегистрации.Свойство("ДатаОкончания", ДатаОкончанияИнтервала) Или

  ДатаОкончанияИнтервала = Неопределено Тогда

 ДатаОкончанияИнтервала = '00010101000000';

КонецЕсли;

Если Не (ДатаНачалаИнтервала = '00010101000000' И ДатаОкончанияИнтервала = '00010101000000') Тогда

 ПредставлениеОтбора = ПредставлениеПериода(ДатаНачалаИнтервала, ДатаОкончанияИнтервала);

КонецЕсли;

 

ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Пользователь");

ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора,

 "Событие", ОтборЖурналаРегистрацииПоУмолчанию);

ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора,

 "ИмяПриложения", ОтборЖурналаРегистрацииПоУмолчанию);

ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Сеанс");

ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Уровень");

 

// Остальные ограничения указываем просто по представлением, без указания значений ограничения

Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрации Цикл

 ИмяОграничения = ЭлементОтбора.Ключ;

 Если ВРег(ИмяОграничения) = ВРег("ДатаНачала")

   Или ВРег(ИмяОграничения) = ВРег("ДатаОкончания")

   Или ВРег(ИмяОграничения) = ВРег("Событие")

   Или ВРег(ИмяОграничения) = ВРег("ИмяПриложения")

   Или ВРег(ИмяОграничения) = ВРег("Пользователь")

   Или ВРег(ИмяОграничения) = ВРег("Сеанс")

   Или ВРег(ИмяОграничения) = ВРег("Уровень") Тогда

  Продолжить; // Интервал и особые ограничения уже выводили

 КонецЕсли;

 

 // Для некоторых ограничений меняем представление

 Если ВРег(ИмяОграничения) = ВРег("ИмяПриложения") Тогда

  ИмяОграничения = НСтр("ru = 'Приложение'");

  

 ИначеЕсли ВРег(ИмяОграничения) = ВРег("СтатусТранзакции") Тогда

  ИмяОграничения = НСтр("ru = 'Статус транзакции'");

  

 ИначеЕсли ВРег(ИмяОграничения) = ВРег("ПредставлениеДанных") Тогда

  ИмяОграничения = НСтр("ru = 'Представление данных'");

  

 ИначеЕсли ВРег(ИмяОграничения) = ВРег("РабочийСервер") Тогда

  ИмяОграничения = НСтр("ru = 'Рабочий сервер'");

  

 ИначеЕсли ВРег(ИмяОграничения) = ВРег("ОсновнойIPПорт") Тогда

  ИмяОграничения = НСтр("ru = 'Основной IP порт'");

  

 ИначеЕсли ВРег(ИмяОграничения) = ВРег("ВспомогательныйIPПорт") Тогда

  ИмяОграничения = НСтр("ru = 'Вспомогательный IP порт'");

  

 КонецЕсли;

 

 Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда

  ПредставлениеОтбора = ПредставлениеОтбора + "; ";

 КонецЕсли;

 ПредставлениеОтбора = ПредставлениеОтбора + ИмяОграничения;

КонецЦикла;

 

Если ПустаяСтрока(ПредставлениеОтбора) Тогда

 ПредставлениеОтбора = НСтр("ru = 'Не установлен'");

КонецЕсли;

 

КонецПроцедуры

// Служебные процедуры и функции

// Преобразование отбора.

// Отбор - отбор - передаваемый отбор.

Процедура ПреобразованиеОтбора(Отбор)

Для Каждого ЭлементОтбора Из Отбор Цикл

Если ТипЗнч(ЭлементОтбора.Значение) = Тип("СписокЗначений") Тогда

ПреобразованиеЭлементаОтбора(Отбор, ЭлементОтбора);

ИначеЕсли ВРег(ЭлементОтбора.Ключ) = ВРег("Транзакция") Тогда

Если Найти(ЭлементОтбора.Значение, "(") = 0 Тогда

Отбор.Вставить(ЭлементОтбора.Ключ, "(" + ЭлементОтбора.Значение);

КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

// Преобразование элемента отбора.

// Параметры:

// Отбор - отбор - передаваемый отбор.

// Отбор - Элемент отбора - - элемент передаваемого отбора.

//

Процедура ПреобразованиеЭлементаОтбора(Отбор, ЭлементОтбора)

// Эта процедура вызывается, если элемент отбора является списком значений,

// в отборе же должен быть массив значений. Преобразуем список в массив.

НовоеЗначение = Новый Массив;

Для Каждого ЗначениеИзСписка Из ЭлементОтбора.Значение Цикл

 Если ВРег(ЭлементОтбора.Ключ) = ВРег("Уровень") Тогда

  // Уровни сообщений представлены строкой, требуется преобразование в значение перечисления

  НовоеЗначение.Добавить(Обработки.ЖурналРегистрации.УровеньЖурналаРегистрацииЗначениеПоИмени(ЗначениеИзСписка.Значение));

ИначеЕсли ВРег(ЭлементОтбора.Ключ) = ВРег("СтатусТранзакции") Тогда

// Статусы транзакций представлены строкой, требуется преобразование в значение перечисления

  НовоеЗначение.Добавить(Обработки.ЖурналРегистрации.СтатусТранзакцииЗаписиЖурналаРегистрацииЗначениеПоИмени(ЗначениеИзСписка.Значение));

Иначе

НовоеЗначение.Добавить(ЗначениеИзСписка.Значение);

КонецЕсли;

КонецЦикла;

Отбор.Вставить(ЭлементОтбора.Ключ, НовоеЗначение);

КонецПроцедуры

// Добавить ограничение в представление отбора.

// Параметры:

// ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации.

// ПредставлениеОтбора - Строка - представление отбора.

// ИмяОграничения - Строка - имя ограничения.

// ОтборЖурналаРегистрацииПоУмолчанию - Отбор - отбор журнала регистрации по умолчанию.

Процедура ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, ИмяОграничения,

ОтборЖурналаРегистрацииПоУмолчанию = Неопределено)

СписокОграничений = "";

Ограничение = "";

Если ОтборЖурналаРегистрации.Свойство(ИмяОграничения, СписокОграничений) Тогда

// Не формируем представление отбора, если его значение соответствует значению отбора по умолчанию

Если ОтборЖурналаРегистрацииПоУмолчанию <> Неопределено Тогда

СписокОграниченийПоУмолчанию = "";

Если ОтборЖурналаРегистрацииПоУмолчанию.Свойство(ИмяОграничения, СписокОграниченийПоУмолчанию)

И ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СписокОграниченийПоУмолчанию, СписокОграничений) Тогда

Возврат;

КонецЕсли;

КонецЕсли;

Если ИмяОграничения = "Событие"

И СписокОграничений.Количество() > 5 Тогда

ПредставлениеОтбора

= СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'События (%1)'"), СписокОграничений.Количество());

Иначе

Для Каждого ЭлементСписка Из СписокОграничений Цикл

Если Не ПустаяСтрока(Ограничение) Тогда

Ограничение = Ограничение + ", ";

КонецЕсли;

Если ВРег(ИмяОграничения) = ВРег("Сеанс")

ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")

И ПустаяСтрока(Ограничение) Тогда

Ограничение = НСтр("ru = '[ИмяОграничения]: [Значение]'");

Ограничение = СтрЗаменить(Ограничение, "[Значение]", ЭлементСписка.Значение);

Ограничение = СтрЗаменить(Ограничение, "[ИмяОграничения]", ИмяОграничения);

ИначеЕсли ВРег(ИмяОграничения) = ВРег("Сеанс")

ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")Тогда

Ограничение = Ограничение + ЭлементСписка.Значение;

Иначе

Ограничение = Ограничение + ЭлементСписка.Представление;

КонецЕсли;

КонецЦикла;

Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда

ПредставлениеОтбора = ПредставлениеОтбора + "; ";

КонецЕсли;

ПредставлениеОтбора = ПредставлениеОтбора + Ограничение;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

Общий модуль «Обновление информационной базы»

// Подсистема "Обновление версии ИБ"

// Серверные процедуры и функции обновления информационной базы

// при смене версии конфигурации.

// Программный интерфейс

// Проверить необходимость обновления информационной базы при смене версии конфигурации.

//

Функция НеобходимоОбновлениеИнформационнойБазы() Экспорт

УстановитьПривилегированныйРежим(Истина);

Если НеобходимоВыполнитьОбновление(Метаданные.Версия, ВерсияИБ(Метаданные.Имя)) Тогда

Возврат Истина;

КонецЕсли;

Возврат Ложь;

КонецФункции

// Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ.

// В главном узле всегда - Ложь.

Функция ТребуетсяОбновлениеКонфигурацииУзлаРИБ() Экспорт

Возврат КонфигурацияИзменена() И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ();

КонецФункции

// Обновление ИБ будет выполнено вне зависимости от изменения версии конфигурации.

// Если версия конфигурации не изменилась, будут выполнены только обязательные

// обработчики обновления (у которых версия = "*").

// Необходимость снимается автоматически после обновления ИБ.

// Не используется в модели сервиса.

Процедура УстановитьНеобходимостьОбновленияИнформационнойБазы() Экспорт

// В текущей конфигурации действий не требуется

КонецПроцедуры

Служебный программный интерфейс

// Проверить необходимость обновления неразделенных данных информационной базы

// при смене версии конфигурации.

Функция НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы() Экспорт

УстановитьПривилегированныйРежим(Истина);

Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда

ВерсияМетаданных = Метаданные.Версия;

Если ПустаяСтрока(ВерсияМетаданных) Тогда

ВерсияМетаданных = "0.0.0.0";

КонецЕсли;

ВерсияОбщихДанных = ВерсияИБ(Метаданные.Имя, Истина);

Если НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда

Возврат Истина;

КонецЕсли;

КонецЕсли;

Возврат Ложь;

КонецФункции

// Возвращает текст причины блокировки, если требуется обновление ИБ и у текущего пользователя

// для этого недостаточно прав, иначе возвращает пустую строку.

// Параметры:

//  УчитыватьПривилегированныйРежим - Булево. Начальное значение Истина. Если указать Ложь,

//  то при проверке полноправности текущего пользователя

//  наличие привилегированного режиме не будет учитываться

//  ПриЗапускеКлиентскогоПриложения - Булево. Начальное значение Ложь. Если указать Истина,

//  тогда в случае, если выполнен запуск с пустым списком

//  пользователей, то возвращается пустая строка, вместо

// сообщения о недостатке прав (когда есть недостаток),

//т.к. проверка на запуск с пустым списком пользователей

// при недостатке прав проверяется позднее и отдельно,

// в результате чего происходит добавление пользователя ИБ

//администратор с ролями АдминистраторСистемы и ПолныеПрава.

// Возвращаемое значение:

//  Строка. Если база не заблокирована, тогда пустая строка, иначе сообщение о причине блокировки

Функция ИнформационнаяБазаЗаблокированаДляОбновления(УчитыватьПривилегированныйРежим = Истина, Знач ПриЗапускеКлиентскогоПриложения = Ложь) Экспорт

Сообщение = "";

// Проверка необходимости обновления информационной базы.

// Проверка наличия прав для обновления информационной базы.

Если НЕ ПустаяСтрока(Метаданные.Версия)

 И Константы.НомерВерсииКонфигурации.Получить() <> Метаданные.Версия И

 (НЕ ПравоДоступа("МонопольныйРежим", Метаданные)

 ИЛИ НЕ ПравоДоступа("Использование",    Метаданные.Обработки.ОбновлениеИнформационнойБазы)

 ИЛИ НЕ ПравоДоступа("Просмотр",         Метаданные.Обработки.ОбновлениеИнформационнойБазы)) Тогда

 Сообщение = "Недостаточно прав для выполнения обновления. Работа системы будет завершена.";

КонецЕсли;

Возврат Сообщение;

КонецФункции

// Получить версию конфигурации или родительской конфигурации (библиотеки),

// которая хранится в информационной базе.

// Параметры

//  ИдентификаторБиблиотеки  – Строка – имя конфигурации или идентификатор библиотеки.

// Возвращаемое значение:

//   Строка   – версия.

// Пример использования:

//   ВерсияКонфигурацииИБ = ВерсияИБ(Метаданные.Имя);

Функция ВерсияИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных = Ложь) Экспорт

 

УстановитьПривилегированныйРежим(Истина);

СтандартнаяОбработка = Истина;

Результат = "";

Если ИдентификаторБиблиотеки = "СтандартныеПодсистемы" Тогда

Результат = "2.1.3.48";

Иначе

Результат = Константы.НомерВерсииКонфигурации.Получить();

КонецЕсли;

Возврат ?(ПустаяСтрока(Результат), "0.0.0.0", Результат);

КонецФункции

// Возвращает Истина если запуск информационной базы

// выполняется первый раз, иначе возвращает Ложь.

Функция ПервыйЗапускИнформационнойБазы() Экспорт

УстановитьПривилегированныйРежим(Истина);

Возврат (Константы.НомерВерсииКонфигурации.Получить()="");

КонецФункции

// Процедуры для установки/обновления/получения параметров работы программы (кэшей).

// Возвращает параметры работы программы для использования (фиксированные данные),

// которые являются, например, кэшем.

Функция ПараметрыРаботыПрограммы(ИмяКонстанты) Экспорт

Возврат ОбновлениеИнформационнойБазыСлужебныйПовтИсп.ПараметрыРаботыПрограммы(ИмяКонстанты);

КонецФункции

// Возвращает изменения параметра работы программы с учетом текущей версии

// конфигурации и текущей версии ИБ.

// Параметры:

//  Параметры    - значение извлеченное из константы, имя которой передавалось

//    в процедуру ДобавитьИзмененияПараметраРаботыПрограммы.

//  ИмяПараметра - Строка, которая передавалась, как параметр ИмяПараметра

//    в процедуру ДобавитьИзмененияПараметраРаботыПрограммы.

// Возвращаемое значение:

//  Массив - содержит значения изменений. Может быть несколько, например,

//   когда область данных давно не обновлялась.

Функция ИзмененияПараметраРаботыПрограммы(Параметры, ИмяПараметра) Экспорт

ПоследниеИзменения = Параметры["ИзмененияПараметра" + ИмяПараметра].Получить();

Версия = Метаданные.Версия;

СледующаяВерсия = СледующаяВерсия(Версия);

Если ОбщегоНазначенияПовтИсп.РазделениеВключено()

   И НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда

 ВерсияИБ = ОбновлениеИнформационнойБазыСлужебныйПовтИсп.МинимальнаяВерсияИБ();

 ВерсияОбщихДанных = ВерсияИБ(Метаданные.Имя, Истина);

 ОбновлениеВнеОбновленияИБ = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияОбщихДанных, Версия) = 0;

Иначе

 ВерсияИБ = ВерсияИБ(Метаданные.Имя);

 ОбновлениеВнеОбновленияИБ = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, Версия) = 0;

КонецЕсли;

// Изменения к более старшим версиям не нужны,

// кроме случая когда обновление выполняется вне обновления ИБ,

// т.е. версия ИБ равна версии конфигурации.

// В этом случае дополнительно выбираются изменения к следующей версии.

Индекс = ПоследниеИзменения.Количество()-1;

Пока Индекс >=0 Цикл

 ВерсияИзменения = ПоследниеИзменения[Индекс].ВерсияКонфигурации;

 Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, ВерсияИзменения) >= 0

    И НЕ (ОбновлениеВнеОбновленияИБ

      И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СледующаяВерсия, ВерсияИзменения) = 0) Тогда

  ПоследниеИзменения.Удалить(Индекс);

 КонецЕсли;

 Индекс = Индекс - 1;

КонецЦикла;

Возврат ПоследниеИзменения.ВыгрузитьКолонку("Изменения");

КонецФункции

// Устанавливает вспомогательные данные для работы программы, хранимые в неразделенных константах.

// Параметры:

//  ИмяКонстанты      - Строка - имя неразделенной константы, в которой сохраняется значение параметра.

//  ИмяПараметра      - Строка - имя параметра, который нужно установить (без приставки ИзмененияПараметра).

//  ЗначениеПараметра - фиксированные данные, которые устанавливаются в качестве значения параметра.

Процедура УстановитьПараметрРаботыПрограммы(ИмяКонстанты, ИмяПараметра, ЗначениеПараметра) Экспорт

Блокировка = Новый БлокировкаДанных;

ЭлементБлокировки = Блокировка.Добавить("Константа." + ИмяКонстанты);

ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;

НачатьТранзакцию();

Попытка

 Блокировка.Заблокировать();

 Параметры = Константы[ИмяКонстанты].Получить().Получить();

 Если ТипЗнч(Параметры) <> Тип("Структура") Тогда

  Параметры = Новый Структура;

 КонецЕсли;

 Параметры.Вставить(ИмяПараметра, ЗначениеПараметра);

 Константы[ИмяКонстанты].Установить(Новый ХранилищеЗначения(Параметры));

 ЗафиксироватьТранзакцию();

Исключение

 ОтменитьТранзакцию();

 ВызватьИсключение;

КонецПопытки;

 

ОбновитьПовторноИспользуемыеЗначения();

КонецПроцедуры

// Добавить изменения вспомогательных данных для работы программы, хранимые в неразделенных константах.

// Параметры:

//  ИмяКонстанты       - Строка - имя неразделенной константы, в которой сохраняется значение параметра.

//  ИмяПараметра       - Строка - имя параметра, который нужно установить.

//  ИзмененияПараметра - фиксированные данные, которые регистрируются в качестве изменений параметра.

//   Изменения не добавляются, если значение ИзменениеПараметра не заполнено.

Процедура ДобавитьИзмененияПараметраРаботыПрограммы(ИмяКонстанты, ИмяПараметра, ИзмененияПараметра) Экспорт

Блокировка = Новый БлокировкаДанных;

ЭлементБлокировки = Блокировка.Добавить("Константа." + ИмяКонстанты);

ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;

НачатьТранзакцию();

Попытка

 Блокировка.Заблокировать();

 ОбновитьСоставИзменений = Ложь;

 Параметры = ОбновлениеИнформационнойБазыСлужебныйПовтИсп.ПараметрыРаботыПрограммы(ИмяКонстанты);

 ИмяПараметраХраненияИзменений = "ИзмененияПараметра" + ИмяПараметра;

 Если Параметры.Свойство(ИмяПараметраХраненияИзменений) Тогда

  ПоследниеИзменения = Параметры[ИмяПараметраХраненияИзменений].Получить();

  Если ТипЗнч(ПоследниеИзменения)              <> Тип("ТаблицаЗначений")

   ИЛИ ПоследниеИзменения.Колонки.Количество() <> 2

   ИЛИ ПоследниеИзменения.Колонки[0].Имя       <> "ВерсияКонфигурации"

   ИЛИ ПоследниеИзменения.Колонки[1].Имя       <> "Изменения" Тогда

   

   ПоследниеИзменения = Неопределено;

  КонецЕсли;

 Иначе

  ПоследниеИзменения = Неопределено;

 КонецЕсли;

 Если ПоследниеИзменения = Неопределено Тогда

  ОбновитьСоставИзменений = Истина;

  ПоследниеИзменения = Новый ТаблицаЗначений;

  ПоследниеИзменения.Колонки.Добавить("ВерсияКонфигурации");

  ПоследниеИзменения.Колонки.Добавить("Изменения");

 КонецЕсли;

 Если ЗначениеЗаполнено(ИзмененияПараметра) Тогда

  // Если производится обновление вне обновления ИБ,

  // тогда требуется добавить изменения к следующей версии,

  // чтобы при переходе на очередную версию изменения

  // выполненные вне обновления ИБ были учтены.

  Версия = Метаданные.Версия;

ОбновлениеВнеОбновленияИБ = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(

ВерсияИБ(Метаданные.Имя) , Версия) = 0;

  Если ОбновлениеВнеОбновленияИБ Тогда

  Версия = СледующаяВерсия(Версия);

  КонецЕсли;

  ОбновитьСоставИзменений = Истина;

  Строка = ПоследниеИзменения.Добавить();

  Строка.Изменения          = ИзмененияПараметра;

  Строка.ВерсияКонфигурации = Версия;

 КонецЕсли;

 МинимальнаяВерсияИБ = ОбновлениеИнформационнойБазыСлужебныйПовтИсп.МинимальнаяВерсияИБ();

 // Удаление изменений для версий ИБ, которые меньше минимальной

 // вместо версий меньше или равных минимальной, чтобы обеспечить

 // возможность обновления вне обновления ИБ.

 Индекс = ПоследниеИзменения.Количество()-1;

 Пока Индекс >=0 Цикл

  ВерсияИзменения = ПоследниеИзменения[Индекс].ВерсияКонфигурации

  Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(МинимальнаяВерсияИБ, ВерсияИзменения) > 0 Тогда

   ПоследниеИзменения.Удалить(Индекс);

   ОбновитьСоставИзменений = Истина;

  КонецЕсли;

  Индекс = Индекс - 1;

 КонецЦикла;

 Если ОбновитьСоставИзменений Тогда

  УстановитьПараметрРаботыПрограммы(

   ИмяКонстанты,

   ИмяПараметраХраненияИзменений,

   Новый ХранилищеЗначения(ПоследниеИзменения));

 КонецЕсли;

 ЗафиксироватьТранзакцию();

Исключение

 ОтменитьТранзакцию();

 ВызватьИсключение;

КонецПопытки;

КонецПроцедуры

// Служебные процедуры и функци

// Для внутреннего использования.

Функция НеобходимоВыполнитьОбновление(Знач ВерсияМетаданных, Знач ВерсияДанных) Экспорт

Возврат НЕ ПустаяСтрока(ВерсияМетаданных) И ВерсияДанных <> ВерсияМетаданных;

КонецФункции

// Протоколирование хода обновления

// Возвращает строковую константу для формирования сообщений журнала регистрации.

// Возвращаемое значение:

//   Строка

Функция СобытиеЖурналаРегистрации() Экспорт

Возврат НСтр("ru = 'Обновление информационной базы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка());

КонецФункции

Функция СобытиеЖурналаРегистрацииПротокол() Экспорт

Возврат СобытиеЖурналаРегистрации() + ". " + НСтр("ru = 'Протокол выполнения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка());

КонецФункции

// Вспомогательные процедуры и функции

// Общего назначения

Функция СледующаяВерсия(Версия)

Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, ".");

Возврат ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(

Версия) + "." + Формат(Число(Массив[3]) + 1, "ЧГ=");

КонецФункции

Общий модуль «Общего назначения вызов сервера»

// Подсистема "Базовая функциональность".

// ПРОГРАММНЫЙ ИНТЕРФЕЙС

// Функции для работы с журналом регистрации

// Процедура пакетной записи сообщений в журнал регистрации

// Параметры: СобытияДляЖурналаРегистрации - массив структур, клиентская глобальная переменная

// Каждая структура - сообщение для журнала регистрации.

// После записи переменная очищается.

Процедура ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации) Экспорт

ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации);

 

КонецПроцедуры

// Включить запись уровней событий СписокУровней в журнале регистрации.

// Параметры: УровниСобытий - СписокЗначений - наименования уровней регистрации событий,

//  которые необходимо включить

Процедура ВключитьИспользованиеЖурналаРегистрации(СписокУровней = Неопределено) Экспорт

ОбщегоНазначения.ВключитьИспользованиеЖурналаРегистрации(СписокУровней);

КонецПроцедуры

// Проверяет, включена ли регистрация событий УровниСобытий в журнале регистрации.

// Параметры:

//   УровниСобытий - СписокЗначений - список строк с уровнями регистрации событий журнала регистрации,

//   для которых необходимо проверить, что они включены.

//   Если Неопределено, то проверяются все уровни событий.

// Возвращаемое значение:

//   Булево - Истина, когда заданные режимы включены. Иначе - Ложь.

Функция ПроверитьВключениеЖурналаРегистрации(УровниСобытий = Неопределено) Экспорт

Возврат ОбщегоНазначения.ПроверитьВключениеЖурналаРегистрации(УровниСобытий);

КонецФункции

// Общие процедуры и функции для работы с данными в базе

// Проверяет наличие ссылок на объект в базе данных.

// Параметры:

//  Ссылка       - ЛюбаяСсылка

//     - Массив значений типа ЛюбаяСсылка

//  ИскатьСредиСлужебныхОбъектов - Булево - начальное значение Ложь,

//  когда установлено Истина, тогда не будет учитываться

//  исключения поиска ссылок, заданные при разработке конфигурации.

// Возвращаемое значение:

//  Булево.

Функция ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь) Экспорт

Возврат ОбщегоНазначения.ЕстьСсылкиНаОбъект(СсылкаИлиМассивСсылок, ИскатьСредиСлужебныхОбъектов);

КонецФункции

// Проверяет проведенность документов

// Параметры:

//  Документы - Массив - документы, проведенность которых необходимо проверить

// Возвращаемое значение:

//  Массив - непроведенные документы из массива Документы

Функция ПроверитьПроведенностьДокументов(знач Документы) Экспорт

Возврат ОбщегоНазначения.ПроверитьПроведенностьДокументов(Документы);

КонецФункции

// Выполняет попытку проведения документов.

// Параметры:

//Документы                - Массив - документы, которые необходимо провести.

// Возвращаемое значение:

//Массив - массив структур с полями:         

Ссылка         - документ, который не удалось провести;

        ОписаниеОшибки - текст описания ошибки при проведении.

Функция ПровестиДокументы(Документы) Экспорт

Возврат ОбщегоНазначения.ПровестиДокументы(Документы);

КонецФункции

// Общие процедуры и функции для работы в режиме разделения данных

// Устанавливает разделение сеанса.

// Параметры:

// Использование - Булево - Использование разделителя ОбластьДанных в сеансе

// ОбластьДанных - Число - Значение разделителя ОбластьДанных

Процедура УстановитьРазделениеСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Экспорт

ОбщегоНазначения.УстановитьРазделениеСеанса(Использование, ОбластьДанных

КонецПроцедуры

// Сохранение, чтение и удаление настроек из хранилищ

// Сохраняет настройку в хранилище общих настроек.

// Параметры:

//   Соответствуют методу ХранилищеОбщихНастроекСохранить.Сохранить,

//   подробнее - см. параметры процедуры ХранилищеСохранить()

Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение, ОписаниеНастроек = Неопределено,

ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт

ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(

 КлючОбъекта,

 КлючНастроек,

 Значение,

 ОписаниеНастроек,

 ИмяПользователя,

 НужноОбновитьПовторноИспользуемыеЗначения);

КонецПроцедуры

// Загружает настройку из хранилища общих настроек.

// Параметры:

//   Соответствуют методу ХранилищеОбщихНастроек.Загрузить,

//   подробнее - см. параметры функции ХранилищеЗагрузить()

Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено,

ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт

Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(

 КлючОбъекта,

 КлючНастроек,

 ЗначениеПоУмолчанию,

 ОписаниеНастроек,

 ИмяПользователя);

 

КонецФункции

// Удаляет настройку из хранилища общих настроек.

// Параметры:

//   Соответствуют методу ХранилищеОбщихНастроек.Удалить,

//   подробнее - см. параметры функции ХранилищеУдалить()

Процедура ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт

ОбщегоНазначения.ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя);

КонецПроцедуры

// Сохраняет массив пользовательских настроек МассивСтруктур.

// Может применяться для случаев вызова с клиента.

// Параметры:

//    МассивСтруктур - Массив - массив структур с полями "Объект", "Настройка", "Значение".

//    НужноОбновитьПовторноИспользуемыеЗначения - Булево - требуется обновить повторно используемые значения

Процедура ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт

ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, НужноОбновитьПовторноИспользуемыеЗначения);

КонецПроцедуры

// Сохраняет массив пользовательских настроек МассивСтруктур и обновляет повторно

//   используемые значения. Может применяться для случаев вызова с клиента.

// Параметры:

//    МассивСтруктур - Массив - массив структур с полями "Объект", "Настройка", "Значение".

Процедура ХранилищеОбщихНастроекСохранитьМассивИОбновитьПовторноИспользуемыеЗначения(МассивСтруктур) Экспорт

ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассивИОбновитьПовторноИспользуемыеЗначения(МассивСтруктур);

КонецПроцедуры

// Сохраняет настройку в хранилище общих настроек и обновляет повторно используемые

//   значения.

// Параметры:

//   Соответствуют методу ХранилищеОбщихНастроекСохранить.Сохранить,

//   подробнее - см. параметры процедуры ХранилищеСохранить()

Процедура ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения(КлючОбъекта, КлючНастроек, Значение) Экспорт

ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения(КлючОбъекта, КлючНастроек, Значение);

КонецПроцедуры

// Сохраняет настройку в хранилище системных настроек.

// Параметры:

//   Соответствуют методу ХранилищеСистемныхНастроек.Сохранить,

//   подробнее - см. параметры процедуры ХранилищеСохранить()

Процедура ХранилищеСистемныхНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение, ОписаниеНастроек = Неопределено,

ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт

ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить(

 КлючОбъекта,

 КлючНастроек,

 Значение,

 ОписаниеНастроек,

 ИмяПользователя,

 НужноОбновитьПовторноИспользуемыеЗначения);

КонецПроцедуры

// Загружает настройку из хранилища системных настроек.

// Параметры:

//   Соответствуют методу ХранилищеСистемныхНастроек.Загрузить,

//   подробнее - см. параметры функции ХранилищеЗагрузить()

Функция ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено,

ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт

Возврат ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(

 КлючОбъекта,

 КлючНастроек,

 ЗначениеПоУмолчанию,

 ОписаниеНастроек,

 ИмяПользователя);

КонецФункции

// Удаляет настройку из хранилища системных настроек.

// Параметры:

//   Соответствуют методу ХранилищеСистемныхНастроек.Удалить,

//   подробнее - см. параметры функции ХранилищеУдалить()

Процедура ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт

ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя);

КонецПроцедуры

// Сохраняет настройку в хранилище настроек данных форм.

// Параметры:

//   Соответствуют методу ХранилищеСистемныхНастроек.Сохранить,

//   подробнее - см. параметры процедуры ХранилищеСохранить()

Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек = "", Значение, ОписаниеНастроек = Неопределено,

ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт

ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить(

 КлючОбъекта,

 КлючНастроек,

 Значение,

 ОписаниеНастроек,

 ИмяПользователя,

 НужноОбновитьПовторноИспользуемыеЗначения);

КонецПроцедуры

// Загружает настройку из хранилища настроек данных форм.

// Параметры:

//   Соответствуют методу ХранилищеСистемныхНастроек.Загрузить,

//   подробнее - см. параметры функции ХранилищеЗагрузить()

Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено,

ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт

Возврат ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить(

 КлючОбъекта,

 КлючНастроек,

 ЗначениеПоУмолчанию,

 ОписаниеНастроек,

 ИмяПользователя);

КонецФункции

// Удаляет настройку из хранилища настроек данных форм.

// Параметры:

//   Соответствуют методу ХранилищеНастроекДанныхФорм.Удалить,

//   подробнее - см. параметры функции ХранилищеУдалить()

Процедура ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт

ОбщегоНазначения.ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя);

КонецПроцедуры

// Функции для работы с цветами стиля в клиентском коде

// Функция получает цвет стиля по имени элемента стиля

// Параметры:

// ИмяЦветаСтиля - Строка -  Имя элемента стиля.

// Возвращаемое значение:

// Цвет.

Функция ЦветСтиля(ИмяЦветаСтиля) Экспорт

Возврат ЦветаСтиля[ИмяЦветаСтиля];

КонецФункции

// Функция получает шрифт стиля по имени элемента стиля.

// Параметры:

// ИмяШрифтаСтиля - Строка - Имя шрифта стиля.

// Возвращаемое значение:

// Шрифт.

Функция ШрифтСтиля(ИмяШрифтаСтиля) Экспорт

Возврат ШрифтыСтиля[ИмяШрифтаСтиля];

КонецФункции

Общий модуль «Общего назначения клиент»

// Подсистема "Базовая функциональность".

// В этом модуле содержится реализация обработчиков модуля приложения.

// ПРОГРАММНЫЙ ИНТЕРФЕЙС

// Выполняется перед интерактивном началом работы пользователя с областью данных.

// Соответствует обработчику ПередНачаломРаботыСистемы

// Параметры:

// Отказ - Булево - отказ в от начала работы. Если параметр установить в Истина,

// начало работы с областью осуществлено не будет.

Процедура ПередНачаломРаботыСистемы(Отказ) Экспорт

КонецПроцедуры

// Выполняется при интерактивном начале работы пользователя с областью данных.

// Соответствует обработчику ПриНачалеРаботыСистемы

// Параметры

//  ОбрабатыватьПараметрыЗапуска - Булево - Истина, если обработчик вызван при

//  непосредственном входе пользователя в систему и должен обработать параметры

//  запуска (если это предусмотрено его логикой). Иначе обработчика вызван

//  при интерактивном входе неразделенного пользователя в область данных и

//  обрабатывать параметры запуска не следует.

Процедура ПриНачалеРаботыСистемы(Знач ОбрабатыватьПараметрыЗапуска = Ложь) Экспорт

КонецПроцедуры

// Обработать параметры запуска программы.

// Реализация функции может быть расширена для обработки новых параметров.

// Параметры

//  ЗначениеПараметраЗапуска - Строка - первое значение параметра запуска,

//                                      до первого символа ";"

//  ПараметрыЗапуска  – Строка – параметр запуска, переданный в конфигурацию

//     с помощью ключа командной строки /C.

// Возвращаемое значение:

//   Булево   – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы.

Функция ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска) Экспорт

Возврат Ложь;

КонецФункции

// Соответствует обработчику ПередЗавершениемРаботыСистемы.

Процедура ПередЗавершениемРаботыСистемы(Отказ) Экспорт

КонецПроцедуры

Глобальный общий модуль

&НаСервере

Функция ПолучитьПериод()  Экспорт

Период = Константы.ПериодНапоминанияЗадачи.Получить() * 60;

возврат Период;

КонецФункции

&НаСервере

Функция ОповещениеПользователейСервер()  ЭКСПОРТ

Запрос = Новый Запрос;

Запрос.Текст =

 "ВЫБРАТЬ

 | Задачи.Ссылка

 |ИЗ

 | Задача.Задачи КАК Задачи

 |ГДЕ

 | Задачи.ДатаНапоминания <= &ДатаНапоминания

 | И Задачи.Выполнена = &Выполнена";

 Выполнена = Ложь;

Запрос.УстановитьПараметр("Выполнена", Выполнена);

Запрос.УстановитьПараметр("ДатаНапоминания", ТекущаяДата());

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

ТаблицаЗначений = Новый Массив;

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

 ТаблицаЗначений.Добавить(ВыборкаДетальныеЗаписи.Ссылка);  

КонецЦикла;

Возврат ТаблицаЗначений;

КонецФункции    

&НаСервере

Функция ПолучитьОбъектЗадачи(Ссылка) Экспорт

Возврат Ссылка.ПолучитьОбъект().ПолучитьФорму();

КонецФункции

&Клиент

Процедура ОткрытьФормуЗадачи(Объект)

Объект.ПолучитьФорму().Открыть();

КонецПроцедуры

Общий модуль «Задачи»

&НаСервере

Функция ПолучитьПериод()  Экспорт

Период = Константы.ПериодНапоминанияЗадачи.Получить() * 60;

возврат Период;

КонецФункции

&НаСервере

Функция ОповещениеПользователейСервер()  ЭКСПОРТ

Запрос = Новый Запрос;

Запрос.Текст =

 "ВЫБРАТЬ

 | Задачи.Ссылка

 |ИЗ

 | Задача.Задачи КАК Задачи

 |ГДЕ

 | Задачи.ДатаНапоминания <= &ДатаНапоминания

 | И Задачи.Выполнена = &Выполнена";

 

 Выполнена = Ложь;

Запрос.УстановитьПараметр("Выполнена", Выполнена);

Запрос.УстановитьПараметр("ДатаНапоминания", ТекущаяДата());

 

РезультатЗапроса = Запрос.Выполнить();

 

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

 

ТаблицаЗначений = Новый Массив;

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

 ТаблицаЗначений.Добавить(ВыборкаДетальныеЗаписи.Ссылка);  

КонецЦикла;

 

Возврат ТаблицаЗначений;

КонецФункции    

&НаСервере

Функция ПолучитьОбъектЗадачи(Ссылка) Экспорт

Возврат Ссылка.ПолучитьОбъект().ПолучитьФорму();

КонецФункции

&Клиент

Процедура ОткрытьФормуЗадачи(Объект)

Объект.ПолучитьФорму().Открыть();

 

КонецПроцедуры

Документ «Акт об оказании услуги»

Процедура ОбработкаПроведения(Отказ, Режим)

// регистр ОстаткиЗаготовок Расход

Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Продажи.Записывать = Истина;

Для Каждого ТекСтрокаУслуги Из Услуги Цикл

 Если ТекСтрокаУслуги.Услуга.ВидУслуги = Перечисления.ВидыУслуг.Материал Тогда

 Движение = Движения.ОстаткиМатериалов.Добавить();

 Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

 Движение.Период = Дата;

 Движение.Материал = ТекСтрокаУслуги.Услуга;

    Движение.Количество = ТекСтрокаУслуги.Количество;

  // регистр СтоимостьМатериалов Расход

  Движение = Движения.СтоимостьМатериалов.Добавить();

  Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

  Движение.Период = Дата;

  Движение.Материал = ТекСтрокаУслуги.Услуга;

    КонецЕсли;

 //регистрПродажи

 Движение = Движения.Продажи.Добавить();

 Движение.Период = Дата;

 Движение.Услуга = ТекСтрокаУслуги.Услуга;

 Движение.Заказчик = Заказчик;

 Движение.Сотрудник = Сотрудник;

 Движение.Количество = ТекСтрокаУслуги.Количество;

 Движение.Выручка = ТекСтрокаУслуги.Сумма;

КонецЦикла;

Если ЭтотОбъект.ДатаГотовностиЗаказа = Дата(1,1,1) Тогда

 ЭтотОбъект.ДатаГотовностиЗаказа = ТекущаяДата()+(3600*48)

КонецЕсли;

Если ЭтотОбъект.Задача = Задачи.Задачи.ПустаяСсылка() Тогда

 НоваяЗадача = Задачи.Задачи.СоздатьЗадачу();

 НоваяЗадача.Дата = ТекущаяДата();

 НоваяЗадача.ДатаНапоминания = ЭтотОбъект.ДатаГотовностиЗаказа;

 НоваяЗадача.Клиент = ЭтотОбъект.Заказчик;

 НоваяЗадача.Заказ = ЭтотОбъект.Ссылка;

 НоваяЗадача.Наименование = "Готов заказ клиента";

 НоваяЗадача.Сообщение = "Необходимо позвонить клиенту - "+ НоваяЗадача.Клиент + " - " + НоваяЗадача.Клиент.ТелефонЗаказчика + " его заказ готов!";

 НоваяЗадача.Записать();

Иначе

 ТекЗадача = ЭтотОбъект.Задача.ПолучитьОбъект();

 ТекЗадача.ДатаНапоминания = ЭтотОбъект.ДатаГотовностиЗаказа;

 ТекЗадача.Записать();

КонецЕсли;

Общий модуль «Стандартные подсистемы клиент сервер»

// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС

// Обработка результата выполнения

// Формирует шаблон результата выполнения.

// Возвращаемое значение:

//Результат (Структура) См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения().

Функция НовыйРезультатВыполнения(Результат = Неопределено) Экспорт

Если Результат = Неопределено Тогда

 Результат = Новый Структура;

КонецЕсли;

 

Результат.Вставить("ВыводОповещения",     Новый Структура("Использование, Заголовок, Ссылка, Текст, Картинка", Ложь));

Результат.Вставить("ВыводСообщения",      Новый Структура("Использование, Текст, ПутьКРеквизитуФормы", Ложь));

Результат.Вставить("ВыводПредупреждения", Новый Структура("Использование, Текст, ПутьКРеквизитуФормы, ТекстОшибок", Ложь));

Результат.Вставить("ОповещениеФорм",                Новый Структура("Использование, ИмяСобытия, Параметр, Источник", Ложь));

Результат.Вставить("ОповещениеДинамическихСписков", Новый Структура("Использование, СсылкаИлиТип", Ложь));

Возврат Результат;

КонецФункции

// Добавляет в оповещение для динамических списков типы из массива измененных объектов.

// Параметры:

//   ИзмененныеОбъекты (Массив) из (*) Ссылки измененных объектов программы.

//   Результат (Структура) См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения().

//

Процедура ПодготовитьОповещениеДинамическихСписков(Знач ИзмененныеОбъекты, Результат) Экспорт

Если ТипЗнч(ИзмененныеОбъекты) <> Тип("Массив") ИЛИ ИзмененныеОбъекты.Количество() = 0 Тогда

 Возврат;

КонецЕсли;

Оповещение = Результат.ОповещениеДинамическихСписков;

Оповещение.Использование = Истина;

ЗначениеОповещения = Оповещение.СсылкаИлиТип;

ЗначениеОповещенияЗаполнено = ЗначениеЗаполнено(ЗначениеОповещения);

Если ИзмененныеОбъекты.Количество() = 1 И НЕ ЗначениеОповещенияЗаполнено Тогда

 Оповещение.СсылкаИлиТип = ИзмененныеОбъекты[0];

Иначе

 // Преобразование оповещения в массив.

 ЗначениеОповещенияТип = ТипЗнч(ЗначениеОповещения);

 Если ЗначениеОповещенияТип <> Тип("Массив") Тогда

  Оповещение.СсылкаИлиТип = Новый Массив;

  Если ЗначениеОповещенияЗаполнено Тогда

   Оповещение.СсылкаИлиТип.Добавить(?(ЗначениеОповещенияТип = Тип("Тип"), ЗначениеОповещения, ЗначениеОповещенияТип));

  КонецЕсли;

 КонецЕсли;

 // Добавление типов измененных объектов.

 Для Каждого ИзмененныйОбъект Из ИзмененныеОбъекты Цикл

  ТипИзмененногоОбъекта = ТипЗнч(ИзмененныйОбъект);

  Если Оповещение.СсылкаИлиТип.Найти(ТипИзмененногоОбъекта) = Неопределено Тогда

  Оповещение.СсылкаИлиТип.Добавить(ТипИзмененногоОбъекта);

  КонецЕсли;

 КонецЦикла;

КонецЕсли;

КонецПроцедуры

Движения документа «Приходная накладная»

//Регистр СтоимостьМатериалов Приход

  Движение = Движения.СтоимостьМатериалов.Добавить();

  Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

  Движение.Период = Дата;

  Движение.Материал = ТекСтрокаМатериалы.Материал;

  Движение.Стоимость = ТекСтрокаМатериалы.Сумма;

Литн.

Изм.

№ докум.

Подп.

Дата

Лист

2

РК 230701.409.02 ПЗ

Разраб.

Вавилова А.А

Пров.

Шутова Н.Н.

 Т.контр

Южанинова Т.А

Н. Контр.

Шутова Н.Н.

 Утв.

Пояснительная записка к дипломной работе

Лит.

Листов

96

УРТК им А.С. Попова

Литн.

Изм.

№ докум.

Подп.

Дата

Лист

2

РК 230701.409.02 ПЗ

Разраб.

Вавилова А.А

Пров.

Шутова Н.Н.

 Т.контр

Южанинова Т.А

Н. Контр.

Шутова Н.Н.

 Утв.

Пояснительная записка к дипломной работе

Лит.

Листов

96

УРТК им А.С. Попова 


 

А также другие работы, которые могут Вас заинтересовать

62880. Великий Нехочуха, или почему ребенок не делает уроки 15.73 KB
  Рассмотрим основные причины невыполнения домашних заданий: отсутствие желания и мотивации особенно ярко это может проявиться в том случае если ребенок неуспешен в учебе не понимает изученного материала или много пропустил...
62882. Використання відео на уроках англійської мови 28.92 KB
  Останнім часом приділяється велика увага комунікативній підготовці. Мета навчання іноземній мові часто формулюється як навчання спілкуванню на іноземній мові. Опанувати комунікативну компетенцію англійською мовою, не знаходячись в країні мови, що вивчається, справа дуже важка.