Содержание
Содержание
Введение3
1.Автоматизированная система бухгалтерского учета (АСБУ) и ее классификация5
2. АСБУ «мини-бухгалтерия»8
3. Интегрированная бухгалтерская система9
4. Комплексная система бухгалтерского учета11
5. Корпоративная информационная система12
6. Анализ бухгалтерских программ13
7. Система программ «1С:Предприятие»16
Заключение22
Список используемой литературы23
Приложения24
Выдержка из текста работы
В дипломном проекте описаны принципы построения и программная реализация автоматизированной системы бухгалтерского учета. Обоснован выбор программного обеспечения для реализации системы. Изложена предварительная оценка экономической эффективности системы. Приведены нормы техники безопасности
REVIEW
In the degree project the principles of construction and programmatic implementation of the automated system of book keeping are described. The selection of the software for implementation of a system is justified. The tentative estimation of an economic efficiency of a system is set up. The norms of engineering of safety are adduce.
КЛЮЧЕВЫЕ СЛОВА
ООО «ХТЭК»
Бухгалтерский учет
Автоматизация бухгалтерского учета
Оказание услуг
Абонент
Безопасность
1С Предприятие
SADT- диаграммы
DFD- диаграммы
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 5
1. ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ 9
1.1. Описание объекта информатизации 10
1.2. Причины создания автоматизированной системы 12
1.3. Базовые принципы бухгалтерского учета 13
1.4. Автоматизация бухгалтерского учета 17
Выводы 20
2. СТРУКТУРНЫЙ АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ И АРХИТЕКТУРА АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ 21
2.1. Представление предметной области в виде SADT-диаграмм 21
2.2 Организация проекта 24
2.3. Диаграмма потоков данных ПС 30
2.4. Выбор модели жизненного цикла 32
Выводы 36
3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ УЧЕТА ДЕЯТЕЛЬНОСТИ «ХТЭК» 37
3.1. Выбор системы проектирования 37
3.2. Требования к аппаратной части 42
3.3. Структура информационной системы учета горячей воды и отопления 43
3.4. Алгоритм выполнения работ по автоматизации бухгалтерского учета «ООО ХТЭК» 43
3.6. Реализация механизма ведения учета хозяйственных операций 45
3.5.План развертывания ПП 47
4. АНАЛИЗ КАЧЕСТВА РАЗРАБОТАННОЙ АВТОМАТИЗИРОВАН-НОЙ СИСТЕМЫ 50
4.1. Принципы работы процедуры тестирования 50
4.2. Запуск процедуры тестирования 52
4.3. Тестирование разработанной системы автоматизации 54
Выводы 55
5. ЭРГОНОМИКА РАЗРАБОТАННОЙ АВТОМАТИЗИОВАННОЙ СИСТЕМЫ 56
5.1 Принципы эргономичности проекта 56
5.2.Организация рабочего места оператора. 57
5.2. Эргономичность интерфейса разработанной программы 60
5.3. Техническая безопасность и экологические аспекты работы 65
Выводы 69
6. ЭКОНОМИКО-ПРАВОВЫЕ ВОПРОСЫ ИСПОЛЬЗОВАНИЯ РАЗРАБОТАННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 70
6.1.Экономическая эффективность разработанного ПО 70
6.2 Правовые аспекты использования разработанного ПО 76
Выводы 80
ЗАКЛЮЧЕНИЕ 81
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 82
ГЛОССАРИЙ 84
СПИСОК АББРЕВИАТУР 85
ПРИЛОЖЕНИЯ 86
П. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ 86
П.2. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ 90
П. 3. ИНСТРУКЦИЯ ПО АДМИНИСТРИРОВАНИЮ 94
П. 4. ОПИСАНИЕ ДЕМОНСТРАЦИОННОГО РОЛИКА 98
ВВЕДЕНИЕ
Первоочередными задачами руководителя предприятия являются повышение эффективности работы персонала, создание оптимальной структуры управления, что обуславливает широкое применение бухгалтерских пакетов и программ, благодаря внедрению которых повышается оперативность обработки данных и достоверность деловой информации, принимаются более объективные финансовые и управленческие решения.
Автоматизация бухгалтерского учета и подготовка финансовой отчетности в налоговые органы в условиях переходной экономики России является одной из наиболее важных задач. Ситуация такова, что сам по себе бухгалтерский учет на предприятии может рассматриваться как внутреннее дело предприятия, а основой для оценки финансово-хозяйственной деятельности предприятия со стороны государства служит отчетность (бухгалтерский баланс и многочисленные другие отчетные формы), которая должна ежеквартально предоставляться в налоговую инспекцию по месту регистрации предприятия. Кроме того, существуют плановые и внеплановые налоговые проверки, при проведении которых могут потребоваться все бухгалтерские документы, включая первичные.
Бухгалтерский отдел ООО «ХТЭК» испытывал трудности в решении задач по учету горячей воды и отопления с населением и организациями, которые возникли в связи с отсутствием на предприятии системы, автоматизирующей учёт данных услуг. Это сказывалось на неудобстве пользования информации и скорости выполнения отчётности по учетной деятельности. В результате происходит отставание по срокам сдачи отчётной информации для анализа.
В силу всех этих причин возникла необходимость в автоматизации деятельности бухгалтерского отдела ООО «ХТЭК». Создание такой системы должно привести к следующим результатам:
1) увеличение скорости поиска и сбора необходимой информации;
2) сокращение числа ошибок работников бухгалтерского отдела;
3) своевременное составление документов, необходимое для последующей отчетности перед налоговыми органами;
Цель дипломной работы – создание системы автоматизирующей работу бухгалтерского отдела ООО «Хакасский Тепло Энерго Комплекс» по составлению документов и отчетов.
Для достижения поставленной цели были сформулированы и решены следующие задачи:
1. Изучить информационное пространство ООО «ХТЭК».
2. Описать структуру информационного пространства акционерного общества.
3. Выбрать технологии реализации системы структурирования информации.
4. Реализовать основные модули программы.
5. Провести тестирование системы.
Объектом исследования является деятельность ООО «ХТЭК».
Предметом исследования является исследование деятельности бухгалтерского отдела ООО «ХТЭК» по составлению документов и отчетов.
В работе использованы следующие методы исследования:
— теоретические методы анализа предметной области;
— структурные методы описания предметной области;
— семантические методы моделирования данных.
Гипотеза исследования: Использование автоматизированной системы увеличит производительность труда сотрудников абонентского отдела предприятия, повысит оперативность составления документов и отчетов.
Новизна работы: Система является первой на ООО «ХТЭК», автоматизирующей учёт деятельности абонентского отдела.
Практическая ценность: Введенная в эксплуатацию ИС позволила работникам абонентского отдела более оперативно выполнять свою работу.
Реализация результатов работы:
Для осуществления цели необходимо решить следующие задачи:
1) исследовать причины неудачи прошлой автоматизации;
2) провести анализ предметной области;
3) создать экспериментальную версию программы, отобразив в ней основные аспекты бухгалтерского учета предприятия;
4) разработать план переноса информации из уже используемой программы и ручного учета;
5) провести тестирование системы;
6) создать окончательную версию системы автоматизации бухгалтерского учета ООО «ХТЭК»;
7) осуществить ввод системы в эксплуатацию;
8) проверить условия эксплуатации системы на соответствие требованиям техники безопасности.
На защиту выносятся:
1. Актуальность и практическая значимость программного продукта.
2. Результаты исследования предметной области.
3. Архитектура программного продукта.
4. Обоснование выбора платформы и среды разработки.
5. Демонстрация работы программы
Апробация работы. Разработанное приложение прошло тестирование и эксплуатируется в течение 6 месяцев.
Структура и объем работы.
Работа состоит из введения, четырех разделов, заключения, списка литературы, состоящего и пятнадцати источников, и приложений.
Общий объем работы — 88 страниц;
Основная часть — 75 страниц;
Приложения — 13 страниц.
Во введении изложено описание и структура дипломной работы.
В первом разделе описание предметной области, обоснование выбора программных средств для создания системы.
Второй раздел раскрывает вопросы внутренней организации программы и взаимодействия ее с пользователем.
Третий раздел отражает проверку условий эксплуатации системы на соответствие требованиям техники безопасности.
В четвертом разделе исследована экономическая эффективность разработки и использования программы.
В заключении сформулированы основные выводы и результаты, полученные в дипломной работе.
В приложениях представлены: листинги модулей конфигурации, иллюстративный материал, материалы внедрения.
1. ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
В данной главе описывается:
? Объект информатизации и существующей информационной системы.
? Дается описание недостатков существующей информационной системы.
? Кратко описываются известные варианты решения подобных проблем, и что в этих решениях не устраивает заказчика.
Дается обоснование необходимости совершенствования информационной системы путем создания новой автоматизированной системы.
? Базовые принципы бухгалтерского учета.
1.1. Описание объекта информатизации
ООО «Хакасский Тепло-Энерго Комплекс» создано в соответствии со ст. 98 ГК РФ по решению учредителей [1].
Зарегистрировано Постановлением Администрации г. Черногорска от 31.08.97 г. № 113
ООО «Хакасский Тепло Энерго Комплекс» является самостоятельным юридическим лицом, местонахождение общества: Республика Хакасия, г. Черногорск, ул. Калинина, 19.
Общество ведет бухгалтерский учет и представляет финансовую отчетность в порядке, установленном Федеральным Законом РФ «Об акционерных обществах» и иными правовыми актами РФ [2].
Организационная структура предприятия представлена на рисунке 1.1.
В основе структуры лежит руководство предприятия, через которое осуществляется основное взаимодействие между остальными элементами системы. Основными видами деятельности предприятия являются оказание услуг, а именно предоставление горячей воды и тепла для потребления населением и различными организациями.
Население или организации обращаются непосредственно к руководству предприятия для принятия решения о возникновении деловых отношений, руководство согласовывает это с юридическим отделом и бухгалтерией, с которыми у них двухсторонние связи.
Рис. 1.1. Организационная структура предприятия
Рис. 1.2. Организационная структура отдела бухгалтерия
Рис. 1.3. Организационная структура отдела бухгалтерия
Затем информация поступает в виде приказов о поставке в службу снабжения. Далее возникают отношения между покупателем и бухгалтерией по оплате оказанных услуг.
Внутри этой информационной системы можно выделить информационную систему бухгалтерии. Вся информация, поступающая в отдел, в первую очередь попадает к главному бухгалтеру, который передает ее подчиненным. При функционировании старой программы возникала следующая ситуация: подчиненные не взаимодействовали друг с другом и все информационные потоки проходили через главного бухгалтера, что вызывало чрезмерную нагрузку работников, потерю времени и искажение информации. Организационная структура представлена на рисунке 1.2.
Однако ситуация выглядела совсем по другому. Все отношения выделялись в два информационных потока от главного бухгалтера к бухгалтерам и наоборот. Соответственно главный бухгалтер передавал своим подчиненным не отдельные куски информации, а целиком подготовленные данные. Бухгалтера обрабатывают полученную информацию и возвращают ее главному бухгалтеру который видит картину в целом, и ему не приходится перерабатывать приходящую информацию и выстраивать ее в единое целое. Организационная структура представлена на рисунке 1.3.
Соответственно при проектировании новой программы были учтены эти недостатки и были сделаны выводы:
? При построении информационной системы бухгалтерии должны быть соблюдены принципы единства системы.
? Возможность получения нужной информации в требуемое время.
? Получение безошибочной информации в заданные сроки.
? Система должна приносить пользу.
? Система должна приспосабливаться к частично изменившимся условиям объекта и обеспечивать устойчивое функционирование на большом интервале времени.
? Возможность быть составной частью с системой более высокого уровня.
1.2. Причины создания автоматизированной системы
Причиной создания системы послужила низкая эффективность предыдущей системы, при которой вся информация по деятельности предприятия собиралась и хранилась на бумажном носителе. Такая система сбора и хранения информации имела ряд существенных недостатков:
1. при таком способе хранения информация не сохранялась долгое время и могла быть утеряна;
2. неудобство пользования (низкая скорость обработки и поиска);
3. при таком способе хранения информации, создание отчётов требовало длительного времени, что приводило к несвоевременной подготовке и сдачи отчёта;
Кроме того, в настоящее время возросли требования к качеству и своевременности составления отчётов, что невозможно достигнуть при использовании старой системы. Поэтому возникла необходимость в автоматизации процесса сбора, обработки и хранения информации.
Были разработаны этапы автоматизации предприятия:
1. Анализ существующих проблем при внедрении АСБУ.
2. Анализ существующего учета.
3. Выбор программы.
4. Перенос данных из используемой программы в 1С.
5. Внесения изменений в программу в зависимости от особенностей ведения учета и разработанным техническим заданием.
6. Обучение персонала.
7. Начальное (пробное) ведение учета разработчиками программы.
8. Консультации и обновления в связи с изменениями в бухгалтерском учете.
1.3. Базовые принципы бухгалтерского учета
Для проектирования АСБУ следует рассмотреть базовые принципы бухгалтерского учета.
Бухгалтерский учет являлся и является основным «поставщиком» экономической информации о хозяйственной деятельности предприятий. Доля экономической информации, получаемой через систему бухгалтерского учета, достигает на предприятиях и в объединениях 70% и более. Бухгалтерский учет отражает хозяйственные операции в первичной документации, записи их в регистрах синтетического и аналитического учета и в бухгалтерской отчетности [3].
Современный хозяйственный учет представлен оперативным, статистическим и бухгалтерским учетом (рисунок 1.4.).
Оперативный учет решает задачи, необходимые аппарату управления. Быстрота получения данных – основное требование оперативного учета.
Статистический учет призван отражать изменения, протекающие в обществе и экономике.
Согласно п.1 ст. 1 ФЗ РФ «О бухгалтерском учете», бухгалтерский учет представляет собой упорядоченную систему сбора, регистрации и обобщения информации в денежном выражении об имуществе, обязательствах организаций и их движении путем сплошного, непрерывного и документального учета всех хозяйственных операций [4].
Финансовый учет ориентирован на сбор информации и ее обработку для государственных органов, инвесторов и других внешних пользователей.
Управленческий учет готовит данные для внутренних пользователей в объеме, требуемом для нужд управления.
Бухгалтерский учет базируется на необходимости использования допущений и требований, обусловливающих четкое разграничение имущественной обособленности экономического субъекта, непрерывность его деятельности, последовательность применения выбранных приоритетов при осуществлении своей финансово – хозяйственной деятельности, установление временной определенности отражения в учете хозяйственных операций [5].
К требованиям относятся осмотрительность экономического субъекта, наличие денежного измерения, полнота, приоритет содержания над формой, рациональность (рисунок1.5)..
Имущественная обособленность – один из определяющих базовых принципов бухгалтерского учета. Его суть – имущество и обязательства экономического субъекта строго индивидуальны.
Непрерывность деятельности основано на предположении, что предприятие, однажды зарегистрировавшись в качестве одной из форм юридического лица, не ставит перед собой цель самоликвидации в ближайшей или отдаленной перспективе [6].
Осмотрительность в предпринимательской деятельности менеджеры должны быть в большей степени готовы к бухгалтерскому учету потерь (расходов), нежели возможных доходов.
Непротиворечивость данные аналитических счетов в части начального остатка, оборотов за отчетный период, а также конечного остатка должны быть равны данным объединяющего их обобщенного синтетического счета.
У каждого из пользователей бухгалтерской информацией свой интерес к ней (рисунок 1.6.). Так, внутренние пользователи, к которым относится аппарат управления фирмой и ее служащие, нуждаются в различных учетных данных; Внешние пользователи проявляют прямой финансовый интерес к учетной информации предприятия, содержащейся в публичной бухгалтерской отчетности. К этой группе пользователей относятся потенциальные инвесторы и поставщики. Поставщики заинтересованы в информации о платежеспособности фирмы, которой они оказывают услуги, отгружают продукцию и для которой выполняют другие работы [7].
Пользователи, не проявляющие прямого финансового интереса к бухгалтерской информации, тоже нуждаются в ней. Эта категория обязана использовать подобную информацию в качестве исходных данных для правильного исчисления налогооблагаемой базы по отдельным видам налогов, сборов и других платежей, а также рассмотрения судебных исков. В состав данной группы пользователей входит общественность. Её интересует информация о решении тем или иным предприятием социальных задач и о вложениях в эту сферу. Решение таких задач особенно важно в тех районах, где предприятия являются градообразующими. Общества по защите окружающей среды интересуются финансовой информацией для определения эффективности природоохранных мероприятий, осуществляемых предприятиями [8].
Рис.1.4. Виды хозяйственного учета
Рис.1.5. Принципы бухгалтерского учета
Рис.1.6. Потоки информационного воздействия на предприятие
Таким образом, к пользователям учетной информации относятся: служащие, поставщики, покупатели, кредиторы, инвесторы, государство, общественность.
Особое значение для всех пользователей отчетными данными имеет пояснение к бухгалтерскому балансу и отчету о финансовых результатах. Бухгалтерский баланс и отчет о финансовых результатах могут служить солидной информационной основой экономического анализа хозяйственной деятельности предприятий.
В настоящее время все предприятия испытывают настоятельную потребность в расширении аналитических работ, связанных с переходом к рынку, разработкой перспектив развития, комплексной оценкой эффективности применения различных форм хозяйствования, своевременной выработкой оперативных управленческих решений. В связи с этим автоматизация экономического анализа на базе ЭВМ становится объективной необходимостью. Она обусловлена ростом значения качественного информационного обслуживания процесса управления хозяйственной деятельностью, бурным развитием технических возможностей современных ЭВМ, особенностями настоящего периода развития экономики [9].
1.4. Автоматизация бухгалтерского учета
Занять лидирующее положение на рынке, повысить эффективность работы персонала, создать оптимальную структуру управления — вот первоочередные задачи руководителя предприятия. В бухгалтерской и банковской деятельности это особенно важно, что обуславливает широкое применение бухгалтерских пакетов и программ, благодаря внедрению которых повышается оперативность обработки данных и достоверность деловой информации, принимаются более объективные финансовые и управленческие решения [10].
Автоматизация бухгалтерского учета на предприятии и подготовка финансовой отчетности в налоговые органы в условиях переходной экономики России является одной из наиболее важных задач. Ситуация такова, что сам по себе бухгалтерский учет на предприятии может рассматриваться как внутреннее дело предприятия, а основой для оценки финансово-хозяйственной деятельности предприятия со стороны государства служит отчетность (бухгалтерский баланс и многочисленные другие отчетные формы), которая должна ежеквартально предоставляться в налоговую инспекцию по месту регистрации предприятия. Кроме того, существуют плановые и внеплановые налоговые проверки, при проведении которых могут потребоваться все бухгалтерские документы, включая первичные [11].
В условиях относительной неопределенности в налоговой сфере предприятие может сильно пострадать или даже потерпеть крах, и всего лишь из-за небрежности в бухгалтерском учете. Примеров тому в России очень много, причем часто страдают предприятия, стремящиеся работать честно. Страдают из-за небрежного ведения внутренней бухгалтерии предприятия. Страдают также из-за незнания и соответственно невыполнения последних законов и распоряжений. При ведении бухгалтерского учета вручную возможны и простейшие арифметические ошибки [12].
Конечно, компьютерная программа не заменит грамотного бухгалтера, но позволит сэкономить его время и силы за счет автоматизации рутинных операций, найти арифметические ошибки в учете и отчетности, оценить текущее финансовое положение предприятия и его перспективы.
Преобладание бумажных документов, многогранность финансовых контрактов, требование ускоренных расчетов, внимание к управленческому учету диктуют пристальное внимание к автоматизации бухгалтерской деятельности. Сегодня бухгалтеры в основном научились пользоваться компьютером, но это вовсе не означает переход на новые информационные технологии.
Переход от традиционного учета к компьютерному предполагает наведение порядка в бухгалтерском учете и, прежде всего в плане счетов, системе бухгалтерских проводок, отчетности. Следовательно, автоматизация влечет за собой более четкую работу всех служб, не подавляя, а, наоборот, усиливая человеческий фактор.
Наиболее распространенные на рынке бухгалтерские системы не только декларируют, но и предоставляют такие возможности, как:
? простота, удобство и гибкость в их освоении и использовании;
? широта применения, как для малых предприятий, так и для корпоративных структур;
? понятное и емкое представление информации;
? настройка и изменяющееся законодательство, включая налоговое, и особенности учета конкретного предприятия;
? большой набор типовых операций и форм отчетности;
? значительные аналитические возможности, зачастую с графическим представлением информации.
Все это, вместе взятое, определяет существенное увеличение скорости и комфортности работы бухгалтера.
Рассматривая основные функции типовой бухгалтерской системы, следует отметить, что для нее характерны:
? учет любых финансово – хозяйственных операций, включая валютные, с автоматическим пересчетом курсовой разницы;
? полноценный учет по счетам, субсчетам и аналитическим кодам для контрагентов;
? возможность настройки системы на учетную политику различных предприятий, включая настройку формы баланса, создание и редактирование отчетных форм (шаблонов);
? автоматический подсчет развернутого и свернутого сальдо, оборотов, составление журналов – ордеров, Главной книги, баланса и других произвольных отчетных форм;
? создание, печать и хранение электронных копий первичных банковских и кассовых документов;
? различные типы печати для получения твердой (бумажной) копии отчетов;
? возможность формирования отчетных форм для проведения финансового анализа предприятия по данным бухгалтерского учета и др.
? при работе с автоматизированной бухгалтерской системой появляется возможность:
? быстро подготовить все квартальные и годовые отчеты в налоговую инспекцию, в различные фонды и органы Госкомстата;
? вести учет основных средств;
? анализировать финансовую деятельность.
При автоматизации бухгалтерского учета возникают некоторые проблемы. Мало просто выбрать хорошую программу. Автоматизация – достаточно длительный и сложный процесс.
Создать программу, которая была бы одинаково пригодна всем пользователям, очень сложно. Условия, в которых работают программы, и требования к ним непрерывно меняются. Например, изменилось законодательство, и программа, которая устраивала, уже не в полной мере отвечает предъявляемым к ней требованиям. Приходится обращаться к разработчикам с просьбой об изменениях.
Итак, решение вопроса об автоматизации бухгалтерского учета – это нечто большее, чем покупка программы. По сути дела разрабатывается целый проект автоматизации. Это сложный комплекс мер, которые должны быть тщательно продуманы с самого начала.
Выводы
1) Проведено исследование производственной деятельности предприятия. Определены участки, которые необходимо автоматизировать. В частности это автоматизация формирования документов и отчётов.
2) Выявлены основные недостатки предыдущей системы учёта производственной деятельности. Основным недостатком является низкая скорость системы.
3) Рассмотрены базовые принципы бухгалтерского учета для дальнейшего проектирования АСУ.
2. СТРУКТУРНЫЙ АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ И АРХИТЕКТУРА АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ
Для описания предметной области используется методология Yourdon.
В качестве предметной области описывается работа абонентского отдела, в обязанности которого входит учет горячей воды и отопления, потребляемые населением и организациями. Запросы на приобретение той или иной услуги рассматриваются администрацией « ООО ХТЭК» с использованием информации о клиентах (население и организации) и о запрашиваемой услуге. При этом проверяется и обновляется информация о клиентах. Обработка запросов на услуги включает следующие действия: если требуемая услуга имеется в наличии, администрация информирует клиента об оплате. Однако, если клиент просрочил срок оплаты, ему выставляют долг в виде пени. Когда долг возвращается, рассчитывается абонентская плата плюс пени за несвоевременную оплату.
Администрация отдела регулярно готовит отчеты за определенный период времени об абонентах « ООО ХТЭК» и об оказываемых услугах.
2.1. Представление предметной области в виде SADT-диаграмм
Исследование предметной области проведём при помощи SADT методологии. Данная методология разработана в середине 70-х годов Дугласом Россом для задач моделирования слож¬ных систем. Результатом применения методологии SADT является модель, которая состоит из диаграмм и фрагментов текстов, имеющих ссылки друг на друга. Диаграммы — главные компоненты модели, все функции ИС и интерфейсы на них представлены как блоки и дуги. Место соединения дуги с блоком определяет тип интерфейса. Управляющая информация входит в блок сверху, в то время как информация, которая подвергается обработке, показана с левой стороны блока, а результаты выхода показаны с правой стороны. Механизм (человек или автоматизированная система), который осуществляет операцию, представляется дугой, входящей в блок снизу [13].
На первом уровне методологии SADT строится контекстная диаграмма предметной области (рисунок 2.1.).
На рисунке 2.1. представлена основная функция бухгалтерского отдела по формированию отчётности. Входные дуги В1 и В2 являются основными данными при формировании отчётов. Входная информация обрабатывается на основании управляющих дуг У1 и У2. На основании дуги У1 формируется внешний вид отчётов, на основании У2 – первичные документы предприятия. Механизм M1 представляет собой человека, который выполняет функцию 0. Выходная дуга Р1 и есть результат выполнения этой функции.
На рисунке 2.2. изображены две функции, выполняемые бухгалтерским отделом ООО «ХТЭК». Функция 1 выполняется при планировании работы предприятия на текущие сутки на основании планов предприятия (В1), которые обрабатываются с учётом предыдущих результатов работы предприятия (У2). В результате формируется первичный документ (Р2), который используется при формировании отчётов (см. блок 2, рисунок 2.2.). Отчёты формируются на основании первичных документов (Р2) и результатов производственной деятельности предприятия за прошлые сутки (В2) и оформляются согласно стандартам (У1), принятых на предприятии.
Рис. 2.1. Контекстная диаграмма предметной области.
Рис. 2.2. Декомпозиция блока 0.
2.2 Организация проекта
Весь проект разделяется на 4 фазы: анализ, глобальное проектирование (проектирование архитектуры системы), детальное проектирование и реализация (программирование).
На фазе анализа строится модель среды (Environmental Model). Построение модели среды включает:
? анализ поведения системы (определение назначения ИС, построение начальной контекстной диаграммы потоков данных (DFD) и формирование матрицы списка событий (ELM), построение контекстных диаграмм);
анализ данных (определение состава потоков данных и построение диаграмм структур данных (DSD), конструирование глобальной модели данных в виде ER-диаграммы).
Перед построением контекстной DFD необходимо проанализировать внешние события (внешние объекты), оказывающие влияние на функционирование «ХТЭК». Эти объекты взаимодействуют с ИС путем информационного обмена с ней.
Из описания предметной области следует, что в процессе работы абонентского отдела участвуют следующие группы людей: клиенты (население и организации), руководство. Эти группы являются внешними объектами. Они не только взаимодействуют с системой, но также определяют ее границы и изображаются на начальной контекстной DFD как терминаторы (внешние сущности).
Начальная контекстная диаграмма изображена на рисунке 2.3. В отличие от нотации Gane/Sarson внешние сущности обозначаются обычными прямоугольниками, а процессы — окружностями.
Рис. 2.3. Начальная контекстная диаграмма
Список событий строится в виде матрицы (ELM) и описывает различные действия внешних сущностей и реакцию ИС на них. Эти действия представляют собой внешние события, воздействующие на абонентский отдел. Различают следующие типы событий:
Аббревиатура Тип
NC Нормальное управление
ND Нормальные данные
NCD Нормальное управление/данные
TC Временное управление
TD Временные данные
TCD Временное управление/данные
Все действия помечаются как нормальные данные. Эти данные являются событиями, которые ИС воспринимает непосредственно, например, изменение адреса клиента, которое должно быть сразу зарегистрировано. Они появляются в DFD в качестве содержимого потоков данных.
Матрица списка событий имеет следующий вид:
№ Описание Тип Реакция
1 Клиент желает стать абонентом ХТЭК NC Регистрация клиента в качестве абонента ХТЭК
2 Клиент сообщает об изменении адреса NC Регистрация измененного адреса клиента
3 Клиент запрашивает покупку на ту или иную услугу NC Рассмотрение запроса
4 Клиент оплачивает покупку NC Регистрация оплаты
5 Руководство запрашивает отчет NC Формирование требуемого отчета
Для завершения анализа функционального аспекта поведения системы строится полная контекстная диаграмма, включающая диаграмму нулевого уровня. При этом процесс «Абонентский отдел» декомпозируется на 4 процесса, отражающие основные виды административной деятельности «ХТЭК». Существующие «абстрактные» потоки данных между терминаторами и процессами трансформируются в потоки, представляющие обмен данными на более конкретном уровне. Список событий показывает, какие потоки существуют на этом уровне: каждое событие из списка должно формировать некоторый поток (событие формирует входной поток, реакция — выходной поток). Один «абстрактный» поток может быть разделен на более чем один «конкретный» поток.
Потоки на диаграмме верхнего уровня Потоки на диаграмме нулевого уровня
Информация от клиента Данные о клиенте, Запрос о покупке услуги
Информация для клиента Абонентская карточка, Ответ на запрос о покупке
Информация от руководства Запрос отчета о новых абонентах, Запрос отчета о покупке, Запрос отчета о оказываемых услугах
Информация для руководства Отчет о новых абонентах, Отчет о приобретении услуг Отчет об услугах
На приведенной DFD (рисунок 2.4.) накопитель данных «абонентский отдел» является глобальным или абстрактным представлением хранилища данных.
Анализ функционального аспекта поведения системы дает представление об обмене и преобразовании данных в системе. Взаимосвязь между «абстрактными» потоками данных и «конкретными» потоками данных на диаграмме нулевого уровня выражается в диаграммах структур данных (рисунок 2.5.).
На фазе анализа строится глобальная модель данных, представляемая в виде диаграммы «сущность-связь» (рисунок 2.6.).
На фазе проектирования архитектуры строится предметная модель. Процесс построения предметной модели включает в себя:
• детальное описание функционирования системы;
• дальнейший анализ используемых данных и построение логической модели данных для последующего проектирования базы данных;
• определение структуры пользовательского интерфейса, спецификации форм и порядка их появления;
• уточнение диаграмм потоков данных и списка событий, выделение среди процессов нижнего уровня интерактивных и неинтерактивных, определение для них миниспецификаций.
Рис. 2.4. Контекстная диаграмма
Рис 2.5. Диаграмма структуры данных
Рис. 2.6. Диаграмма «Сущность — связь»
2.3. Диаграмма потоков данных ПС
В основе методологии DFD (Data Follow Diagram) лежит построение модели анализируемой ИС — проектируемой или реально существующей. В соответствии с методологией модель системы определяется как иерархия диаграмм потоков данных (ДПД), описывающих асинхронный процесс преобразования информации от ее ввода в систему до выдачи пользователю. Диаграммы верхних уровней иерархии (контекстные диаграммы) определяют основные процессы или подсистемы ИС с внешними входами и выходами. Они детализируются при помощи диаграмм нижнего уровня. Такая декомпозиция продолжается, создавая многоуровневую иерархию диаграмм, до тех пор, пока не будет достигнут такой уровень декомпозиции, на котором процессы становятся элементарными и детализировать их далее невозможно [14].
Источники информации (внешние сущности) порождают информационные потоки (потоки данных), переносящие информацию к подсистемам или процессам. Те в свою очередь преобразуют информацию и порождают новые потоки, которые переносят информацию к другим процессам или подсистемам, накопителям данных или внешним сущностям — потребителям информации. Таким образом, основными компонентами диаграмм потоков данных являются:
• внешние сущности;
• системы/подсистемы;
• процессы;
• накопители данных;
• потоки данных;
Рис. 2.7. Контекстная диаграмма потоков данных.
Рис. 2.8. Диаграмма разбиения ПС на подсистемы.
Для иллюстрации архитектуры ПС используются диаграммы потоков данных.
На рисунке 2.7. изображена схема взаимодействия ПС с тремя внешними сущностями: оператором, принтером и базой данных. Оператором является пользователь, который в данный момент времени работает с ПС. На принтер от ПС поступают сгенерированные отчёты. В базе данных хранятся данные, которые используются в отчётах.
ПС имеет четыре подсистемы: интерфейс, машина состояний, ядро АСБУ, генератор отчётов (рисунок 2.8.). Интерфейс является как бы посредником между пользователем и самой программой, которая на рисунке представлена как ядро АСБУ. Интерфейс непосредственно передаёт ядру действия пользователя.
Ядро АСБУ является главной подсистемой программы. Выполняет все основные функции системы для работы с базой данных. Реализует механизм защиты базы данных от разрушения. Ядро непосредственно связано с подсистемой «машина состояний». Ядро отслеживает действия пользователя и на их основе генерирует текстовую строку, которая используется машиной состояний для блокировки элементов интерфейса, чтобы исключить неверные действия пользователя.
Ядро АСБУ, по команде пользователя, открывает источник данных или формирует отчётные данные. Отчётные данные компонуются и оформляются в готовый отчёт в генераторе отчётов, который их подаёт на печать.
2.4. Выбор модели жизненного цикла
К настоящему времени наибольшее распространение получили следующие две основные модели ЖЦ:
• каскадная модель;
• спиральная модель.
В изначально существовавших однородных ИС каждое приложение представляло собой единое целое. Для разработки такого типа приложений применялся каскадный способ. Его основной характеристикой является разбиение всей разработки на этапы, причем переход с одного этапа на следующий происходит только после того, как будет полностью завершена работа на текущем (рисунок 2.9.). Каждый этап завершается выпуском полного комплекта документации, достаточной для того, чтобы разработка могла быть продолжена другой командой разработчиков [15].
Положительные стороны применения каскадного подхода заключаются в следующем:
• на каждом этапе формируется законченный набор проектной документации, отвечающий критериям полноты и согласованности;
• выполняемые в логичной последовательности этапы работ позволяют планировать сроки завершения всех работ и соответствующие затраты.
Рис. 2.9. Каскадная схема разработки ПО
Каскадный подход хорошо зарекомендовал себя при построении ИС, для которых в самом начале разработки можно достаточно точно и полно сформулировать все требования, с тем чтобы предоставить разработчикам свободу реализовать их как можно лучше с технической точки зрения. В эту категорию попадают сложные расчетные системы, системы реального времени и другие подобные задачи. Однако, в процессе использования этого подхода обнаружился ряд его недостатков, вызванных прежде всего тем, что реальный процесс создания ПО никогда полностью не укладывался в такую жесткую схему. В процессе создания ПО постоянно возникала потребность в возврате к предыдущим этапам и уточнении или пересмотре ранее принятых решений. В результате реальный процесс создания ПО принял следующий вид (рисунок 2.10.):
Рис. 2.10. Реальный процесс разработки ПО по каскадной схеме
Основным недостатком каскадного подхода является существенное запаздывание с получением результатов. Согласование результатов с пользователями производится только в точках, планируемых после завершения каждого этапа работ, требования к ИС «заморожены» в виде технического задания на все время ее создания. Таким образом, пользователи могут внести свои замечания только после того, как работа над системой будет полностью завершена. В случае неточного изложения требований или их изменения в течение длительного периода создания ПО, пользователи получают систему, не удовлетворяющую их потребностям. Модели (как функциональные, так и информационные) автоматизируемого объекта могут устареть одновременно с их утверждением.
Для преодоления перечисленных проблем была предложена спиральная модель ЖЦ (рисунок 2.11.), делающая упор на начальные этапы ЖЦ: анализ и проектирование. На этих этапах реализуемость технических решений проверяется путем создания прототипов. Каждый виток спирали соответствует созданию фрагмента или версии ПО, на нем уточняются цели и характеристики проекта, определяется его качество и планируются работы следующего витка спирали. Таким образом углубляются и последовательно конкретизируются детали проекта и в результате выбирается обоснованный вариант, который доводится до реализации [16].
Разработка итерациями отражает объективно существующий спиральный цикл создания системы. Неполное завершение работ на каждом этапе позволяет переходить на следующий этап, не дожидаясь полного завершения работы на текущем. При итеративном способе разработки недостающую работу можно будет выполнить на следующей итерации. Главная же задача — как можно быстрее показать пользователям системы работоспособный продукт, тем самым активизируя процесс уточнения и дополнения требований.
Основная проблема спирального цикла — определение момента перехода на следующий этап. Для ее решения необходимо ввести временные ограничения на каждый из этапов жизненного цикла. Переход осуществляется в соответствии с планом, даже если не вся запланированная работа закончена. План составляется на основе статистических данных, полученных в предыдущих проектах, или личного опыта разработчиков.
Для разрабатываемого проекта выбрана спиральная модель. Выбрана эта модель по причине того, что в ней предусмотрена возможность перехода с одного этапа на другой даже без полного завершения пройденного этапа. Если заказчика, что-то не устроило в принесённом отчёте, то недочёты можно устранить при работе над следующими этапами. Это позволит сократить время разработки ПС. Кроме того, такой подход позволит более точно определить технические характеристики проекта.
Возможность выпуска версий на каждом этапе этой модели позволит уточнить требования пользователей и, таким образом, разработать продукт, который будет полностью удовлетворять требованиям заказчика.
Рис 2.11. Спиральная модель ЖЦ
Выводы
1. При помощи диаграмм потоков данных построена начальная контекстная диаграмма из которой видна схема функционирования «ХТЭК» и определена архитектура ПС, которое состоит из четырёх подсистем: интерфейс, ядро, машина состояний, генератор отчётов.
2. Построена диаграмма структуры данных, что дает представление об обмене и преобразовании данных в системе.
3. Представлена диаграмма сущность – связь, которая дает представление об обмене информации внутри абонентского отдела.
4. Выбрана спиральная модель жизненного цикла, для проектирования ИС.
3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ УЧЕТА ДЕЯТЕЛЬНОСТИ «ХТЭК»
На предприятии ООО «ХТЭК» реализована следующая структура информационных потоков. Для всего предприятия в целом установлен сервер (Intel DUAL Pentium III 1 Ггрц/ ОЗУ — 1024 Мб/ HDD — RAID 3 (4 HDD SCSI– 32 Гб)) на котором установлено ПО – Windows NT 2000 Server, Microsoft SQL Server 2000, MICROSOFT Office 2000 и 1С Предприятие 7.7., так же сервер работает в режиме терминалов. На сервере хранятся информационные базы которые организованы и размещены на MSQLServer 2000, который обеспечивает доступ к этим ресурсам различных структурных подразделений предприятия по средствам сетевого оборудования.
На предприятии смонтирована сеть на основе витой пары (100 Mbit).
К основному серверу предприятия обращаются для обработки информации группа из 6 компьютеров отдела бухгалтерии. Все ПЭВМ с процессором от Intel Pentium до Intel PentiumII.
Также имеется выделенный сервер (Intel Celeron 433 Мгрц/ОЗУ – 64 Мб/ HDD – 20 Гб) который служит для выхода в сеть Internet.
3.1. Выбор системы проектирования
Очевидно, что без своевременной и достоверной информации о состоянии дел на предприятии невозможно управление им, а следовательно, и развитие деятельности. Для грамотного управления предприятием необходимо организовать потоки данных «сверху вниз», «снизу вверх», а также «по горизонтали» — между службами, сопоставить и увязать эти данные, выявить наиболее активных или пассивных покупателей, оценить оборачиваемость материальных ресурсов, рентабельность активов и, на основании обобщения, анализа и интерпретации этих данных, ответить на главный вопрос: как работают ресурсы предприятия и как заставить их работать лучше.
Рассмотрим некоторые существующие программные продукты используемые при автоматизации бухгалтерского учета:
Программный комплекс «БЭСТ» является многопользовательской и многовалютной системой оперативного и бухгалтерского учета, с базовым принципом пополнения данных «от первичного документа». Система ориентирована на малые и средние предприятия и выпускается в файл-серверном и клиент-серверном вариантах архитектуры. Программа используется на предприятиях торговли, сферы услуг, в строительстве, на производстве, в аудиторских фирмах, бюджетных организациях. Логика построения программной системы полностью соответствует реальным учетным процессам. Развитые параметрические настройки обеспечивают высокую адаптируемость к специфике конкретного предприятия. Одним из преимуществ программной системы «БЭСТ» является независимое ведение оперативного и бухгалтерского учета на основании одних и тех же документов. Данные оперативного учета представляют собой фундамент для управления предприятием. Благодаря программе «БЭСТ», можно получать оперативную информацию по состоянию взаиморасчетов с бизнес-партнерами, наличию денежных средств и материальных запасов, ожидаемым платежам и т.д. При этом все необходимые сведения предоставляются в режиме реального времени, с подробнейшим разъяснением каждого показателя. Поскольку оперативный учет базируется исключительно на финансово-хозяйственных документах и, в отличие от бухгалтерского учета, не требует обязательной и немедленной подготовки проводок, можно существенно повысить эффективность работы персонала компании, рационально распределив учетные функции между работниками. Значительную часть операций по вводу и обработке документов, а также по оперативному анализу и планированию можно доверить сотрудникам, не имеющим каких-либо знаний в области бухгалтерского учета. Данный подход существенно облегчает работу бухгалтеров, помогая им сосредоточиться на аналитической деятельности. Кроме того, независимое ведение оперативного и бухгалтерского учета позволяет быстро выявлять и исправлять ошибки в первичных документах, формировать и корректировать бухгалтерские проводки перед окончанием отчетного периода — с учетом законодательных актов, вступающих в силу «задним числом». Это повышает адаптируемость системы к любым изменениям в финансово-экономической сфере [17].
“1С Предприятие» является системой программ для автоматизации различных областей экономической деятельности. В конкретный программный продукт, входящий в систему программ 1С Предприятие, включаются те функции и возможности, которые отвечают назначению этого продукта.
Все составляющие системы программ 1С Предприятие можно разделить на Технологическую платформу и Конфигурации. Технологическая платформа представляет собой набор различных механизмов, используемых для автоматизации экономической деятельности и не зависящих от конкретного законодательства и методологии учета. Конфигурации являются собственно прикладными решениями. Каждая конфигурация ориентирована на автоматизацию определенной сферы экономической деятельности и, разумеется, отвечает принятому законодательству.
Технологическая платформа, кроме механизмов, используемых во всех продуктах 1С:Предприятия, включает три основные функциональные компоненты. Функциональные компоненты включаются в состав продуктов системы 1С:Предприятие, использующих специфические возможности компонент.
Компонента «Бухгалтерский учет» предназначена для ведения учета на основе бухгалтерских операций. Она обеспечивает ведение планов счетов, ввод проводок, получение бухгалтерских итогов. Компонента используется для автоматизации бухгалтерского учета в соответствии с любым законодательством и методологией учета.
Компонента «Расчет» предназначена для выполнения сложных периодических расчетов. Она может использоваться для расчета заработной платы любой сложности, расчетов по ценным бумагам и других видов расчетов.
Компонента «Оперативный учет» предназначена для учета наличия и движения средств в самых различных разрезах в реальном времени. Она используется для учета запасов товарно-материальных ценностей, взаиморасчетов с контрагентами и т.д. Компонента позволяет отражать в учете операции хозяйственной жизни предприятия непосредственно в момент их совершения.
В комплект поставки программных продуктов системы программ 1С:Предприятие включаются типовые конфигурации. Они представляют собой универсальные прикладные решения для автоматизации конкретной области экономики.
Конфигурации, использующие возможности одной функциональной компоненты, предназначены для автоматизации отдельных сфер деятельности предприятий, например, бухгалтерского учета, торгового учета или расчета заработной платы. Конфигурации, использующие возможности нескольких компонент, обеспечивают комплексную автоматизацию различных направлений учета в единой информационной базе.
Особенностью системы программ 1С Предприятие является возможность изменения конфигурации самим пользователем или организациями, специализирующимися на внедрении и поддержке программных продуктов фирмы «1С». Эта возможность позволяет обеспечить максимальное соответствие автоматизированной системы особенностям учета в конкретной организации.
Кроме типовых конфигураций, поставляемых в комплекте с программой, существуют дополнительные конфигурации, поставляемые фирмой «1С» отдельно, а также конфигурации, разработанные другими фирмами, и конфигурации, разрабатываемые непосредственно для конкретных организаций [18].
Различные версии продуктов системы программ 1С Предприятия могут использоваться в организациях с различными объемами информации, различным количеством пользователей автоматизированной системы и различной интенсивностью работы пользователей.
Однопользовательские версии программ обеспечивают работу с информационной базой только одного пользователя (в один момент времени). Однопользовательские версии используются в основном на небольших предприятиях.
Сетевые версии позволяют работать с одной информационной базой одновременно нескольким пользователям. Сетевые версии используются тогда, когда необходимо, чтобы с автоматизированной системой работали одновременно несколько сотрудников. Существуют версии, допускающие работу ограниченного числа пользователей, и без ограничения числа пользователей [19].
Следовательно, появление до¬вольно широкого спектра «уни¬версальных», «адаптивных», «на¬страиваемых» систем, которые в большом ассортименте представ¬лены на рынке программного обеспечения бухгалтерского уче¬та, вполне закономерно. Но как бы авторы ни называли свои си¬стемы, в основе функциониро¬вания по-настоящему универ¬сальных систем лежит так называемый инструментальный подход. Он основан на том, что АСБУ снабжается набором инст¬рументальных средств, позволя¬ющих осуществлять модифика¬цию (перенастройку) системы непосредственно в процессе экс¬плуатации. Как правило, такие программы представляют собой интегрированные системы, рабо¬тающие в единообразном интер¬фейсе с единой базой данных без явного разделения труда учетных работников по участкам бухгал¬терского учета. Казалось бы, ре¬шение проблемы найдено и во¬просы обеспечения гибкости потеряли свою былую остроту. Однако следует иметь в виду, что данный подход в значительной мере снимает проблему обеспе¬чения гибкости АСБУ для малых и средних предприятий с незна¬чительным количеством рабочих мест [20].
Нередко в условиях использо¬вания жестких подходов к авто¬матизации предприятие вынуж¬дено следовать «насаждаемой» со стороны методологии и технологии ведения учета, игнорируя свои особенности и своеобразие. Кроме того, в силу ряда внутрен¬них и внешних обстоятельств, ме¬тоды и технология учета, перво¬начально заложенные в системе, могут вступить в противоречие со вновь сложившимися условия¬ми. Та методология, которая еще вчера казалась прогрессивной и единственно правильной, стано¬вится некоторое время спустя ма¬лоэффективной и даже непри¬годной. При этом реорганизация системы для обеспечения функ¬ционирования по новым прин¬ципам сопряжена с решением серьезной проблемы перепроек¬тирования всей системы [21].
Возможность саморазвития системы, ее трансформация и адаптация являются теми особен¬ностями, которые выгодно отли¬чают ее от иных систем автоматизации. Плюс — изменения законодательства настолько не редкое явление, что совершенно отточенная и качественная программа, через год-другой становится несколько неактуальной и, соответственно, требуется обновление и модификация конфигурации.
В 1С:Предприятие это вопрос решенный. Гибко-конфигурируемая система на самом деле является конструктором, из кубиков которого мы можем написать абсолютно все. В отличие от других бухгалтерских программ 1С:Предприятие не является сугубо бухгалтерской программой (хотя и решает абсолютно все бухгалтерские задачи). В некотором роде 1С:Предприятие можно сравнить с языком программирования, на котором и пишутся программы, которые собственно решают задачи. Программы эти называются «Конфигурации». Различные конфигурации отвечают за решение, каких либо готовых задач, например учет Материалов на складах, Зарплата или Калькуляция себестоимости продукции, есть конфигурации, которые решают всю совокупность задач в одном флаконе [21].
Причем любую из конфигурации можно дописать, переписать и привести к такому виду, какой устраивает. Можно написать несколько конфигураций и пользоваться ими одновременно, но база — сам комплекс 1С:Предприятие при этом один. На основании всего выше сказанного для программной реализации была выбрана среда встроенного языка программирования 1С.
3.2. Требования к аппаратной части
Для работы ИС бухгалтерского учета с нормальной скоростью требуется, по крайней мере, Pentium 200 и 32 Мбайт памяти. Тип используемого видеоадаптера также оказывает влияние на производительность, как программы, так и человека, занимающегося этой программой. Лучше всего работать при высоком разрешении (1024 на 768 пикселей или более), при этом на экран помещаются все панели инструментов, меню, формы, делая более удобным пользовательский интерфейс.
ИС бухгалтерского учета представляет собой программу, способную работать только под Windows. Поэтому для ее работы необходима данная операционная система.
Для вывода расходных требований, отчетов на бумагу – требуется принтер, желательно «Laser Jet 100», что обусловлено скоростью, быстротой и качеством его работы.
Для быстрой передачи информации между компьютерами – требуется локальная сеть.
В настоящий момент «ХТЭК» удовлетворяет всем вышеуказанным требованиям к аппаратуре, что является одним из условий эффективной работы программы.
3.3. Структура информационной системы учета горячей воды и отопления
Целью проектирования ИС является увеличение прозрачности движения финансовых потоков предприятия и непрерывное ведение автоматизированного учета.
Реализация этой цели достигается автоматизацией следующих задач:
? операции по кассе;
? учет услуг;
? взаиморасчеты с организациями и населением лицами;
Решение вышеперечисленных задач позволяет директору принимать правильные решения, а предприятию – правильно и оперативно вести учет.
Информационная система бухгалтерского учета содержит две взаимно дополняющих компоненты: регистрирующую и аналитическую системы.
Вся повседневная работа абонентского отдела ведется через регистрирующую систему. Все факты, отражающие реальные операции, вносятся в систему через соответствующие модули с рабочих мест сотрудников.
Аналитическая система дополняет регистрирующую, позволяя обрабатывать полученную информацию с помощью встроенного языка программирования и выдавать отчетную информацию.
3.4. Алгоритм выполнения работ по автоматизации бухгалтерского учета «ООО ХТЭК»
Рассмотрим алгоритм выполнения работ. Конечно, линейность здесь довольно условна.
1. Начальное иссследование объекта.
Выяснялись основные детали предстоящей автоматизации.
Здесь было важно добиться одинакового понимания проблем с заказчиком, для чего уже на этом этапе начинался процесс подготовки специалистов абонентского отдела к различным аспектам внедрения, его технологическим и организационным особенностям.
2. Выполнение текущих работ.
При выполнении работ — достигнута максимальная эффективность работы информационной системы бухгалтерского учета «ХТЭК».
Были учтены требования пожелания специалистов рекламного агентства. В ходе работы производились необходимые корректировки.
3. Тестирование.
Тестирование вновь разработанной конфигурации проводилось в присутствии представителей предприятия.
При проверке документов, вводились данные близкие к реальным, т.е. осуществлялась проверка по «живым» документам. Это позволило избежать мелких ошибок (например: не хватка разрядности у числовых переменных, не «влезает» наименование и т.п.).
4. Обучение персонала.
Подготовка специалистов агентства, начиналась уже на первых стадиях внедрения и велась на всех его этапах. Персонал получил все необходимые для корректной эксплуатации системы знания и навыки. Именно качественная подготовка персонала во многом определила успех автоматизации.
5. Закрытие выполненных работ.
Информационная система была разработана и введена в эксплуатацию в марте 2004 года.
6. Система сопровождения пользователей.
Поставлена отлаженная система сопровождения.
Элементы системы сопровождения: консультации, обновления.
3.5. Организация хранения нормативно — справочной информации и ведения аналитического учета ООО
Для ведения аналитического учета на бухгалтерских счетах, а также для хранения различного рода информации и ввода ее в первичные документы в системе 1С:Предприятие предназначены справочники.
Справочник представляет собой одноуровневый или многоуровневый список. Уровень иерархии каждого справочника задан в конфигураторе. Большинство справочников представляют собой одноуровневые списки.
Каждому элементу справочника соответствует уникальный код. Во всех справочниках при вводе нового элемента любого уровня ему автоматически присваивается новый код (порядковый номер во внутренней классификации), который пользователь может изменить (но он не должен совпадать с уже существующим). Уникальность кодов контролируется программой при вводе нового элемента справочника.
Справочники в конфигурации открываются через меню «Справочники» и позицию «Справочники» меню «Операции» главного меню программы. Заполнение и корректирование справочников возможны также в процессе работы с документами и операциями.
В конфигурации ООО «ХТЭК» создан набор справочников для формирования первичных документов и ведения списка объектов аналитического учета (П.5.).
3.6. Реализация механизма ведения учета хозяйственных операций
В конфигурации информация о хозяйственных операциях, совершаемых на предприятии вводится при помощи документов. Все документы объединяются в журналы документов по разделам учета.
Использование документов, автоматически формирующих проводки, позволяет существенно облегчить и упорядочить ведение бухгалтерского учета и подготовку к составлению отчетности, особенно при большом количестве хозяйственных операций.
Для ввода данных в документ используется форма заполнения документа – диалог ввода. Она содержит набор реквизитов, флажки, переключатели и кнопки.
Каждый документ имеет обязательные реквизиты: номер, дату и внутренний номер.
Документы
При необходимости ввода информации в базу данных с обработкой данных по некоторому алгоритму в программе используются документы. После ввода данных в журнал документ можно сохранить для дальнейшего контроля. При необходимости пользователь может просмотреть порожденные документом движения регистров.
Документы подразделяются на три группы:
? Изменения по абоненту;
? Оплаты;
? Начисления;
В группу «Изменения по абоненту» входят следующие документы:
? Изменения по абоненту;
? Изменение вида расчета;
? Изменение вида услуги;
? Данные по счетчику;
Группа «Оплаты»:
? Оплата списком;
? Приходный ордер от населения;
? Приходный ордер от организации;
Группа «Начисления»:
? Расчет списком;
? Расчет по абоненту;
? Пересчет по абоненту;
Журналы
Журнал предназначен для хранения и работы с документами. Работая с журналами, можно вводить документы, просматривать их, редактировать, удалять. Журналы позволяют группировать документы для просмотра и быстрого доступа к ним. В разработанной системе автоматизации существуют следующие виды справочников:
? Касса;
? Изменения по абоненту;
? Оплата;
? Начисления;
Отчеты
При необходимости обработки информации в информационной базе согласно некоторому алгоритму (например, получение различных сводных данных) в системе 1С:Предприятие используются отчеты (обработки).
Отчеты также подразделяются на три группы:
? Оплата;
? Льготники;
? Начисления;
Группа «Оплата»:
? Реестр оплат;
? Реестр оплат касса;
? Касса и население;
Группа «Льготники»:
? Свод по льготникам;
? Реестр Льготники;
Группа «Начисления»:
? Свод начисления;
? Сальдо абонентов;
3.5.План развертывания ПП
Установка программы происходит следующим образом
Поставляется программа на компакт-диске. В комплект поставки входит 2 файла и папка внешних отчетов:
? 1cv7.md;
? 1cv7.dd;
? Папка Extforms;
В папке C:\Program Files\1CV7.7 создаем папку ХТЭК и копируем в нее два представленных файла.
Далее следует произвести запуск «1С» (рисунок 3.1.)
Рис. 3.1. Запуск 1С: Предприятия
После нажать кнопку добавить, появится окно регистрации базы (рисунок 3.2.).
В поле «Название» указать ХТЭК, в поле «Путь» указать папку, в которой хранятся требуемая база и нажать кнопку «ОК».
После этого произойдет загрузка всех данных конфигурации. Теперь необходимо запустить конфигурацию в монопольном режиме. После переиндексации всех необходимых файлов можно будет работать с программой.
Удаление программы состоит из двух шагов. Во-первых необходимо удалить название базы из списка конфигураций, во вторых необходимо удалить папку с конфигурацией.
Выводы
1. При сравнении АСБУ для решения поставленных задач выбрана система программирования 1С.
2. Проведено исследование компьютерного парка ЗАО «ХТЭК».
3. Определены аппаратные требования к разрабатываемому проекту, из чего видно, что ЗАО «ХТЭК» соответствует определенным требованиям.
4. Представлена реализация механизма учета хозяйственных операций, производимых с населением и организациями.
5. Представлен план развертывания ПП.
4. АНАЛИЗ КАЧЕСТВА РАЗРАБОТАННОЙ АВТОМАТИЗИРОВАН-НОЙ СИСТЕМЫ
В процессе работы системы 1С:Предприятие могут возникать различные внештатные ситуации – отключение питания компьютера, «зависание» операционной системы, сбои оборудования и прочее. Такие ситуации, возникшие в процессе записи изменений в таблицы информационной базы системы 1С:Предприятие, могут привести к некорректному состоянию информационной базы. Внешние проявления некорректного состояния информационной базы могут быть различными, вплоть до невозможности запуска 1С:Предприятия. Процедура «Тестирование и исправление информационных баз» предназначена для диагностики и устранения ошибочных состояний информационных баз, имеющих как формат DFD, так и формат MS SQL Server 6.5, при любом составе установленных компонент 1С:Предприятие.
4.1. Принципы работы процедуры тестирования
Все проверки состояния информационной базы, выполняемые процедурой, можно условно разделить на три логических уровня.
На первом уровне, выполняемом только для файл-серверного формата информационной базы, происходит проверка физической целостности таблиц, составляющих информационную базу. Следует отметить, что, в случае SQL- формата информационной базы, соответствующие проверке следует выполнять диагностическими средствами, входящими SQL-сервера. На этом уровне проверяется наличие всех dbf-файлов, необходимых для работы информационной базы. В каждом dbf-файле анализируется корректность его заголовка, соответствие объявляемых заголовком полей и их типов ожидаемому (состав и тип полей, составляющих многие таблицы, определяется конфигурацией информационной базы). Проверяется равенство вычисленной на основании описания полей длины записи той длине записи, которая объявлена в заголовке. Сравнивается фактическая длина файла с величиной, полученной в базе информации о длине заголовка, длине записи и их количестве. Появление на данном уровне сообщения о невосстановимой ошибке, как правило, говорит о том, что после внесения изменений в конфигурацию не была выполнена процедура реструктуризации. После окончания анализа заголовка процедура производит сканирование всех записей и проверяет содержимое каждого поля записи с точки зрения типа этого поля. Например, если поле объявлено как строковое, то каждый байт информации, входящий в состав поля, должен быть символом – печатным или управляющим (например, возврат каретки).
Все таблицы, входящие в состав информационной базы можно условно разбить на две группы – базовые и производные.
Записи в базовых таблицах образуются, модифицируются и удаляются в результате работы пользователей, исполнение модулей.
Содержание производных таблиц определяется состоянием базовых и полностью может быть восстановлена при выполнении процедур пересчета итогов. Во время выполнения тестирования второго уровня происходит сканирование записей базовых таблиц и проверка содержимого полей на корректность с точки зрения системы 1С: Предприятие, а не управления базами данных в dbf-формате, как это происходило на предыдущем уровне. Например, поле, объявленное в заголовке dbf-файла как строковое, может рассматриваться системой 1С: Предприятие как ссылка на конкретный элемент конкретного справочника. Содержимое такого поля формируется по правилам определяемым системой 1С: Предприятие. Естественно, содержание такого поля имеет более существенные ограничения, чем способна наложить система управления базами данных, и тестирование содержимого на этом уровне представляет собой отдельную задачу. По окончании сканирования всех записей таблицы происходит ее реиндексация. Также на этом уровне происходит проверка логической связки «журнал документов – документ – табличная часть документа».
Логическая целостность таблиц, входящих в состав информационной базы, осуществляется совокупностью проверок третьего уровня. На этом уровне тестируется внутренние связи таблиц, определяемые системой 1С: Предприятие, проверяется фактическая существование элементов данных, на которые имеются ссылки в полях записей. Также на этом уровне происходит анализ записей о периодических реквизитах справочниках и бухгалтерских счетов (если установлена компонента «Бухгалтерский учет»).
По окончании проверок производится полный пересчет итогов. Конкретный состав пересчитываемых итогов зависит от состава установленных компонент и набора типов используемых тестируемой информационной базой объектов.
4.2. Запуск процедуры тестирования
Для запуска процедуры нужно в меню «Администрирование» выбрать пункт «Тестирование и исправление информационной базы». Внешний вид окна «Тестирование и исправление информационной базы» представлен на рисунке 4.1.
Рис. 4.1. Внешний вид окна «Тестирование и исправление информационной базы»
По умолчанию установлены все этапы тестирования, кроме упаковки таблиц ИБ. Установки можно изменить.
Этапы тестирования можно производить не зависимо друг от друга, устанавливая любые флажки. Правда, в случае, если восстановление физической целостности базы нарушило ее индексную структуру, реиндексация будет проведена независимо от того, установлен ли соответствующий флажок.
Упаковка таблиц ИБ – это дополнительная возможность, имеющая отношение не к целостности базы, к ее величине (и, соответственно, скорости работы). Дело в том, что для экономии времени записи, удаляемые из ИБ, на самом деле физически не уничтожаются, а считаются удаленными и пропускаются при чтении. Перед архивированием ИБ, чтобы не занимать лишнего места, или вообще при дефиците места на диске, полезно физически стереть все удаленные записи, сдвинув оставшиеся записи на их места.
Кнопка «Настройка» предоставляет доступ к диалогу «Настройка исправления ИБ». Внешний вид представлен на рисунке 4.2.
Рис. 4.2. Диалоговое окно настройки исправления ИБ
В нем нужно определить две настройки. Первая определяет должна ли программа при обнаружении ссылок на несуществующие объекты создавать эти объекты, или удалять ссылки. Можно также отказаться от исправления ошибок этого типа. Если задать создание объектов, потом можно будет просмотреть их и, если какие-то из них на самом деле не нужны, корректно удалить вместе со ссылками для этого в режиме 1С:Предприятия воспользоваться поиском ссылок на объекты или просто начать удалять объект: в качестве первого этапа перед удалением производится контроль ссылок, специально чтобы не нарушить ссылочную целостность базы.
Вторая настройка касается объектов по которым данные были частично потеряны, но оставшихся данных достаточно для того, чтобы восстановить потерянные. Например, по имеющимся проводкам можно восстановить бухгалтерскую операцию, а по ссылке на документ оперативного учета с указанием его типа и по записям о вызванных их движениях регистров – сам документ, т.д.
Все изменения, сделанные в таблицах ИБ в процессе тестирования будут необратимыми. Поэтому перед запуском процедуры рекомендуется сделать резервную копию ИБ на случай если ее выполнение не приведет к желаемому результату.
4.3. Тестирование разработанной системы автоматизации
При разработке программного средства не велась статистика появления ошибок и, поэтому, невозможно определить их количество. Однако при проведении тестирования и последующей отладки более 80% обнаруженных ошибок было исправлено.
Таблица 4.1. Результаты тестирования
Тест Поведение системы Отладка
Тест на корректность запуска программы Ошибка при соединении с базой данных Добавление операторов обработки исключительной ситуации
Тест на корректность вводимых данных Блокировка ввода в текстовые поля чисел и наоборот
Тест на контроль введённых данных Отрицательные значения запоминались в базе данных Корректировка события, возникающего при сохранении данных в базе данных
Проверка корректности данных, возвращаемых запросами Данные не соответствовали ожидаемым. Ошибки в запросах Исправление запросов
Проверка соответствия отчётов эталонам При просмотре отчётов дублировались последние строки Корректировка структуры базы данных
По итогам разработки ПС и последующего тестирования можно сделать вывод о качестве разработанного программного средства:
Достоинства:
1) Функциональность. Все задуманные функции ПС были реализованы.
2) Восстанавливаемость. В процессе разработки процесс локализации и устранения ошибок не занимал большого количества времени.
Недостатки:
1) Разработанное ПС не мобильно. Разработано для IBM-совместимых компьютеров.
Выводы
1. Рассмотрены принципы процедуры тестирования 1С:Предприятия. Процесс проверки состояния информационной базы, выполняемые процедурой, можно условно разделить на три логических уровня. Первый уровень – проверка физической целостности таблиц, составляющих ИБ; второй уровень — сканирование записей базовых таблиц и проверка содержимого полей; третий уровень – проверка внутренней связи таблиц.
2. Изучен процесс запуска процедуры тестирования. Возможности настройки тестирования ИБ позволяют выбрать способ исправления при обнаружении некорректных данных ИБ.
Приведены результаты тестирования. При проведении тестирования и последующей отладки более 80% обнаруженных ошибок было исправлено.
5. ЭРГОНОМИКА РАЗРАБОТАННОЙ АВТОМАТИЗИОВАННОЙ СИСТЕМЫ
Под эргономикой программного продукта подразумевается набор принципов и правил по обеспечению удобной и комфортной работы пользователя с компьютером [22].
5.1 Принципы эргономичности проекта
Эргономические принципы, использованные при создании программы:
1. Принцип минимального рабочего усилия.
Человек-оператор (ЧО) должен выполнять только ту работу, которая необходима, но не может быть выполнена системой. Не должно быть повторения уже сделанной работы.
2. Принцип максимального взаимопонимания.
Система обеспечивает полную поддержку пользователю, то есть ЧО не должен заниматься поиском информации; выдаваемая на экран монитора информация не требует интерпретации или перекодировки.
3. Принцип минимального объема оперативной памяти пользователя.
От ЧО требуется, чтобы он запоминал как можно меньше. Это объясняется тем, что скорость переработки информации оператором и его пропускная способность ограничены. На них влияет множество факторов, начиная от качества средства взаимодействия человека с техническими средствами и всей информационной моделью и кончая уровнем напряженности операторской деятельности и общим психофизическим состоянием человека.
4. Принцип минимального расстройства человека-оператора.
Расстройство пользователя (по производственным причинам), может возникнуть:
из-за какого-то препятствия в решении поставленной задачи;
из-за появления и обнаружения ошибок.
Для уменьшения расстройства пользователя программа имеет аппарат обработки ошибок и выдачи сообщений оператору об их причинах и возможных способах устранения.
5. Принцип учета профессиональных навыков пользователя.
В процессе эргономического обеспечения системы на ранних этапах проектирования были предусмотрены и проведены мероприятия, учитывающие облик некоторого абстрактного человека, который планируется разработчиком к взаимодействию с компонентами системы.
6. Принцип максимального различия человеческих характеров.
Мышления людей, их характеры различны, поэтому терминальная информация от системы по-разному может восприниматься пользователями. Поэтому целесообразно, чтобы система содержала, к примеру, способы как наглядного, так и слухового воздействия на конкретного ЧО, различимые пользователем.
7. Принцип максимального контроля со стороны человека-оператора.
Данный принцип можно охарактеризовать следующими требованиями к функционированию ЧО:
пользователь должен иметь возможность изменить очередность обработки, выполняемой системой;
пользователь должен контролировать последовательность работы и особенно там, где нет последовательно определенных операций [23].
5.2.Организация рабочего места оператора.
Под рабочим местом оператора ЭВМ понимается зона трудовой деятельности в системе «человек-машина», оснащенная техническими средствами и вспомогательным оборудованием, необходимым для решения конкретных производственных задач [24].
На комфортность работы оператора влияют организация рабочего места оператора, средства отображения информации, органы управления машиной. Они должны быть максимально удобны для человека, чтобы не создавать помех и чувства дискомфорта в процессе работы, а также способствовать наименьшей утомляемости.
Основным способом обеспечения условий комфорта оператора ЭВМ является организация его рабочего места. В этом вопросе не существует мелочей, так как любой, на первый взгляд, несущественный фактор в процессе длительного воздействия может вызвать состояние дискомфорта, отрицательно сказаться на результатах деятельности и, возможно, привести к заболеванию.
При длительной работе оператора за экраном монитора у операторов отмечается напряжение зрительного аппарата с появлением жалоб на неудовлетворенность работой, головные боли, раздражительность, нарушение сна, усталость и болезненные ощущения в глазах, пояснице, руках и области шеи.
Конструктивное и внешнее оформление оборудования создает условия для минимальной утомляемости. Конструкция рабочей мебели должна обеспечивать возможность индивидуальной регулировки соответственно росту работающего для поддержания удобной позы и соответствовать требованиям ГОСТ 12.2.032-78, ГОСТ 22269-76. При правильной организации рабочего места производительность труда операторов ЭВМ увеличивается на 8-20% [25].
Рабочее место оператора организовано в соответствии с требованиями стандартов и технических условий по безопасности труда.
При взаимном расположении элементов рабочего места учитывается:
• рабочая поза человека — оператора;
• пространство для размещения оператора, позволяющее осуществлять все необходимые движения;
• физические, зрительные и слуховые связи между оператором и оборудованием;
• возможность обзора пространства за пределами рабочего места;
• возможность ведения записей, размещения документации и материалов, используемых оператором.
Необходимая конструкция рабочего места должна обеспечивать выполнение трудовых операций в пределах зоны деятельности моторного поля. Для снижения нагрузки на глаза, монитор должен быть установлен наиболее оптимально с точки зрения эргономики: верхний край дисплея находится на уровне глаз, а расстояние до экрана составляет около 40 см. Мерцание экрана происходит с частотой 85 Гц, его разрешение 800х600 точек [26].
При проектировании рабочего места должна быть решена проблема как искусственного, так и естественного освещения. Освещение не только необходимо для выполнения производственных заданий, оно еще и влияет на психическое и физическое состояние работающего. Требования к рациональной освещенности производственных помещений сводятся к следующим:
• правильный выбор источников света и системы освещения;
• создание необходимого уровня освещенности рабочих поверхностей;
• ограничение слепящего действия света;
• устранение бликов, обеспечение равномерного освещения;
• ограничение или устранение колебаний светового потока во времени.
При недостаточной освещенности и напряжении зрения состояние зрительных функций находится на низком функциональном уровне, в процессе выполнения работы развивается утомление зрения, понижается общая работоспособность и производительность труда, возрастает количество ошибок [27].
Освещенность на рабочем месте должна соответствовать зрительным условиям труда согласно гигиеническим нормам. Так, в соответствии с ГОСТ 12.1.006-84, освещенность при работе с дисплеем должна быть 200 лк, а в сочетании с работой с документами — 400 лк.
В помещении применяется мягкий рассеянный свет из нескольких источников, светлая окраска потолка, стен и оборудования.
Направление света определяется необходимостью объемного восприятия объекта и стремлением не допустить ослепления прямым или отраженным светом. Удобным направление искусственного света считается слева сверху и немного сзади.
Важной задачей является выбор вида освещения (естественное или искусственное). Применение естественного света имеет ряд недостатков:
• поступление света как правило, только с одной стороны;
• неравномерность освещенности во времени и пространстве;
• ослепление при ярком солнечном свете.
Применение искусственного освещения помогает избежать рассмотренных недостатков и создать оптимальный световой режим. Однако применение помещений без окон создает в ряде случаев у людей чувство стесненности и неуверенности. И для правильной цветопередачи нужно выбирать искусственный свет со спектральной характеристикой, близкой к солнечной.
5.2. Эргономичность интерфейса разработанной программы
Кроме соблюдения норм, установленных различными организациями по стандартизации для оборудования, на котором будет производиться работа с программным обеспечением, при разработке очень важно соблюдать другие принципы и нормы. Эти принципы не являются четко документированными и стандартизированными, но тем не менее играют очень важную роль при эксплуатации продукта эти принципы представляют собой основу проектирования пользовательского интерфейса программы.
При проектировании интерфейса пользователя следует придерживаться следующих принципов:
? Соответствие ожиданиям пользователя. Приложение обеспечивающее возможность пользователю выполнять определенную задачу, должно функционировать именно так, как предполагается пользователем. Если интерфейс отвечает ожиданиям пользователя, ему будет очень удобно работать с ним.
? Простота и ясность интерфейса. Внешний вид интерфейса должен очевидным образом выражать функциональность приложения и позволять перемещаться от одной части интерфейса к другой. Простой и понятный интерфейс не отвлекает пользователя от выполнения ключевых задач. Для этого следует группировать элементы управления, в то же время не создавая областей с чрезвычайно высокой из плотностью. Кроме того, следует убедиться в том, что контролируемые мышью элементы управления имеют достаточно большой размер, что позволит легко и безошибочно выполнять перемещения и щелчки мышью. Не следует создавать очень большие промежутки между часто используемыми пользовательскими элементами управления. В противном случае пользователю будет очень сложно работать: в первом случае из-за излишней концентрации, а во втором из-за дополнительных перемещений мыши.
? Интуитивно понятный и знакомый интерфейс. Необходимо делать интерфейс таким, чтобы пользователи смогли догадаться о выполнении какой-либо задачи без необходимости специального обучения. Существует вероятность того, что пользователь может встретить что-то незнакомое ему в программе. Если такой момент возникает в самом начале и пользователь не смог разобраться, то возникает вероятность того, что он может отказаться от использования программы и будет пользоваться существующими аналогами. Если же предоставить пользователю интуитивно понятный интерфейс, он сможет гораздо быстрее научиться пользоваться даже самыми сложными компонентами приложения. Это особенно важно в тех случаях, когда пользователь пытается определить потенциал приложения и его пригодность для решения своих задач. Дополнительное условие состоит в том, чтобы выполняемые с интерфейсом пользователя действия были логически связаны. Иначе говоря, интерфейс должен функционировать именно в том порядке, который понятен пользователю. Это позволит ему почувствовать себя более уверенно и комфортно при работе с приложением.
? Дружественный к пользователю интерфейс. Возможность создания дружественного к пользователю интерфейса фактически говорит о том, что пользователь не откажется потратить некоторое время на обучение методам работы с ним. Желание потратить время на обучение методам работы с интерфейсом может в значительной степени повлиять на максимально эффективное использование приложения, тем самым повышая скорость практической работы.
? Обратная связь с пользователем. Обеспечение обратной связи с пользователем укрепляет его доверие и позволяет удостовериться в правильности выполняемых им действий. Обратная связь помогает сохранить интерес пользователя при выполнении рутинных и длительных задач. Это очень важный компонент любого интерфейса пользователя, а потому всегда нужно стараться обеспечить полезную и конкретную связь с пользователем. Обратная связь может принимать разные формы. Некоторые из них очевидны, например эффект нажатия кнопки после щелчка на ней. С фундаментальной точки зрения интерфейс пользователя в целом обеспечивает обратную связь с пользователем. Дополняя обратную связь с пользователем разными компонентами, можно усилить восприятие пользователя. В некоторых случаях дополненная обратная связь может оказаться очень существенной, например, когда пользователь не может выполнить какие-либо действия.
? Максимально доступный интерфейс пользователя. Это означает организацию разных типов обратной связи и форм ввода данных, удовлетворяющих потребностям пользователей, которые могут испытывать трудности при использовании обычных подходов.
? Справочная служба. Иногда пользователь попадает в затруднительную ситуацию. Для того, чтобы из нее выйти можно использовать следующие два способа: предложить достаточно полную документацию и организовать службу поддержки. Часть этой документации всегда следует предоставлять в виде интерактивной справки.
? Возможность настройки. Следует предоставить возможность настройки интерфейса по своему усмотрению. Такие простые действия, как выбор цвета, могут оказать существенное влияние на восприятие интерфейса пользователем.
? Предоставление возможности пользователю отказаться от выполненных действий. Даже очень опытный пользователь может допустить ошибку. Поэтому в приложении следует предусмотреть отказ от ошибочно выполненной операции.
? Ясное и четкое информирование пользователя об ошибке. Независимо от степени защищенности приложения от некорректных действий пользователя, он всегда может сделать что-то, что приведет к возникновению ошибок. Обычной реакцией на возникновение ошибок является отображение диалогового окна с сообщением о том, что произошла ошибка, и как ее устранить.
? Использование всех устройств ввода. Разные пользователи по-разному выполняют одни и те же действия. Для некоторых определенные устройства ввода данных могут быть более удобными чем другие. В интерфейсе пользователя должно быть предусмотрено использование указательного (например мыши) и клавиатурного устройства.
? Исходя из вышеописанного можно заключить: затраты на исследование и разработку пользовательского интерфейса являются оправданными. Разработка любого прикладного программного обеспечения, как правило, подразумевает создание пользовательского интерфейса.
? В настоящее время интерфейсы делятся на две основные группы: графические и текстовые. В свою очередь они подразделяются на экранные и многооконные.
? Поскольку пользователь явно предпочитает программы, с которыми удобно работать, в условиях современного жесткого рынка программного обеспечения большинство коммерческих программ снабжаются удобными, «интуитивно понятными» интерфейсами.
? Наличие хорошего, удобного интерфейса не только облегчает работу с программой, но и повышает производительность работы и понижает утомляемость пользователя. Следует также отметить такое понятие, как «унифицированный интерфейс». Унифицированный (т.е. стандартизированный) интерфейс основан на некоторых соглашениях (зачастую негласных) между разработчиками программного обеспечения, определяющих стиль интерфейса. Современные операционные системы предлагают разработчикам мощные встроенные средства по построению унифицированных интерфейсов пользователя, что позволяет разработчикам не тратить усилия на создание собственного интерфейса, а предлагать пользователю уже знакомый ему, унифицированный, интерфейс операционной системы.
? Кроме непосредственно окон в таких интерфейсах применяются стандартизированные элементы управления. Зачастую, для различных графических подсистем этот набор элементов различается. Но все же существуют определенные элементы, которые применяются практически во все типах многооконных графических пользовательских интерфейсов.
? Перечислим эти основные элементы:
? меню (как выпадающее, так и контекстное);
? кнопки (с надписями, пиктограммами и комбинированные);
? выпадающие поля выбора и списки выбора;
? поле ввода текста;
? линейки прокрутки;
? области выбора значений (как одного из многих, так многих из многих).
Кроме этих элементов, различные реализации графических пользовательских интерфейсов имеют свои расширения и особенности отличные от других реализаций. Поэтому при разработке мультиплатфоменных программ необходимо принимать решение об использовании того или иного интерфейсного элемента не только в зависимости от его функциональности, но и наличия его реализации для всех разрабатываемых платформ.
К сожалению, существующие реализации графических интерфейсов операционных систем (а следовательно и большинства программ созданных для этих систем) не являются оптимальными с точки зрения психологии.
Например, такой интерфейсный элемент как линейка прокрутки находится в противоречии с одним из основных принципов психологии восприятия: у человека может быть только одна точка активного внимания. При использовании же линейки прокрутки приходится смотреть в две совершенно различные точки – на прокручиваемое изображение и на линейку. Всем знакомые неприятности с непопаданием мышью в нужную точку при прокрутке или с «соскакиванием» мыши с линейки – очевидное следствие вышеуказанного противоречия.
Но с другой стороны многооконный графический интерфейс с вышеперечисленными элементами управления уже является настолько распространенным, что при разработке интерфейса приложений необходимо учитывать то, что многие стандартизированные элементы существующих интерфейсов обрабатываются пользователем на уровне подсознания.
Кроме того, немалую роль при адаптации пользователя к программному интерфейсу играет использование пиктограмм, т.е. графических изображений, характеризующих выполняемое элементом управления действие аналогией из реального мира. Например, пиктограмма изображающая открытую дверь и расположенная на кнопке, служит ярким примером того, когда реальный объект «раскрытая дверь» (выход) характеризует выполняемое кнопкой действие выхода из программы.
Использованием метафорных изображений достигается сразу несколько целей. Во-первых, пользователю легче понимать и интерпретировать изображение на экране. Во-вторых, ему не нужно каждый раз заглядывать в руководство, чтобы узнать, как выполняется то или иное действие.
Для того чтобы создавать для людей наиболее комфортные условия работы и жизни была создана такая наука как эргономика. Существуют два основных направления работы эргономики: физическая и психологическая.
В то время как физическая эргономика занимается изучением соответствия функций системы физиологическим процессам человека, психологическая эргономика занимается изучением соответствия функций системы психологическим процессам человека. Пользователь, который физически не может различить символы из-за бликов или плохого контраста, ощутит физический дискомфорт. Пользователь, который может прочесть текст, но не может понять его смысл из-за непонятных слов или непривычной формы представления текста, ощутит психологический дискомфорт. Нет смысла прилагать усилия для создания условий, когда у пользователя не болит спина и не устают глаза, если от сообщений системы его голова пойдет кругом. На этот аспект работы систем, получивший название диалога, разработчики программного обеспечения могут повлиять как в положительную, так и в отрицательную сторону.
Таким образом, интерфейс пользователя и его взаимоотношения с человеком являются отдельным и очень важным компонентом любой вычислительной систем. Поэтому, при разработке пользовательского интерфейса представленной здесь АСБУ, прилагались максимальные усилия, чтобы сделать его как можно более дружественным к пользователям.
5.3. Техническая безопасность и экологические аспекты работы
Основными направлениями государственной политики в области охраны труда являются признание и обеспечение приоритета жизни и здоровья работников по отношению к результатам производственной деятельности предприятия.
Учитывая этот фактор, а также ряд требований, предъявляемых к условиям работы, все сотрудники не задействованные непосредственно на производстве, работают в отдельно стоящем административном здании. Удаленность здания от основных производственных цехов на расстояние более 1 км дает гарантию полного отсутствия такого физически опасного и вредного производственного фактора, как повышенный уровень шума.
Работа на персональном компьютере относиться к работе по обслуживанию электрооборудования не электротехническим персоналом и должна вестись с соблюдением правил техники безопасности и технической эксплуатации электроустановок потребителей. Правила эксплуатации конкретных устройств (дисплеев, принтера и т.д.) изложены в соответствующих инструкциях поставляемых с этими устройствами. Все сотрудники работающие с ЭВМ должны быть ознакомлены с инструкцией по работе с данным оборудованием, что документально подтверждено приказом руководства. Работники обязаны соблюдать следующие правила:
1) при появлении запаха или дыма устройство должно быть выключено и должен быть вызван специалист отдела компьютерного обеспечения;
2) запрещается пользователю самостоятельно вскрывать корпус: (принтера для извлечения замятой бумаги, дисплея – для регулировки изображения, клавиатуры – для извлечения запавшего предмета, системного блока – для модернизации внутренней архитектуры);
3) запрещается ставить предметы с жидкостью на корпус дисплея, системного блока, принтера, а также в близи клавиатуры и манипулятора типа “мышь” или коврик;
4) необходимо включать и выключать компьютер только по схеме разрешенной специалистом отдела компьютерного обеспечения;
5) без вызова специалиста нельзя производить отделение компьютерных составляющих (дисплей, клавиатура, манипулятор типа “мышь”). В случае экстренной необходимости это нужно выполнить на выключенном компьютере и вынутой из розетки сетевой вилки;
6) нельзя отключать кабель локальной вычислительной сети (даже при выключенном состоянии компьютера) от компьютера, не согласовав свой действия с отделом компьютерного обеспечения, так как это может привести к потере сетевых данных на других компьютерах;
7) запрещается закрывать решетчатую поверхность дисплея предметами (например, лист бумаги, книги, тетради и т.д. ), т.к. все это приводит к перегреванию и выходу из строя;
8) запрещается всем пользователям локальной вычислительной сети самостоятельно устанавливать различные программные компоненты (игры, заставки и т.д.), не согласовав свои действия с отделом компьютерного обеспечения. Это может привести к заражению компьютера вирусами (а также всех компьютеров, находящихся в сети), которые разрушают файловую систему и базу данных.
Помещение, в котором находится рабочее место пользователя, имеет следующие характеристики:
? длина помещения: 4 м;
? ширина помещения: 4 м;
? площадь помещения 16 м2 (рис. 5.1.);
? высота помещения: 3.5 м;
? число окон: 1;
? число рабочих мест: 2;
? количество компьютеров: 2 компьютера на 16 м2 и объемом 56 м3 (согласно госту не менее 6 м2 и 20 м3 на одно рабочее место);
? освещение: естественное и общее искусствен¬ное;
? вид выполняемых работ: непрерывная работа с автоматизированной системой учета услуг предоставляемых предприятием ;
влажность воздуха не превышает 70%, что соответствует инструкции;
? освещённость экрана, Лк 200.
Отделка внутреннего интерьера осуществляла строительная фирма с предоставлением сертификатов качества на весь отделочный материал. В помещениях установлена противопожарная сигнализация, имеются огнетушители.
В системе мер, обеспечивающих благоприятные условия труда, большое место отводится эстетическим факторам: оформление производственного интерьера, оборудования, применение функ¬циональной музыки и др., которые оказывают определённое воздействие на организм человека. Важную роль играет окраска помещений, которая должна быть светлой.
Развитию утомляемости на производстве способствуют следующие факторы:
? неправильная эргономическая организация рабочего места, нерациональные зоны размещения оборудования по высоте от пола, по фронту от оси симметрии и т.д.;
? характер протекания труда. Трудовой процесс организован таким образом, что оператор вынужден с первых минут рабочего дня решать наиболее сложные и трудоёмкие задачи, в то время как в первые минуты работы функциональная подвижность нервных клеток мозга низка. Важное значение имеет чередование труда и отдыха, смена одних форм работы другими.
В настоящее время для обеспечения комфортных условий используются как организационные методы, так и технические средства, среди которых вентиляция воздуха.
Рис. 5.1. Схема помещения абонентского отдела
Выводы
1. C помощью анализа интерфейсов существующих программных продуктов были изучены и определены общие принципы построения интерфейсов.
2. Был спроектирован и программно реализован довольно понятный, унифицированный, удобный пользовательский интерфейс с учетом эргономических принципов проектирования.
3. Так как работа оператора не связана с решением крупных логических задач и достаточно однообразна, то рекомендуется по-возможности чередовать виды деятель¬ности.
4. Необходимо в течение 8-ми часового рабочего дня предусмотреть один часовой перерыв на обед, 5-ти минутные перерывы каждые полчаса и 15-ти минутные перерывы каждые 1.5 – 2 часа. Работу необходимо организовать таким образом, чтобы наиболее сложные задачи решались с 11:00 до 16:00 – в период наибольшей активности человека, а не в начале дня, когда оператор ещё не достиг максимальной активности, и не в конце дня, когда уже развивается утомление.
6. ЭКОНОМИКО-ПРАВОВЫЕ ВОПРОСЫ ИСПОЛЬЗОВАНИЯ РАЗРАБОТАННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
При разработке программного продукта очень важным параметром является экономическая эффективность. Проекты, которые имеют высокую экономическую эффективность, способны реально существовать и развиваться.
6.1.Экономическая эффективность разработанного ПО
К основным показателям экономической эффективности относятся:
• экономический эффект;
• коэффициент экономической эффективности капитальных вложений;
• срок окупаемости капитальных вложений.
Эффективность – одно из наиболее общих экономических понятий, не имеющих единого общепризнанного определения. По распространенному мнению, это одна из возможных характеристик качества системы, а именно ее характеристика с точки зрения соотношения затрат и результатов функционирования системы.
Экономический эффект – результат внедрения какого-либо мероприятия, выраженный в стоимостной форме, в виде экономии от его осуществления. Для организации или предприятий, использующих программные продукты, основными источниками экономии являются:
• улучшение показателей их основной деятельности, происходящее в результате использования ПО;
• сокращение сроков освоения нового программного продукта за счет улучшения эргономических характеристик;
• сокращение расхода машинного времени и других ресурсов на отладку и сдачу задач в эксплуатацию.
Расчет затрат на разработку проекта.
Затраты на разработку проекта программистом:
К=Кп+Кр ,
где Кп – капитальные вложения на проектирование
К¬р – капитальные вложения на реализацию;
Суммарные затраты на проектирование системы и разработку программы:
Кп=SUM tpi*Зoi*[(1+Wд)*(1+Wс)+Wн] ,
где tpi – время, затраченное на разработку данного ПП работником i-й категории, человеко-месяц = 2;
Зoi – заработная плата разработчика i-й категории, руб./месяц;
Wд – коэффициент, учитывающий дополнительную заработную плату, затраченную на разработку, в долях к основной заработной плате = 0,3;
Wс – коэффициент, учитывающий начисления органом социального страхования на заработную плату разработчиков, в долях к сумме основной и дополнительной заработной платы = 0,385;
Wн – коэффициент, учитывающий накладные расходы организации, в долях или % основной заработной плате разработчиков, принимается по фактическим данным = 0,15;
Зoi=SUM Зднi*Ti ,
где Зднi – среднедневная заработная плата рабочего i-й категории, руб./день = 100 р/д;
Ti – трудоемкость работ, выполняемых проектировщиком i-й категории, чел./день Затраты времени на разработку системы по каждому исполнителю принимаются, исходя из его нагрузки по календарному графику выполнения работ. Данные по расчету основной заработной платы проектировщика рассчитываются, исходя из 18 рабочих дней в месяце;
Зoi = 100*18 = 1800 руб.
Ввиду того, что разработанный ПП должен быть отлажен на ЭВМ, к суммарным затратам на разработку необходимо добавить еще и затраты на использование машинного времени:
tмо*Sмч*Км ,
где tмо – машинное время ЭВМ, необходимое для отладки ПП, ч. = 100;
Sмч – стоимость 1 часа машинного времени на ЭВМ, руб. = 30;
Км – коэффициент мультипрограммности = 1.
Таким образом, капитальные вложения на проектирование равны:
Кп = 2*1800*(1,3*1,385+0,15)+100*30*1 = 10022
Расчет затрат на реализацию проекта.
Капитальные вложения на реализацию проекта:
Кр=Ко+Кзд+Кпп+Ксв+Киб+Кпк ,
где Ко – затраты на основное и вспомогательное оборудование, руб.;
Кзд – затраты на строительство, реконструкцию здания и помещений, руб.;
Кпп – затраты на приобретение типовых разработок, пакетов, руб.;
Ксв – затраты на прокладку линий связи;
Киб – затраты на создание информационной базы, руб.;
Кпк – затраты на подготовку и переподготовку кадров, руб.;
Затраты на основное и вспомогательное оборудование:
При разработке ПП использовался компьютер следующей конфигурации: Celeron 366, HDD 6,4 Gb, SVGA 8 Mb, 96 Mb RAM, 14» Samsung, клавиатура, мышь и принтер HP LaserJet 6L.
Ко=SUM Цoi*Qi*Yi*(1+KТНi),
Ко=SUM Цбалi*Qi*Yi ,
где Цoi – оптовая цена i-го оборудования, руб.;
Цбалi – балансовая стоимость i-го вида технических, используемых для решения i-й задачи = компьютер – 20500 руб., принтер – 8000 руб.;
Qi – количество единиц i-го оборудования;
Yi – коэффициент загрузки i-го вида оборудования, при обработке информации по задаче;
KТНi – коэффициент, учитывающий затраты на транспортировку, монтаж и наладку оборудования i-го вида;
Yi=Тij/Фэфj ,
где Фэфj – эффективный годовой фонд времени работы технического средства j-го вида, = компьютер – 864 ч./год, принтер – 8,6 ч./год;
Тij= tij*Ui ,
где tij – трудоемкость однократной обработки информации по i-й задаче на j-м виде технических средств, часов машинного времени = компьютер – 0,03, принтер – 0,017;
Ui – частота (периодичность) решения i-ой задачи, раз/год = компьютер – 3000, принтер — 50;
Тi1=0.03*3000=90 ч
Тi2=0,017*50=0,85 ч
Y1¬=90/864=0,104
Y1=0,85/8,6=0,099
Ко=((20500*1*0,104)+(8000*1*0,099))=2132+792=2924 руб.
Так как строительство, реконструкция здания и помещений не производились, то:
Кзд=0 ;
Затраты на приобретение типовых разработок не производились:
Кпп=0;
Затраты на создание информационной базы:
Киб=0;
Затраты на подготовку и переподготовку кадров:
Кпк=SUM tni*Зoi[(1+Wд)*(1+Wс)+Wн],
где tni – время, затрачиваемое на подготовку работника i-й категории к эксплуатации системы, = 5 дней;
Зoi – основная заработная плата работника i-й категории, = 200 руб./день;
Кпк=5*100[(1+0,3)*(1+0,385)+0,15]=975,25 руб.;
Кр=2924+0+0+0+975,25=3899,25 руб.
Суммарные затраты на разработку проекта:
К=10022+3899,25=13921,25 руб.
Расчет эксплуатационных затрат.
Эксплуатационные затраты рассчитываются как:
Стек=Сзп+Са+Сз+Срем+См+Сн,
где Сзп – затраты на основную и дополнительную заработную плату, с исчислением во внебюджетные фонды, руб.;
Са¬ – амортизационные отчисления от стоимости оборудования и устройств системы, руб.;
Сз – затраты на силовую электроэнергию, руб.;
Срем – затраты на текущий ремонт оборудования и устройств системы, руб.;
См – затраты на материалы и машинные носители, руб.;
Сн – накладные расходы ВЦ, руб.;
Эксплуатацию разработанной системы осуществляет специалист. Затраты на заработную плату основную и дополнительную с отчислениями на социальное страхование производственного персонала рассчитываются по формуле:
Сзп=SUM (tэi*зoi*(1+0,1)*(1+0,2)) ,
где tэi – время, затрачиваемое в процессе эксплуатации системы работником i-й квалификации, дн. = 18;
зoi – среднедневная заработная плата оператора — бухгалтера, руб. = 200;
Сзп=18*100*1,01*1,02=1854,36 руб.
Эксплуатация системы производится ежедневно по 4 раза в день,
Са=0,1*SUM(Цбалj*аj*gj*tpj)/Фэфj ,
где Фэфj – эффективный фонд времени работы оборудования;
Цбалj – балансовая стоимость j-го вида оборудования,. = компьютер – 20500 руб, принтер – 8000 руб;
аj – норма годовых амортизационных отчислений для j-го вида оборудования, % = 10;
gj – количество единиц оборудования j-го вида.
tpj – время, затраченное на разработку, = 90*4=360 ч.;
Фэфj=Dp*Hэ,
Dp – количество рабочих дней в году = 216 дней;
Hэ – норматив среднесуточной загрузки = 8 ч.;
Фэфj=216*8=1728 ч.
Са=0,1*(((20500*0,1*1*360)+(8000*0,1*1*360))/1728)=59,375 руб.
Затраты на силовую энергию рассчитываются пол формуле:
Сз=SUM (Nj*tpi¬*gi*Tз) ,
где Nj – установленная мощность j-го вида технических средств, кВт = компьютер – 0,35, монитор – 0,44, принтер – 0,33);
gi=коэффициент использования установочной мощности оборудования = компьютер – 1, монитор – 1, принтер – 0,1;
Tз – 0,48 руб/кВт*ч;
Сз=((0,35*360*1*0,48)+(0,44*360*1*0,48)+(0,33*360*0,1*0,48))=142,21 руб.;
Затраты на текущий ремонт оборудования:
Срем=SUM ((Hpi*Цбалj*tpi)/Фэф) ,
где Hpi – норматив затрат на ремонт = 0,05;
Срем=((0,05*20500*360)/1728)+((0,05*8000*360)/1728)=296,542 руб.;
Затраты на материалы и машинные носители
См=0;
Накладные расходы включают затраты на содержание административно управленческого персонала, содержания помещений и т.д. Коэффициент накладных расходов от прямых затрат составляет 15%:
Сн=0,15*(1854,36+59,375+142,21+296,842+0)=352,91 руб.;
Стек=1854,36+59,375+142,21+296,842+352,91=2705,69 руб.
Для расчета показателей экономической эффективности нам для сравнения необходим базовый вариант. В качестве базового варианта принимаются эксплуатационные затраты учета хозяйственных операций для абонентского отдела ООО «ХТЭК» до автоматизации..
Обоснование эффективности разработанной системы.
До создания программного продукта обрабатывалось около 100 единиц документов ежемесячно, при этом затраты составляли 2450 рублей.
После внедрения созданного программного продукта обрабатывалось около 200 единиц документов при той же заработной плате, затраты при использовании средств автоматизации стали составлять до 2705,69 руб.
Определим стоимость 100 единиц документов, обрабатываемых с помощью разработанного программного продукта:
Обработка 100 документов со средствами автоматизации равна 2705,69/200*100=1353руб., т.е. экономия составляет 2450-1353=1907 руб. в месяц.
Далее найдем срок окупаемости созданного программного продукта, из которого определим его экономическую эффективность.
Экономический эффект рассчитывается по формуле:
Эз=(Зт1-Зт2)+Енвт*К,
где Зт1 – приведенные затраты на единицу работ, выполняемых без использования средств автоматизации, руб.;
Зт2 – приведенные затраты на единицу работ, выполняемых с помощью проектируемого варианта, руб.;
К – капитальные вложения на разработку, руб. =13921 руб.
Енвт – нормативный коэффициент эффективности = 0,16;
Таким образом, взяв за единицу работ 100 документов, получаем
Зт1 – 2450 руб.
Зт2 – 1353 руб.
Эз=(2450-1353)+0,16*13921=3324
Коэффициент экономической эффективности рассчитывается
Ер=(Зт1-Зт2)/К=(2450-1353)/3324=0,33
Расчетный срок окупаемости капитальных вложений в разработку:
Тр=1/ Ер=1/0,33=3 года
Так как Тр меньше нормативного срока окупаемости (Тнорм=6,25 лет), то разрабатываемая программа достаточно эффективна.
6.2 Правовые аспекты использования разработанного ПО
В настоящее время основ¬ной формой правовой охраны является авторское право. Этот вид охраны при¬знан во всех развитых странах, подписавших Бернскую конвенцию об охране ли¬тературных и художественных произведений.
На основании Закона РФ «О правовой охране программ для электронных вычислительных машин и баз данных» (Закон о ПрЭВМ и БД) и Закона РФ «Об авторском праве и смежных правах» (Закон об АП и СП) программы для ЭВМ отнесены к категории объектов, представляющих собой литературные произведения, а базы данных приравнены к сборникам (энциклопедиям, антологиям) .
Современное законодательство достаточно четко регламентирует правовые аспекты охраны программ для ЭВМ.
В соответствии со статьей 9 закона об АП и СП, авторское право на произведение возникает в силу самого факта его создания — с того момента, когда оно воплощается в конкретную форму. При этом не требуется соблюдения каких-либо формальностей, например регистра¬ции или депонирования. Авторским правом охраняется любое произведение, создан¬ное в результате творческого труда. Произведение считается имеющим творческий характер, пока не доказано обратное, что сделать достаточно трудно в связи с отсут¬ствием объективных критериев оценки творческого характера деятельности.
Для появления авторских прав не требуется каких-либо материальных зат¬рат, достаточно создать произведение. Под действие авторско-правовой охраны под¬падает любая программа для ЭВМ или БД, созданная в результате творческого труда, независимо от ее назначения, достоинств и степени работоспособности. Однако наличие авторских прав, не защищает от заимствования идей и принципов, заложенных в основу программы для ЭВМ или БД, которые часто пред¬ставляют собой достаточно ценную часть произведения, а также не обеспечивает эф¬фективную защиту подобной программы от небуквального копирования. Такие нюансы могут компенсироваться в случае применения па¬тентного права и режима коммерческой тайны к конкретным объектам.
В соответствие с законом РФ о ПрЭВМ и БД (ст. 9) к личным неимущественным правам относятся: право авторства, право на имя, право на неприкосновенность (целостность) произведения.
Действующий Закон об АП и СП добавляет автору (разработчику программы) еще две возможности, относящихся к личным авторским правам: право на обнародование, право на отзыв.
Право авторства закрепляется за лицом (лицами), творческим трудом которо¬го (которых) создана программа для ЭВМ или БД, и заключается в праве считаться автором данного произведения. Ссылаясь на это право, автор может требовать в суде защиты своих интересов, если его авторство не признается, присвоено другим лицом или приписывается другому лицу.
Право на имя – это право автора использовать или разрешать использовать про¬изведение под именем автора, его псевдонимом либо анонимно, что предоставляет автору возможность выбора способа указания своего имени. Автор компьютерной программы или БД может реализовать свое право на указа¬ние имени, сделав так, чтобы оно высвечивалось на экране компьютера при каждой загрузке программы, а также поместив его в сопроводительной документации, на¬пример Руководстве пользователя, и на упаковке, используемой при продаже компь¬ютерной программы или БД. Никто не имеет права без согласия автора выбирать спо¬соб указания его имени.
Право на обнародование программы для ЭВМ – право автора самостоятельно или, предоставив кому-либо соответствующие полномочия, впервые сделать произ¬ведение доступным для ознакомления неопределенному кругу лиц. Под неопреде¬ленным кругом лиц понимается неограниченное какими-либо условиями коли¬чество людей.
Произведение, признанное коммерческой тайной (ноу-хау), не может быть обна¬родовано. При создании подобного произведения автор реализует свое право на обнародование, не осуществляя его самостоятельно и не разрешая сделать это тре¬тьим лицам, либо разрешая правообладателю сделать произведение общедоступным в любое удобное для последнего времени.
Право на отзыв – это право автора отказаться от ранее принятого решения об обнародовании произведения при условии возмещения пользователю причи¬ненных таким решением убытков, включая упущенную выгоду. Причем автор не должен обосновывать свое требование об отзыве. Если произведение уже было обнародовано, автор обязан публично оповестить о его отзыве. При этом он впра¬ве изъять за свой счет из обращения, ранее изготовленные экземпляры произве¬дения.
Лишены права на отзыв только авторы служебных произведений. Авторы ком¬пьютерных программ или БД, которые создали свои произведения не в рамках служебных обязанностей и не в соответствии с заданием работодателя, даже в случаях, когда им не принадлежат имущественные права на программу, могут реализовать право на отзыв при условии возмещения пользователю понесен¬ных от этого убытков с учетом упущенной выгоды.
Таким образом, личные неимущественные права или авторские права на ПП принадлежат разработчику, Васильевой О. А.
Личные неимущественные права принадлежат автору, независимо от того, кому принадлежат имущественные права.
Имущественные права на программу для ЭВМ и БД представляют собой совокуп¬ность правомочий, которые могут в полном объеме или частично (в период дей¬ствия авторских прав) продаваться и покупаться, передаваться в дар, сдаваться в аренду.
В Законе о ПрЭВМ и БД (ст.10) к имущественным относятся права на осуществле¬ние или разрешение следующих действий:
Выпуск в свет программы для ЭВМ или базы данных.
Воспроизведение программы для ЭВМ или БД (полное или частичное) в любой форме, любыми способами.
Распространение программы для ЭВМ или БД.
Модификацию программы для ЭВМ или БД, в том числе ее перевод с одного языка на другой.
Иное использование программы для ЭВМ или БД.
Таким образом, имущественные права на ПП принадлежат ООО «ХТЭК».
Вопрос передачи прав на использование программы между разработчиком и работодателем регулируется гражданским законодательством, а в некоторых случаях, в части ответственности за нарушение авторских прав, — административным и уго¬ловным законодательством. Трудовое право не содержит норм, позволяющих в его рамках передать права на использование произведения работодателю.
Исходя из текста ст. 14 Закона РФ об АП и СП произведение попадает в катего¬рию «служебных» только, когда оно создано в рамках трудовых отношений на основании слу¬жебного задания работодателя или служебных обязанностей автора, в которых должно быть четко и наиболее подробно указано, какое именно произведение создается. Заработная плата, премия и другие формы оплаты, полученные в рамках трудовой деятельности, не могут рассматриваться как аргумент в пользу работодателя (если это не описано в договоре или не имеет другого документального подтверждения).
Также, переход авторских прав установлен только в ст. 29 Закона об АП и СП. В соответствии с этой статьей, законом установлено только одно правило перехода авторских прав от автора к другим лицам — это переход этих прав только к наследникам.
Для того чтобы между работодателем и автором программы не возникало таких сложных ситуаций, в существующем законодательстве предусмотрено заключение между этими сторонами договора. Под «договором», понимается как авторский договор в виде отдельного текста, так и другие документальные свидетельства, позволяю¬щие установить достижение сторонами договоренностей по каким-либо граждан¬ско-правовым вопросам, связанным с этим произведением, то есть содержащим условия сделки. В таком качестве может выступить и трудовой (смешанный) дого¬вор, если он содержит элементы сделки.
Таким образом, правом на использование ПП обладают ООО «ХТЭК» и ХГУ им. Н.Ф.Катанова.
Выводы
1. В процессе разработке программы проводились расчеты экономической эффективности разработанного программного обеспечения, которые показали, что в отношении экономической эффективности, выгоднее разрабатывать собственное ПО, чем закупать в других фирмах.
2. Срок окупаемости затрат составляет 3 года, что подтверждает эффективность вложения финансовых средств в данный ПП.
3. Рассмотрение правовых аспектов разработанного программного обеспечения позволяет выделить права на использование программного продукта: разработчику программного обеспечения принадлежат авторские, личные неимущественные права принадлежат заказчику, права на использование принадлежит ООО «ХТЭК» и ХГУ, так как программа относится к дипломной работе.
ЗАКЛЮЧЕНИЕ
1. Разработано программное обеспечение, автоматизирующее деятельность абонентского отдела ООО «ХТЭК», которое позволяет: освободить работников от рутинной работы, заменить бумажные носители данных на электронные; уменьшить вероятность ошибок в процессе работы; получать отчеты; увеличить производительность труда; уменьшить затраты на деятельность отдела по работе с клиентами.
2. Тестирование и опытная эксплуатация показала, что разработанный программный продукт является весьма качественным и надежным. Количество ошибок сведено к минимуму и на основную работу программы они не влияют.
3. В процессе выполнения дипломного проекта изучены информационные и финансовые потоки ЗАО «ХТЭК».
4. Детально изучены основные принципы бухгалтерского учета на предприятии, необходимые для эффективной автоматизации данного процесса.
5. На основании проведенного исследования рынка бухгалтерских программ РФ для решения поставленных задач выбрана среда программирования 1С. 1С это — недорогой, гибко — конфигурированный, легко настраиваемый под специфику предприятия и постоянно обновляемый программный продукт.
6. Была разработана структура ввода, хранения и использования документов, а также анализ вводимой информации.
7. Были разработаны документы и отчеты, соответствующие стандарту бухгалтерской отчетности РФ.
8. Была оптимизирована работа абонентского отдела по учету услуг.
9. ИС бухгалтерского учета была разработана с минимальными денежными затратами.
10. Обучение персонала для работы в новой ИС заняло немного времени.
11. Применение информационной системы учета помогает сократить время для составления отчетности и более эффективно использовать рабочее время, что, в свою очередь, благотворно влияет на рентабельность предприятия.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. С.А.Харитонов. Компьютерная бухгалтерия 7.7 в системе гибкой автоматизации бухгалтерского учета: – М.:1С, 2001, — 542 с.
2. Байдаков В., Борун А., Федоров Б. 1С:Предприятие 7.7. Конфигурирование и администрирование: В. 2т. – М.:1С, 2001, – т.1. — 396 с.; т.2. – 388 с.
3. Байдаков В., Борун А., Федоров Б. 1С:Предприятие 7.7. Бухгалтерский учет. Руководство пользователя. – М.:1С, 2000, — 458 с.
4. Глушков И.Е. Бухгалтерский учет на современном предприятии: Эффективное пособие по бухгалтерскому учету. М.: КНОРУС, Новосибирск: ЭКОР, 2001. – 797 с.
5. Байдаков В., Борун А., Федоров Б. 1С:Предприятие 7.7. Описание встроенного языка: В. 2т. – М.:1С, 2001,– т.1. — 453 с.; т.2. – 456 с.
6. Федеральный Закон Российской Федерации «О бухгалтерском учете» от 21.11.96 г. № 129 – Федеральный Закон (с изменениями и дополнениями от 23.07.98 г. № 123).
7. Антонин Р.Н.. Основы бухгалтерского учета. — М: Москва, 1995. — 190с.
8. Аглицкий И.С. Комплексная автоматизация управления предприятием: от заказных разработок к тиражируемой системе // Эксперт автоматизации 1997.№12. — 75с.
9. Аглицкий И.С. Информационные технологии и бизнес // Эксперт автоматизации 1997.№29. — 75с.
10. Комлев Н.Н. Результаты опроса посетителей выставки «Бухучет и аудит 2002». http://www.finsoft.ru/analitika.shtml
11. Антошкин А.Н. Возможности 1С. http://www.klerk.ru/soft/1C
12. 1С:Предприятие 7.7 Конфигурирование и администрирование. Часть1 — М: Фирма «1С».1999г. — 396с.
13. 1С:Предприятие 7.7 Основы встроенного языка. Часть1, М: Фирма «1С».1999г. — 453с.
14. Инструкция по условиям эксплуатации компьютерной техники РА Реал Плюс от 29.06.1999 г.
15. Инструкция по технике безопасности при работе с компьютером РА Реал Плюс от 29.06.1999 г.
16. Шкарина Л.Н. Методические рекомендации по выполнению научно-исследовательских работ для студентов информационных специальностей.//Абакан 2003.
17. В.П. Котляров, Д.В. Пинаев. Методы и средства автоматизации тестирования программного проекта. Учебное пособие. – Санкт-Петербург.: Издательство Санкт-Петербургского государственного технического университета, 1998 г.
18. Модели жизненного цикла ПО. http://www.citforum.ru/ database/case/glava1_2.shtml.
19. Международные стандарты, поддерживающие жизненный цикл программных средств. М., МП «Экономика», 1996.
20. Основы методологии проектирования ИС. http://www.citforum.ru/ database/case/glava1_1.shtml.
21. ГОСТ 12.1.003-83. ССБТ. Шум. Общие требования безопасности.
22. ГОСТ 12.1.005-88. ССБТ. Воздух рабочей зоны. Общие санитарно-гигиенические требования.
23. СНиП 2.04.05-86. Отопление, вентиляция и кондиционирование.
24. ГОСТ 12.2.032-78. ССБТ. Рабочее место при выполнении работ сидя. Общие эргономические требования.
25. ГОСТ 22269-76. Система «человек-машина». Рабочее место оператора. Взаимное расположение элементов рабочего места. Общие эргономические требования.
26. ГОСТ 12.1.006-84. ССБТ. Электромагнитные поля радиочастот. Общие требования безопасности.
27. Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работы. СанПиН 2.2.2.542-96 (Утверждены и введены в действие Постановлением Госкомсанэпиднадзора России от 14 июля 1996 г. N14.).
ГЛОССАРИЙ
База данных – совокупность сведений о конкретных объектах реального мира в какой-либо предметной области.
Жизненный цикл программ — этапы развития от возникновения потребности в программе до полного прекращения ее использования вследствие морального старения.
Запрос — процесс извлечения данных из базы данных и их представления в пригодном для использования виде.
Информационная система — взаимосвязанная совокупность средств, методов и персонала, используемых для хранения, обработки и выдачи информации, необходимой в процессе принятия решений задач из любой области.
Предметная область — часть реального мира, подлежащего автоматизации в ходе ее изучения.
Экономический эффект – результат внедрения какого-либо мероприятия, выраженный в стоимостной форме, в виде экономии от его осуществления.
Эффективность – это одна из возможных характеристик качества системы, а именно ее характеристика с точки зрения соотношения затрат и результатов функционирования системы.
Конфигурация – настройка системы 1С:Предприятие 7.7 на работу в определенной области.
Объект исследования – это процесс или явление, порождающее проблемную ситуацию и избранное для изучения.
Приложение — как правило, приложением называют программный продукт, разработанный для операционной системы.
Реквизиты – обязательные данные, которые должны содержаться в первичном документе.
Тестирование – это процесс функционирования системы или компоненты в заранее определенных условиях, записи и анализа результатов функционирования и оценки свойств системы или компоненты
СПИСОК АББРЕВИАТУР
SADT — Structured Analysis and Design Technique
ЖЦ – жизненный цикл
ИС – информационная система
ПО – программное обеспечение
ЗАО – закрытое акционерное общество
АСБУ – автоматизированная система бухгалтерского учета.
DFD – Data Flow Diagrams
АП – авторское право
ХГУ – Хакасский Государственный Университет
ИБ – информационная база
АСУ – автоматизированная система учета
ПРИЛОЖЕНИЯ
П. 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
Основание для разработки
Основанием для разработки программы «АСУ хозяйственных операций абонентского отдела» является Договор, заключенный с Обществом с Ограниченной Ответственностью «Хакасский Тепло Энерго Комплекс» от 10 февраля 2004 года.
Назначение разработки
Назначением программы является автоматизация регистрации абонентов, оформления документов, формирование отчетов.
Состав выполняемых функций
ПС должно выполнять следующие функции:
— функции по работе с базой (добавлять, редактировать, удалять и т.д.);
— выполнять поиск по базе;
— вычислять необходимые значения для отчётов;
— формировать отчётные данные для отчётов;
— просматривать готовые отчёты;
— распечатывать и/или сохранять отчёты.
Требования к функциональным характеристикам
Разрабатываемая программа должна обладать следующими функциями:
Программа должна работать под операционной системой Windows 98, с возможностью ее переноса в будущем на операционные системы Windows NT/Me/2000/XP
Программа должна иметь понятный интерфейс пользователя.
Программа должна быть проста в установке и настройке.
Требования к входным и выходным данным
Входные данные:
Основным документом для входных данных служит регистрационная карточка абонента.
Требования к входным данным:
Входные данные должны быть достаточно полны для создания отчетов и для требований налоговой инспекции. Налоговая инспекция требует практически все сведения, которые позволяет заносить программа. При попытке ввода некорректных данных выдается соответствующее сообщение.
Выходные данные:
Выходными данными служат ключевая информация об абоненте, отчеты.
Требования к выходным данным:
Вид и структура отчетов и договоров должны отвечать требованиям бланков строгой отчетности.
Требования к надежности
Программа не должна:
1. Вести себя непредсказуемо вне зависимости от действий пользователя.
2. Содержать ошибки в работе (выявляется в процессе тестирования).
3. В общем, надежность программы зависит от надежности операционной системы и корректности вводимой информации. Объективная верность вносимой информации зависит только от человека, вносящего ее и его источников информации.
Условия эксплуатации
1. Программа предназначена для использования абонентским отделом по расчету за услуги с населением и организациями.
2. От несанкционированного доступа программа защищена паролем.
4. При неясностях использования программы должна быть использована справочная система
Требования к составу и параметрам технических средств
1. Процессор Pentium 100 и выше
2. Объем ОЗУ 16 Мб и выше.
3. Количество свободного места на HDD 25 Мб. При заполнении данных требования к дисковому пространству могут повышаться.
Требования к информационной и программной совместимости
Для нормальной работы программы необходим компьютер с установленной операционной системой Windows 98/Me/NT/2000/XP, а также установленная программа 1С:Предприятие.
Требования к программной документации
Эксплуатационная документация.
Для конечного пользователя должно быть «Руководство пользователя», в котором описаны все пункты, касающиеся установки, настройки и использования продукта.
Техническая документация.
Для группы разработчиков (и на случай смены состава группы разработчиков) необходима сопроводительная документация, в которой должны быть отражены основные пункты разработки и иная необходимая информация. Также необходим подробный комментарий к тексту программного кода.
Технико-экономические показатели
Программа применяется ежедневно при регистрации новых абонентов, а также при изменении реквизитов уже существующих.
Стадии и этапы разработки
1. Постановка задачи
2. Исследование предметной области
3. Сбор исходных данных
4. Анализ существующих методов решения задачи
5. Определение функциональных возможностей системы
6. Определение входных и выходных данных
7. Разработка структуры программы
8. Разработка алгоритмов решения задач
9. Написание кода программы
10. Тестирование и отладка
11. Оформление документации
Порядок контроля и приемки
Испытание бета-версии программы и проверка качества приведенной модели будет проведена на компьютере Заказчика с установленными программами Windows 2000, 1С:Предприятие версия 7.7. Бета-версия программы должна позволять выполнять основные функции, поэтому к завершению создания программы у Заказчика уже будут введены исходные данные и можно будет приступать к работе.
Внедрение бета-версии программы состоит из следующих действий
5. Установка программы в систему Заказчика.
6. Проводится испытание на ввод некорректных данных.
7. Вводятся реальные данные за прошедшие периоды.
8. Проводится сравнение результатов работы программы и оператора — бухгалтера.
9. Проверяется полнота и корректность всех отчетов.
10. Установка программы на компьютере Заказчика
11. Обучение группы заранее известных пользователей работе с программой.
П.2. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ
Справочная система, встроенная в конфигурацию полностью повторяет данную инструкция пользователя. Так как 1С предоставляет большое количество базовых функций по работе со справочниками, формами и другими стандартными элементами, то следует описать только то, что реализовано в программе.
Главная форма программы
В главной форме программы пользователю доступны меню и панели инструментов. Из данных меню можно вызвать любое действие программы.
Рис. П.2.1. Главная форма программы
Форма списка справочника Абоненты
Справочником называется объект программы, позволяющий пользователю вводить, хранить и получать информацию, структурируя ее в виде дерева. Справочник представляется списком древовидной структуры, в узлах которого хранится информация о различных объектах. Информация хранится в виде записей, все узлы дерева хранят записи одной структуры, содержащей различные величины. Набор этих величин для каждого справочника произволен за исключением двух строковых величин: кода объекта и значения объекта. Код объекта является уникальным для данного справочника и позволяет ссылаться на этот объект из других мест программы. Значение объекта — произвольная строка, введенная пользователем (обычно это название объекта). Для каждого объекта хранится история изменений значения этого объекта. Список доступных пользователю справочников определяется на этапе настройки конфигурации задачи и впоследствии не изменяется, однако пользователь может редактировать существующие справочники, добавляя и убирая из них информацию.
Рис. П.2.2. Форма список абонентов
Форма ввода сведений о абоненте
Рис. П.2.3. Форма ввода сведений о абоненте
После введения данных об абоненте Справочник следует записать.
Ниже приведены другие формы программы.
Рис. П.2.4. Форма документа оплата списком
Рис. П.2.5. Форма отчета оплаты за 2 квартал
П. 3. ИНСТРУКЦИЯ ПО АДМИНИСТРИРОВАНИЮ
При работе пользователей с системой 1С: Предприятие в сети значение приобретают два вопроса – интеграция и разделение доступа.
Каждый пользователь системы должен иметь свободный доступ к общей информации, а также доступ только к той информации, которая необходима ему для работы, и никак не мог своими неосторожными действиями повлиять на работу других пользователей или на работоспособность системы в целом.
В этом приложении рассмотрены вопросы ведения списка пользователей системы 1С: Предприятие и назначения пользователям наборов прав и интерфейсов.
Ведение списка пользователей.
Список пользователей вызывается на экран выбором функции «Пользователи» из меню «Администрирование» главного меню Конфигуратора. Внешний вид списка пользователей представлен на рисунке П.3.1.
Рис. П.3.1. Внешний вид списка пользователей
Создание нового пользователя
Для создания нового пользователя необходимо выбрать пункт «Новый» в меню «Действия» главного меню конфигуратора. В списке пользователей появится новая строка, а на экран будет выдан диалог для редактирования свойств пользователя. Внешний вид диалога редактирования свойств пользователя представлен на рисунке П.3.2.
Рис. П.3.2. Внешний вид диалога редактирования свойств пользователя
Установка пароля.
С целью предотвращения входа пользователей в систему 1С под чужими именами каждому пользователю, которому разрешена работа с системой, может быть установлен пароль на вход.
Для установки пароля следует выделить в списке пользователей имя пользователя, для которого необходимо установить пароль, и в меню «Действия» главного меню программы выбрать пункт «Изменить пароль» на экран будет выдан запрос для ввода пароля. Внешний вид запроса для смены пароля пользователя представлен на рисунке П.3.3.
Рис. П.3.3. Внешний вид запроса для смены пароля пользователя
Пароль представляет из себя произвольную строку длиной не более 10 символов, состоящую из букв и цифр. Пароль не должен содержать пробелов и специальных символов.
Редактирование свойств пользователя
Свойства пользователя редактируются в палитре свойств «Свойства пользователя», которую можно вызвать на экран двойным щелчком мыши на имени пользователя.
Ниже приведено описание управляющих элементов палитры свойств «Свойства пользователя».
Закладка «Атрибуты»
Закладка «Атрибуты» содержит управляющие элементы для присвоения пользователей краткого и полного имени и указания рабочего каталога. Внешний вид закладки «Атрибуты» представлен на рисунке П.3.4.
Рис.П.3.4. Внешний вид закладки «Атрибуты»
Имя. Поле «Имя» служит для редактирования и присвоения имени пользователя.
Полное имя. В поле «Полное имя» может быть указана расшифровка имени пользователя, указанного в поле «Имя».
Рабочий каталог. В поле «Рабочий каталог» можно указать имя каталога, который будет использоваться для размещения индивидуальных файлов конфигурации и различных временных и служебных файлов, создаваемых системой 1С: Предприятие.
Закладка «Роль»
Управляющие элементы закладки «Роль» служат для выбора наименования пользовательского интерфейса и набора прав, которые будут поставлены в соответствие имени пользователя. Внешний вид закладки «Роль» представлен на рисунке П.3.5.
Рис. П.3.5. Внешний вид закладки «Роль»
Права. В поле «Права» необходимо указать название набора прав пользователя. Набор прав определяет объем информации, с которой может работать указанный пользователь в системе 1С:Предприятие.
Интерфейс. В поле «Интерфейс» можно указать наименование индивидуального пользовательского интерфейса. Такой пользовательский интерфейс включает команды главного меню и панели инструментов, настроенные на работу пользователя с той информацией, доступ к которой разрешен его набором прав.
При работе пользователя с системой 1С:Предприятие указанный интерфейс будет подключен как расширение стандартного интерфейса программы.
Отключить контроль прав. Опция «Отключить контроль прав» позволяет отменить для указанного пользователя контроль доступа к различным видам информации в соответствии с его набором прав.
П. 4. ОПИСАНИЕ ДЕМОНСТРАЦИОННОГО РОЛИКА
Демонстрационный материал к дипломной работе представлен презентацией, необходимой для показа ключевых моментов при защите дипломной работы, и видеороликом, демонстрирующим работу с программой.
Презентация создана с помощью MS Power Point из пакета MS Office 2000. Слайды, представленные в презентации, следуют в таком порядке:
? Титульный слайд. На нём находится информация о названии дипломной работы, а так же об авторе и дипломном руководителе;
? На второмслайде отражены основные цели работы;
? Контекстная диаграмма предметной области;
? Средства разработки;
? Тестирование;
? Архитектура;
? Функциональные возможности;
Видеоролик создан с помощью программы CamStudio 2.0 фирмы RenderSoft. Предлагаемый видеоматериал показывает работу с модулем создания регистрационной карточки и основным модулем программы
П.5 ДОКУМЕНТИРОВАННЫЙ ЛИСТИНГ ПРОГРАММЫ
Листинг главного модуля
////разработка О&x
// версия 300603
//общие процедуры
//************************************************************
// глобальные переменные
Перем ВидСписка Экспорт;
Перем введеноНовоеПоказание Экспорт;
Перем ДатаПоказСчетчика Экспорт;
Перем ОбьемПотрВоды Экспорт;
Перем РасчетПениБыл Экспорт;
// Переменная каталога внешних печатных форм
Перем Параметр экспорт;
Перем глКаталогПечФорм Экспорт;
Перем глИмяДоговораДляПлатежейБезДоговора Экспорт;
Перем глИмяДоговораДляПлатежейБезДоговораТорг Экспорт;
Перем глОбщиеУстановки Экспорт;
//******************************************************************************
// для совместимости с 1с бухгалтерия
// УПРПАВЛЕНИЕ ВИЛИМОСТЬЮ КОЛОНОК В СПРАВОЧНИКАХ
//******************************************************************************
// глУстановитьВидимостьКолонок(Конт, ИдентификаторФормы, НачальныйСписок, ПриОткрытии=0)
// Параметры:
// Конт — контекст формы справочника, из которого вызвана процедура.
// ИдентификаторФормы — уникальный идентификатор формы из которой выполнен вызов, используется
// для сохранения пользовательских настроек.
// НачальныйСписок — список колонок видимость которых подлежит настройке
// ПриОткрытии — признак того что вызов процедуры был сделан при открытии формы
Процедура глУстановитьВидимостьКолонок(Конт, гИдентификаторФормы, НачальныйСписок, ПриОткрытии=0) Экспорт
Перем СписокКолонок, ТекущаяКолонка, ИдКолонки, Колонка;
Если ПриОткрытии=0 Тогда
СписокПараметров= СоздатьОбъект(«СписокЗначений»);
СписокПараметров.ДобавитьЗначение(Конт);
СписокПараметров.ДобавитьЗначение(гИдентификаторФормы);
СписокПараметров.ДобавитьЗначение(НачальныйСписок);
ОткрытьФормуМодально(«Обработка.НастройкаКолонок»,СписокПараметров);
Иначе
СписокКолонок = ВосстановитьЗначение(«СписокКолонок_» + гИдентификаторФормы);
ТекущаяКолонка = ВосстановитьЗначение(«ТекущаяКолонока_» + гИдентификаторФормы);
Если ПустоеЗначение(СписокКолонок) = 1 Тогда
НачальныйСписок.Выгрузить(СписокКолонок);
СохранитьЗначение(«СписокКолонок_» + гИдентификаторФормы, СписокКолонок);
ИначеЕсли ТипЗначенияСтр(СписокКолонок) = «СписокЗначений» Тогда
Если СписокКолонок.ВСтрокуСРазделителями() НачальныйСписок.ВСтрокуСРазделителями() Тогда
НачальныйСписок.Выгрузить(СписокКолонок);
СохранитьЗначение(«СписокКолонок_» + гИдентификаторФормы, СписокКолонок);
КонецЕсли;
КонецЕсли;
Для Сч = 1 По СписокКолонок.РазмерСписка() Цикл
ИдКолонки = СписокКолонок.ПолучитьЗначение(Сч);
Попытка
Колонка = Конт.Форма.ПолучитьАтрибут(ИдКолонки);
Исключение
Сообщить(ИдКолонки);
КонецПопытки;
Если СписокКолонок.Пометка(Сч) = 1 Тогда
Колонка.Видимость(1);
Если ИдКолонки = ТекущаяКолонка Тогда
Конт.Активизировать(ИдКолонки,0);
КонецЕсли;
Иначе
Колонка.Видимость(0);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры // глУстановитьВидимостьКолонок
//******************************************************************************
// глПолноеНаименование(Элемент)
// Параметры:
// Элемент — элемент справочника, для которого нужно вернуть полное наименование
// Возвращаемое значение:
// Строка с полным наименованием.
// Описание:
// Возвращает полное наименование элемента справочника, если у этого вида
// справочников есть реквизит ПолнНаименование.
Функция глПолноеНаименование(Элемент) Экспорт
Если ПустоеЗначение(Элемент) = 1 Тогда
Возврат «»;
ИначеЕсли Метаданные.Справочник(Элемент.Вид()).Реквизит(«ПолнНаименование»).Выбран() = 0 Тогда
Возврат Элемент.Наименование;
ИначеЕсли ПустаяСтрока(Элемент.ПолнНаименование) = 1 Тогда
Возврат Элемент.Наименование;
Иначе
Возврат Элемент.ПолнНаименование;
КонецЕсли;
КонецФункции // глПолноеНаименование()
// УПРАВЛЕНИЕ ПЕЧАТНЫМИ ФОРМАМИ
//******************************************************************************
// глНайтиВнешнююПечФорму(Текст, ТекущийВидОбъекта, Название=»», Кнопка=»»)
// Параметры:
// Текст — Объект типа «Текст», содержащий текст файла описания внешней печатной формы
// ТекущийВидОбъекта — текущий вид объекта («Документ.ПоступлениеТМЦ»),
// запись про который ищем в тексте описания,
// если пусто, то считаем, что позвали для заполнения
// по тексту описания колонок «Название» и «Кнопка»
// Название — необязательноый параметр, переменная для возвращаемого
// значения названия внешней печатной формы
// Кнопка — необязательноый параметр, переменная для возвращаемого
// значения заголовка кнопки печати
// Возвращаемое значение:
// 1- если есть упоминание про текущий вид объекта в тексте описания,
// т.е. данная обработка зарегистрирована для печати по контексту этого объекта,
// 0- если нет
// Описание:
// Определяет данная обработка зарегистрирована для печати по контексту этого объекта
// или нет, попутно заполняет значение колонок «Название» и «Кнопка»
Функция глНайтиВнешнююПечФорму(Текст, ТекущийВидОбъекта, Название=»», Кнопка=»») Экспорт
Перем Рез;
Рез = 0;
Для Инд=1 По Текст.КоличествоСтрок() Цикл
Стр=Текст.ПолучитьСтроку(Инд);
Поз=Найти(Стр,»=»);
Если Поз>0 Тогда
Имя=Лев(Стр,Поз-1);
Стр=Сред(Стр,Поз+1);
Если Имя=»Объект» Тогда
// Если текущий вид объекта не задан, то хотят считать Название и кнопку
Если ПустоеЗначение(ТекущийВидОбъекта) = 0 Тогда
// Найдем в этой строке запись про текущий объект
Если Найти(Стр,ТекущийВидОбъекта) = 0 Тогда;
Прервать // Не нашли;
Иначе
Рез = 1;
КонецЕсли;
КонецЕсли;
ИначеЕсли Имя=»Название» Тогда
Название = Стр;
ИначеЕсли Имя=»Кнопка» Тогда
Кнопка = Стр;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции // глНайтиВнешнююПечФорму()
//******************************************************************************
// глПолучитьТекущуюПечФорму(ВидОбъекта, ТаблицаПечФорм)
// Параметры:
// ВидОбъекта — Вид объекта («Документ.Реализация», «Элемент.Номенклатура» и т.д.),
// для которого надо получить печатную форму по умолчанию
// ТаблицаПечФорм — таблица значений, содержащая список печатных форм для объекта требуемого вида
// Возвращаемое значение:
// Номер строки в таблице печатных форм, 0 в случае ошибки.
// Описание:
// Получает из текущих настроек пользователя номер текущей печатной
// формы и пытается найти его в таблице форм. Если не найдено,
// то берется первая форма и сохраняется в настройках
// пользователя.
Функция глПолучитьТекущуюПечФорму(ВидОбъекта, ТаблицаПечФорм) Экспорт
Перем ИмяПечФормы, НомерСтроки;
НомерСтроки = 0;
Если ТаблицаПечФорм.КоличествоСтрок() > 0 Тогда
ИмяПечФормы = ВосстановитьЗначение(ВидОбъекта + «ПечФорма»);
// пытаемся найти форму в списке
Если ПустоеЗначение(ИмяПечФормы) = 0 Тогда
ТаблицаПечФорм.НайтиЗначение(ИмяПечФормы, НомерСтроки, «Название»);
КонецЕсли;
Если НомерСтроки = 0 Тогда
// текущая печатная форма еще не найдена
// установим по умолчанию первую из списка
ПечФорма = ТаблицаПечФорм.ПолучитьЗначение(1, «Название»);
СохранитьЗначение(ВидОбъекта + «ПечФорма», ПечФорма);
НомерСтроки = 1;
КонецЕсли;
// если задано имя файла, то форма внешняя, а для внешней формы нужно
// проверить наличие файла внешней обработки.
Файл = ТаблицаПечФорм.ПолучитьЗначение(НомерСтроки, «Файл»);
Если ПустоеЗначение(Файл) = 0 Тогда
Если ФС.СуществуетФайл(глКаталогПечФорм + Файл) = 0 Тогда
Предупреждение(«Выбранная обработка в каталоге внешних обработок печатных форм отсутствует!», 60 );
НомерСтроки = 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат НомерСтроки;
КонецФункции // глПолучитьТекущуюПечФорму()
//******************************************************************************
// глВыборПечатнойФормы(ВидОбъекта, ТаблицаПечФорм)
// Параметры:
// ВидОбъекта — Вид объекта («Документ.Реализация», «Элемент.Номенклатура» и т.д.),
// для которого надо получить печатную форму по умолчанию
// ТаблицаПечФорм — таблица значений, содержащая список печатных форм для объекта требуемого вида
// Возвращаемое значение:
// Имя кнопки печатной формы
// Описание:
// Открывает форму выбора из списка печатных форм. Выбранное значение
// сохраняет в настройках пользователя
Функция глВыборПечатнойФормы(ВидОбъекта, ТаблицаПечФорм) Экспорт
Перем НомерСтроки;
НомерСтроки = 0;
КолвоФорм = ТаблицаПечФорм.КоличествоСтрок();
Поз = Найти(ВидОбъекта, «.»);
Вид = Лев(ВидОбъекта, Поз — 1);
Если КолвоФорм = 0 Тогда
Если НРег(Вид) = «документ» Тогда
Текст = «Для документа не зарегистрировано ни одной печатной формы.»;
ИначеЕсли НРег(Вид) = «справочник» Тогда
Текст = «Для списка справочника не зарегистрировано ни одной печатной формы.»;
Иначе
Текст = «Для элемента справочника не зарегистрировано ни одной печатной формы.»;
КонецЕсли;
Предупреждение(Текст, 60);
ИначеЕсли КолвоФорм = 1 Тогда
НомерСтроки = 1;
Если НРег(Вид) = «документ» Тогда
Текст = «Для документа»;
ИначеЕсли НРег(Вид) = «справочник» Тогда
Текст = «Для списка справочника»;
Иначе
Текст = «Для элемента справочника»;
КонецЕсли;
Текст = Текст + » зарегистрирована только одна печатная форма.
|Для регистрации дополнительных печатных форм воспользуйтесь
|пунктом «»Регистрация внешних печатных форм»» в меню «»Сервис»».»;
Предупреждение(Текст ,60);
Иначе
ИмяПечФормы = ВосстановитьЗначение(ВидОбъекта + «ПечФорма»);
// выбираем печатную форму
СписокПечФорм = СоздатьОбъект(«СписокЗначений»);
ТаблицаПечФорм.Выгрузить(СписокПечФорм,,,»Название»);
Если СписокПечФорм.ВыбратьЗначение(ИмяПечФормы, «», НомерСтроки, 60, 1) = 1 Тогда
ПечФорма = ТаблицаПечФорм.ПолучитьЗначение(НомерСтроки, «Название»);
СохранитьЗначение(ВидОбъекта + «ПечФорма», ПечФорма);
КонецЕсли;
КонецЕсли;
Возврат НомерСтроки;
КонецФункции // глВыборПечатнойФормы()
//******************************************************************************
// глУстановкаКнопкиПечать(Конт, ВидОбъекта, ТаблицаПечФорм)
// Параметры:
// Конт — контекст формы документа,
// ВидОбъекта — вид объекта («Документ.Реализация», «Элемент.Номенклатура» и т.д.),
// ТаблицаПечФорм — таблица значений, которую надо заполнить
// Возвращаемое значение:
// Номер текущей печатной формы
// Описание:
// Вызывается при открытии формы документа, формирует таблицу печатных форм,
// добавляя туда предопределенную (в модуле документа), устанавливает заголовок кнопки печать
Функция глУстановкаКнопкиПечать(Конт, ВидОбъекта, ТаблицаПечФорм) Экспорт
Перем Название, Кнопка;
// Дополним таблицу печатных форм внешними обработками из предопределенного
// каталога ExtForms\PrnForms
Текст = СоздатьОбъект(«Текст»);
ФайлОписания = ФС.НайтиПервыйФайл(глКаталогПечФорм+»*.efd»);
Пока ПустаяСтрока(ФайлОписания)=0 Цикл
Текст.Открыть(глКаталогПечФорм+ФайлОписания);
// Устанавливаем расширение
Файл = Лев(ФайлОписания,СтрДлина(ФайлОписания) — 4) + «.» + «ert»;
Если ФС.СуществуетФайл(глКаталогПечФорм + Файл) = 1 Тогда
// Внешний файл, соответствующий файлу описания, найден.
// Проверим, в нем что есть запись про текущий объект
Если глНайтиВнешнююПечФорму(Текст, «»»» + ВидОбъекта + «»»», Название, Кнопка) = 1 Тогда
// Добавляем строку в список внешних файлов
ТаблицаПечФорм.НоваяСтрока();
ТаблицаПечФорм.Название = Название;
ТаблицаПечФорм.Кнопка = Кнопка;
ТаблицаПечФорм.Файл = Файл;
ТаблицаПечФорм.ФайлОписания = (ФайлОписания);
КонецЕсли;
КонецЕсли;
ФайлОписания = ФС.НайтиСледующийФайл();
КонецЦикла;
НомерСтроки = глПолучитьТекущуюПечФорму(ВидОбъекта, ТаблицаПечФорм);
Если НомерСтроки = 0 Тогда
ЗагловокКнПечать = «Печать»;
Иначе
ЗагловокКнПечать = ТаблицаПечФорм.ПолучитьЗначение(НомерСтроки, «Кнопка»);
КонецЕсли;
Конт.Форма.кнПечать.Заголовок(ЗагловокКнПечать);
Возврат НомерСтроки;
КонецФункции // глУстановкаКнопкиПечать()
///////////////////////////////////////////////////////////////////////////
// Получение элемента справочника СтавкиНП, СтавкиНДС
// соответствующего нулевой ставке
Функция глБезНалога(КодНалога) Экспорт
СпрНалога = СоздатьОбъект(«Справочник.СтавкиНДС»);
Если СпрНалога.НайтиПоРеквизиту(«Ставка», 0, 1) = 0 Тогда
СпрНалога.Новый();
СпрНалога.Наименование = «Без налога («+КодНалога+»)»;
СпрНалога.Ставка = 0;
СпрНалога.Записать();
КонецЕсли;
Возврат СпрНалога.ТекущийЭлемент();
КонецФункции //глБезНалога
//*****************************************************************************
// глПреобразоватьНомерДок( , , ) Экспорт
// Параметры:
// — значение типа Строка — номер документа
// — число
// 0 — не выводить лидирующие нули
// 1 — выводить лидирующие нули
// — число
// 0 — не выводить префикс
// 1 — выводить префикс
// 2 — выводить префикс сзади
// Возвращаемое значение.
// Строка — номер документа для печати
// Описание:
// Процедура предназначена для преобразования номера документа.
// Используется, например, при выводе номера документа на печать.
Функция глПреобразоватьНомерДок(НомерДок,ВыводитьНули=0,ВыводитьПрефикс=0) Экспорт
НовыйНомерДок=НомерДок;
Префикс=Лев(НовыйНомерДок,1);
Если ПустаяСтрока(ТекущаяИБКод())=1 Тогда
Префикс=»»; //Работа не в распределенной ИБ
ИначеЕсли (Префикс>=»0″) И (Префикс<="9") Тогда
Префикс=»»; //Не использовался буквенный префикс
Иначе
НовыйНомерДок=Сред(НовыйНомерДок,2); //Выделение префикса
КонецЕсли;
Если ВыводитьНули=0 Тогда //Отсекание лидирующих нулей
Для Сч=1 По СтрДлина(НовыйНомерДок)-1 Цикл
Если Лев(НовыйНомерДок,1)=»0″ Тогда
НовыйНомерДок=Сред(НовыйНомерДок,2);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если (ВыводитьПрефикс=0) ИЛИ (ПустаяСтрока(Префикс)=1) Тогда
Возврат НовыйНомерДок;
ИначеЕсли ВыводитьПрефикс=1 Тогда
Возврат Префикс+НовыйНомерДок;
ИначеЕсли ВыводитьПрефикс=2 Тогда
Возврат НовыйНомерДок+»/»+Префикс;
КонецЕсли;
Возврат НомерДок;
КонецФункции // глПреобразоватьНомерДок
///////////////////////////////////////////////////////////////////////////
Функция глПредставлениеСтавки(Ставка) Экспорт
Перем Стр;
Если Ставка.Выбран() = 1 Тогда
Стр = «» + Ставка.Ставка + «%»;
Иначе
Стр = «»;
КонецЕсли;
Возврат Стр;
КонецФункции //глПредставлениеСтавки
///////////////////////////////////////////////////////////////////////////
Функция глЗначениеПоУмолчанию(ИмяРеквизита) Экспорт
Перем Значение;
Если (глОбщиеУстановки = 2) или (Метаданные.Константа(ИмяРеквизита).Выбран() = 0) Тогда
Значение = ВосстановитьЗначение(ИмяРеквизита);
Иначе
Значение = Константа.ПолучитьАтрибут(ИмяРеквизита);
КонецЕсли;
Возврат Значение;
КонецФункции //глЗначениеПоУмолчанию
///////////////////////////////////////////////////////////////////////////
//_____________________________________________________________________________
Процедура глПроверкаРазрешенияРедактирования(Конт) Экспорт
Если Конт.Выбран() = 1 Тогда
Если (Конт.ДатаДок <= Константа.ДатаЗапретаРедактирования.Получить(РабочаяДата())) и (Конт.Форма.ТолькоПросмотр() = 0) Тогда
Конт.Форма.ТолькоПросмотр(1);
Предупреждение(«Разрешен только просмотр документа!», 4);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//_____________________________________________________________________________
Функция глМожноЗаписатьДокумент(Конт) Экспорт
Если Конт.ДатаДок <= Константа.ДатаЗапретаРедактирования.Получить(РабочаяДата()) Тогда
Предупреждение(«Нельзя записывать документы с датой, более ранней, чем дата запрета редактирования документов!»);
Возврат 0;
Иначе
Возврат 1;
КонецЕсли;
КонецФункции
//******************************************************************************
Функция глКонтрольДатыДокумента(Конт, НачальнаяДатаДокумента) Экспорт
Перем ФлагПрисвоенияНомера; // для возвращаемого значения
ФлагПрисвоенияНомера=0;
ПериодСменыНомера = Метаданные.Документ(Конт.Вид()).ПериодичностьНомера;
Если ПериодСменыНомера = «Год» Тогда
РазностьДат = НачГода(НачальнаяДатаДокумента)-НачГода(Конт.ДатаДок);
ИначеЕсли ПериодСменыНомера = «Квартал» Тогда
РазностьДат = НачКвартала(НачальнаяДатаДокумента)-НачКвартала(Конт.ДатаДок);
ИначеЕсли ПериодСменыНомера = «Месяц» Тогда
РазностьДат = НачМесяца(НачальнаяДатаДокумента)-НачМесяца(Конт.ДатаДок);
ИначеЕсли ПериодСменыНомера = «День» Тогда
РазностьДат = НачальнаяДатаДокумента-Конт.ДатаДок;
Иначе
РазностьДат = 0;
КонецЕсли;
Если РазностьДат 0 Тогда
Дубликат = СоздатьОбъект(«Документ.»+Конт.Вид());
Дубликат.Новый();
Дубликат.НомерДок = Конт.НомерДок;
Дубликат.ДатаДок = Конт.ДатаДок;
Дубликат.УстановитьНовыйНомер(«»);
Если ( Дубликат.НомерДок Конт.НомерДок ) Тогда
НовыйНомерДок = Дубликат.НомерДок;
Если Дубликат.НайтиПоНомеру(Дубликат.НомерДок,Дубликат.ДатаДок)=0 Тогда
Если Вопрос( «Для документов вида «»»+Конт.ПредставлениеВида()+»»» каждый «+Нрег(ПериодСменыНомера)+» нумерация начинается заново.»+РазделительСтрок+
«Присвоить новый номер?»,»Да+Нет») = «Да» Тогда
Конт.НомерДок = НовыйНомерДок;
ФлагПрисвоенияНомера = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
НачальнаяДатаДокумента = Конт.ДатаДок;
Конт.Активизировать(«НомерДок»);
КонецЕсли;
Возврат ФлагПрисвоенияНомера;
КонецФункции // глКонтрольДатыДокумента
///////////////////////////////////////////////////////////////////////////
Функция ФИО(Сотрудник) Экспорт
Перем ПолноеИмя, Фамилия, ИмяОтчество, Имя, Отчество;
Перем ПозицияПервогоПробела, ПозицияВторогоПробела;
ПолноеИмя = Сотрудник;
ПозицияПервогоПробела = Найти(ПолноеИмя, » «);
Если ПозицияПервогоПробела = 0 Тогда
Возврат ПолноеИмя;
Иначе
Фамилия = Лев(ПолноеИмя, ПозицияПервогоПробела);
ИмяОтчество = Сред(ПолноеИмя, ПозицияПервогоПробела+1);
ИмяОтчество = СокрЛ(ИмяОтчество);
Имя = Лев(ИмяОтчество, 1)+».»;
ПозицияВторогоПробела = Найти(ИмяОтчество, » «);
Если ПозицияВторогоПробела = 0 Тогда
Возврат Фамилия+Имя;
Иначе
Отчество = Сред(ИмяОтчество, ПозицияВторогоПробела+1);
Отчество = СокрЛ(Отчество);
Отчество = Лев(Отчество, 1)+».»;
Возврат Фамилия+Имя+Отчество;
КонецЕсли;
КонецЕсли;
КонецФункции
//****************************************************************
//————————————————————-
// глТрассировка(тСооб)
// выводить дополнительную информацию в случае установки флага
Процедура глТрассировка(тСооб) Экспорт
Если Константа.Трассировка=1 Тогда
Сообщить(тСооб);
КонецЕсли;
КонецПроцедуры
Процедура глВывестиТаблицу(тТаб) Экспорт
глТрассировка(«——— «+Строка(тТаб)+» ———-«);
Для ел1=1 По тТаб.КоличествоСтрок() Цикл
Для ел2=1 По тТаб.КоличествоКолонок() Цикл
тИмя=»»; тТаб.ПолучитьПараметрыКолонки(ел2,,,,тИмя);
глТрассировка(тИмя+Строка(тТаб.ПолучитьЗначение(ел1,ел2)));
КонецЦикла;
КонецЦикла;
КонецПроцедуры
//******************************************************************************
// глПодборПоСотрудникам(КонтекстФормы)
// Параметры:
// КонтекстФормы — контекст формы (документа, справочника, …), где осуществляется подбор.
// Описание:
// Открывает справочник Сотрудники для подбора, если это возможно.
Процедура глПодборПоАбонентам(КонтекстФормы) Экспорт
Если КонтекстФормы.Форма.МодальныйРежим()=1 Тогда
Предупреждение(«Невозможно открыть подбор в модальном режиме!»,10);
Иначе
КонтекстФормы.ОткрытьПодбор(«Справочник.Карточки»,,,1);
КонецЕсли;
КонецПроцедуры // глПодборПоСотрудникам
//—————————————————————-
// глВвестиДатуПериодическихРеквизитов(КонтекстФормы, ФормаЭлемента)
// Параметры:
// КонтекстФормы — «ГрупповойКонтекст» — контекст формы элемента или списка
// справочника.
// ФормаЭлемента — 1 — функция вызвана из формы элемента,
// 0 — функция вызвана из форы списка справочника.
// Возвращаемое значение:
// 0 — дата не назначена форме.
// 1 — дата назначена форме.
// Описание:
// Функция предназначена для вызова из форм элементов и списков справочников,
// имеющих периодические реквизиты, по нажатию кнопки выбора даты просмотра и
// редактирования значений периодических реквизитов.
Функция глВвестиДатуПериодическихРеквизитов(КонтекстФормы, ФормаЭлемента) Экспорт
Текущая_Дата = КонтекстФормы.ДатаАкт;
Если ФормаЭлемента = 0 Тогда
КонтекстФормы.ИспользоватьДату(Текущая_Дата);
Иначе
КонтекстФормы.ИспользоватьДату(Текущая_Дата, 1);
КонецЕсли;
Возврат 1;
КонецФункции // глВвестиДатуПериодическихРеквизитов()
//—————————————————————-
// совпадают ли месяца по двум датам
Функция ПроверитьМесяц(Дата1,Дата2) Экспорт
Если (ДатаГод(Дата1)=ДатаГод(Дата2)) И (ДатаМесяц(Дата1)=ДатаМесяц(Дата2)) Тогда
Возврат(0);
КонецЕсли;
Если (ДатаГод(Дата1)<ДатаГод(Дата2)) ИЛИ ((ДатаГод(Дата1)=ДатаГод(Дата2)) И (ДатаМесяц(Дата1)<ДатаМесяц(Дата2))) Тогда
Возврат(-1);
КонецЕсли;
Возврат(1);
КонецФункции
Функция ПроверкаВхождения(СпрЛ,ДатаАкт,вВсе)
Если (вВсе=1) Тогда
Возврат(1);
КонецЕсли;
Если (вВсе=0) И
((ПустоеЗначение(СпрЛ.СрокНач)=1) ИЛИ (СпрЛ.СрокНач<=ДатаАкт)) И
((ПустоеЗначение(СпрЛ.СрокОкон)=1) ИЛИ (СпрЛ.СрокОкон>=ДатаАкт)) Тогда
Возврат(1);
КонецЕсли;
Возврат(0)
КонецФункции
Функция ВходитьВПериод(тДат,нДат,кДат)
Если (тДат>=нДат) И (тДат<=кДат) Тогда
Возврат(1);
КонецЕсли;
Возврат(0);
КонецФункции
Функция ПроверкаДаты(Дата1,Дата2)
Если (ДатаГод(Дата1)=ДатаГод(Дата2)) И
(ДатаМесяц(Дата1)=ДатаМесяц(Дата2)) Тогда
Возврат(1);
КонецЕсли;
Возврат(0);
КонецФункции
Процедура глЗаполнитьАдрес(тАбонент,Улица,Дом,Квартира,Собственник,тДата) Экспорт
Если ПустоеЗначение(тАбонент)=0 Тогда
Улица=тАбонент.Улица; Дом=тАбонент.Дом; Квартира=тАбонент.Квартира;
Собственник=тАбонент.Собственник.Получить(тДата);
КонецЕсли;
КонецПроцедуры
//—————————————————————————-
Процедура глИзменитьСроки(тИмя,тЗнач) Экспорт
ТабПарам=СоздатьОбъект(«ТаблицаЗначений»);
ТабПарам.НоваяКолонка(«Имя»);
ТабПарам.НоваяКолонка(«Знач»);
ТабПарам.НоваяСтрока();
ТабПарам.Имя=тИмя;
ТабПарам.Знач=тЗнач;
ОткрытьФормуМодально(«Обработка.ИсторияСроков»,ТабПарам);
КонецПроцедуры
//—————————————————————————-
Процедура глИстория(тИмя,тЗнач,тВид) Экспорт
ТабПарам=СоздатьОбъект(«ТаблицаЗначений»);
ТабПарам.НоваяКолонка(«Имя»);
ТабПарам.НоваяКолонка(«Знач»);
ТабПарам.НоваяКолонка(«Вид»);
ТабПарам.НоваяСтрока();
ТабПарам.Имя=тИмя;
ТабПарам.Знач=тЗнач;
ТабПарам.Вид=тВид;
ОткрытьФормуМодально(«Обработка.История»,ТабПарам);
КонецПроцедуры
Процедура глН_КнопкаПечать(ФайлОтчета,Параметр) Экспорт
ТекущийКаталог=КаталогИБ()+»ExtForms\PrnForms\»;
Если ФС.СуществуетФайл(ТекущийКаталог+ФайлОтчета)=1 Тогда
ОткрытьФорму(«Отчет»,Параметр,ТекущийКаталог+ФайлОтчета);
Иначе
Предупреждение(«Файл печатной формы не найден»);
КонецЕсли;
КонецПроцедуры
Процедура глПД_УдалитьЗаписиПоДокументу(тАбонент,тСпр,тДок) Экспорт
Если ПустоеЗначение(тАбонент)=0 Тогда
тСпр.ИспользоватьВладельца(тАбонент);
тСпр.ВыбратьЭлементы();
тПриз=0;
Иначе
тСпр.ВыбратьЭлементы(0);
тПриз=1;
КонецЕсли;
Пока тСпр.НайтиПоРеквизиту(«ДокИзм»,тДок,тПриз)>0 Цикл
тСпр.Удалить(1);
КонецЦикла;
КонецПроцедуры
//——————————————————————
// Расчет начислений за месяц и вывод процента оплаты по видам услуг
Процедура глРасчетПроцент(ДатаАкт,ТабНачислено,глСведенияПоАбоненту,Проц1,Проц2) Экспорт
ТабНачислено.Сортировать(«ДатаРасчета»);
ТабНачислено.ВыбратьСтроки();
суммаВода=0; суммаОчистка=0;
Пока ТабНачислено.ПолучитьСтроку()>0 Цикл
Если ПроверитьМесяц(ТабНачислено.ДатаРасчета,ДатаАкт)<=0 Тогда
суммаВода=суммаВода+(ТабНачислено.СуммаВода-ТабНачислено.ЛьготаВода);
суммаПропуск=суммаПропуск+(ТабНачислено.СуммаПропуск-ТабНачислено.ЛьготаПропуск);
суммаОчистка=суммаОчистка+(ТабНачислено.СуммаОчистка-ТабНачислено.ЛьготаОчистка);
КонецЕсли;
КонецЦикла;
// определяем проц отнош
Проц1=?(суммаВода+суммаОчистка+суммаПропуск0,суммаВода/(суммаВода+суммаОчистка+суммаПропуск)*100,0);
Проц2=?(суммаВода+суммаОчистка+суммаПропуск0,суммаПропуск/(суммаВода+суммаОчистка+суммаПропуск)*100,0);
КонецПроцедуры
//——————————————————————
// Расчет сальдо и данных за месяц
// рассчитываем сальдо на нач года ,на тек месяц, и начисл за месяц
Процедура глРасчетСальдо(ДатаАкт,глСведенияПоАбоненту) Экспорт
ТабНачислено=СоздатьОбъект(«ТаблицаЗначений»);
ТабНачислено.Загрузить(глСведенияПоАбоненту.ПолучитьЗначение(1,»Начисления»));
ТабОплаты=СоздатьОбъект(«ТаблицаЗначений»);
ТабОплаты.Загрузить(глСведенияПоАбоненту.ПолучитьЗначение(1,»Оплаты»));
текСумма=0; месСумма=0; начСумма=0; дСумма=0;
текОСумма=0; месОСумма=0; начОСумма=0; дОСумма=0;
ТабНачислено.Сортировать(«ДатаРасчета»);
ТабНачислено.ВыбратьСтроки();
Пока ТабНачислено.ПолучитьСтроку()>0 Цикл
Если ПроверитьМесяц(ТабНачислено.ДатаРасчета,ДатаАкт)<0 Тогда
начСумма=начСумма+ТабНачислено.Всего;
КонецЕсли;
Если ПроверитьМесяц(ТабНачислено.ДатаРасчета,ДатаАкт)<=0 Тогда
текСумма=текСумма+ТабНачислено.Всего;
КонецЕсли;
Если ПроверитьМесяц(ТабНачислено.ДатаРасчета,ДатаАкт)=0 Тогда
Если ТабНачислено.ДатаРасчета<=ДатаАкт Тогда
дСумма=дСумма+ТабНачислено.Всего;
КонецЕсли;
месСумма=месСумма+ТабНачислено.Всего;
КонецЕсли;
КонецЦикла;
ТабОплаты.ВыбратьСтроки();
Пока ТабОплаты.ПолучитьСтроку()>0 Цикл
Если ПроверитьМесяц(ТабОплаты.ДатаОплаты,ДатаАкт)<0 Тогда
начОСумма=начОСумма+ТабОплаты.Всего;
КонецЕсли;
Если ПроверитьМесяц(ТабОплаты.ДатаОплаты,ДатаАкт)<=0 Тогда
текОСумма=текОСумма+ТабОплаты.Всего;
КонецЕсли;
Если ПроверитьМесяц(ТабОплаты.ДатаОплаты,ДатаАкт)=0 Тогда
Если ТабОплаты.ДатаОплаты<=ДатаАкт Тогда
дОСумма=дОСумма+ТабОплаты.Всего;
КонецЕсли;
месОСумма=месОСумма+ТабОплаты.Всего;
КонецЕсли;
КонецЦикла;
глСведенияПоАбоненту.УстановитьЗначение(глСведенияПоАбоненту.НомерСтроки,»НачСальдо»,начСумма-начОСумма);
глСведенияПоАбоненту.УстановитьЗначение(глСведенияПоАбоненту.НомерСтроки,»НачисМесяц»,месСумма);
глСведенияПоАбоненту.УстановитьЗначение(глСведенияПоАбоненту.НомерСтроки,»ОплМесяц»,месОСумма);
глСведенияПоАбоненту.УстановитьЗначение(глСведенияПоАбоненту.НомерСтроки,»КонСальдо»,текСумма-текОСумма);
глСведенияПоАбоненту.УстановитьЗначение(глСведенияПоАбоненту.НомерСтроки,»ТекСальдо»,начСумма-начОСумма+дСумма-дОСумма);
КонецПроцедуры
//————————————————————-
// выбираем последнее показание по счетчику и его дату
Процедура ПоследнееПоказание(ТабСчетчики,ДатаАкт) Экспорт
СпрПок=СоздатьОбъект(«Справочник.Показания»);
СпрПок.ИспользоватьДату(ДатаАкт);
СпрПок.ИспользоватьВладельца(ТабСчетчики.Счетчик);
СпрПок.ВыбратьЭлементы();
тПок=СоздатьОбъект(«ТаблицаЗначений»);
тПок.НоваяКолонка(«ДатаПоказ»,»Дата»,10);
тПок.НоваяКолонка(«Показание»,»Число»,10,0);
тПок.НоваяКолонка(«Обьем»,»Число»,10,0);
тПок.НоваяКолонка(«КолВоДней»,»Число»,4,0);
Пока СпрПок.ПолучитьЭлемент()>0 Цикл
тПок.НоваяСтрока();
тПок.ДатаПоказ=СпрПок.ДатаПоказаний;
тПок.Показание=СпрПок.Показание;
тПок.Обьем=СпрПок.Обьем;
тПок.КолВоДней=СпрПок.КолВоДней;
КонецЦикла;
тПок.Сортировать(«-ДатаПоказ»);
тПок.ВыбратьСтроки();
Пока тПок.ПолучитьСтроку()>0 Цикл
Если ДатаАкт=тПок.ДатаПоказ Тогда
ТабСчетчики.ДатаПоказ=тПок.ДатаПоказ;
ТабСчетчики.Показание=тПок.Показание;
ТабСчетчики.Обьем=тПок.Обьем;
ТабСчетчики.КолВоДней=тПок.КолВоДней;
Прервать;
// Сообщить(тПок.ДатаПоказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//————————————————————————
Процедура глСоздатьСписки(тТаб,тПарам) Экспорт
Если тПарам=»ТабИзмСвед» Тогда
тТаб.НоваяКолонка(«ДатаИзменения»,»Дата»,10);
тТаб.НоваяКолонка(«ВидСведения»);
ИначеЕсли тПарам=»ВидДокИзм» Тогда
тТаб.НоваяКолонка(«ВидДок»);
ИначеЕсли тПарам=»Оплаты» Тогда
тТаб.НоваяКолонка(«ДатаОплаты»,»Дата»,10);
тТаб.НоваяКолонка(«ВидОплаты»,,15);
тТаб.НоваяКолонка(«Всего»,»Число»,10,2);
тТаб.НоваяКолонка(«Чек»,»Число»,1,0);
тТаб.НоваяКолонка(«ДокИзм»,,20);
ИначеЕсли тПарам=»ЛьготыНач» Тогда
тТаб.НоваяКолонка(«ДатаРасчета»,»Дата»,10);
тТаб.НоваяКолонка(«ВидУслуги»,,20);
тТаб.НоваяКолонка(«ВидРасчета»,,15);
тТаб.НоваяКолонка(«ВидЛьготы»,,20);
тТаб.НоваяКолонка(«Льготник»,,45);
тТаб.НоваяКолонка(«Норма»,»Число»,10,4);
тТаб.НоваяКолонка(«ЧислоЛьготников»,»Число»,1,0);
тТаб.НоваяКолонка(«Льгота»,»Число»,10,2);
тТаб.НоваяКолонка(«НачРасчета»,»Дата»,10);
тТаб.НоваяКолонка(«КонРасчета»,»Дата»,10);
тТаб.НоваяКолонка(«ДокИзм»,,20);
ИначеЕсли тПарам=»Начисления» Тогда
тТаб.НоваяКолонка(«ДатаРасчета»,»Дата»,10);
тТаб.НоваяКолонка(«ВидУслуги»,,15);
тТаб.НоваяКолонка(«ВидРасчета»,,15);
тТаб.НоваяКолонка(«Всего»,»Число»,10,2);
тТаб.НоваяКолонка(«СуммаЛьгот»,»Число»,10,2);
тТаб.НоваяКолонка(«Сумма»,»Число»,10,2);
тТаб.НоваяКолонка(«Цена»,»Число»,6,2);
тТаб.НоваяКолонка(«ПлощадьРасход»,»Число»,10,4);
тТаб.НоваяКолонка(«НачРасчета»,»Дата»,10);
тТаб.НоваяКолонка(«КонРасчета»,»Дата»,10);
тТаб.НоваяКолонка(«ДокИзм»,,20);
ИначеЕсли тПарам=»Счетчики» Тогда
тТаб.НоваяКолонка(«ВидСчетчика»,,20);
тТаб.НоваяКолонка(«СрокНач»,»Дата»);
тТаб.НоваяКолонка(«СрокОкон»,»Дата»);
тТаб.НоваяКолонка(«ДокИзм»,,20);
тТаб.НоваяКолонка(«ТекЭлем»);
тТаб.ВидимостьКолонки(«ТекЭлем»,0);
ИначеЕсли тПарам=»Льготники» Тогда
тТаб.НоваяКолонка(«Наименование»);
тТаб.НоваяКолонка(«КатегорияУчета1»);
тТаб.НоваяКолонка(«Процент»,»Число»,3,0);
тТаб.НоваяКолонка(«NСправка»);
тТаб.НоваяКолонка(«СрокНач»,»Дата»);
тТаб.НоваяКолонка(«СрокОкон»,»Дата»);
тТаб.НоваяКолонка(«БезСрочный»,»Число»,1,0);
тТаб.НоваяКолонка(«ДокИзм»);
тТаб.НоваяКолонка(«ТекЭлем»);
ИначеЕсли тПарам=»Услуги» Тогда
тТаб.НоваяКолонка(«Услуга»,,25);
тТаб.НоваяКолонка(«СрокНач»,»Дата»);
тТаб.НоваяКолонка(«СрокОкон»,»Дата»);
тТаб.НоваяКолонка(«ДокИзм»,,20);
ИначеЕсли тПарам=»ВРасчетов» Тогда
тТаб.НоваяКолонка(«ВидРасчета»,,25);
тТаб.НоваяКолонка(«СрокНач»,»Дата»);
тТаб.НоваяКолонка(«СрокОкон»,»Дата»);
тТаб.НоваяКолонка(«ПроцентСнятия»,»Число»,7,2);
тТаб.НоваяКолонка(«ДокИзм»);
КонецЕсли;
КонецПроцедуры
//——————————————————————
// удалить выбранное начисление
Процедура глУдалитьСписки(тАбонент,ДатаУд) Экспорт
СпрНач=СоздатьОбъект(«Справочник.Расчеты»);
СпрНач.ИспользоватьДату(ДатаУд);
СпрНач.ИспользоватьВладельца(тАбонент);
СпрНач.ВыбратьЭлементы();
Пока СпрНач.ПолучитьЭлемент()>0 Цикл
Если (СпрНач.ДатаРасчета=ДатаУд) Тогда
СпрНач.Удалить(1);
//Прервать;
КонецЕсли;
КонецЦикла;
// удалим льготников
//глУдалитьЛьготыНач(тАбонент,ДатаУд);
КонецПроцедуры
//——————————————————————
Функция ПроверкаУсловияВыборки(тПарам,тСпр,тТаб)
Если тПарам=»Оплаты» Тогда
Если (тСпр.ДатаОплаты=тТаб.ДатаОплаты) И
(тСпр.ВидОплаты=тТаб.ВидОплаты) И
(тСпр.Чек1) Тогда
Если Вопрос(«Добавить новую квитанцию»,»Да+Нет»)»Да» Тогда
сСтр=1;
Возврат(1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат(0);
КонецФункции
//——————————————————————
//——————————————————————
// Добавить новую оплату
Процедура глДобавитьОплату(тАбонент,ДатаАкт,тОплата) Экспорт
СпрОпл=СоздатьОбъект(«Справочник.Оплаты»);
СпрОпл.ИспользоватьДату(ДатаАкт);
СпрОпл.ИспользоватьВладельца(тАбонент);
СпрОпл.ВыбратьЭлементы();
сСтр=0;
Пока СпрОпл.ПолучитьЭлемент()>0 Цикл
Если (СпрОпл.ДатаОплаты=тОплата.ДатаОплаты) И
(СпрОпл.ВидОплаты=тОплата.ВидОплаты) И
(СпрОпл.Чек1) Тогда
Если Вопрос(«Добавить новую квитанцию»,»Да+Нет»)»Да» Тогда
сСтр=1;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Если сСтр=0 Тогда
СпрОпл.Новый();
СпрОпл.ДатаОплаты=тОплата.ДатаОплаты;
СпрОпл.ВидОплаты=тОплата.ВидОплаты;
КонецЕсли;
СпрОпл.Всего=тОплата.Всего;
СпрОпл.Вода=тОплата.Вода;
СпрОпл.Отопление=тОплата.Отопление;
СпрОпл.Чек=тОплата.Чек;
СпрОпл.Записать();
КонецПроцедуры
//——————————————————————
// удалить выбранную оплату
Процедура глУдалитьОплату(тАбонент,ДатаУд) Экспорт
СпрОпл=СоздатьОбъект(«Справочник.Оплаты»);
СпрОпл.ИспользоватьДату(ДатаУд);
СпрОпл.ИспользоватьВладельца(тАбонент);
СпрОпл.ВыбратьЭлементы();
Пока СпрОпл.ПолучитьЭлемент()>0 Цикл
Если (СпрОпл.ДатаОплаты=ДатаУд) Тогда
Если СпрОпл.Чек=0 Тогда
СпрОпл.Удалить(1);
Иначе
Предупреждение(«По оплате был пробит чек.Удалять запрещено!!!!!!!!!!»);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура СвернутьСписокРасчетов(тТаб,ДатаАкт) Экспорт
Перем врем;
тТаб.Выгрузить(врем);
врем.УдалитьСтроки();
тТаб.Сортировать(«СрокОкон»);
тТаб.ВыбратьСтроки();
Пока тТаб.ПолучитьСтроку()>0 Цикл
тСтр=0; тНайден=0;
врем.ВыбратьСтроки();
Пока врем.ПолучитьСтроку()>0 Цикл
Если (врем.ВидРасчета=тТаб.ВидРасчета) Тогда
тНайден=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если (тНайден=1) И (ПустоеЗначение(врем.СрокОкон)=1) Тогда
Если ПустоеЗначение(тТаб.СрокНач)=1 Тогда
врем.СрокОкон=тТаб.СрокОкон;
Иначе
врем.СрокОкон=тТаб.СрокНач-1;
тНомер=врем.НомерСтроки;
тНач=тТаб.СрокОкон;
врем.НоваяСтрока();
Для ел=1 По врем.КоличествоКолонок() Цикл
врем.УстановитьЗначение(врем.НомерСтроки,ел,тТаб.ПолучитьЗначение(тТаб.НомерСтроки,ел));
КонецЦикла;
врем.НоваяСтрока();
Для ел=1 По врем.КоличествоКолонок() Цикл
врем.УстановитьЗначение(врем.НомерСтроки,ел,врем.ПолучитьЗначение(тНомер,ел));
КонецЦикла;
врем.СрокНач=тНач+1;
врем.СрокОкон=ПолучитьПустоеЗначение();
КонецЕсли;
Иначе
врем.НоваяСтрока();
тСтрока=врем.КоличествоСтрок();
Для ел=1 По врем.КоличествоКолонок() Цикл
врем.УстановитьЗначение(врем.НомерСтроки,ел,тТаб.ПолучитьЗначение(тТаб.НомерСтроки,ел));
КонецЦикла;
КонецЕсли;
КонецЦикла;
врем.Выгрузить(тТаб);
врем.УдалитьСтроки();
тТаб.ВыбратьСтроки();
Пока тТаб.ПолучитьСтроку()>0 Цикл
Если ПроверкаВхождения(тТаб,ДатаАкт,0)=1 Тогда
врем.НоваяСтрока();
Для ел=1 По врем.КоличествоКолонок() Цикл
врем.УстановитьЗначение(врем.НомерСтроки,ел,тТаб.ПолучитьЗначение(тТаб.НомерСтроки,ел));
КонецЦикла;
КонецЕсли;
КонецЦикла;
врем.Выгрузить(тТаб);
КонецПроцедуры
Процедура СвернутьСписокУслуг(тТаб,ДатаАкт) Экспорт
Перем врем;
тТаб.Выгрузить(врем);
врем.УдалитьСтроки();
тТаб.Сортировать(«СрокОкон»);
тТаб.ВыбратьСтроки();
Пока тТаб.ПолучитьСтроку()>0 Цикл
тСтр=0; тНайден=0;
врем.ВыбратьСтроки();
Пока врем.ПолучитьСтроку()>0 Цикл
Если (врем.Услуга=тТаб.Услуга) Тогда
тНайден=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если (тНайден=1) И (ПустоеЗначение(врем.СрокОкон)=1) Тогда
Если тТаб.СрокНач>врем.СрокНач Тогда
врем.СрокОкон=тТаб.СрокНач-1;
тНайден=0;
Иначе
врем.СрокОкон=тТаб.СрокОкон;
КонецЕсли;
КонецЕсли;
Если тНайден=0 Тогда
врем.НоваяСтрока();
тСтрока=врем.КоличествоСтрок();
Для ел=1 По врем.КоличествоКолонок() Цикл
врем.УстановитьЗначение(врем.НомерСтроки,ел,тТаб.ПолучитьЗначение(тТаб.НомерСтроки,ел));
КонецЦикла;
КонецЕсли;
КонецЦикла;
врем.Выгрузить(тТаб);
КонецПроцедуры
//——————————————————————
// Получить список всех оплат
Процедура глПолучитьСписки(тАбонент,тПарам,тТаб,ДатаАкт,вВсе=0) Экспорт
глТрассировка(тПарам);
тСпр=СоздатьОбъект(«Справочник.»+тПарам);
тСпр.ИспользоватьДату(ДатаАкт);
тСпр.ИспользоватьВладельца(тАбонент);
Если (тПарам=»Услуги») ИЛИ (тПарам=»ВРасчетов») Тогда
тВсе=вВсе;
вВсе=1;
КонецЕсли;
тТаб.УдалитьСтроки();
тСпр.ВыбратьЭлементы();
Пока тСпр.ПолучитьЭлемент()>0 Цикл
Если тСпр.ПометкаУдаления()=0 Тогда
Если ПроверкаВхождения(тСпр,ДатаАкт,вВсе)>0 Тогда
тТаб.НоваяСтрока();
Для ел=1 По тТаб.КоличествоКолонок() Цикл
текИмя=тТаб.ПолучитьПараметрыКолонки(ел);
Если текИмя=»ТекЭлем» Тогда
тЗнач=тСпр.ТекущийЭлемент();
Иначе
тЗнач=тСпр.ПолучитьАтрибут(тТаб.ПолучитьПараметрыКолонки(ел));
КонецЕсли;
тТаб.УстановитьЗначение(тТаб.НомерСтроки,ел,тЗнач);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если тВсе=0 Тогда
Если (тПарам=»Услуги») Тогда
СвернутьСписокУслуг(тТаб,ДатаАкт);
КонецЕсли;
Если (тПарам=»ВРасчетов») Тогда
СвернутьСписокРасчетов(тТаб,ДатаАкт);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//——————————————————————
// расчет по счетчику
Процедура ПолучитьДанныеПоСчетчикам(ТабСчетчики,ДатаАкт,ТабОбьем) Экспорт
ТабСчетчики.ВыбратьСтроки();
Пока ТабСчетчики.ПолучитьСтроку()>0 Цикл
ТабОбьем.НоваяСтрока();
ТабОбьем.ГорячаяВода=ТабСчетчики.Обьем;
ТабОбьем.КолВоДней=ТабСчетчики.КолВоДней;
ТабОбьем.ДатаПок=ТабСчетчики.ДатаПоказ;
КонецЦикла;
КонецПроцедуры
//————————————————————-
Процедура УстановитьПараметр(тАбонент,глСведенияПоАбоненту,тПараметр,ДатаАкт,вВсе)
ТабТемп=СоздатьОбъект(«ТаблицаЗначений»);
ТабТемп1=СоздатьОбъект(«ТаблицаЗначений»);
Таб=СоздатьОбъект(«ТаблицаЗначений»);
глСоздатьСписки(ТабТемп,тПараметр);
глПолучитьСписки(тАбонент,тПараметр,ТабТемп,ДатаАкт,вВсе);
ТабТемп1.Загрузить(глСведенияПоАбоненту.ПолучитьЗначение(1,тПараметр));
ТабТемп1.Загрузить(ТабТемп);
глСведенияПоАбоненту.УстановитьЗначение(1,тПараметр,ТабТемп);
// Таб.Загрузить(глСведенияПоАбоненту.ПолучитьЗначение(1,»Услуги»));
КонецПроцедуры
//————————————————————
// глПолучитьВсеДанныеПоАбоненту
// выбирает все сведения по абоненту
Процедура глПолучитьВсеДанныеПоАбоненту(глСведенияПоАбоненту,тАбонент,ДатаАкт) Экспорт
глСведенияПоАбоненту=СоздатьОбъект(«ТаблицаЗначений»);
// список всех услуг по абоненту
глСведенияПоАбоненту.НоваяКолонка(«Адрес»,»Строка»);
глСведенияПоАбоненту.НоваяКолонка(«Собственник»,»Строка»);
// список всех услуг по абоненту
глСведенияПоАбоненту.НоваяКолонка(«Услуги»,»ТаблицаЗначений»);
// список всех видов расчетов по абоненту
глСведенияПоАбоненту.НоваяКолонка(«ВРасчетов»,»ТаблицаЗначений»);
// список всех льготников
глСведенияПоАбоненту.НоваяКолонка(«Льготники»,»ТаблицаЗначений»);
// список всех льготников
глСведенияПоАбоненту.НоваяКолонка(«Счетчики»,»ТаблицаЗначений»);
// кол-во жильцов
глСведенияПоАбоненту.НоваяКолонка(«КолвоЖильцов»,»Число»,2,0);
// кол-во жильцов
глСведенияПоАбоненту.НоваяКолонка(«Пенсионер»,»Число»,1,0);
глСведенияПоАбоненту.НоваяКолонка(«Судья»,»Число»,1,0);
// кол-во соток
глСведенияПоАбоненту.НоваяКолонка(«Площадь»,»Число»,10,2);
// все начисления
глСведенияПоАбоненту.НоваяКолонка(«Начисления»,»ТаблицаЗначений»);
// все оплаты
глСведенияПоАбоненту.НоваяКолонка(«Оплаты»,»ТаблицаЗначений»);
// сюда заносим все даты когда в течении отчет месяца менялись сведения по абоненту
глСведенияПоАбоненту.НоваяКолонка(«ДатыИзмСвед»,»ТаблицаЗначений»);
// сальдо на начало года
глСведенияПоАбоненту.НоваяКолонка(«НачСальдо»,»Число»,12,2);
// начислен за месяц
глСведенияПоАбоненту.НоваяКолонка(«НачисМесяц»,»Число»,12,2);
// оплата за месяц
глСведенияПоАбоненту.НоваяКолонка(«ОплМесяц»,»Число»,12,2);
// сальдо на кон месяца
глСведенияПоАбоненту.НоваяКолонка(«КонСальдо»,»Число»,12,2);
// сальдо на тек дату
глСведенияПоАбоненту.НоваяКолонка(«ТекСальдо»,»Число»,12,2);
глСведенияПоАбоненту.НоваяКолонка(«КолВоЖильцовПроп»,»Число»,2,0);
глСведенияПоАбоненту.НоваяСтрока();
// КолВоЖильцовПроп
ТабИзмСвед=СоздатьОбъект(«ТаблицаЗначений»);
// глСоздатьСписокИзмСвед(ТабИзмСвед);
глСведенияПоАбоненту.Адрес=СОКРЛП(тАбонент.Улица)+» дом «+СОКРЛП(тАбонент.Дом)+» кв «+тАбонент.Квартира;
// выбираем все услуги
УстановитьПараметр(тАбонент,глСведенияПоАбоненту,»Услуги»,ДатаАкт,0);
// // выбираем все виды расчетов
УстановитьПараметр(тАбонент,глСведенияПоАбоненту,»ВРасчетов»,ДатаАкт,0);
// выбираем всех льготников
УстановитьПараметр(тАбонент,глСведенияПоАбоненту,»Льготники»,ДатаАкт,0);
// // выбираем все счетчики
УстановитьПараметр(тАбонент,глСведенияПоАбоненту,»Счетчики»,ДатаАкт,0);
глСведенияПоАбоненту.УстановитьЗначение(1,»Собственник»,тАбонент.Собственник.Получить(ДатаАкт));
// устанавлваем число жильцов
глСведенияПоАбоненту.УстановитьЗначение(1,»КолвоЖильцов»,тАбонент.КолвоЖильцов.Получить(ДатаАкт));
глСведенияПоАбоненту.УстановитьЗначение(1,»КолВоЖильцовПроп»,тАбонент.КолВоЖильцовПроп.Получить(ДатаАкт));
глСведенияПоАбоненту.УстановитьЗначение(1,»Пенсионер»,тАбонент.Пенсионер.Получить(ДатаАкт));
глСведенияПоАбоненту.УстановитьЗначение(1,»Судья»,тАбонент.Судья.Получить(ДатаАкт));
// устанавлваем площадь
глСведенияПоАбоненту.УстановитьЗначение(1,»Площадь»,тАбонент.Площадь.Получить(ДатаАкт));
// выбираем все начисления
УстановитьПараметр(тАбонент,глСведенияПоАбоненту,»Начисления»,ДатаАкт,1);
// // выбираем все оплаты
УстановитьПараметр(тАбонент,глСведенияПоАбоненту,»Оплаты»,ДатаАкт,1);
глРасчетСальдо(ДатаАкт,глСведенияПоАбоненту);
КонецПроцедуры
Процедура СвернутьПоПериодам(тТаб,тВид) Экспорт
Перем врем;
тТаб.Выгрузить(врем);
врем.УдалитьСтроки();
тТаб.Сортировать(«НачРасчета»);
тТаб.ВыбратьСтроки();
Пока тТаб.ПолучитьСтроку()>0 Цикл
тСтр=0; тНайден=0;
врем.ВыбратьСтроки();
Пока врем.ПолучитьСтроку()>0 Цикл
Если (ПроверкаДаты(врем.НачРасчета,тТаб.НачРасчета)=1) И
(тТаб.ВидУслуги=врем.ВидУслуги) И
(тТаб.ВидРасчета=врем.ВидРасчета) Тогда
тНайден=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если тНайден=1 Тогда
врем.КонРасчета=тТаб.КонРасчета;
Если тВид=2 Тогда
врем.Льгота= врем.Льгота+тТаб.Льгота;
Иначе
врем.Всего=врем.Всего+тТаб.Всего;
врем.Сумма=врем.Сумма+тТаб.Сумма;
врем.СуммаЛьгот=врем.СуммаЛьгот+тТаб.СуммаЛьгот;
Если тТаб.ВидРасчета=Перечисление.ВидыРасчетов.ГорячаяВода Тогда
врем.ПлощадьРасход=врем.ПлощадьРасход+тТаб.ПлощадьРасход;
КонецЕсли;
КонецЕсли;
Иначе
врем.НоваяСтрока();
тСтрока=врем.КоличествоСтрок();
Для ел=1 По врем.КоличествоКолонок() Цикл
врем.УстановитьЗначение(врем.НомерСтроки,ел,тТаб.ПолучитьЗначение(тТаб.НомерСтроки,ел));
КонецЦикла;
КонецЕсли;
КонецЦикла;
врем.Выгрузить(тТаб);
КонецПроцедуры
Процедура МСвернуть(тТаб,тГруп,тСум) Экспорт
Перем врем;
тТаб.Выгрузить(врем);
врем.УдалитьСтроки();
СпГруп=СоздатьОбъект(«СписокЗначений»);
СпГруп.ИзСтрокиСРазделителями(тГруп);
СпСум=СоздатьОбъект(«СписокЗначений»);
СпСум.ИзСтрокиСРазделителями(тСум);
тТаб.ВыбратьСтроки();
Пока тТаб.ПолучитьСтроку()>0 Цикл
врем.ВыбратьСтроки();
тНайден=0;
Для ел=1 По спГруп.РазмерСписка() Цикл
тКол=спГруп.ПолучитьЗначение(ел);
тЗнач=тТаб.ПолучитьЗначение(тТаб.НомерСтроки,тКол);
тСтр=0;
Если врем.НайтиЗначение(тЗнач,тСтр,тКол)>0 Тогда
тНайден=тНайден+1;
КонецЕсли;
КонецЦикла;
Если тНайден<спГруп.РазмерСписка() Тогда
врем.НоваяСтрока();
Для ел=1 По врем.КоличествоКолонок() Цикл
врем.УстановитьЗначение(врем.НомерСтроки,ел,тТаб.ПолучитьЗначение(тТаб.НомерСтроки,ел));
КонецЦикла;
Иначе
Для ел=1 По спСум.РазмерСписка() Цикл
тКол=спСум.ПолучитьЗначение(ел);
тЗнач=тТаб.ПолучитьЗначение(тТаб.НомерСтроки,тКол);
тЗнач=тЗнач+врем.ПолучитьЗначение(врем.НомерСтроки,тКол);
врем.УстановитьЗначение(врем.НомерСтроки,ел,тЗнач);
КонецЦикла;
КонецЕсли;
КонецЦикла;
врем.Выгрузить(тТаб);
КонецПроцедуры
//————————————————————
// пересчитываем уже посчитанные записи
Процедура МесяцПересчет(ТабРасчеты,ТабНачислено,НачРасч,КонРасч) Экспорт
//глВывестиТаблицу(ТабРасчеты);
// МСвернуть(ТабРасчеты);
//глВывестиТаблицу(ТабРасчеты);
//глВывестиТаблицу(ТабНачислено);
//глВывестиТаблицу(ТабНачислено);
// добавляем услуги которые убрались
ТабНачислено.ВыбратьСтроки();
Пока ТабНачислено.ПолучитьСтроку()> 0 Цикл
Если (ТабНачислено.ДатаРасчета>=НачРасч) И (ТабНачислено.ДатаРасчета<=КонРасч) Тогда
тстр=0;
Если ТабРасчеты.НайтиЗначение(ТабНачислено.ВидУслуги,тстр,»ВидУслуги»)=0 Тогда
ТабРасчеты.НоваяСтрока();
ТабРасчеты.ДатаРасчета=ТабНачислено.ДатаРасчета;
ТабРасчеты.ДатаНачРасч=НачРасч;
ТабРасчеты.ДатаКонРасч=КонРасч;
ТабРасчеты.ВидУслуги=ТабНачислено.ВидУслуги;
ТабРасчеты.ВидЖилья=ТабНачислено.ВидЖилья;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// отнимаем ранее начисленное
ТабРасчеты.ВыбратьСтроки();
Пока ТабРасчеты.ПолучитьСтроку()> 0 Цикл
ТабНачислено.ВыбратьСтроки();
Пока ТабНачислено.ПолучитьСтроку()> 0 Цикл
Если (ТабНачислено.ДатаРасчета>=НачРасч) И (ТабНачислено.ДатаРасчета<=КонРасч) Тогда
Если (ТабРасчеты.ВидУслуги=ТабНачислено.ВидУслуги) Тогда
ТабРасчеты.Всего=ТабРасчеты.Всего-ТабНачислено.Всего;
ТабРасчеты.СуммаЛьгот=ТабРасчеты.СуммаЛьгот-ТабНачислено.СуммаЛьгот;
ТабРасчеты.Сумма=ТабРасчеты.Сумма-ТабНачислено.Сумма;
ТабРасчеты.СуммаВода=ТабРасчеты.СуммаВода-ТабНачислено.СуммаВода;
ТабРасчеты.ЛьготаВода=ТабРасчеты.ЛьготаВода-ТабНачислено.ЛьготаВода;
ТабРасчеты.СуммаПропуск=ТабРасчеты.СуммаПропуск-ТабНачислено.СуммаПропуск;
ТабРасчеты.ЛьготаПропуск=ТабРасчеты.ЛьготаПропуск-ТабНачислено.ЛьготаПропуск;
ТабРасчеты.СуммаОчистка=ТабРасчеты.СуммаОчистка-ТабНачислено.СуммаОчистка;
ТабРасчеты.ЛьготаОчистка=ТабРасчеты.ЛьготаОчистка-ТабНачислено.ЛьготаОчистка;
ТабРасчеты.РасходВода=ТабРасчеты.РасходВода-ТабНачислено.РасходВода;
ТабРасчеты.РасходПропуск=ТабРасчеты.РасходПропуск-ТабНачислено.РасходПропуск;
ТабРасчеты.РасходОчистка=ТабРасчеты.РасходОчистка-ТабНачислено.РасходОчистка;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
//————————————————————
// пересчитываем уже посчитанные записи по льготам
Процедура МесяцЛьготыПересчет(оТаб,нТаб) Экспорт
нТаб.Свернуть(«ВидУслуги,ВидЛьготы,Льготник»,»ДатаРасчета,ЛьготаВода,ЛьготаПропуск,ЛьготаОчистка»);
оТаб.Свернуть(«ВидУслуги,ВидЛьготы,Льготник»,»ДатаРасчета,ЛьготаВода,ЛьготаПропуск,ЛьготаОчистка»);
нТаб.ВыбратьСтроки();
Пока нТаб.ПолучитьСтроку()>0 Цикл
оТаб.ВыбратьСтроки();
Пока оТаб.ПолучитьСтроку()>0 Цикл
Если (нТаб.ВидУслуги=оТаб.ВидУслуги) И
(нТаб.ВидЛьготы=оТаб.ВидЛьготы) И (нТаб.Льготник=оТаб.Льготник) Тогда
нТаб.ЛьготаВода=нТаб.ЛьготаВода-оТаб.ЛьготаВода;
нТаб.ЛьготаПропуск=нТаб.ЛьготаПропуск-оТаб.ЛьготаПропуск;
нТаб.ЛьготаОчистка=нТаб.ЛьготаОчистка-оТаб.ЛьготаОчистка;
КонецЕсли;
КонецЦикла;
КонецЦикла;
оТаб.ВыбратьСтроки();
Пока оТаб.ПолучитьСтроку()>0 Цикл
тНайден=0;
нТаб.ВыбратьСтроки();
Пока нТаб.ПолучитьСтроку()>0 Цикл
Если (нТаб.ВидУслуги=оТаб.ВидУслуги) И
(нТаб.ВидЛьготы=оТаб.ВидЛьготы) И (нТаб.Льготник=оТаб.Льготник) Тогда
тНайден=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если тНайден=0 Тогда
нТаб.НоваяСтрока();
нТаб.ВидУслуги=оТаб.ВидУслуги;
нТаб.ВидЛьготы=оТаб.ВидЛьготы;
нТаб.Льготник=оТаб.Льготник;
нТаб.ЛьготаВода=нТаб.ЛьготаВода-оТаб.ЛьготаВода;
нТаб.ЛьготаПропуск=нТаб.ЛьготаПропуск-оТаб.ЛьготаПропуск;
нТаб.ЛьготаОчистка=нТаб.ЛьготаОчистка-оТаб.ЛьготаОчистка;
КонецЕсли;
КонецЦикла;
нТаб.Свернуть(«ВидУслуги,ВидЛьготы,Льготник»,»ДатаРасчета,ЛьготаВода,ЛьготаПропуск,ЛьготаОчистка»);
КонецПроцедуры
//———————————————————
// определяем наличие счетчиков если полив вне счетчика то 0
Функция глРас_РасходПоСчетчику(глСведенияПоАбоненту,тВидУслуги,тВидРасчета,тНачРасч,тКонРасч)
ТабСредний=СоздатьОбъект(«ТаблицаЗначений»);
ТабСредний.НоваяКолонка(«ДНач»,»Дата»);
ТабСредний.НоваяКолонка(«ДКон»,»Дата»);
ТабСредний.НоваяКолонка(«СредР»,»Число»,14,6);
ТабСчетчики=глСведенияПоАбоненту.ПолучитьЗначение(1,»Счетчики»);
ТабПок=СоздатьОбъект(«ТаблицаЗначений»);
тРасход=0;
ТабСчетчики.ВыбратьСтроки();
Пока ТабСчетчики.ПолучитьСтроку()>0 Цикл
тСчетчик=ТабСчетчики.ДокИзм;
тСчетчик.ВыгрузитьТабличнуюЧасть(ТабПок);
Для ел=1 По ТабПок.КоличествоСтрок() Цикл
ТабПок.ПолучитьЗначение(ел,»ДатаПок»);
нДат=ТабПок.ПолучитьЗначение(ел,»ДатаПок»);
нПок=ТабПок.ПолучитьЗначение(ел,»Обьем»);
Если ел+1<=ТабПок.КоличествоСтрок() Тогда
кДат=ТабПок.ПолучитьЗначение(ел+1,»ДатаПок»);
кПок=ТабПок.ПолучитьЗначение(ел+1,»Обьем»);
Иначе
кПок=нПок; кДат=нДат;
КонецЕсли;
ТабСредний.НоваяСтрока();
ТабСредний.ДНач=нДат;
ТабСредний.ДКон=кДат;
Если кДат=нДат Тогда
ТабСредний.СредР=0
Иначе
ТабСредний.СредР=кПок/(кДат-нДат);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ТабСредний.ВыбратьСтроки();
Пока ТабСредний.ПолучитьСтроку()>0 Цикл
нДат=ТабСредний.ДНач;
кДат=ТабСредний.ДКон;
Если ВходитьВПериод(тНачРасч,нДат,кДат)=0 Тогда
Продолжить;
КонецЕсли;
Если тНачРасч=нДат Тогда
тРасход=тРасход+ТабСредний.СредР *(тКонРасч-тНачРасч);
Иначе
Если тКонРасч=тНачРасч Тогда
тРасход=тРасход+ТабСредний.СредР;
Иначе
тРасход=тРасход+ТабСредний.СредР *(тКонРасч-тНачРасч+1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат(тРасход);
КонецФункции
//—————————————————————————-
Процедура глРас_ЗаполнитьИсторию(ТабВсеИзменения,тИмя,тЗн,ДатаНачРасч,ДатаКонРасч)
ПерИст=СоздатьОбъект(«Периодический»);
ПерИст.ИспользоватьОбъект(тИмя,тЗн);
ПерИст.ВыбратьЗначения();
Пока ПерИст.ПолучитьЗначение()>0 Цикл
Если (ПерИст.ДатаЗнач>=ДатаНачРасч) И (ПерИст.ДатаЗнач<=ДатаКонРасч) Тогда
ТабВсеИзменения.НоваяСтрока();
ТабВсеИзменения.тДата=ПерИст.ДатаЗнач;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//—————————————————————
Процедура глРас_ИзменениеТарифов(ТабВсеИзменения,ДатаНачРасч,ДатаКонРасч) Экспорт
Спр=СоздатьОбъект(«Справочник.ВидыУслуг»);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()>0 Цикл
глРас_ЗаполнитьИсторию(ТабВсеИзменения,»ЦенаВода»,Спр.ТекущийЭлемент(),ДатаНачРасч,ДатаКонРасч);
глРас_ЗаполнитьИсторию(ТабВсеИзменения,»ЦенаОтопление»,Спр.ТекущийЭлемент(),ДатаНачРасч,ДатаКонРасч);
глРас_ЗаполнитьИсторию(ТабВсеИзменения,»ЦенаДопОтоп»,Спр.ТекущийЭлемент(),ДатаНачРасч,ДатаКонРасч);
КонецЦикла;
КонецПроцедуры
//—————————————————————
Функция глРас_ОпределитьТариф(тВидУслуги,тВидРасчета,тДата) Экспорт
Спр=СоздатьОбъект(«Справочник.ВидыУслуг»);
Спр.ВыбратьЭлементы();
Если Спр.НайтиЭлемент(тВидУслуги)>0 Тогда
Если тВидРасчета=Перечисление.ВидыРасчетов.ГорячаяВода Тогда
Возврат(Спр.ЦенаВода.Получить(тДата));
ИначеЕсли тВидРасчета=Перечисление.ВидыРасчетов.Отопление Тогда
Возврат(Спр.ЦенаОтопление.Получить(тДата));
ИначеЕсли тВидРасчета=Перечисление.ВидыРасчетов.ОтоплениеСверхНормы Тогда
Возврат(Спр.ЦенаДопОтоп.Получить(тДата));
КонецЕсли;
КонецЕсли;
Возврат(0);
КонецФункции
//————————————————————————
Функция ПлощадьСверхНормы(глСведенияПоАбоненту)
Площадь=глСведенияПоАбоненту.ПолучитьЗначение(1,»Площадь»);
//КолВоЖильцов=глСведенияПоАбоненту.ПолучитьЗначение(1,»КолВоЖильцов»);
КолВоЖильцов=глСведенияПоАбоненту.ПолучитьЗначение(1,»КолВоЖильцовПроп»);
Пенсионер=глСведенияПоАбоненту.ПолучитьЗначение(1,»Пенсионер»);
Судья=глСведенияПоАбоненту.ПолучитьЗначение(1,»Судья»);
ТЛьготники=СоздатьОбъект(«ТаблицаЗначений»);
ТЛьготники.Загрузить(глСведенияПоАбоненту.ПолучитьЗначение(1,»Льготники»));
НОРМА=0;
Если ТЛьготники.КоличествоСтрок()>0 Тогда
Возврат(0);
КонецЕсли;
Если КолВоЖильцов=0 Тогда
НОРМА=Площадь;
ИначеЕсли КолВоЖильцов=1 Тогда
НОРМА=43;
ИначеЕсли КолВоЖильцов=2 Тогда
НОРМА=62;
ИначеЕсли КолВоЖильцов>2 Тогда
НОРМА=18*КолВоЖильцов+20;
КОНЕЦЕСЛИ;
СверхНормы=?(Площадь>НОРМА,Площадь-НОРМА,0);
Если (Пенсионер=1) ИЛИ (Судья=1) Тогда
СверхНормы=0;
КонецЕсли;
Возврат(СверхНормы);
КонецФункции
//———————————————————————-
// определяем сколько потреблено воды
Функция глРас_ОпределитьРасход(глСведенияПоАбоненту,тВидУслуги,тВидРасчета,тНачРасч,тКонРасч,тНорма)
тРасход=0;
КолВоЖильцов=глСведенияПоАбоненту.ПолучитьЗначение(1,»КолВоЖильцов»);
ТабСчетчики=глСведенияПоАбоненту.ПолучитьЗначение(1,»Счетчики»);
Спр=СоздатьОбъект(«Справочник.ВидыУслуг»);
Спр.ВыбратьЭлементы();
Если Спр.НайтиЭлемент(тВидУслуги)>0 Тогда
Если тВидРасчета=Перечисление.ВидыРасчетов.ГорячаяВода Тогда
тРасход=Спр.ТарифВода.Получить(тКонРасч)/Спр.ЦенаВода.Получить(тКонРасч);
тРасход=тРасход/(КонМесяца(тКонРасч)-НачМесяца(тКонРасч)+1);
тНорма=тРасход*(тКонРасч-тНачРасч+1);
Если ТабСчетчики.КоличествоСтрок()> 0 Тогда
Если ТабСчетчики.СрокНач<=тНачРасч Тогда
тРасход= глРас_РасходПоСчетчику(глСведенияПоАбоненту,тВидУслуги,тВидРасчета,тНачРасч,тКонРасч);
Иначе
тРасход=тРасход*(тКонРасч-тНачРасч+1)*КолВоЖильцов;
КонецЕсли;
Иначе
тРасход=тРасход*(тКонРасч-тНачРасч+1)*КолВоЖильцов;
КонецЕсли;
ИначеЕсли тВидРасчета=Перечисление.ВидыРасчетов.Отопление Тогда
тРасход=глСведенияПоАбоненту.ПолучитьЗначение(1,»Площадь»);
тНорма=тРасход;
тРасход=тРасход-ПлощадьСверхНормы(глСведенияПоАбоненту);
ИначеЕсли тВидРасчета=Перечисление.ВидыРасчетов.ОтоплениеСверхНормы Тогда
тРасход=ПлощадьСверхНормы(глСведенияПоАбоненту);
КонецЕсли;
КонецЕсли;
Возврат(тРасход);
КонецФункции
//——————————————————————————————-
//—————————————————————————-
Процедура глРас_ПроверитьСписки(тСписок,ТабВсеИзменения,ДатаНачРасч,ДатаКонРасч)
тСписок.ВыбратьСтроки();
Пока тСписок.ПолучитьСтроку()>0 Цикл
Если (ПустоеЗначение(тСписок.СрокНач)=0) И (тСписок.СрокНач>=ДатаНачРасч) И (тСписок.СрокНач<=ДатаКонРасч) Тогда
тСтр=0;
Если ТабВсеИзменения.НайтиЗначение(тСписок.СрокНач,тСтр,»тДата»)=0 Тогда
ТабВсеИзменения.НоваяСтрока();
ТабВсеИзменения.тДата= тСписок.СрокНач;
КонецЕсли;
КонецЕсли;
Если (ПустоеЗначение(тСписок.СрокОкон)=0) И (тСписок.СрокОкон>=ДатаНачРасч) И (тСписок.СрокОкон<=ДатаКонРасч) Тогда
ТабВсеИзменения.НоваяСтрока();
ТабВсеИзменения.тДата= ?(тСписок.СрокОкон=ДатаКонРасч,ДатаКонРасч,тСписок.СрокОкон+1);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//————————————————————
// для пересчета делаем таблицу дат изменений
Процедура глРас_ОпределитьВсеИзменения(ТабВсеИзменения,тАбонент,ДатаНачРасч,ДатаКонРасч) Экспорт
// изменился собственник
глРас_ЗаполнитьИсторию(ТабВсеИзменения,»Собственник»,тАбонент,ДатаНачРасч,ДатаКонРасч);
// изменилась площадь
глРас_ЗаполнитьИсторию(ТабВсеИзменения,»Площадь»,тАбонент,ДатаНачРасч,ДатаКонРасч);
// изменилось число жильцов
глРас_ЗаполнитьИсторию(ТабВсеИзменения,»КолВоЖильцов»,тАбонент,ДатаНачРасч,ДатаКонРасч);
// изменился статус пенсионер
глРас_ЗаполнитьИсторию(ТабВсеИзменения,»Пенсионер»,тАбонент,ДатаНачРасч,ДатаКонРасч);
// изменился статус судья
глРас_ЗаполнитьИсторию(ТабВсеИзменения,»Судья»,тАбонент,ДатаНачРасч,ДатаКонРасч);
// изменились льготники
ТабЛьготники=СоздатьОбъект(«ТаблицаЗначений»);
глСоздатьСписки(ТабЛьготники,»Льготники»);
глПолучитьСписки(тАбонент,»Льготники»,ТабЛьготники,ДатаКонРасч,1);
глРас_ПроверитьСписки(ТабЛьготники,ТабВсеИзменения,ДатаНачРасч,ДатаКонРасч);
// изменились услуги
ТабУслуги=СоздатьОбъект(«ТаблицаЗначений»);
глСоздатьСписки(ТабУслуги,»Услуги»);
глПолучитьСписки(тАбонент,»Услуги»,ТабУслуги,ДатаКонРасч,1);
глРас_ПроверитьСписки(ТабУслуги,ТабВсеИзменения,ДатаНачРасч,ДатаКонРасч);
////
ТабВРасчетов =СоздатьОбъект(«ТаблицаЗначений»);
глСоздатьСписки(ТабВРасчетов ,»ВРасчетов»);
глПолучитьСписки(тАбонент,»ВРасчетов»,ТабВРасчетов,ДатаКонРасч,1);
глРас_ПроверитьСписки(ТабВРасчетов,ТабВсеИзменения,ДатаНачРасч,ДатаКонРасч);
// изменились счетчики
ТабСчетчики=СоздатьОбъект(«ТаблицаЗначений»);
глСоздатьСписки(ТабСчетчики ,»Счетчики»);
глПолучитьСписки(тАбонент,»Счетчики»,ТабСчетчики,ДатаКонРасч,1);
глРас_ПроверитьСписки(ТабСчетчики,ТабВсеИзменения,ДатаНачРасч,ДатаКонРасч);
////
ТабСчетчики.ВыбратьСтроки();
Пока ТабСчетчики.ПолучитьСтроку()>0 Цикл
тСчетчик=ТабСчетчики.ДокИзм;
тСчетчик.ВыбратьСтроки();
КолвоСтр=ТСчетчик.КоличествоСтрок();
к=0;
Пока тСчетчик.ПолучитьСтроку()>0 Цикл
к=к+1;
Если ВходитьВПериод(тСчетчик.ДатаПок,ДатаНачРасч,ДатаКонРасч)=0 Тогда
Продолжить;
КонецЕсли;
Если (тСчетчик.ДатаПок=НачМесяца(тСчетчик.ДатаПок)) ИЛИ
(тСчетчик.ДатаПок=КонМесяца(тСчетчик.ДатаПок)) Тогда
Продолжить;
КонецЕсли;
Если к <КолвоСтр тогда
ТабВсеИзменения.НоваяСтрока();
ТабВсеИзменения.тДата=тСчетчик.ДатаПок+1;
Иначе
// ТабВсеИзменения.НоваяСтрока();
//ТабВсеИзменения.тДата=тСчетчик.ДатаПок;
КонецЕсли;
КонецЦикла;
ТабВсеИзменения.НоваяСтрока();
ТабВсеИзменения.тДата=тСчетчик.ДатаПок;
КонецЦикла;
ТабВсеИзменения.Свернуть(«тДата»,»тДата»);
КонецПроцедуры
//—————————————————————-
// так ка расчеты ведем помесячно делаем разбивку по месяцам
Процедура глРас_ДобавитьДаты(ТабВсеИзменения,НачРасчДата,КонРасчДата) Экспорт
времТаб=СоздатьОбъект(«ТаблицаЗначений»);
времТаб.Загрузить(ТабВсеИзменения);
времТаб.УдалитьСтроки();
времТаб.НоваяСтрока();
времТаб.тДата=НачРасчДата;
ТабВсеИзменения.ВыбратьСтроки();
Пока ТабВсеИзменения.ПолучитьСтроку()>0 Цикл
Если (ТабВсеИзменения.тДатаНачРасчДата)
//И (ТабВсеИзменения.тДатаКонРасчДата)
Тогда
времТаб.НоваяСтрока();
времТаб.тДата=ТабВсеИзменения.тДата-1;
времТаб.НоваяСтрока();
времТаб.тДата=ТабВсеИзменения.тДата;
КонецЕсли;
КонецЦикла;
времТаб.НоваяСтрока();
времТаб.тДата=КонРасчДата;
тПриз=0;
//глВывестиТаблицу(времТаб);
Пока тПриз=0 Цикл
тПриз=1; ел=1;
времТаб.Сортировать(«тДата»);
Пока ел<=времТаб.КоличествоСтрок()-1 Цикл
нДата=времТаб.ПолучитьЗначение(ел,1);
кДата=времТаб.ПолучитьЗначение(ел+1,1);
// Сообщить(нДата);
// Сообщить(кДата);
Если ПроверитьМесяц(нДата,кДата)0 Тогда
времТаб.НоваяСтрока();
времТаб.тДата=КонМесяца(нДата);
времТаб.НоваяСтрока();
времТаб.тДата=КонМесяца(нДата)+1;
тПриз=0;
Прервать;
КонецЕсли;
ел=ел+2;
КонецЦикла;
КонецЦикла;
ТабВсеИзменения.Загрузить(времТаб);
ТабВсеИзменения.Сортировать(«тДата»);
КонецПроцедуры
//————————————————————————
Процедура глРас_ОпределитьНорму(ТабЛьготыНач,тВидРасчета,КолВоЖильцов,тНорма,НачРасчета,КонРасчета)
тПлощадь=тНорма;
Если тВидРасчета=Перечисление.ВидыРасчетов.ГорячаяВода Тогда
Если ТабЛьготыНач.ВидЛьготы.ЗаВодуНеСчитать=1 Тогда
ТабЛьготыНач.Норма = 0;
Иначе
ТабЛьготыНач.Норма=тНорма;
КонецЕсли;
ИначеЕсли тВидРасчета=Перечисление.ВидыРасчетов.Отопление Тогда
Если ТабЛьготыНач.ВидЛьготы.ЗаВодуНеСчитать=1 Тогда
ТабЛьготыНач.Норма = 18;
Иначе
Если КолВоЖильцов=1 Тогда
ТабЛьготыНач.Норма=33;
ИначеЕсли КолВоЖильцов=2 Тогда
ТабЛьготыНач.Норма=21;
Иначе
Если (ТабЛьготыНач.ВидЛьготы.СтарыйКод=21) И (НачРасчета>=Дата(2004,4,1)) Тогда
врНорма=тПлощадь/?(КолВоЖильцов>0,КолВоЖильцов,1);
ТабЛьготыНач.Норма=?(врНорма>=18,18,врНорма);
Иначе
ТабЛьготыНач.Норма=18;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ТабЛьготыНач.ВидЛьготы.ПоНорме1 Тогда
ТабЛьготыНач.Норма = тНорма;
КонецЕсли;
ТабЛьготыНач.Норма=?(тНорма<ТабЛьготыНач.Норма,тНорма,ТабЛьготыНач.Норма);
ИначеЕсли тВидРасчета=Перечисление.ВидыРасчетов.ОтоплениеСверхНормы Тогда
ТабЛьготыНач.Норма=0;
КонецЕсли;
КонецПроцедуры
//———————————————————————
// РасчетЛьгот
Процедура РасчетЛьгот(ТабЛьготники,тНачислено,ТабЛьготыНач,КолВоЖильцов,тНорма)
Если тНачислено.Сумма=0 Тогда
Возврат;
КонецЕсли;
тКолВоЛьготников=2;
// определить колво льготник
ТабЛьготники.ВыбратьСтроки();
Пока ТабЛьготники.ПолучитьСтроку()>0 Цикл
Если ТабЛьготники.КатегорияУчета1.НаВсех=1 Тогда
тКолВоЛьготников=КолВоЖильцов;
КонецЕсли;
КонецЦикла;
ТабЛьготники.ВыбратьСтроки();
Пока ТабЛьготники.ПолучитьСтроку()>0 Цикл
Если ТабЛьготники.КатегорияУчета1.НаВсех1 Тогда
тКолВоЛьготников=тКолВоЛьготников-1;
КонецЕсли;
КонецЦикла;
ТабЛьготники.ВыбратьСтроки();
Пока ТабЛьготники.ПолучитьСтроку()>0 Цикл
Если тНачислено.ВидРасчета=Перечисление.ВидыРасчетов.ОтоплениеСверхНормы Тогда
Возврат;
КонецЕсли;
ТабЛьготыНач.НоваяСтрока();
ТабЛьготыНач.ДатаРасчета=тНачислено.ДатаРасчета;
ТабЛьготыНач.ВидУслуги=тНачислено.ВидУслуги;
ТабЛьготыНач.ВидРасчета=тНачислено.ВидРасчета;
ТабЛьготыНач.ВидЛьготы=ТабЛьготники.КатегорияУчета1;
ТабЛьготыНач.Льготник=ТабЛьготники.ТекЭлем;
ТабЛьготыНач.ЧислоЛьготников=1;
глРас_ОпределитьНорму(ТабЛьготыНач,тНачислено.ВидРасчета,КолВоЖильцов,тНорма,тНачислено.НачРасчета,тНачислено.КонРасчета);
ТабЛьготыНач.Льгота=ТабЛьготыНач.Норма*тНачислено.Цена*ТабЛьготыНач.ВидЛьготы.ПроцентСкидки/100;
Если ТабЛьготыНач.ВидЛьготы.НаВсех=1 Тогда
ТабЛьготыНач.ЧислоЛьготников=тКолВоЛьготников;
тРасход=ТабЛьготыНач.Норма*тКолВоЛьготников;
Если тНачислено.ВидРасчета=Перечисление.ВидыРасчетов.Отопление Тогда
Если тРасход>тНорма Тогда
тРасход=тНорма;
КонецЕсли;
КонецЕсли;
ТабЛьготыНач.Льгота=тРасход*тНачислено.Цена*ТабЛьготыНач.ВидЛьготы.ПроцентСкидки/100;
Если тНачислено.СуммаЛьгот+ТабЛьготыНач.Льгота>тНачислено.Сумма Тогда
ТабЛьготыНач.Льгота=тНачислено.Сумма-тНачислено.СуммаЛьгот;
тНачислено.СуммаЛьгот=тНачислено.СуммаЛьгот+ТабЛьготыНач.Льгота;
ТабЛьготыНач.НачРасчета=тНачислено.НачРасчета;
ТабЛьготыНач.КонРасчета=тНачислено.КонРасчета;
ТабЛьготыНач.ДокИзм=тНачислено.ДокИзм;
Прервать;
КонецЕсли;
КонецЕсли;
Если тНачислено.СуммаЛьгот+ТабЛьготыНач.Льгота>тНачислено.Сумма Тогда
ТабЛьготыНач.Льгота=тНачислено.Сумма-тНачислено.СуммаЛьгот;
тНачислено.СуммаЛьгот=тНачислено.СуммаЛьгот+ТабЛьготыНач.Льгота;
ТабЛьготыНач.НачРасчета=тНачислено.НачРасчета;
ТабЛьготыНач.КонРасчета=тНачислено.КонРасчета;
ТабЛьготыНач.ДокИзм=тНачислено.ДокИзм;
Прервать;
КонецЕсли;
тНачислено.СуммаЛьгот=тНачислено.СуммаЛьгот+ТабЛьготыНач.Льгота;
ТабЛьготыНач.НачРасчета=тНачислено.НачРасчета;
ТабЛьготыНач.КонРасчета=тНачислено.КонРасчета;
ТабЛьготыНач.ДокИзм=тНачислено.ДокИзм;
КонецЦикла;
КонецПроцедуры
//————————————————————
// расчет одной услуги
Процедура Расчет_ОдногоПериода(тАбонент,тДок,тНачРасч,тКонРасч,тНачислено,ТабЛьготыНач)
// выбираю все данные по абоненту
глСведенияПоАбоненту=СоздатьОбъект(«ТаблицаЗначений»);
глПолучитьВсеДанныеПоАбоненту(глСведенияПоАбоненту,тАбонент,тКонРасч);
ТабУслуги=глСведенияПоАбоненту.ПолучитьЗначение(1,»Услуги»);
ТабВидРасчета=глСведенияПоАбоненту.ПолучитьЗначение(1,»ВРасчетов»);
ТабЛьготники=глСведенияПоАбоненту.ПолучитьЗначение(1,»Льготники»);
КолВоЖильцов=глСведенияПоАбоненту.ПолучитьЗначение(1,»КолВоЖильцов»);
// глВывестиТаблицу(ТабВидРасчета);
Если ТабУслуги.КоличествоСтрок()>0 Тогда
тВидУслуги=ТабУслуги.ПолучитьЗначение(1,»Услуга»);
ТабВидРасчета.ВыбратьСтроки();
Пока ТабВидРасчета.ПолучитьСтроку()>0 Цикл
Если (тДок.ПоВсемВидам=1) ИЛИ (ТабВидРасчета.ВидРасчета=тДок.тВидРасчета) Тогда
тВидРасчета=ТабВидРасчета.ВидРасчета;
тНорма=0;
тРасход=глРас_ОпределитьРасход(глСведенияПоАбоненту,тВидУслуги,тВидРасчета,тНачРасч,тКонРасч,тНорма);
тЦена= глРас_ОпределитьТариф(тВидУслуги,тВидРасчета,тКонРасч);
тПроц=?(ТабВидРасчета.ПроцентСнятия=0,1,-1*ТабВидРасчета.ПроцентСнятия/100);
СуммаНач=ОКР(тРасход*тЦена*тПроц,2);
Если (тВидРасчета=Перечисление.ВидыРасчетов.Отопление) или (тВидРасчета=Перечисление.ВидыРасчетов.ОтоплениеСверхНормы) тогда
СуммаНач=(тКонРасч-тНачРасч+1)*(СуммаНач/(КонМесяца(тКонРасч)-НачМесяца(тКонРасч)+1));
КонецЕсли;
тНачислено.НоваяСтрока();
тНачислено.ДатаРасчета=тДок.ДатаДок;
тНачислено.НачРасчета=тНачРасч;
тНачислено.КонРасчета=тКонРасч;
тНачислено.ВидУслуги=тВидУслуги;
тНачислено.ВидРасчета=тВидРасчета;
тНачислено.Цена=тЦена;
тНачислено.ПлощадьРасход=тРасход;
тНачислено.Сумма=СуммаНач;
РасчетЛьгот(ТабЛьготники,тНачислено,ТабЛьготыНач,КолВоЖильцов,тНорма);
//Если (тВидРасчета=Перечисление.ВидыРасчетов.Отопление) или (тВидРасчета=Перечисление.ВидыРасчетов.ОтоплениеСверхНормы) тогда
// тНачислено.СуммаЛьгот=(тКонРасч-тНачРасч+1)*(тНачислено.СуммаЛьгот/(КонМесяца(тКонРасч)-НачМесяца(тКонРасч)+1));
//КонецЕсли;
тНачислено.Всего=тНачислено.Сумма-тНачислено.СуммаЛьгот;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
//————————————————————
// расчет по абоненту
// РасчДата
// 1) расчет тарифа по холодной воде
//Процедура РасчетАбонента(типРасчета,тАбонент,ДатаНачРасч,ДатаКонРасч,ДатаАкт,тУслуга,ТабРасчеты,ТабЛьготыНач,ТабНачислено) Экспорт
Процедура РасчетАбонента(тАбонент,тДок) Экспорт
// выбираю все данные по абоненту
глСведенияПоАбоненту=СоздатьОбъект(«ТаблицаЗначений»);
глПолучитьВсеДанныеПоАбоненту(глСведенияПоАбоненту,тАбонент,тДок.КонРасч);
ЧислоЖильцов=глСведенияПоАбоненту.ПолучитьЗначение(1,»КолвоЖильцов»);
Площадь=глСведенияПоАбоненту.ПолучитьЗначение(1,»Площадь»);
ТабЛьготники=глСведенияПоАбоненту.ПолучитьЗначение(1,»Льготники»);
ТабУслуги=глСведенияПоАбоненту.ПолучитьЗначение(1,»Услуги»);
ТабВидРасчета=глСведенияПоАбоненту.ПолучитьЗначение(1,»ВРасчета»);
ТабСчетчики=глСведенияПоАбоненту.ПолучитьЗначение(1,»Счетчики»);
ТабНачислено=глСведенияПоАбоненту.ПолучитьЗначение(1,»Начисления»);
// Если ТабУслуги.КоличествоСтрок()
// Пока ТабВидРасчета.ПолучитьСтроку()>0 Цикл
// Если (тДок.ПоВсемВидам=1) ИЛИ (ТабВидРасчета.ВидРасчета=тДок.тВидРасчета) Тогда
// // Расчет_ОдногоВида(тАбонент,ТабВидРасчета.ВидРасчета);
// КонецЕсли;
// КонецЦикла;
// // расчет по счетчику
// Если ТабСчетчики.КоличествоСтрок()>0 Тогда
// ТабОбьем=СоздатьОбъект(«ТаблицаЗначений»);
// глСоздатьОбьемы(ТабОбьем);
//// ПолучитьДанныеПоСчетчикам(ТабСчетчики,ДатаКонРасч,ТабОбьем);
// КонецЕсли;
ТабВидРасчета.ВыбратьСтроки();
Пока ТабВидРасчета.ПолучитьСтроку()>0 Цикл
//Если (тДок.ПоВсемВидам=1) ИЛИ (ТабУслуги.Услуга=тУслуга) Тогда
// РасчетОднойУслуги(типРасчета,ТабУслуги.Услуга,ТабРасчеты,ЧислоЖильцов,Площадь,ТабЛьготники,ТабСчетчики,тАбонент,ДатаНачРасч,ДатаКонРасч,ДатаАкт,ТабЛьготыНач,ТабОбьем);
//КонецЕсли;
КонецЦикла;
КонецПроцедуры
//——————————————————————-
// начисления по абоненту
// 1 — определяем все изменения за расчетный период
// 1 — определяем расчетные периоды
Процедура глРасчет_Абонента(ТабВсеИзменения,тАбонент,тДок,ТабНачислено,ТабЛьготыНач) Экспорт
ТабВсеИзменения.Свернуть(«тДата»,»тДата»);
// глВывестиТаблицу(ТабВсеИзменения);
// во всех изменениях изменения по тарифу
ТабИзмПоАбон=СоздатьОбъект(«ТаблицаЗначений»);
ТабИзмПоАбон.Загрузить(ТабВсеИзменения);
// определяем что изменялость конкретно по абоненту
глРас_ОпределитьВсеИзменения(ТабИзмПоАбон,тАбонент,тДок.НачРасчета,тДок.КонРасчета);
// если период расчета большой то добавляем начало и конец месяца
глРас_ДобавитьДаты(ТабИзмПоАбон,тДок.НачРасчета,тДок.КонРасчета);
// глВывестиТаблицу(ТабИзмПоАбон);
// разбиваем расчет на периоды в соотвествии с изменениями по абоненту
ел=1;
Пока ел<ТабИзмПоАбон.КоличествоСтрок() Цикл
нДата=ТабИзмПоАбон.ПолучитьЗначение(ел,1);
кДата=ТабИзмПоАбон.ПолучитьЗначение(ел+1,1);
Расчет_ОдногоПериода(тАбонент,тДок,нДата,кДата,ТабНачислено,ТабЛьготыНач);
ел=ел+2;
КонецЦикла;
// глВывестиТаблицу(ТабНачислено);
// глДобавитьНачисление(тАбонент,ДатаАкт,ТабРасчеты,ТабЛьготНач);
КонецПроцедуры
Функция ПериодСовпадает(ТабР,ТабН)
Если (НачМесяца(ТабР.НачРасчета)=НачМесяца(ТабН.НачРасчета)) И
(КонМесяца(ТабР.КонРасчета)=КонМесяца(ТабН.КонРасчета)) Тогда
Возврат(1);
КонецЕсли;
Возврат(0);
КонецФункции
//————————————————————
// расчет по абоненту
// РасчДата
// 1) расчет тарифа по холодной воде
Процедура глПересчет_Абонента(ТабН,ТабР,ТабЛН,ТабЛР) Экспорт
Перем времН,времЛ;
СвернутьПоПериодам(ТабН,1);
СвернутьПоПериодам(ТабР,1);
СвернутьПоПериодам(ТабЛН,2);
СвернутьПоПериодам(ТабЛР,2);
ТабР.ВыбратьСтроки();
Пока ТабР.ПолучитьСтроку()>0 Цикл
ТабН.ВыбратьСтроки();
Пока ТабН.ПолучитьСтроку()>0 Цикл
Если (ТабР.ВидУслуги=ТабН.ВидУслуги) И (ТабР.ВидРасчета=ТабН.ВидРасчета) И
(ПериодСовпадает(ТабН,ТабР)>0) Тогда
ТабР.Всего=ТабР.Всего-ТабН.Всего;
ТабР.СуммаЛьгот=ТабР.СуммаЛьгот-ТабН.СуммаЛьгот;
ТабР.Сумма=ТабР.Сумма-ТабН.Сумма;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// снятие чего не стало
ТабН.ВыбратьСтроки();
Пока ТабН.ПолучитьСтроку()>0 Цикл
ТабР.ВыбратьСтроки();
лПриз=0;
Пока ТабР.ПолучитьСтроку()>0 Цикл
Если (ТабР.ВидУслуги=ТабН.ВидУслуги) И (ТабР.ВидРасчета=ТабН.ВидРасчета) И
(ПериодСовпадает(ТабН,ТабР)>0) Тогда
лПриз=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если лПриз=0 Тогда
ТабР.НоваяСтрока();
ТабР.ДатаРасчета=ТабН.ДатаРасчета;
ТабР.ВидУслуги=ТабН.ВидУслуги;
ТабР.ВидРасчета=ТабН.ВидРасчета;
ТабР.Всего=-ТабН.Всего;
ТабР.СуммаЛьгот=-ТабН.СуммаЛьгот;
ТабР.Сумма=-ТабН.Сумма;
ТабР.Цена=ТабН.Цена;
ТабР.ПлощадьРасход=-ТабН.ПлощадьРасход;
ТабР.НачРасчета=ТабН.НачРасчета;
ТабР.КонРасчета=ТабН.КонРасчета;
КонецЕсли;
КонецЦикла;
// теперь льготы начисл
ТабЛР.ВыбратьСтроки();
Пока ТабЛР.ПолучитьСтроку()>0 Цикл
ТабЛН.ВыбратьСтроки();
Пока ТабЛН.ПолучитьСтроку()>0 Цикл
Если (ТабЛР.ВидУслуги=ТабЛН.ВидУслуги) И
(ТабЛР.ВидРасчета=ТабЛН.ВидРасчета) И
(ТабЛР.Льготник=ТабЛН.Льготник) И
(ПериодСовпадает(ТабЛН,ТабЛР)>0) Тогда
ТабЛР.Льгота=ТабЛР.Льгота-ТабЛН.Льгота;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// снятие чего не стало
ТабЛН.ВыбратьСтроки();
Пока ТабЛН.ПолучитьСтроку()>0 Цикл
ТабЛР.ВыбратьСтроки();
лПриз=0;
Пока ТабЛР.ПолучитьСтроку()>0 Цикл
Если (ТабЛР.ВидУслуги=ТабЛН.ВидУслуги) И
(ТабЛР.ВидРасчета=ТабЛН.ВидРасчета) И
(ТабЛР.Льготник=ТабЛН.Льготник) И
(ПериодСовпадает(ТабЛН,ТабЛР)>0) Тогда
лПриз=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если лПриз=0 Тогда
ТабЛР.НоваяСтрока();
ТабЛР.ДатаРасчета=ТабЛН.ДатаРасчета;
ТабЛР.ВидУслуги=ТабЛН.ВидУслуги;
ТабЛР.ВидРасчета=ТабЛН.ВидРасчета;
ТабЛР.ВидЛьготы=ТабЛН.ВидЛьготы;
ТабЛР.Льготник=ТабЛН.Льготник;
ТабЛР.ЧислоЛьготников=ТабЛН.ЧислоЛьготников;
ТабЛР.Норма=ТабЛН.Норма;
ТабЛР.Льгота=-ТабЛН.Льгота;
ТабЛР.НачРасчета=ТабЛН.НачРасчета;
ТабЛР.КонРасчета=ТабЛН.КонРасчета;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Предопределенная процедура
Процедура ПриЗавершенииРаботыСистемы()
Перем ЗапрашиватьПодтверждениеПриВыходе;
ЗапрашиватьПодтверждениеПриВыходе = ПустоеЗначение(ВосстановитьЗначение(«НеЗапрашиватьПодтверждениеПриВыходе»));
Если ЗапрашиватьПодтверждениеПриВыходе = 1 Тогда
Если Вопрос(«Закончить работу с программой?», «Да+Нет», 60)=»Нет» Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ПриЗавершенииРаботыСистемы()
///////////////////////////////////////////////////////////////////////////