Примечание | от редактора: опубликованы только текстовые файлы |
Загрузить архив: | |
Файл: ref-24612.zip (4527kb [zip], Скачиваний: 161) скачать |
РЕФЕРАТ
ВКР содержит пояснительную записку на 85 листах формата А4, включающую 21 рисунок, 11 таблиц, 24 литературных источника, 5 приложений.
WEB ПРОГРАММИРОВАНИЕ, WEBСЛУЖБА, 1С, C#, АВТОМАТИЗАЦИЯ,
Цель работы – автоматизация работы с покупателями.
В процессе работы проведён анализ аппаратных и программных средств предприятия, выбраны технологии и средства для решения поставленных задач.
Результаты работы используются на предприятии. Программный комплекс выполняет следующие задачи:
- ускорение обслуживания покупателей на розничных торговых точках,
- ведение точного учёта товаров на удалённых точках,
- поддержка распределённой базы данных,
- предоставление полной информации по текущему ассортименту компании интерактивным пользователям Интернет портала,
- публикация новостей и данных о компании на Интернет портале,
- возможность оформления заказов через Интернет.
.
СОДЕРЖАНИЕ:
TOC o "1-5" h z u ВВЕДЕНИЕ PAGEREF _Toc106719318 h 7
1 ПОСТАНОВКА ЗАДАЧИ НА ПРОЕКТИРОВАНИЕ PAGEREF _Toc106719319 h 8
1.1 Назначение и цели создания программного комплекса PAGEREF _Toc106719320 h 8
1.2 Что было до внедрения АИС. PAGEREF _Toc106719321 h 10
1.3 Структура компьютерной сети предприятия PAGEREF _Toc106719322 h 11
1.4 Выбор программных средств и технологий взаимодействия PAGEREF _Toc106719323 h 12
1.4.1 Выбор СУБД для автоматизации
хозяйственно-складской деятельности
и построения распределённой БД PAGEREF _Toc106719324 h 13
1.4.2 Выбор среды разработки PAGEREF _Toc106719325 h 14
1.4.3 Передача данных через локальную сеть PAGEREF _Toc106719326 h 15
1.4.4 Выбор языка программирования PAGEREF _Toc106719327 h 15
1.4.5 Выбор СУБД для Web сервера PAGEREF _Toc106719328 h 16
1.5 Описание средств разработки PAGEREF _Toc106719329 h 16
1.5.1 «1С Предприятие». Конфигурация «Торговля и склад» PAGEREF _Toc106719330 h 16
1.5.2 MSSQLServer 2000 PAGEREF _Toc106719331 h 21
1.5.3 MSVisualStudio.NET PAGEREF _Toc106719332 h 22
2 ФУНКЦИОНАЛЬНАЯ ЧАСТЬ PAGEREF _Toc106719333 h 25
2.1 Общее функционирование системы на базе «1С» PAGEREF _Toc106719334 h 25
2.2 Функции создания и поддержания распределённой БД PAGEREF _Toc106719335 h 26
2.3.1 Функции WEB службы PAGEREF _Toc106719337 h 29
2.4 Функции ASP.NET приложения PAGEREF _Toc106719338 h 34
2.4.1 Схема работа Интернет сайта PAGEREF _Toc106719339 h 35
2.4.2 Функциональное назначение страниц PAGEREF _Toc106719340 h 37
3 ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ PAGEREF _Toc106719341 h 39
3.1 Общие принципы организации информационной базы PAGEREF _Toc106719342 h 39
3.2 Передача данных удалённым точкам PAGEREF _Toc106719343 h 39
3.3 Ведение БД на WEB сервере с использованием SQLServer 2000 PAGEREF _Toc106719344 h 39
4 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ PAGEREF _Toc106719345 h 45
4.1 Программные средства для создания и поддержания распределённой БД PAGEREF _Toc106719346 h 45
4.1.1 Обработка на центральной базе «Выгрузка накладной» PAGEREF _Toc106719347 h 45
4.1.2 Обработка на удалённой торговой точке - «Загрузка документов» PAGEREF _Toc106719348 h 46
4.2 Автоматизация работы кассира в магазине PAGEREF _Toc106719349 h 48
4.3 WEB приложение PAGEREF _Toc106719350 h 50
4.3.1 Условия на работу WEB приложения у удалённого пользователя. PAGEREF _Toc106719351 h 51
4.3.2 Используемые средства PAGEREF _Toc106719352 h 52
4.3.2.1 Стандартные средства «WEB программирования» PAGEREF _Toc106719353 h 52
4.3.2.2 ASP.NET 2.0 PAGEREF _Toc106719354 h 52
4.3.2.3 ADO.NET PAGEREF _Toc106719355 h 53
4.3.3 Получение данных от WEB Службы PAGEREF _Toc106719356 h 53
4.3.4 Кэширование данных PAGEREF _Toc106719357 h 54
4.3.5 Отправка электронной почты PAGEREF _Toc106719358 h 55
4.3.6 Полномочия пользователей PAGEREF _Toc106719359 h 56
2.4.7 Проблемы и их решение PAGEREF _Toc106719360 h 57
5 ТЕХНОЛОГИЯ ЭКСПЛУАТАЦИИ ПРИЛОЖЕНИЯ PAGEREF _Toc106719361 h 59
5.1 Инструкция оператора системы 1С на удалённом магазине PAGEREF _Toc106719362 h 59
5.1.1 Общие сведения PAGEREF _Toc106719363 h 59
5.1.2 Порядок работы: PAGEREF _Toc106719364 h 59
5.1.3 Продажа (Реализация): PAGEREF _Toc106719365 h 60
5.1.4 Возврат продажи PAGEREF _Toc106719366 h 62
5.1.5 Использование меню фискального регистратора (ФР): PAGEREF _Toc106719367 h 64
5.1.6 Акт сверки: PAGEREF _Toc106719368 h 64
5.1.7 Печать ценников по подбору: PAGEREF _Toc106719369 h 66
5.1.8 Загрузка накладных: PAGEREF _Toc106719370 h 68
5.2 Эксплуатация WEB портала PAGEREF _Toc106719371 h 68
ЗАКЛЮЧЕНИЕ PAGEREF _Toc106719372 h 70
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ PAGEREF _Toc106719373 h 71
ПРИЛОЖЕНИЕ А КОНЦЕПТУАЛЬНВЯ МОДЕЛЬ ПЕРЕНОСА ДАННЫХ PAGEREF _Toc106719374 h 73
ПРИЛОЖЕНИЕ Б КОДWEB СЛУЖБЫ (ФАЙЛ «Service.asmx») PAGEREF _Toc106719375 h 74
ПРИЛОЖЕНИЕ В ФУНКЦИИ ГЛОБАЛЬНОГО МОДУЛЯ, ФОРМИРУЮЩИЕ ДАННЫЕДЛЯWEB СЛУЖБЫPAGEREF _Toc106719376 h 78
ПРИЛОЖЕНИЕ Г НЕКОТОРЫЕ ХРАНИМЫЕПРОЦЕДУРЫИЗАПРОСЫ КСИСТЕМЕ «SQLSERVER» PAGEREF _Toc106719377 h 82
ПРИЛОЖЕНИЕ ДКОД РАБОТЫСWEBСЛУЖБОЙИЗASP.NET PAGEREF _Toc106719378 h 84
Каждая коммерческая организация старается вести точный и полный учёт своей деятельности. Не является исключением и компания, для которой разрабатывался данный комплекс программных средств.
Машины могут автоматизировать работу людей, лишь, будучи правильно запрограммированными.
Для ведения складского учёта используется программа 1С предприятие. Данная платформа была выбрана потому, что для её внедрения требуются относительно невысокие денежные и временные затраты. Кроме этого – данная программа поддерживается производителями фискальных регистраторов (которые используются на точках розничной торговли) и постоянно обновляется в соответствии с изменением законодательства.
В данной области торговли существует жесткая конкуренция. Каждая компания пытается сделать покупку для своего покупателя максимально удобной, быстрой и приятной.
Назначение и цели создаваемого программного комплекса:
- автоматизация хозяйственно – учётной деятельности предприятия посредством компьютеризации удалённых магазинов,
- автоматизация работы с покупателями на удалённых торговых точках,
- автоматизация работы с покупателями через Internetпортал,
- предоставление информации о предприятии, его торговых точках и его ассортимента через Internet.
Задачи Интернет портала:
- Рассказать о предприятии широкому кругу заинтересованных лиц, дать полную информацию по центральному офису и торговым точкам (адреса, телефоны, время работы, схемы проезда),
- Дать покупателю возможность ознакомиться с ассортиментом и ценами компании в удобной форме,
- Дать менеджерам возможность публиковать новости, информируя покупателей (оптовиков),
- Обеспечить возможность заказа покупателем-оптовиком товара,
- Закачивание прайс–листа по указанной группе товаров,
- Отправка текстового сообщения выбранному должностному лицу любым человеком через web интерфейс,
- Ведение статистики посещаемости.
Дополнительные требования, предъявленные руководителем предприятия:
- Ведение статистики по просмотру товаров (выяснить – какие группы товаров интересуют WEB пользователей больше, а какие – меньше),
- Каждый покупатель – оптовик имеет свой пароль, свой прайс, свои полномочия,
- Неавторизированный покупатель видит товар, имеющийся на розничных точках, но не может просмотреть его количество. Цену для всех товаров отображать по первому прайсу (чем больше номер прайса, тем меньше его цена),
- Авторизированный пользователь видит лишь товар на оптовом складе. Также – без конкретизации по количеству. Почему так – рассказано далее,
- Прайс должен скачиваться в соответствии с полномочиями пользователя (два предыдущих пункта). Авторизированный пользователь, наделённый правами просмотра количества должен получить прайс с отражёнными остатками по всем имеющимся товарам,
- Не производить контроль количества запрашиваемого товара и его наличия. Если на остатке значится 10 позиций, а авторизированный пользователь пытается выписать 20, то не выводить ошибку «отсутствует нужное количество», а продолжить оформление заказа. Это сделано в связи с тем, что ассортимент большой и на складе (получатель сформированного заказа) оформят продажу 10 позиций, после чего свяжутся с покупателем, объяснят, что товара не хватает и предложат его аналоги, дабы он добрал до 20 штук. Такова политика предприятия, позволяющая таким образом поднять продажи.
Локальная сеть с программой «1С», работающей в терминальном режиме. Менеджеры меняли цены, оптовый склад делал реализации покупателям. Товар на удалённые точки оформляется как перемещение на другой склад. Весь количественный учёт в магазинах вёлся на бумаге. Раз в несколько дней данные «документы» поступали в центральный офис, где работница забивала на компьютере документ «реализация», тем самым списывая товар с соответствующего склада. Практически каждый день менеджеры меняют цены на товар. После чего они по телефону(или по базе) узнавали – есть ли данный товар в магазинах. Если есть, то они печатали ценники для магазинов. Работа эта кропотлива, в результате чего часто были ситуации, что цена на товар меняется, но магазины об этом не знают.
Теперь по работе с оптовыми покупателями. На каждый товар имеется несколько типов цен. Цена, по которой отпускается товар зависит от объёма либо текущего заказа, либо от того, сколько покупатель брал товара до этого. Получается – каждому покупателю нужен свой прайс-лист. Причём именно по интересующей его группе товаров. Точное количество остатков на складе - коммерческая тайна. Но есть привилегированные покупатели, которым можно показать остатки. Много времени уходило на то, чтобы сформировать отчёт-прайс в 1С, экспортировать в таблицу MSExcel и отправить покупателю по электронной почте. Политикой что кому показывать руководит один человек - начальник предприятия.
Весь этот процесс требовалось автоматизировать, разгрузив персонал от рутины, сделать покупку для покупателя максимально удобной и тем самым выделиться среди конкурентов (а конкуренция в этой области очень жесткая). Кроме того – фирма относительно молодая, сеть розничных магазинов растёт (за полгода с 2 до 4), штат работников растёт, увеличивается количество компьютеров, оборот продаж.
Немаловажную роль играет структура компьютерной сети предприятии. От её топологии зависит вся дальнейшая разработка программного комплекса. Протокол взаимодействия локальной сети: TCP-IP.
Схема локальной сети показана на рисунке 1:
Рисунок 1 – Схема локальной сети предприятия
Благодаря развитому на сегодняшний день в России компьютерному пиратству мы пока что имеем возможность свободно выбирать платформу и среду программирования, не смотря на финансовую составляющую покупки данных программных продуктов.
Все используемые программные средства более подробно будут рассмотрены далее. Сейчас я хочу описать – почему же я остановился именно на них. Ведь на прилавках наших магазинов есть из чего выбирать.
«1С Предприятие» 7.7 выбрано программой для построения складского учёта, так как на сегодняшний день у фирмы 1С в этой области практически нет конкурентов. 1С – программа для ОС Windows. Все компьютеры предприятия работают на платформе Windows (XPProfessionalили Server 2003). Используется система 7.7, а не 8 так как учёт был поставлен до появления на широком рынке версии 8, которая до сих пор не получила широкого распространения (что не исключает, что за ней – будущее). Система обладает нужной гибкостью, масштабируемостью. Синтаксис встроенного языка не представляет сложности и для человека, не имеющего компьютерного образования. Производители заявляют, что система поддерживает логику объектно ориентированного программирования. Но это всё же не так. Программирование – процедурное. Некоторые средства массовой информации причисляют язык 1С к языку 4 уровня, с чем я конечно же тоже не соглашусь. Не хватает гибкости. Основной вариант, который можно рассматривать в качестве альтернативы 1С – это создание самостоятельного продукта. Данный подход требует наличие высококвалифицированного персонала. Для процесса разработки, внедрения и модернизации потребуется больше времени. Но эффективность его использования на мой взгляд была бы выше, так как в системе не было бы ничего лишнего. Выбирать мне особо не приходилось, так как использование 1С началось до моего появления на фирме. Хочется отметить, что конфигурация дорабатывается не только мной, но и информационным отделом фирмы «Столица», с которыми у нас заключено деловое партнёрство. Что тоже повлияло на выбор.
Для создания распределённой БД также было решено использовать 1С, с нештатными средствами.
Данные с 1С надо получать, обрабатывать и предавать по локальной сети на WEBсервер. Кроме того, на Webсервере должен функционировать интернет сайт. Я решил использовать продукты компании Microsoft, которые лучше всего адаптированы под операционную систему MSWindows, быстры и надёжны.
На сегодняшний день серьёзную конкуренцию MSVisualStudio составляет компания Borlandсо своими продуктами – Delphiи Builder. В плане простоты изучения данные средства разработки может быть и проще, не зря ведь в институтах и школах именно на них идёт обучение студентов и школьников. Но в плане ясности, отказоустойчивости, широте охвата областей программирования и документированности(MSDN) – MSVisualStudio– вне конкуренции. Кроме того – я могу в одной графической оболочке разрабатывать две разнородные компоненты своей системы – WebServiceи WebApplication.
В моём распоряжении оказалась Betaверсия VisualStudio 2005, которую, я и решил использовать. Опыта программирования в данной среде у меня практически не было. Русскоязычных ресурсов по версии 2005 очень мало, в релизе возможны существенные изменения вплоть до того, что уже написанные приложения в betaверсии перестанут функционировать. Но есть и преимущества. На 9 семестре в рамках дисциплины я писал лабораторную работу с использованием VisualStudio 2003 и ASP.NET. В новой версии (ASP 2.0) появились новые компоненты, были доработаны старые. Приятно удивил меня GridView своими возможностями. Считаю выбор оправданным. Никаких нареканий к стабильности работы, скорости работы и других характеристик полученных программных продуктов не имею.
Было решено использовать связь «Web Служба» --> «ASP.NETприложение». Данная связка позволяет установить приложение на сервере с программой 1С, которое будет из вне доступно по протоколу HTTP, передавая данные по 80 порту в XML формате. Данная технология позволяет скрыть от конечного пользователя всю сложность преобразования данных из одного вида в другой и обратно. В моём случае используется относительно небольшой объём кода. Для доступа к данным используется технология ADO.NET.
MSVisualStudioпозволяет вести разработку на одном из языков программирования: C#, C++, Java, Basic. Я везде использовал C#. C# перенял лучшее от Javaи C++, автоматизировал работу с памятью, которую компилятор теперь берёт на себя. Синтаксис практически не отличается от C++ и непосредственно написание программного кода занимает меньше времени.
В качестве сервера баз данных был использован MSSQLServer 2000. Первоначально предполагалось использование MSAccess, но Access – настольная (одна программа на один компьютер) система управления данными, а SQLServer– одна из мощнейших сетевых СУБД с возможностью параллельной работы множества пользователей. Высокая скорость обработки, выборки, изменения данных посредством SQLзапросов ставит SQLсервер выше всех конкурентов. Конкуренцию может составить Oracle, но данная СУБД предназначена для решения более глобальных задач. В моём случае данных относительно мало. Такое количество данных легко выдержит любая СУБД, но требуется высокая скорость обработки запросов и возможность работы в многопользовательском режиме. Версию я выбрал 2000, а не 2005 в связи с тем, что 2000 менее требовательна к ресурсам компьютера, а нововведения 2005 мне бы не пригодились. Описание СУБД MSSQLServer, благодаря которому можно понять всю мощь выбранной системы можно найти далее.
В данном разделе я опишу все программные продукты, выбранные выше. Постараюсь выделить лишь самые значимые моменты для работы АИС и моменты, важные для разработки ПО.
Программа , в частности продукт "1С: Торговля и склад", представляет собой недорогую, но надежную и достаточно функциональную систему, с помощью которой можнорешать большинство учетных задач, стоящих перед предприятием.
Программный продукт "1С: Торговля и склад 7.7" предназначен для учета любых видов торговых операций. Благодаря своей гибкости и возможности настройки, система «1С: Торговля и склад 7.7» способна выполнять все функции учета – от ведения справочников и ввода первичных документов до получения различных ведомостей и аналитических отчетов.
Программа "1С: Торговля и склад 7.7" автоматизирует работу на всех этапах деятельности предприятия.
Я не считаю программирование в 1С высококвалифицированной работой. Трудность представляет полное понимание предметной области, грамотная постановка задачи, составление алгоритма и составление запросов на языке запросов 1С. Не случайно ведь есть много «программистов 1С», абсолютно не знающих основ баз данных, но решающих поставленные перед ними задачи. Такие «специалисты» являются очень узкоспециализированными.
"1С:Торговля и склад" содержит разнообразные средства для связи с другими программами.
Возможность импорта и экспорта информации через текстовые файлы позволит обмениваться данными практически с любой программой.
Кроме этого, встроенный язык содержит средства работы с файлами формата DBF.
Также "1С:Торговля и склад" поддерживает современные средства интеграции приложений: OLE, OLE Automation и DDE.
«1С» система обладает нужной гибкость и настраиваемостью. "1С:Торговля и склад" может быть адаптирована к любым особенностям учета на конкретном предприятии. В состав системы входит Конфигуратор, который позволяет при необходимости настроить все основные элементы системы:
- редактировать существующие и создавать новые необходимые документы любой структуры,
- изменять экранные и печатные формы документов,
- создавать журналы для работы с документами и произвольно перераспределять документы по журналам для эффективной работы с ними,
- редактировать существующие и создавать новые справочники произвольной структуры,
- редактировать свойства справочников: изменять состав реквизитов, количество уровней, тип кода, диапазон проверки уникальности кода и другое ,
- создавать регистры для учета средств в любых необходимых разрезах,
- создавать любые дополнительные отчеты и процедуры обработки информации,
- описывать поведение элементов системы на встроенном языке.
Такое большое количество возможностей увеличивает и сложность работы системы в целом. Объектная модель в 1С построена слабо, что даёт такие негативные последствия как:
- сложность изменения объектов системы в связи с их не ясными связями с другими объектами системы,
- сложно ясно и всеобъемлюще представить работу приложения в целом (особенно при вмешательстве сторонних разработчиков - доработчиков).
"1С: Торговля и склад" поддерживается производителями торгового оборудования. Вместе с оборудованием идут драйвера и описание способов управлением оборудованием из системы 1С.
Внутреннее устройство 1С. Все вводимые данные хранятся в файлах *.DBF в указанном каталоге. Названия файлов не несут никакой смысловой нагрузки. Проследить связь между файлами данных не представляется возможным. Все аспекты работы системы с данными скрываются за объектной моделью. Работая с одним справочником, пользователь (разработчик) может и не догадываться, что изменяется более 3 файлов dbf. Данные файлы имеют формат «DBASEIV», что позволяет открывать их посредством технологии «ADO.NET», задавая соответствующим образом строку подключения.
В 1С имеется встроенный язык программирования. Синтаксис схож с языком программирования «Basic». Само программирование в 1С имеет много общего с программированием макросов для MicrosoftOffice. Все операторы на русском языке (хотя имеются и их англоязычные синонимы). Обмен данными между приложениями возможен через тестовые файлы, файлы XML (используется сторонняя компонента), файлы формата «DbaseIV» и OLE. В своей работе я использовал работу с файлами «*.dbf» для обеспечения связи с удалёнными точками и работу системы 1С в качестве OLEсервера для поставки данных WEBслужбе. Система 1С позволяет разрабатывать дочерние формы – внешние обработки. Таким образом обеспечивается взаимодействие программы с пользователем – через формы, создающиеся в окне приложения «1С Конструктор»(программа для программирования 1С).
Хотелось бы остановить внимание на структуре конфигурации. Сама конфигурация находится в определённом каталоге, в котором кроме файлов «*.dbf» c данными находится файл «1Cv7.md» – ядро программы. В нём хранятся все программные модули, от которых зависит функционирование системы. Кроме этого из 1С имеется возможность загрузки так называемых «внешних форм» - файлов с расширением «ert». Этот файл содержит Windows форму и модуль обработки событий этой формы (можно ещё причислить – отчёты, они же – таблицы, которые также могут содержаться в файле обработки). Внешней обработке, как и встроенной, доступны все объекты системы 1С. Использование обработок позволяет проводить действия с системой, не изменяя ядро. Обработка работает в одном адресном пространстве с ядром программы.
Для ускорения выборки данных компания 1С рекомендует использовать везде, где можно – запросы. Запросы пишутся на особом языке запросов 1С, овладеть которым не просто. При разработке они активно использовались. Запросы позволяют производить выборку данных, в десятки раз превосходя по скорости аналогичные алгоритмы, основанные на переборе записей. Модификации посредством запросов не предусмотрены.
Особенностью конфигурации «Торговля и Склад» является использование таких объектов, как «Регистр». «Регистр» представляет собой накопительную структуру, данные в которой изменяются при проведении документов. Это позволяет увеличить скорость получения данных. Не требуется пересчитывать данные документов, а нужно обратиться к «Регистру». Например, есть у нас регистр «ОстаткиТМЦ» и документы, которые изменяют атрибут «Количество» для указанной номенклатурной позиции в этом регистре - либо увеличивают значение, либо уменьшают его в зависимости от характера проведения операции (Реализация и возврат покупателю – уменьшает остаток, а поступление – увеличивает). Для получения количества нужно обратиться к свойству «Количество» данного регистра.
Microsoft SQL Server 2000 нацелен на решение широкого круга задач во всех областях бизнеса, в том числе и в электронной коммерции.
Преимущества:
- Полная web-ориентированность. Осуществление запросов, анализ и управление данными через Интернет. Использование языка XML для обмена данными между удаленными системами. Простой и безопасный доступ к данным с помощью web-браузеров с использованием межсетевого экрана, быстрый поиск необходимых документов. Анализ потоков данных и получение информации о пользователях, в том числе и через Интернет,
- Масштабируемость и надежность. SQL 2000 Server обеспечивает практически неограниченный рост объемов данных за счет увеличения надежности и масштабируемости системы, используя все преимущества мультипроцессорной обработки данных,
- Скорость построения решений. SQL 2000 уменьшает время создания, развертывания и выхода на рынок современных приложений для задач бизнеса, электронной коммерции, использует встроенный отладчик T-SQL. Совершенствует и ускоряет процесс поиска данных, упрощает управление, позволяет использовать создаваемые пользователем функции в других приложениях, предоставляет широкие возможности для создания web-приложений,
- Рекордные показатели скорости. Еще до окончательного выхода на рынок система на «Windows 2000», «SQL 2000 Server» установила новый мировой рекорд по производительности, далеко опередив конкурирующие решения на различных платформах.
Это из официального описания системы. В данной работе особо пригодились такие средства как «QueryAnalyzer» и «SQLProfiler». Использование последнего помогло отладить работу с базой через SQLзапросы. Нельзя не отметить то, что связка SQLServer < –-- > ADO.NET хорошо проработана и оптимизирована компанией «Microsoft», что положительно сказывается на скорости обработки запросов и получения результатов. В «VisualStudio» для работы с «MSSQLServer» даже созданы специальные классы (их имена начинаются с SQL).
Сравнивая данную систему с InterBaseв плане удобства работы – с SQLServerработать приятней – всё проще и наглядней. При разработке помогают Wizard’ы.
Также имеется очень мощная система T-SQL, позволяющая смешивать синтаксис SQLзапросов с алгоритмическим языком, что позволяет перенести большую часть расчётов на сторону SQL сервера (хранимые процедуры).
В этом разделе будет рассказано о новейших технологиях, используемых в данной работе, за которыми, по мнению компании разработчика, бедующее (т.к. компания Microsoft не даёт альтернативы, медленно сворачивая поддержку «устаревших» технологий).
Когда говорят о .NET языках, прежде всего подразумевают C# - язык появившийся вместе с первой версией «.NET Framework» и являющийся основным языком «.NET». Почему это там, можно вести длительные споры и приводить множество аргументов, но основным из них будет то, что язык специально создавался под новую платформу, поэтому с момента своего рождения он поддерживал все концепции платформы .NET. Не раз в компьютерной прессе были публикации по поводу того, что C# - это Javaот Microsoft (дабы отойти от компании Sun). Всё, что можно было упаковать в классы, было в них и упаковано.
Были использованы такие средства программного комплекса VisualStudio 2005 beta как:
- WEB службы. Среда разработки Visual Studio.NET представляет собой полный набор средств для быстрой разработки иинтеграции WEB - служб XML, позволяющий существенно повысить производительность труда разработчиков иоткрывающий новые возможности развития бизнеса. Передача данных через сеть теперь не представляет никакого труда. Visual Studio.NET избавляет отнеобходимости углубляться вструктуру XML (Это позволяет написав минимум кода, получить приложение со сложной внутренней функциональностью) ивникать всложности веб-служб, позволяя разработчикам создавать ииспользовать веб-службы точно также, как любые другие компоненты,
- Написание ASP.NETприложения. Хочу уточнить, что приложение было создано на .NETFramework 2.0 и ASP.NET 2.0. Первый русскоязычный хостер заявил о поддержке ASP.NET второй версии только в начале июня 2005 года. С каждой версией ASP.NETпоявляются новые и новые компоненты, позволяющие строить сайт из «кирпичиков», минимизируя написание программного кода конечным разработчиком. С использованием ASP.NETсайт можно сделать в минимальные сроки по сравнению с другими языками Webпрограммирования,
- Доступ к данным посредством ADO.NET. Использовался доступ к таким поставщикам данных как – MSExcel (через Jet), DbaseIV, MSSQLServer,
- Доступ к COMобъектам через позднее связывание. Надо заметить – что данная технология уже считается устаревшей и программная реализация работы с COMобъектом моего типа в MSDNпомечена как «новое, не является конечным вариантом».
Все магазины компании оформлены как отдельные юридические лица, у которых соответственно и своя налоговая отчетность и свой учёт.
Работа с ними осуществляется следующим образом: в системе 1С Предприятие создаётся документ «Реализация», в котором на каждый товар устанавливается цена с самой минимальной наценкой. Далее товар отвозится на удалённую точку, на которой приходуется и отпускается по цене повыше (по другому прайсу).
Отпускная цена регулируется менеджерами, которые работают с центральной базой.
Было принято решение – установить на каждую точку систему 1С предприятие, где ядро - копия центральной базы. Данное действие было проделано – на все точки, закуплены компьютеры, установлена система 1С, заполнены должным образом справочники. Для правильного функционирования распределённой базы требуется обеспечить:
- автоматическое создание новых позиций номенклатуры в удалённой в базе, если пришедший товар ранее не проходил через данную точку,
- перенос отпускных цен для магазина,
- автоматическая печать ценников на удалённой точке для новых товаров или товаров, на которые цены изменились.
В качестве носителя информации было принято решение использовать внешний носитель информации типа «flash» по следующим причинам:
- надёжность,
- долговечность,
- отсутствие необходимости использовать дополнительное оборудование (последовательными разъемами (USB) снабжены все материнские платы, выпускаемые в последние пять лет),
- невозможность использования глобальной компьютерной сети Internet (в ближайшем будущем планируется провести Internet к каждой точке и использовать его для передачи данных).
Формат используемых для переноса файлов – «DBF».
Распределённую базу данных было решено построить путём тиражирования данных с центральной базы на удалённые компьютеры.
Информационно-функциональная схема работы с удалёнными точками представлена на рисунке 2.
Рисунок 2 –
ИФС «Работа с удалёнными точками»
Схема переноса представлена на рисунке 3.
Рисунок 3 – Схема переноса данных с сервера приложений 1С на WEBсервер (SQLServer)
Данный этап – один из самых сложных в работе данной АИС. Перед тем, как описать средства и порядок разработки подсистемы переноса данных необходимо показать – какие данные мы переносим и в каком количестве.
Схема связи справочников при переносе показана на рисунке 4.
Рисунок 4 – Схема связи справочников при переносе
Концептуальная схема переноса представлена в приложении А.
Webслужба представляет собой интерфейс для сетевого доступа через протокол HTTP к исполняемому коду на стороне сервера.
Исполняемый код хранится в файле с расширением «asmx»(в нашем случае это файл «Service.asmx». С программным кодом можно ознакомиться в приложении Б.
Доступ к данному файлу указывается в IIS как к обычному WEBсайту. Доступ к функциям Web службы может быть осуществлён и из WEB браузера через автоматически генерируемую HTML страницу.
Как показано на рисунке 5 порядок работы моей WEBслужбы таков:
а. получает запрос от ASP.NET приложения,
б. обращается к 1С как к COMобъекту. В 1С выполняются процедуры, сохраняющие результат своей работы в DBF файлы,
в. подключение к DBFфайлам посредством ADO.NET, перекачка данных в структуру DataTable,
г. сериализация DataTableи отправка структуры запрашивающему приложению.
Код процедур, добавленных в глобальный модуль системы 1С показан в приложении В. Как из него видно – данные процедуры работают по схожим алгоритмам:
а. Выборка данных из БД посредством запросов
б. Незначительная обработка полученных данных (например – расчёт динамических цен через глобальную функцию системы, замена кода прайса на порядковый номер)
в. Перебор результата и сохранение в DBFфайл.
Функция «ПарамПоИмени» используется для хранения параметры выгрузки (имена файлов и каталогов) в настроечном файле «nastr.txt», что даёт дополнительную гибкость разработанной системе.
Подход с использованием дополнительных «буферных» файлов DBFбыл использован в связи с невозможностью вернуть массив из 1С в вызвывающую WEB службу. В ходе разработки были перепробованы все возможные способы, но передать массив (в 1С нет массива как такового – есть «класс» «Таблица значений», используемый вместо него) так и не удалось. Многократно вызывать 1С не так эффективно, как использование глобальных процедур. В связи с невозможностью получать от 1С сложные типы данных, возвращение значений службой не использовалось.
Проблемы, возникшие при разработке и их решение:
- Безопасность COM. По умолчанию стоит запрет на использование COMобъектов удалёнными пользователями. Поэтому на любую попытку обращения к COMобъекту удалённому пользователю выдаётся сообщение, что доступ запрещён. Для решения данной проблемы следует установить разрешения в «Панель управления --> Администрирование --> Службы компонентов». Выбрать локальный компьютер, вкладку DCOM, найти объект 1С 7.7, прейти на вкладку его свойств и установить разрешение на использование данного COMобъекта не только локальным пользователям,
- Разрушение объекта. После использования объекта его следует убрать из памяти. Но получается интересная ситуация – в MSDN написано, что объект будет автоматически разрушен после окончания его использования вызвавшим приложением. На практике же оказалось, что после окончания использования объекта, процесс «1cv7s.exe» остаётся висеть в памяти неопределённое время, которое может составлять от 1 до 30 минут. WEBслужба обращается к 1С с использованием одного и того же имени пользователя и пароля. А в системе 1С нет возможности запустить два сеанса одного пользователя. При попытке повторного доступа с именем пользователя, который уже вошёл в систему - выдаётся ошибка. Для того, чтобы ускорить разрушение объекта, вызывается функция 1С объекта - «ExitSystem» - принудительное закрытие программы. Время разрушения уменьшается до 10 минут. При попытке повторного доступа в течении этих 10 минут к 1С, генерируется исключительная ситуация, которая отлавливается и выводится сообщение пользователю с просьбой подождать 15 минут до повторного обращения к 1С.
Особенности WEBслужбы, позволившие ускорить и упростить разработку:
- Скрытие от разработчика процесса сериализации передаваемого набора данных в XML формат и передача запрашивающему приложению результата в XMLформате,
- Как видно из программного кода службы (приложение Б) разработка функций сервиса ничем не отличается от разработки функции какого – нибудь приложения на C#. Чтобы функция (или процедура) была доступна для вызова из вне, перед ней должны стоять ключевые слова «[WebMethod]». Итого, получается что для работы сервиса нужно создать лишь несколько функций, возращающих результат заданного типа,
- Неявная компиляция исходного кода сервиса в исполняемый файл (dll). Службу можно написать и с использованием программы «Блокнот», указать путь к файлу в IISи сервис заработает,
- Неограниченные возможности по созданию программного кода. Доступны все технологии платформы программирования от Microsoft. Я использовал технологию доступа к данным ADO.NET. Никаких проблем с её использованием не возникало.
Приложение написано так, что нет дублирования программного кода – задача раздробленна на процедуры и функции – public и private. Служба представляет собой класс. Создание WEB службы аналогично написанию программы на «Java». Язык программирования «С» отличался от «Java» (для программиста) тем, что в «Java» можно пользоваться лишь классами (их процедурами, функциями, переменными), программируя их взаимодействие. В Visual C# всё так же скрыто за классами. С такими тенденциями, через пару лет останется только ООП ввиду всех его преимуществ.
WEBслужба функционирует на сервере 1С, а данные передаются через сеть на WEBсервер. Схему локальной сети можно посмотреть на рисунке 1. Основную часть времени работы службы составляет выполнение процедур 1С. Время сериализации набора данных и время на отклик службы можно не учитывать(настолько оно мало). Таким образом можно сказать, что WEBслужба показывает максимальную производительность.
Структура страниц *.aspx и связей между ними (для построения использовался продукт «MSVisio Studio 2005»). Вид главного окна на этапе разработки представлен на рисунке 5.
Рисунок 5 – главное окно приложения Visual Studioна этапе разработки
Рисунок 6 – Схема работы Интернет портала
Таблица 1 - Графические обозначения:
Графическое обозначение |
Описание |
Стартовая страница |
|
Файл с расширением «aspx» - серверная страница, формируемая на стороне сервера в HTMLкод при запросе её пользователем. Конкретизация по именам файлов страниц. |
|
Файл с расширением «ascx». Пользовательский элемент управления. |
|
Файл в формате XML. |
|
WEBСлужба. В моей работе она одна. |
|
База данный MSSQLServer. Конкретизация по именам задействованных таблиц. |
|
Обработка, выполняющаяся на стороне сервера. Пояснение обработок содержится в подпункте «Описание действий». |
|
Графический файл (Bitmap). |
|
Файл в формате Microsoft Excel |
|
Отправка почтового сообщения |
Стрелки показывают направление движения данных. Например, стрелка под номером 16 означает, что данные, полученные с формы «Skolko.aspx» меняют или добавляют записи в таблица. Стрелка под номером 26 показывает аналогично предыдущей, но показывает, что данные не только пишутся в данную таблицу, но и берутся из неё для отображения пользователю. Стрелка под номером «14» показывает, что данные берутся из таблицы «_Nomenklatura», но записи таблицы не изменяются.
В схеме не отражено:
- Протоколирование всех действий в таблицу _Statistika,
- Схема авторизации пользователей.
- Default.aspx. Стартовая страница приложения. Данная страница представлена на рисунке в следующем подразделе. На неё возложены такие функции: отображение информации о предприятии, авторизация пользователя, заказ товара,
- Men.aspx. Страница для менеджеров. На данной странице осуществляется авторизация менеджеров, запускается процедура переноса данных с 1С через WEB службу в MSSQLServer, выгрузка остатков с удалённых магазинов, переход к административным страницам «Zakazi.aspx», «Statistika.aspx», «Polzovateli.aspx»,
- Zakazi.aspx. Административная страница. Служит для просмотра всех заказов, их детального просмотра и изменения статуса выбранного заказа,
- Statistika.aspx. Административная страница для просмотра статистики по использованию сайта,
- Polzovateli.aspx. Административная страница для редактирования списка пользователей, добавления новых пользователей и получения статистики по выбранному пользователю,
- Skolko.aspx. Задание количества выбранного товара в заказе при его формировании на странице «default.aspx»,
- ShemaProezda.aspx. Информация о торговых точках компании. Схема проезда, график работы, телефоны, адреса,
- Kontakt.aspx. Отправка текстового сообщение на электронный адрес выбранному должностному лицу. Не модерируется. Отправка происходит мгновенно,
- Prajs.aspx. С этой страницы происходит запуск формирования прайс листа в формате xls и передача полученного файла пользователю через диалоговое окно «Сохранить Как…»,
- Zakaz.aspx. Просмотр формируемого заказа пользователем, его редактирование и подтверждение.
В программе использовались «пользовательские элементы управления». Под этим понятием подразумевается динамически включаемый код из файла с расширением «ascx». Я использовал два подобных элемента. В какие страницы они включаются показано на рисунке 6. Данные объекты написаны на языке JavaScript. Код для объекта «derevo.ascx» позаимствован из [11] и доработан до нужного результата.
Все данные централизованно хранятся на сервере 1С. С сервера 1С поступают на удалённые торговые точки накладные, а на Webсервер поступают данные по ассортименту, остаткам и текущим ценам. С удалённых магазинов регулярно снимаются остатки, которые идут в базу данных Web сервера.
Передача данных описана в разделе 2.2.
Передаются документы «Реализация», в том числе:
- наименование номенклатурной позиции,
- количество переданного товара,
- страна производитель,
- единицы учёта,
- цена отпускная,
- цена закупочная.
Концептуальная модель базы данных SQL Server показана на рисунке 7.
Рисунок 7 – Концептуальная модель базы данных на стороне WEBсервера (SQLServer).
Заполнение данной БД происходит посредством хранимых процедур, код некоторых из них приведён в приложении Г. В этом же приложение можно посмотреть пример выполнения SQLкода, формируемого в ASP.NET.
Разграничение доступа к БД на уровне пользователей не использовалось ввиду ненадобности. Организованно резервное копирование средствами СУБД. Также имеется ограничение ссылочной целостности. Все поля, по которым осуществляется поиск индексированны.
Таблицы БД. Их содержание и назначение:
Таблица 2 – список протоколируемых действий
Поле |
Тип |
Назначение |
KodDejstv |
Int |
Автоинкрементное ключевое поле |
Dejstvie |
C(100) |
Действие |
Таблица 3 – ведение статистики по действиям пользователей в системе
Поле |
Тип |
Назначение |
KodStat |
Int |
Автоинкрементное ключевое поле |
Dejstv |
Int |
Связь с таблицей _StoDel |
Data |
Date |
Дата и время действия |
Polzovatel |
int |
Ссылка на таблицу _Polzovateli. (Если пользователь авторизирован) |
Таблица 4 – список продаваемых товаров
Поле |
Тип |
Назначение |
KodNom |
С(9) |
Ключевое поле |
Otec |
C(9) |
Родитель (для построения дерева) |
Naimenov |
Int |
Полное наименование |
Strana |
C(120) |
Страна производитель |
MinPartija |
int |
Минимальное количество покупки для оптовика |
Photo |
C(200) |
Путь к фотографии товара |
Opisanie |
C(600) |
Описание товара |
EtoGruppa |
smallInt |
Позиция является группой |
Таблица 5 – цены на товары
Поле |
Тип |
Назначение |
KodCeni |
Int |
Автоинкрементное поле |
Cena |
money |
Цена в рублях |
Nomen |
С(9) |
Ссылка на _Nomenklatura |
NomerPrajsa |
smallint |
Номер прайса |
Таблица 6 – остатки товаров
Поле |
Тип |
Назначение |
KodOstatka |
Int |
Автоинкрементное поле |
Kolichestvo |
Int |
Остаток |
Magazin |
Int |
Ссылка на _Magazini |
Nomen |
C(9) |
Ссылка на _Nomenkalatura |
Таблица 7 – остатки товаров
Поле |
Тип |
Назначение |
KodMagazina |
Int |
Автоинкрементное ключевое поле |
Naimenovanie |
C(200) |
Название магазина |
Adress |
C(200) |
Адрес |
Telephon |
C(30) |
Телефоны |
VremjaRaboti |
C(50) |
Время работы |
ShemaProezda |
C(120) |
Путь к файлу .jpg, содержащему схему проезда к данному магазину |
DataOstatkov |
DateTime |
Дата и время прошлой выгрузки остатков в _Ostatki по данному магазину |
Таблица 8 – менеджеры (администраторы портала)
Поле |
Тип |
Назначение |
KodMenedzera |
Int |
Автоинкрементное ключевое поле |
Imja |
C(20) |
Имя доступа менеджера |
Pass |
C(15) |
Пароль для доступа |
|
C(12) |
Электронный адрес |
DataZahoda |
DateTime |
Время последнего посещения |
Таблица 9 – новости для покупателей.
Поле |
Тип |
Назначение |
KodNovosti |
Int |
Автоинкрементное ключевое поле |
Avtor |
Int |
Ссылка на _Menedzeri |
Novost |
C(600) |
Новость |
Data |
C(12) |
Дата создания новости |
Таблица 10 – заказы оптовиков.
Поле |
Тип |
Назначение |
KodZakaza |
Int |
Автоинкрементное ключевое поле |
Obrabotan |
Date |
Когда обработан |
Status |
smallint |
Статус (подтврждён, обработан) |
Polzovatel |
Int |
Ссылка на _Polzovateli |
Data |
Date |
Дата и время создания |
Sym |
money |
Сумма заказа |
Таблица 11 – Товары в заказе.
Поле |
Тип |
Назначение |
KodPozicii |
Int |
Автоинкрементное ключевое поле |
Zakaz |
Int |
Ссылка на _Zakazi |
Nomen |
Int |
Ссылка на _Nomenklatura |
Cena |
money |
Цена одной позиции |
Kolichestvo |
Int |
Количество |
Sym |
money |
Сумма (Cena*Kolichestvo) |
Внешний вид программы (внешней обработки) показан на рисунке 8
Рисунок 8 – Окно подпрограммы «Выгрузка накладной»
Пользователю требуется выбрать каталог, куда будут сохранены dbf файлы с информацией по накладной, и сам документ. Алгоритм работы обработки таков:
а. Создание каталога по имени документа,
б. Создание трёх «DBF» файлов и выгрузка в них данных по каждой позиции выгружаемой номенклатурной позиции, включая данные для построения древовидной структуры,
в. Последовательный проход по элементам документа «Реализация» с выгрузкой в файлы «DBF» таких свойств как:
-Единица измерения,
-Цена,
-Страна происхождения,
-Производитель (как основное свойство),
-Наименование для печати,
-Ставка НДС.
Синтаксис языка позволяет использовать в качестве операторов русские слова, что делает программы легко понимаемыми неопытными в 1С программистами.
Флеш накопитель доставляется в магазин вместе с товаром, вставляется кассиром в системный блок.
Далее кассир по инструкции (инструкция пользователя находится в разделе5.1.8) открывает из 1С обработку загрузки документа, представленную на рисунке 9.
Рисунок 9 – Окно подпрограммы «Загрузка документов»
Выбирает каталог, совпадающий с именем поступившей накладной, жмёт на кнопку «загрузить» и ждёт результата операции. По окончании пользователю выдаётся печатная форма (отчёт) с ценниками на впервые поступивший(новый)товар и на товар с изменёнными ценами.
В данной обработке использовался запрос, извлекающий из регистра «ОстаткиТМЦ» остатки по всем номенклатурным позициям:
ТекстЗапроса =
"//{{ЗАПРОС(Выгр_Ост)
|РегНом= Регистр.ОстаткиТМЦ.Номенклатура;
|РегНомКод=Регистр.ОстаткиТМЦ.Номенклатура.Код;
|РегСклд= Регистр.ОстаткиТМЦ.Склад.Код;
|РегКол= Регистр.ОстаткиТМЦ.Количество;
|Группировка РегНом без Групп;
|Группировка РегСклд;
|Функция КОН = КонОст(РегКол);"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Предупреждение("Ошибка в запросе");
КонецЕсли;
Этот запрос позволяет избежать перебора записей и ускорить выборку по сравнению с простым перебором в десятки раз. Время выполнения этого запроса занимает менее 8 секунд. Но как видно – синтаксис сложен и не понятен на первый взгляд. Описать работу запроса можно так: используя индексы DBF файлов, происходит выборка из регистра остатков по всей номенклатуре. В запросе вводятся локальные переменные «РегНом», «РегНомКод», «РегСклд», «РегКол», доступ к которым возможен например при переборе результатов запроса через конструкцию «Запрос.Параметр». Так как в запросе явно не указан временной период, то по умолчанию используется «точка актуальности» - термин, введённый 1С, обозначающий рабочую дату или точку актуальности итогов, то есть время, по которое системой 1С гарантируется, что данные в регистрах соответствуют действительности. Слово «Группировка» осуществляет группировку записей по внутренним переменным, позволяя перебирать результаты выполненного запроса по группировке, а функция «КонОст» указывает запросу вернуть значение переменной на конец периода (в нашем случае – на «точку актуальности»).
Также на этом маленьком фрагменте можно увидеть преимущества использования русских слов при написании программы. Комментарии в коде просто не нужны.
Так же, как и при описании обработки сохранения данных на флеш накопитель.
Кроме создания распределённой базы данных автоматизация включает в себя такие пункты как:
- Создание обработки, позволяющей ускорить печать ценников,
- Доработка документа «Реализация» для печати чеков продажи на фискальном регистраторе,
- Доработка документа «Возврат продажи» для печати чеков возврата продажи,
- Создание обработки, выводящей отчёт по продажам кассирам в указанном временном интервале,
- Изменение интерфейса кассира.
Разработка данной части комплекса заняла относительно не много времени, поэтому не буду останавливаться на ней подробно. Ранее подробно описаны две обработки, обеспечивающих перенос данных.
Работа пользователя с обработками и моими доработками ядра системы подробно описана в руководстве пользователя, представленного в разделе5.1.
Фискальный регистратор – устройство для печати чеков по операциям купли-продажи. Данные по суммам продаж хранятся во внутренней памяти. Устройство регистрируется в налоговых органах, и ими же могут проверяться такие моменты:
- Каждому покупателю выдаётся чек,
- Каждый чек содержит информацию о компании – продавце,
- Сумма продаж и возвратов продаж за месяц.
В компании используются фискальные регистраторы модели «ШТРИХ ФР-К». К каждому устройству прилагаются драйвера, документация и пример работы для «1С Предприятия 7.7». Устройство подключается к компьютеру через интерфейс «RS-232». С помощью прилагаемого программного обеспечения были настроены параметры вывода информации на чек:
- Наименования отделов,
- Вывод дробной части суммы,
- Информационное сообщение.
Возврат может осуществляться только при наличии чека. Для сопоставления чека с документом «Реализация» на каждом чеке выводится номер документа – реализации. При оформлении возврата оператору надо выбрать документ-основание, номер которого она берёт из чека. Номер печатается под служебной информацией, без пояснения, не привлекая взгляд.
В течении дня на каждую покупку в базе делается документ «Реализация», при проведении которого автоматически печатается чек на фискальном регистраторе. Как упоминалось ранее, база центральная и база магазинная имеют одинаковые «ядра», но работают по разному. Порядок работы системы определяется константой «Магазинная версия», а внешний вид и возможности пользователя определяются его правами в системе. Кассиру запрещено: изменять проведённые документы (по которым уже распечатан чек), формировать отчёты (чтобы не мог анализировать деятельность предприятия и видеть приватную информацию) и пользоваться документами, использование которых не предусмотрено руководителем предприятия. Всё это было настроено с помощью программы «Конфигуратор 1С».
При возврате продажи оформляется документ «возврат продажи», при проведении которого автоматически печатается чек на возврат.
В конце рабочего дня оператор должен запустить обработку «Акт сверки», которая покажет ему сумму продаж (за минусом возвратов) за день. Данная сумма должна совпадать с фискальным отчётом (отчёт фискального регистратора по продажам при закрытии смены) и денежной суммой в кассе. Данная обработка представлена в разделе5.1.6.
Стартовая страница приложения показана на рисунке 10.
Рисунок 10 – стартовая страница webпортала
На рисунке 10 отмечены пользовательские элементы управления.
При разработке Интернет портала приходится выбирать между кроссплатформеностью и наглядностью приложения. В данном случае было выбранно удобство и красота конечного продукта. При возникновении потребности приложение может быть модернизировано соответствующим образом. Требования к компьютеру WEB пользователя таковы:
- Internet Explorer 6 x,
- Разрешение экрана выше, либо равное 1024x768,
- Разрешение всплывающих окон (для WindowsXPSP2),
- Разрешение использования Java Script.
В приложении активно использовались JavaSript’ы, CSS. В отдельные, подключаемые файлы, таблицы стилей не выносились. Использование данных средств позволило сделать интерфейс красивее, понятнее и удобнее для полььзователя.
Были использованы следующие объекты ASP.NET 2.0:
- FileUpload – используется на странице «men.aspx». Объект служит для загрузки выбранного пользователем файла на сторону сервера. Данный объект был использован для загрузки на сторону сервера файла «ost.dbf», содержащего остатки розничного магазина. Этот файл автоматически сохраняется на внешний носитель информации при выгрузке накладной через обработку, описанную в разделе 5.1.8,
- DataView – таблица отображения данных. В «VisualStudio 2003» для отображения данных в табличном виде использовался компонент «DataGrid», требующий большего объёма программного кода, чем «DataView». В данном компоненте автоматизированы такие действия, как: постраничный вывод указанного количества записей, выбор строки, редактирование строки. В качестве источника данных используется объект типа «SqlDataSource»,
- Label. Для отображения пояснительных надписей,
- Login. Данный класс служит для авторизации пользователя. Представляет собой объединённые в одну структуру поля для ввода имени пользователя, пароля, и поясняющие надписи к ним.
Большая часть кода приложения – это работа с БД. Для работы с SQLServer использовались классы: «SqlConnection», «SqlCommand». Не буду описывать работу из VisualStudioс MS SQLServer. Она хорошо описана в [16], [22], [23].
Были использованы такие методы работы с данными как:
- Выполнение хранимых процедур на SQLServer’e без возврата значения (напиример «NomenObnovi», «DobTov»)
- Выполнение хранимых процедур на SQLServer’e с возвратом значений («NewZakaz»)
- Выполнение SQL кода, сформированного WEB сервером по параметрам (например сохранение прайс-листа в формате Excelпредставлен в приложении Е).
- Выгрузка данных в DataSetс помощью метода Fill.
Тексты некоторых хранимых процедур представлены в приложении Е.
Для подключения к WEBслужбе используется мастер Visual Studio. После этого в окне «SolutionExplorer» появляется пункт «WebReferences» с ссылкой на WEBслужбу. После этого доступ к методам WEB службы можно получить лишь одной строкой: «Sluzba.Service ws = new Sluzba.Service();». Теперь методы WEBможно вызывать с помощью конструкции: ws.«Имя метода».
Фрагмент кода страницы «men», работы с Webслужбой представлен в приложении Д. Важное свойство WEBслужбы – это время ожидания ответа (Timeout). По умолчанию оно составляет 1 минуту. Но максимальное время работы методов WEB службы разрабатываемой АИС составляет 3 минуты, поэтому этому свойству было присвоено значение равное 5 минутам (задаётсяв секундах). Далее работа с Web службой такая же, как с обычным классом.
Получение результата от WEBслужбы занимает максимум 3 минуты. Полторы минуты занимает перенос в таблицу «_Nomenklatura» (10000 записей), 70 секунд занимает перенос в таблицу «_Ostatki» (10000 записей) и чуть более двух минут происходит выгрузка цен (63000 записей). Более долгая задержка выгрузки цен объясняется не большим (ударение на «о») количеством записей, а большим временем, затрачиваемым системой 1С на расчёт динамических цен. Я считаю, что было получено максимально допустимое быстродействие по получению и передачи данных.
В языке разметки HTML для предотвращения повторной загрузки одних и тех же данных используются фреймы. Страница делится на области (фреймы), которые могут быть повторно загружены с сервера, либо остаться на машине клиента без обновления. Данная технология считается устаревшей. Теперь для предотвращения повторной загрузки одних и тех же данных используется кэширование. Кэширование может быть явное и не явное. Не явное кэширование используется по умолчанию. WEBсервер сам взаимодействует с браузером пользователя, минимизируя передаваемый трафик.
В WEBприложении было использовано и явное кэширование. Для предотвращения повторной загрузки дерева номенклатуры в файле «derev.ascx» используется директива: «<%@ OutputCache Duration = "600" VaryByParam="none" %>». Данная строка указывает, что данный фрагмент страницы нужно кэшировать и на стороне пользователя и на стороне сервера (это выставленно по умолчанию) в течении 600 секунд.
Для отправки сообщений на электронную почту используется учётная запись внутреннего почтового сервера «InternetMagazin@mirposudy.com». В VisualStudio 2005 произошли изменения и в новом продукте используется иная схема отправки сообщений, нежели чем в VisualStudio 2003. Страницы, с которых отправляются электронные письма показаны на рисунке 11.
Рисунок 11 – Форма отправки тестового сообщения
В соответствии с требованиями к программному продукту пользователи делятся на две группы – не авторизированные и авторизированные.
Не авторизированные пользователи, они же – «гости» имеют права на просмотр есть ли товар на розничной точке (без указания конкретного количества) и видят его цену по 1 прайсу (чем выше номер прайса, тем дешевле стоит товар). Делать заказ пользователи данного типа не могут.
Авторизированные пользователи – это покупатели - оптовики, которым имя пользователя и пароль выдаётся менеджерами. Покупать товар они могут по номеру прайса, заданного менеджером. Номер прайса зависит от двух критериев: объемы предыдущих закупок и частота покупок. Данная группа пользователей может оформлять заказы на товар.
Все остальные возможности у обеих групп одинаковы.
Информационно – функциональная схема «работа авторизированного пользователя в системе» показана на рисунке 12.
Рисунок 12- работа авторизированного пользователя в системе
«Отчёт по товару» для выгрузки в формате Excel абсолютно идентичен данным, выводимым в DataView.
Проблемы и их решение:
- Невозможность взаимодействия JavaScriptс кодом на C#. Решение: использовать параметры, передаваемые в строке запроса,
- Отсутствие документации на русском языке. Решение: изучение иностранного языка,
- Отсутствие средств отладки JavaScript. Решение: использование окон сообщений «ShowAlert» для отображения значений переменных. Мне это очень помогло при поиске зацикливания в одной из процедур.
Содержание инструкции:
- Общие сведения,
- Порядок работы,
- Продажа (реализация),
- Возврат продажи,
- Использование меню фискального регистратора(ФР),
- Акт сверки,
- Печать ценников по подбору,
- Загрузка накладных.
База данных ведётся пользователем с правами Кассира. Доступны такие действия, как:
- отпуск товара с распечаткой чека,
- оформление возврата с печатью чека на возврат продажи,
- загрузка накладных, полученных с основной базы, с добавлением новой номенклатуры и изменением цен в справочнике цен,
- формирование акта сверки.
Используется фискальный регистратор «Штрих ФР-К»
В течении дня оформляются продажи в текущем времени. Если нужно обменять товар, то оформляются последовательно возврат и продажа. В конце дня закрывается смена – делается полный отчёт с гашением на ФР и печатается акт сверки по указанному ниже алгоритму. В итоге получаем итоги, которые должны совпадать – наличность, итог по акту сверки из 1С и итог по итоговой ленте ФР.
Для оформления продажи нужно:
а. щёлкнуть по пиктограмме «реализация» на панели управления. После этого откроется окно, поля которого должны уже быть заполнены по умолчанию (менять ничего не нужно). Окно показано на рисунке 13.
|
Рисунок 13 – Окно документа «Реализация»
б. Прейти на закладку «Табличная часть». Развернуть окно, два раза щёлкнув на его заголовке или на пиктограмме «развернуть». После чего нажать на кнопку «Цены…» и в появившемся окне выбрать тип цен «Розничная» и установить галку на «Включён в сумму». Результат показан на рисунке 14.
Рисунок 14 - Настройка документа «Реализация»
Надо нажать кнопку «ОК» и подобрать товар, используя кнопку «Подбор».
|
|
Рисунок 15 - подбор номенклатуры
В поле «Запрашивать» для удобства работы должно быть выставлено «Количество». Для ускорения поиска желательно пользоваться кнопкой «Поиск», учитывая, что код состоит из 9 символов, а в начале идут нули.
После подбора выбранный товар появляется в нижней таблице. Нажатием кнопки «Ок» он переносится в тело документа.
в. После подбора внизу окна высвечивается сумма, которую должен уплатить покупатель. В поле «Сумма от покупателя» надо обязательно ввести сумму, которую внёс покупатель. Потому что при печати чека будет выведена сумма сдачи.
После этого если вы хотите сделать реализацию с печатью чека, то нажимайте кнопку «Печать чека», а если без, то просто «Провести». После этого документ будет недоступен для редактирования. Появится информационное окно, в котором будет отображено – удачна ли попытка проведения. Если удачна, то закройте его. Если неудачна – попытайтесь устранить причину.
Для оформления возврата продажи:
а. Щёлкните мышкой по иконке с красным крестиком в панели инструментов 1С.
б. Открывается окно. Аналогично предыдущему документу поля на вкладке «Шапка» должны быть установлены должным образом по умолчанию. Жмите на кнопку «Основание», выбирайте документы «Реализация» и ищите документ, по которому был отпущен товар (номер документа печатается на чеке). На вопрос – заполнять ли документ по документу основанию отвечаете утвердительно «да».
в. Переходите к вкладке «ТМЦ и услуги (по отпускным ценам)».
В таблице отображаются все товары, которые прошли по документу – основанию. Нам нежно оставить лишь те, которые действительно возвращают. Цены должны стоять те, по которым отпускали товар. Удалить не нужные позиции можно кликая на нужной правой кнопкой мыши и выбирая пункт «Удалить строку», либо активируя строчку и нажимая на клавиатуре клавишу «Delete»(что будет быстрее).
Форма удаления показана на рисунке 16.
Рисунок 16 - Удаление позиций из документа «Возврат продажи»
г. Нажать кнопку «Провести». Если ФР не подключён, то вывалится сообщение о невозможности распечатать чек, но товар будет возвращён на склад.
д. Закройте окно документа (если оно не закрылось автоматически)
В меню программы 1С имеется меню «ФР»:
Элементы меню выполняют следующие функции:
- «Суточный отчёт с гашением» - закрывает смену, выводит полный фискальный отчёт по продажам с момента прошлого закрытия смены.
- «Суточный отчет без гашения» - выводит отчет по продажам с начала смены.
- «Отменить чек» - отмена чека системным администратором. Если произошла отмена чека, то надо будет перепечатать чек. Чек отменяется, если он не распечатался и фискальник «завис». Это может быть – если несвоевременно поменяли бумагу (кончилась при печати), либо зажевало бумагу, либо сбилось питание.
- «Проверка связи» - выдаст ошибку, если нет связи с фискальным регистратором.
Данная обработка показывает – что прошло по программе за указанный период.
Обработка вызывается из «Файл - > Открыть». Далее нужно выбрать каталог «С:BaseВнешние обработки мира посуды» и дважды щёлкнуть по файлу «акт сверки для магазина.ert». После чего откроется обработка, внешний вид которой показан на рисунке 17.
Рисунок 17 - Акт сверки
Нужно указать период, покупателя и магазин. Склад можно не указывать (тогда будет по всем складам). Также можно не указывать покупателя, тогда соответственно будет выдан отчёт по всем покупателям. Хочу обратить внимания на кнопочки, выделенные на рисунке. Они позволяют сохранять и загружать параметры по умолчанию. То есть – один раз выбрав нужные вам параметры вы сохраняете настройку, а при следующей загрузке параметры будут выставлены так, как вы их выставляли в прошлый раз. Не надо будет каждый раз делать одно и то же.
После задания параметров следует нажать кнопку «сформировать». Будет получен отчёт, показанный на рисунке 18.
Рисунок 18 - отчёт по акту сверки
В случае расхождений между фискальным отчётом, актом сверки и наличностью – ищите причины ошибки.
Данная обработка позволяет напечатать ценники (по 16 ценников на страницу) на выбранный товар.
Внешний вид обработки показан на рисунке 19:
Рисунок 19 - «Печать ценников по подбору»
Как видно из рисунка 19. Требуется отобрать в левой части экрана нужную позицию, дважды щёлкнуть по ней, или нажать на кнопку « > », после чего она попадёт в правую часть экрана.
Для ускорения подбора можно пользоваться поиском по коду, либо менять порядок сортировки и отображения номенклатуры в левой части окна.
После выбора всех позиций, по которым требуется распечатать ценники нужно выбрать тип цен и нажать на кнопку «Распечатать ценники», после чего на экране появится отчёт с ценниками, по номенклатуре, находящейся в правой части окна, готовый к печати. Данный отчёт показан на рисунке 20.
Рисунок 20 - ценники
Выберите в меню пункт «Файл», далее – «Печать».
Для загрузки накладной в БД требуется:
- Установить flesh память в USB разъём
- Открыть из 1С обработку из корневой папки съемного диска «»
- После этого на экране появится окно обработки, показанное на рисунке 21.
Рисунок 21 – окно подпрограммы «загрузка документов»
- Выберите каталог с файлами перегружаемых данных (имя каталога должно совпадать с номером накладной).
- Выберите склад и тип цен
- Нажмите кнопку «Загрузить»
- Дождитесь обработки выгрузки и распечатайте все полученные по окончании ценники.
Настройку и доработку приложения должен производить лишь опытный разработчик с квалификацией по используемым технологиям.
На начальном этапе допускается непосредственное изменение записей таблиц посредством программы SQLServer.
Требования к компьютеру WEBпользователя таковы:
- Internet Explorer 6 x
- Разрешение экрана выше, либо равное 1024x768
- Разрешение всплывающих окон (для WindowsXPSP2)
- Разрешение использования Java Script
Работа основана на интуитивно понятных принципах, уже устоявшихся в современном сайтостроении.
Полученная АИС «Работа с покупателями» представляет собой законченный продукт, полностью отвечающий предъявленным требованиям.
В комплекс входят программные средства:
- для поддержания актуального состояния распределённой базы данных
- автоматизирующие работу кассира
- копирования данных с сервера 1С и с удалённых точек на WEBсервер (SQLServer 2000).
- Законченный Интернет портал, отвечающий поставленным требованиям
Созданная распределённая база данных успешно функционирует на предприятии более месяца. Интернет портал будет введён в коммерческую эксплуатацию с середины июля 2005 года.
1. Прилагаемая к системе «1Спредприятие» документация и встроенная справка (синтаксис – помощник).
2.
«1С:Торговля и Склад в вопросах и ответах: Практическое
пособие». Богачева Т. Г. М.: ООО «1С-Паблишинг»,
3.
«Конфигурирование и администрирование 1С: Предприятия».
Тимофеев Г.С., Шумейко Д.А. Ростов н/Д: Феникс,
4. «1С:Предпирятие: программирование для всех». Бартеньев О.В. – М.: Диалог-МИФИ, 2004. – 464 с.
5.
«1С:Предприятие. Эффективное программирование». Усиков
Т.Н. – М.:Новое знание,
6. Форум «Территория “1С”»:
7. Клуб профессионалов 1С:
8. «WindowsServer 2003. Для профессионалов». Вишневский Алексей Викторович. – СПб.: Питер, 2004. – 767 с.
9.
«Как
программировать для Internet и WWW». Дейтел Х. М., Дейтел П. Дж., Нието Т. Р..
Пер. с англ. – М.: ЗАО «Издательство БИНОМ»,
10.
«JavaScript 1.5:
Учебный курс». Кингсли-Хью Э., Кингсли-Хью К.: Питер,
11.
«JavaScript и DHTML. Сборник рецептов. Для профессионалов». Гудман
Д. – СПб.: Питер,
12.
«Основы ASP.NET с примерами на C#».
Оньон Ф. Пер. с англ. – М.: Издательский дом «Вильямс»,
13.ASP .Net Mania – всепро ASP.NET и .NET Framework:
14.
«Использование C#. Специальное издание». Специалисты NIIT. Пер.с англ – М.: Издательский дом «Вильямс»,
15. «Самоучитель VisualStudio .NET 2003». Гарнаев А.Ю. - СПб.: БХВ - Петербург, 2003.- 688 с.
16. «C# и платформа .NET. Библиотека программиста». Троелсен. Э. – СПб.: Питер, 2005. – 796 с.
17. «Программирование web-сервисов для .NET. Библиотека программиста». Феррара Ф., Мак-Дональд М. – Киев: BHV; СПб.: Питер, 2003. – 430 с.
18.MSDN Library for Visual Studio 2005 Beta
19.
20.
21.
«MicrosoftSQL
Server 7 для профессионалов».
Мамаев Е., Вишневский А. – СПб: Издательство «Питер»,
22.
«Visual
Studio .NET: разработка приложений баз данных». Постолит А. В. – СПб.:
БХВ-Петербург,
23. «ADO.NET Сборник рецептов. Для профессионалов.». Гамильтон Б.- СПб.: Питер, 2005 – 576 с.
24.
Концептуальная модель переноса данных.
Код Web службы (Файл «Service.asmx»)
// Данная служба - возвращает остаток по посланному коду
using System.Web;
using System;
using System.Reflection;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.OleDb;
[WebServiceBinding(ConformanceClaims=WsiClaims.BP10,EmitConformanceClaims = true)]
public class Service : System.Web.Services.WebService {
private
// Параметры для подключения к 1С
Type _1C = null; // ассоциация с программой
object tor = null; // COM объект
object rmtrade = null;
object[] args = null; // аргументы для функции
object Order = null;
//***************************************************************************
// Подключениек 1С. Возвращает true в случае удачи и false - неудачи
bool podkluchenie(){
_1C = Type.GetTypeFromProgID("V77s.Application");
try{
tor = Activator.CreateInstance(_1C);
rmtrade = _1C.InvokeMember("RMTrade", BindingFlags.GetProperty, null, tor, null);
// Задаём парметры подключения, чтобы вход происходил автоматически
args = new object[] { rmtrade, "/DC:\ttt\ /NFOKS /P676676 ", "NO_SPLASH_SHOW" };
//Запуск 1С
_1C.InvokeMember("Initialize", BindingFlags.InvokeMethod, null, tor, args);
return true;
}
catch{
// Нет доступа к COM объекту
//return "Ошибка - проверь безопастность OLE";
//Скорее всего в Windows заданы права доступа к COM объектам только локальным
//пользователям. Лечится через "Служба компонентов"
return false;
}
}
//******************************************************************************
// Выполняет процедуру с заданным именем и с заданными параметрами
// Через неё обращаться к функциям, которые возвращают одну переменную
object Procedura1C_par(string Imja, string Param){
args = new object[] { Param };
return _1C.InvokeMember(Imja, BindingFlags.InvokeMethod, null, tor, args);
}
//******************************************************************************
// Выполняет процедуру с заданным именем и с заданными параметрами
// Через неё обращаться к функциям, которые возвращают ТЗ
object Procedura1C_tz(string Imja, string Param){
args = new object[] {};
//*return_1C.InvokeMember(Imja, BindingFlags.GetField | BindingFlags.InvokeMethod | BindingFlags.Default, null, tor, null);
return _1C.InvokeMember(Imja, BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, tor, args);
}
//******************************************************************************
// Обращается к процедуре 1С и возвращает таблицу с результатами
// Через неё обращение к процедурам 1С, которые пишут файлы dbf
// Параметры:
// ImjaProc - имя вызываемой процедуры
// ImjaKat - каталог, из которого будут загружены таблицы
// ImjaTabl - имя таблицы
DataTable Vigr(string ImjaProc, string ImjaKat, string ImjaTabl)
{
// object ost;
int i;
string rez;
DataSet dt = new DataSet();
DataTable ddt = new DataTable();
if (podkluchenie())
{// Если удалось подключиться
try
{
rez = Procedura1C_tz(ImjaProc, "").ToString();
// Теперь у нас всё как надо - выгрузилась БД в файл.
// Подключаемся к ней через ADO.NET
string konekt = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ImjaKat+";Extended Properties=dBase IV;mode=Read|Write|Share Deny None";
string zapr = "Select * from " + ImjaTabl;
OleDbDataAdapter adapt = new OleDbDataAdapter(zapr, konekt);
adapt.Fill(dt, ImjaTabl);
//ds.WriteXml(@"C:ttt.xml");
_1C.InvokeMember("ExitSystem", BindingFlags.InvokeMethod, null, tor, new object[] { 0 });
tor = null;
_1C = null;
return dt.Tables[0];
}
catch
{// Если возниклаошибка
_1C.InvokeMember("ExitSystem", BindingFlags.InvokeMethod, null, tor, new object[] { 0 });
tor = null;
_1C = null;
return ddt;
}
}
else
{ // Если неудалосьподключиться
_1C.InvokeMember("ExitSystem", BindingFlags.InvokeMethod, null, tor, new object[] { 0 });
tor = null;
_1C = null;
return ddt;
}
}
[WebMethod]
public
//******************************************************************************
// Возвращает Количество оставшегося товара по его коду
string OstatokPoKodu(string nom) {
string ost;
ost = "Пусто";
if (podkluchenie()){
ost = Procedura1C_par("GlVozrOst", nom).ToString();
_1C = null;
return ost;
}else{
_1C = null;
return null;
}
}
[WebMethod]
public
//******************************************************************************
// Сохраняетноменклатуру
DataTable VigruzNom(){
return Vigr("GlVozrNom", @"C:BD_WBnomen", "nomen");
}
[WebMethod]
public
//******************************************************************************
// Сохраняет и передаёт цены
DataTable VigruzCeni()
{
return Vigr("GlVozrCeni", @"C:BD_WBceni", "ceni");
}
[WebMethod]
public
//******************************************************************************
// Сохраняет и передаёт остатки
DataTable VigruzOst()
{
return Vigr("GlVozrOstatki", @"C:BD_WBost_osnov", "ost");
}
}
Функции глобального модуля,
формирующие данные для WEB Службы.
ФункцияглВернутьЦену(Номенклатура,ТипЦены,ДатаЦены=0,ЦенаЦены=0,ЕдЦены=0,ВалЦены=0,НаценкаЦены=0,НайденнаяЦена=0,НеДобавИздержки=0)ЭкспортДалее
ФункцияGlVozrOst(кд_ном)ЭкспортДалее
ФункцияGlVozrCeni()ЭкспортДалее
ФункцияGlVozrNom()ЭкспортДалее
//###############################################################################
//БлокдляработысинтернетмагазиномчерезWebслужбу
//*******************************************************************
//Функциявозвращаетпараметрпоимениизфайлаnastr.txtрабочегокаталога
//Форматфайла:
//строкиначинающиесяс#-коментарии
//имяпараметразадаётсякак[имя],азначениележитнастрочкувнизу
ФункцияПарамПоИмени(пар)
ПеремномСтрок;
Перемстр;
Ткст=СоздатьОбъект("Текст");
Ткст.КодоваяСтраница(0);
Ткст.Открыть(КаталогИБ()+"nastr.txt");
номСтрок=1;
ПоканомСтрок<=Ткст.КоличествоСтрок()Цикл
стр=Ткст.ПолучитьСтроку(номСтрок);
//удаляемпробелывначалеиконцестроки
СокрЛП(стр);
ЕслистрДлина(стр)>0Тогда
//Есликоментарий,топропускаем
ЕслиЛев(стр,1)="#"Тогда
номСтрок=номСтрок+1;
Продолжить;
КонецЕсли;
//Есликакойтопараметр,тогда
ЕслиЛев(стр,1)="["Тогда
стр=лев(стр,стрДлина(стр)-1);
стр=прав(стр,стрДлина(стр)-1);
//Еслиэтотпараметр-искомый
Еслистр=парТогда
ВозвратСокрЛП(Ткст.ПолучитьСтроку(номСтрок+1));
КонецЕсли;
КонецЕсли;
КонецЕсли;
номСтрок=номСтрок+1;
КонецЦикла;
Возврат"0";//Еслиничегоненашли-возвращаетноль
КонецФункции
//******************************************************************
//Функциявозвращаетколичествотоварапоегокоду,преднозначенадлявыводачерезWebслужбу
ФункцияGlVozrOst(кд_ном)Экспорт
ПеремОст;
Ном=создатьОбъект("Справочник.Номенклатура");
Склд=СоздатьОбъект("Справочник.Склады");
Регр=СоздатьОбъект("Регистр.ОстаткиТМЦ");
Склд.НайтиПоКоду("00001");
Ном.НайтиПоКоду(кд_ном);
Ост=0;
Ост=Регр.СводныйОстаток(,ном.ТекущийЭлемент(),Склд.ТекущийЭлемент(),,"Количество");
ВозвратОст;
КонецФункции
//*******************************************************************
//Функциявозвращаеттаблицузначений-номенклатурускодомиеёпараметры
ФункцияGlVozrNom()Экспорт
ПеремОст,ТабЗн;
ПеремКатВыгр;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Номенклатура)
|Ном=Справочник.Номенклатура.ТекущийЭлемент;
|ГруппировкаНом;"//}}ЗАПРОС
;
ЕслиЗапрос.Выполнить(ТекстЗапроса)=0Тогда
Предупреждение("Ошибкавзапросе");
КонецЕсли;
КатВыгр=ПарамПоИмени("КаталогВыгр")+ПарамПоИмени("Ном");
ДБФ=СоздатьОбъект("XBase");
ДБФ.ДобавитьПоле("EtoGruppa",1,1,0);
ДБФ.ДобавитьПоле("KodNom",2,9,0);
ДБФ.ДобавитьПоле("Otec",2,9,0);
ДБФ.ДобавитьПоле("Strana",2,20,0);
ДБФ.ДобавитьПоле("Naimenov",2,250,0);
ДБФ.СоздатьФайл(КатВыгр+"nomen.dbf");
ДБФ.КодоваяСтраница(1);
Запрос.ВНачалоВыборки();
ПокаЗапрос.Группировка(1)=1Цикл
ДБФ.Добавить();
ДБФ.KodNom=Запрос.Ном.Код;
ДБФ.Otec=Запрос.Ном.Родитель.Код;
ДБФ.Strana=Запрос.Ном.СтранаПроисхождения.Наименование;;
ДБФ.Naimenov=Запрос.Ном.Наименование;
ДБФ.EtoGruppa=Запрос.ЭтоГруппа(1);
ДБФ.Записать();
КонецЦикла;
Возврат1;
КонецФункции
//*******************************************************************
//Возвращаетценупоуказаннымпарметрам-используетсявзапросевнизу
ФункцияВозрНомерПрайса(Кд)Экспорт
ЕслиКд="00002"Тогда
Возврат1;
ИначеЕслиКд="00003"Тогда
Возврат2;
ИначеЕслиКд="00004"Тогда
Возврат3;
ИначеЕслиКд="00005"Тогда
Возврат4;
ИначеЕслиКд="00006"Тогда
Возврат5;
ИначеЕслиКд="00007"Тогда
Возврат6;
ИначеЕслиКд="00001"Тогда
Возврат0;
Иначе
Возврат33;//Еслиошибка.0нельзя,т.к.вдругэтоунасболеенизкие
КонецЕсли;
КонецФункции
//*******************************************************************
//Функциявозвращаетценынаноменклатуруиномерпрайса
ФункцияGlVozrCeni()Экспорт
ПеремОст,ТабЗн;
ПеремКатВыгр;
ПеремизПроц;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Цены)
|Номенклатура=Справочник.Цены.Владелец;
|ТипКод=Справочник.Цены.ТипЦен.Код;
|Тип=Справочник.Цены.ТипЦен;
|Цен=Справочник.Цены.ТекущийЭлемент;
|ГруппировкаЦен;
|"//}}ЗАПРОС
;
ЕслиЗапрос.Выполнить(ТекстЗапроса)=0Тогда
Предупреждение("Ошибкавзапросе");
КонецЕсли;
КатВыгр=ПарамПоИмени("КаталогВыгр")+ПарамПоИмени("Цен");
ДБФ=СоздатьОбъект("XBase");
ДБФ.ДобавитьПоле("Cena",1,8,2);
ДБФ.ДобавитьПоле("Nomen",2,9,0);
ДБФ.ДобавитьПоле("Prajs",1,2,0);
ДБФ.СоздатьФайл(КатВыгр+"Ceni.dbf");
ДБФ.КодоваяСтраница(1);
Запрос.ВНачалоВыборки();
ПокаЗапрос.Группировка(1)=1Цикл
Если(Запрос.ТипКод<>"00010")Тогда
ДБФ.Добавить();
глВернутьЦену(Запрос.Номенклатура,Запрос.Тип,,изПроц,,,,0);
ДБФ.Cena=изПроц;
ДБФ.Nomen=Запрос.Номенклатура.Код;
ДБФ.Prajs=ВозрНомерПрайса(Запрос.ТипКод);
ДБФ.Записать();
КонецЕсли;
КонецЦикла;
Возврат1;
КонецФункции
//*******************************************************************
//Функциявозвращаетостаткиноменклатуры
ФункцияGlVozrOstatki()Экспорт
ПеремкатВыгр,дат;
Перемск;
ОСТ=СоздатьОбъект("XBase");
ОСТ.ДобавитьПоле("Kod",2,9,0);
ОСТ.ДобавитьПоле("Ostatok",1,5,0);
катВыгр=ПарамПоИмени("КаталогВыгр")+ПарамПоИмени("Ост");
ОСТ.СоздатьФайл(катВыгр+"ost.dbf");
ОСТ.КодоваяСтраница(1);
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Выгр_Ост)
|РегНом=Регистр.ОстаткиТМЦ.Номенклатура;
|РегСклд=Регистр.ОстаткиТМЦ.Склад.Код;
|РегКол=Регистр.ОстаткиТМЦ.Количество;
|ГруппировкаРегНомбезГрупп;
|ГруппировкаРегСклд;
|ФункцияКОН=КонОст(РегКол);"//}}ЗАПРОС
;
ЕслиЗапрос.Выполнить(ТекстЗапроса)=0Тогда
Предупреждение("Ошибкавзапросе");
КонецЕсли;
Запрос.ВНачалоВыборки();
ПокаЗапрос.Группировка(1)=1Цикл
ПокаЗапрос.Группировка(2)=1Цикл
ЕслиЗапрос.РегСклд="00001"Тогда
ОСТ.Добавить();
ОСТ.Kod=Запрос.РегНом.Код;
ОСТ.Ostatok=Запрос.КОН;
ОСТ.Записать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат1;
КонецФункции
Некоторые хранимые процедуры и запросы
к системе «SQLServer»
Хранимая процедура «DobTov»
/*добавляет товар к указанному заказу в указанном количестве,
а сумму исчет сам и вставляет - по коду передаваемого прайса */
CREATE PROCEDURE DobTov
@Nomen char(9) ,
@Zakaz int,
@Kolichestvo int,
@Prajs smallint
AS
DECLARE @cen money
SET @cen=(SELECT SUM(Cena) FROM _Ceni WHERE ((NomerPrajsa = @Prajs) and (_Ceni.Nomen=@Nomen)))
INSERT _TovariVZakaze (Nomen, Zakaz, Kolichestvo, Cena, Sym)
VALUES (@Nomen, @Zakaz, @Kolichestvo,@cen, @cen*@Kolichestvo)
GO
Хранимая процедура «NomenObnovi»
/* Служит для загрузки Номенклатуры с сервера 1С.
Если позиция с таким кодом,то обновляет. Иначе - добавляет
*/
CREATE PROCEDURE NomenObnovi
@KodNom char(9),
@EtoGruppa smallint,
@Otec char(9),
@Strana char(30),
@Naimenov char(300)
AS
IF (SELECT COUNT(KodNom) FROM _Nomenklatura WHERE (KodNom = @KodNom))>0BEGIN
UPDATE [_Nomenklatura] SET [EtoGruppa] = @EtoGruppa, [Otec] = @Otec, [Strana] = @Strana, [Naimenov] = @Naimenov WHERE ([KodNom] = @KodNom)
END
ELSE BEGIN
INSERT INTO [_Nomenklatura] ([KodNom], [EtoGruppa], [Otec], [Strana], [Naimenov]) VALUES (@KodNom, @EtoGruppa, @Otec, @Strana, @Naimenov)
END
GO
Запрос из VisualStudio (страница «default.aspx» при переходе с «prajs.aspx») к 1С, сохраняющий данные по условию в Excel:
// Копируем файл из вложенного каталога /shabloni в /zaka4
// При копировании - добавляем к имени файла rendom'om число
Random rnd = new Random();// Для получения случайного значения
// тут мы получаем случайное значение, чтобы потом добавить к имени файла
String str_rnd = Convert.ToInt32(rnd.NextDouble() * 10000).ToString();
// Задаёмпутикфайлам
string path = Server.MapPath("") +@"ShabloniPrice.xls";
string path2 = Server.MapPath("") + @"Zaka4Price" + str_rnd + ".xls";
// Копируемфайлшаблонный
FileInfo fi1 = new FileInfo(path);
fi1.CopyTo(path2);
String zapr3;
zapr3 = "insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0; Database=" + path2 + " ; ID=Foks; Password=676676', 'SELECT * FROM [Прайс$]') SELECT Naimenov, KodNom, Strana, MinimPartija, CAST (Cena AS nvarchar) FROM dbo._Nomenklatura, dbo._Ceni, dbo._Ostatki WHERE (([EtoGruppa] = 0) AND (Kolichestvo>0) AND (_Ostatki.Nomen=KodNom) AND (_Ceni.Nomen=KodNom) AND (NomerPrajsa=" +
Session["prs"].ToString() + ") AND (Otec='"+ str +"') ) ORDER BY Naimenov";
// помечаем всё цыфркой 3, дабы 100% не было конфликтов
SqlConnection con3 = new SqlConnection(System.Configuration.ConfigurationSettings.ConnectionStrings["ConnectionForForWeb"].ConnectionString);
SqlCommand cmd3 = new SqlCommand(zapr3, con3);
con3.Open();
cmd3.ExecuteScalar();
con3.Close();
Код работы с WEBСлужбой из ASP.NET
//******************************************************************************
//Загрузка номенклатуры, которую получаем от удалённой службы
void Button1_Click(object sender, EventArgs e)
{
int i, vsego;// Счётчик и общее число записей, полученных от Web Службы
DataTable ds = new DataTable();
Sluzba.Service ws = new Sluzba.Service();
ws.Timeout = 1000 * 60 * 5;
try{
ds = ws.VigruzNom(); // Получаемданныесудалённойслужбы
}
catch{
LabelInfo.Text = "Ошибкадоступак 1С. Подождите 15 минут и повторите попытку";
return;
}
// ds.Tables[0].TableName = "Nomenkl";
// ds.Tables[0].Columns[0].ColumnName = "EtoGruppa";
// ds.Tables[0].Columns[1].ColumnName = "KodNom";
// ds.Tables[0].Columns[2].ColumnName = "Otec";
// ds.Tables[0].Columns[3].ColumnName = "Strana";
// ds.Tables[0].Columns[4].ColumnName = "Naimenov";
// ds.WriteXml(@"C:ds.xml");
// Подключениек MS SQL Server
SqlConnection konekt = new SqlConnection("Server=FKS;Integrated Security=True;Database=ForWeb");
SqlCommand sqlcom = new SqlCommand("NomenObnovi", konekt);
sqlcom.CommandType = CommandType.StoredProcedure;
SqlParameter param = null;
param = sqlcom.Parameters.Add(new SqlParameter("@KodNom", SqlDbType.Char, 9));
param.Direction = ParameterDirection.Input;
param = sqlcom.Parameters.Add(new SqlParameter("@EtoGruppa", SqlDbType.SmallInt, 9));
param.Direction = ParameterDirection.Input;
param = sqlcom.Parameters.Add(new SqlParameter("@Otec", SqlDbType.Char, 9));
param.Direction = ParameterDirection.Input;
param = sqlcom.Parameters.Add(new SqlParameter("@Strana", SqlDbType.Char, 30));
param.Direction = ParameterDirection.Input;
param = sqlcom.Parameters.Add(new SqlParameter("@Naimenov", SqlDbType.Char, 300));
param.Direction = ParameterDirection.Input;
LabelInfo.Text = "Ждитезавершениявыгрузкиноменклатуры";
vsego = ds.Rows.Count;
konekt.Open();
for (i = 0; i < vsego; i++)
{
sqlcom.Parameters[0].Value = ds.Rows[i][1];
sqlcom.Parameters[1].Value = ds.Rows[i][0];
sqlcom.Parameters[2].Value = ds.Rows[i][2];
sqlcom.Parameters[3].Value = ds.Rows[i][3];
sqlcom.Parameters[4].Value = ds.Rows[i][4];
sqlcom.ExecuteNonQuery();
}
konekt.Close();
LabelInfo.Text = "Выгрузканоменклатурыуспешнозавершена, обновилосьзаписей -" + vsego;
}