АИС "Работа с покупателями"

РЕФЕРАТ

ВКР содержит пояснительную записку на 85 листах формата А4, включающую 21 рисунок, 11 таблиц, 24 литературных источника, 5 приложений.

WEB ПРОГРАММИРОВАНИЕ, WEB СЛУЖБА, 1С, C#, АВТОМАТИЗАЦИЯ, ADO, ТИРАЖИРОВАНИЕ, ИНСТРУКЦИЯ, COM.

Цель работы – автоматизация работы с покупателями.

В процессе работы проведён анализ аппаратных и программных средств предприятия, выбраны технологии и средства для решения поставленных задач.

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

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

-                        ведение точного учёта товаров на удалённых точках,

-                        поддержка распределённой базы данных,

-                        предоставление полной информации по текущему ассортименту компании интерактивным пользователям Интернет портала,

-                        публикация новостей и данных о компании на Интернет портале,

-                        возможность оформления заказов через Интернет.

. СОДЕРЖАНИЕ:

 TOC \o "1-5" \h \z \u ВВЕДЕНИЕ \h 7

1 ПОСТАНОВКА ЗАДАЧИ НА ПРОЕКТИРОВАНИЕ \h 8

1.1 Назначение и цели создания программного комплекса \h 8

1.2 Что было до внедрения АИС. \h 10

1.3 Структура компьютерной сети предприятия \h 11

1.4 Выбор программных средств и технологий взаимодействия \h 12

1.4.1 Выбор СУБД для автоматизации

хозяйственно-складской деятельности

и построения распределённой БД \h 13

1.4.2 Выбор среды разработки \h 14

1.4.3 Передача данных через локальную сеть \h 15

1.4.4 Выбор языка программирования \h 15

1.4.5 Выбор СУБД для Web сервера \h 16

1.5 Описание средств разработки \h 16

1.5.1 «1С Предприятие». Конфигурация «Торговля и склад» \h 16

1.5.2 MS SQL Server 2000 \h 21

1.5.3 MS Visual Studio.NET \h 22

2 ФУНКЦИОНАЛЬНАЯ ЧАСТЬ \h 25

2.1 Общее функционирование системы на базе «1С» \h 25

2.2 Функции создания и поддержания распределённой БД \h 26

2.3 Функции для переноса данных с сервера приложений 1С на WEB сервер (SQL Server) \h 28

2.3.1 Функции WEB службы \h 29

2.4 Функции ASP.NET приложения \h 34

2.4.1 Схема работа Интернет сайта \h 35

2.4.2 Функциональное назначение страниц \h 37

3 ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ \h 39

3.1 Общие принципы организации информационной базы \h 39

3.2 Передача данных удалённым точкам \h 39

3.3 Ведение БД на WEB сервере с использованием SQL Server 2000 \h 39

4 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ \h 45

4.1 Программные средства для создания и поддержания распределённой БД \h 45

4.1.1 Обработка на центральной базе «Выгрузка накладной» \h 45

4.1.2 Обработка на удалённой торговой точке - «Загрузка документов» \h 46

4.2 Автоматизация работы кассира в магазине PAGEREF _Toc106719349 \h 48

4.3 WEB приложение \h 50

4.3.1 Условия на работу WEB приложения у удалённого пользователя. PAGEREF _Toc106719351 \h 51

4.3.2 Используемые средства \h 52

4.3.2.1 Стандартные средства «WEB программирования» \h 52

4.3.2.2 ASP.NET 2.0 \h 52

4.3.2.3 ADO.NET \h 53

4.3.3 Получение данных от WEB Службы \h 53

4.3.4 Кэширование данных \h 54

4.3.5 Отправка электронной почты \h 55

4.3.6 Полномочия пользователей \h 56

2.4.7 Проблемы и их решение \h 57

5 ТЕХНОЛОГИЯ ЭКСПЛУАТАЦИИ ПРИЛОЖЕНИЯ PAGEREF _Toc106719361 \h 59

5.1 Инструкция оператора системы 1С на удалённом магазине \h 59

5.1.1 Общие сведения \h 59

5.1.2 Порядок работы: \h 59

5.1.3 Продажа (Реализация): \h 60

5.1.4 Возврат продажи \h 62

5.1.5 Использование меню фискального регистратора (ФР): \h 64

5.1.6 Акт сверки: \h 64

5.1.7 Печать ценников по подбору: \h 66

5.1.8 Загрузка накладных: \h 68

5.2 Эксплуатация WEB портала \h 68

ЗАКЛЮЧЕНИЕ \h 70

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ PAGEREF _Toc106719373 \h 71

ПРИЛОЖЕНИЕ А КОНЦЕПТУАЛЬНВЯ МОДЕЛЬ ПЕРЕНОСА ДАННЫХ \h 73

ПРИЛОЖЕНИЕ Б КОД WEB СЛУЖБЫ (ФАЙЛ «Service.asmx») \h 74

ПРИЛОЖЕНИЕ В ФУНКЦИИ ГЛОБАЛЬНОГО МОДУЛЯ, ФОРМИРУЮЩИЕ ДАННЫЕ ДЛЯ WEB СЛУЖБЫ  PAGEREF _Toc106719376 \h 78

ПРИЛОЖЕНИЕ Г НЕКОТОРЫЕ ХРАНИМЫЕ ПРОЦЕДУРЫ И ЗАПРОСЫ К СИСТЕМЕ «SQL SERVER» \h 82

ПРИЛОЖЕНИЕ Д КОД РАБОТЫ С WEB СЛУЖБОЙ ИЗ ASP.NET \h 84

ВВЕДЕНИЕ

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

Машины могут автоматизировать работу людей, лишь, будучи правильно запрограммированными.

Для ведения складского учёта используется программа 1С предприятие. Данная платформа была выбрана потому, что для её внедрения требуются относительно невысокие денежные и временные затраты. Кроме этого – данная программа поддерживается производителями фискальных регистраторов (которые используются на точках розничной торговли) и постоянно обновляется в соответствии с изменением законодательства.

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

1 ПОСТАНОВКА ЗАДАЧИ НА ПРОЕКТИРОВАНИЕ

1.1 Назначение и цели создания программного комплекса

Назначение и цели создаваемого программного комплекса:

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

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

-                        автоматизация работы с покупателями через Internet портал,

-                        предоставление информации о предприятии, его торговых точках и его ассортимента через Internet.

Задачи Интернет портала:

-                        Рассказать о предприятии широкому кругу заинтересованных лиц, дать полную информацию по центральному офису и торговым точкам (адреса, телефоны, время работы, схемы проезда),

-                        Дать покупателю возможность ознакомиться с ассортиментом и ценами компании в удобной форме,

-                        Дать менеджерам возможность публиковать новости, информируя покупателей (оптовиков),

-                        Обеспечить возможность заказа покупателем-оптовиком товара,

-                        Закачивание прайс–листа по указанной группе товаров,

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

-                        Ведение статистики посещаемости.

Дополнительные требования, предъявленные руководителем предприятия:

-                        Ведение статистики по просмотру товаров (выяснить – какие группы товаров интересуют WEB пользователей больше, а какие – меньше),

-                        Каждый покупатель – оптовик имеет свой пароль, свой прайс, свои полномочия,

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

-                        Авторизированный пользователь видит лишь товар на оптовом складе. Также – без конкретизации по количеству. Почему так – рассказано далее,

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

-                        Не производить контроль количества запрашиваемого товара и его наличия. Если на остатке значится 10 позиций, а авторизированный пользователь пытается выписать 20, то не выводить ошибку «отсутствует нужное количество», а продолжить оформление заказа. Это сделано в связи с тем, что ассортимент большой и на складе (получатель сформированного заказа) оформят продажу 10 позиций, после чего свяжутся с покупателем, объяснят, что товара не хватает и предложат его аналоги, дабы он добрал до 20 штук. Такова политика предприятия, позволяющая таким образом поднять продажи.

1.2 Что было до внедрения АИС.

Локальная сеть с программой «1С», работающей в терминальном режиме. Менеджеры меняли цены, оптовый склад делал реализации покупателям. Товар на удалённые точки оформляется как перемещение на другой склад. Весь количественный учёт в магазинах вёлся на бумаге. Раз в несколько дней данные «документы» поступали в центральный офис, где работница забивала на компьютере документ «реализация», тем самым списывая товар с соответствующего склада. Практически каждый день менеджеры меняют цены на товар. После чего они по телефону(или по базе) узнавали – есть ли данный товар в магазинах. Если есть, то они печатали ценники для магазинов. Работа эта кропотлива, в результате чего часто были ситуации, что цена на товар меняется, но магазины об этом не знают.

Теперь по работе с оптовыми покупателями. На каждый товар имеется несколько типов цен. Цена, по которой отпускается товар зависит от объёма либо текущего заказа, либо от того, сколько покупатель брал товара до этого. Получается – каждому покупателю нужен свой прайс-лист. Причём именно по интересующей его группе товаров. Точное количество остатков на складе - коммерческая тайна. Но есть привилегированные покупатели, которым можно показать остатки. Много времени уходило на то, чтобы сформировать отчёт-прайс в 1С, экспортировать в таблицу MS Excel и отправить покупателю по электронной почте. Политикой что кому показывать руководит один человек - начальник предприятия.

Весь этот процесс требовалось автоматизировать, разгрузив персонал от рутины, сделать покупку для покупателя максимально удобной и тем самым выделиться среди конкурентов (а конкуренция в этой области очень жесткая). Кроме того – фирма относительно молодая, сеть розничных магазинов растёт (за полгода с 2 до 4), штат работников растёт, увеличивается количество компьютеров, оборот продаж.

1.3 Структура компьютерной сети предприятия

Немаловажную роль играет структура компьютерной сети предприятии. От её топологии зависит вся дальнейшая разработка программного комплекса. Протокол взаимодействия локальной сети: TCP-IP.

Схема локальной сети показана на рисунке 1:

Рисунок 1 – Схема локальной сети предприятия

1.4 Выбор программных средств и технологий взаимодействия

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

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

1.4.1 Выбор СУБД для автоматизации хозяйственно-складской деятельности и построения распределённой БД

«1С Предприятие» 7.7 выбрано программой для построения складского учёта, так как на сегодняшний день у фирмы 1С в этой области практически нет конкурентов. 1С – программа для ОС Windows. Все компьютеры предприятия работают на платформе Windows (XP Professional или Server 2003). Используется система 7.7, а не 8 так как учёт был поставлен до появления на широком рынке версии 8, которая до сих пор не получила широкого распространения (что не исключает, что за ней – будущее). Система обладает нужной гибкостью, масштабируемостью. Синтаксис встроенного языка не представляет сложности и для человека, не имеющего компьютерного образования. Производители заявляют, что система поддерживает логику объектно ориентированного программирования. Но это всё же не так. Программирование – процедурное. Некоторые средства массовой информации причисляют язык 1С к языку 4 уровня, с чем я конечно же тоже не соглашусь. Не хватает гибкости. Основной вариант, который можно рассматривать в качестве альтернативы 1С – это создание самостоятельного продукта. Данный подход требует наличие высококвалифицированного персонала. Для процесса разработки,  внедрения и модернизации потребуется больше времени. Но эффективность его использования на мой взгляд была бы выше, так как в системе не было бы ничего лишнего. Выбирать мне особо не приходилось, так как использование 1С началось до моего появления на фирме. Хочется отметить, что конфигурация дорабатывается не только мной, но и информационным отделом фирмы «Столица», с которыми у нас заключено деловое партнёрство. Что тоже повлияло на выбор.

Для создания распределённой БД также было решено использовать 1С, с нештатными средствами.

1.4.2 Выбор среды разработки

Данные с 1С надо получать, обрабатывать и предавать по локальной сети на WEB сервер. Кроме того, на Web сервере должен функционировать интернет сайт. Я решил использовать продукты компании Microsoft, которые лучше всего адаптированы под операционную систему MS Windows, быстры и надёжны.

На сегодняшний день серьёзную конкуренцию MS Visual Studio составляет компания Borland со своими продуктами – Delphi и Builder. В плане простоты изучения данные средства разработки может быть и проще, не зря ведь в институтах и школах именно на них идёт обучение студентов и школьников. Но в плане ясности, отказоустойчивости, широте охвата областей программирования и документированности(MSDN) – MS Visual Studio – вне конкуренции. Кроме того – я могу в одной графической оболочке разрабатывать две разнородные компоненты своей системы – Web Service и Web Application.

В моём распоряжении оказалась Beta версия Visual Studio 2005, которую, я и решил использовать. Опыта программирования в данной среде у меня практически не было. Русскоязычных ресурсов по версии 2005 очень мало, в релизе возможны существенные изменения вплоть до того, что уже написанные приложения в beta версии перестанут функционировать. Но есть и преимущества. На 9 семестре в рамках дисциплины я писал лабораторную работу с использованием Visual Studio 2003 и ASP.NET. В новой версии (ASP 2.0) появились новые компоненты, были доработаны старые. Приятно удивил меня GridView своими возможностями. Считаю выбор оправданным. Никаких нареканий к стабильности работы, скорости работы и других характеристик полученных программных продуктов не имею.

1.4.3 Передача данных через локальную сеть

Было решено использовать связь «Web Служба» --> «ASP.NET приложение». Данная связка позволяет установить приложение на сервере с программой 1С, которое будет из вне доступно по протоколу HTTP, передавая данные по 80 порту в XML формате. Данная технология позволяет скрыть от конечного пользователя всю сложность преобразования данных из одного вида в другой и обратно. В моём случае используется относительно небольшой объём кода. Для доступа к данным используется технология ADO.NET.

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

MS Visual Studio позволяет вести разработку на одном из языков программирования: C#, C++, Java, Basic. Я везде использовал C#. C# перенял лучшее от Java и C++, автоматизировал работу с памятью, которую компилятор теперь берёт на себя. Синтаксис практически не отличается от C++ и непосредственно написание программного кода занимает меньше времени.

1.4.5 Выбор СУБД для Web сервера

В качестве сервера баз данных был использован MS SQL Server 2000. Первоначально предполагалось использование  MS Access, но Access – настольная (одна программа на один компьютер) система управления данными, а SQL Server – одна из мощнейших сетевых СУБД с возможностью параллельной работы множества пользователей. Высокая скорость обработки, выборки, изменения данных посредством SQL запросов ставит SQL сервер выше всех конкурентов. Конкуренцию может составить Oracle, но данная СУБД предназначена для решения более глобальных задач. В моём случае данных относительно мало. Такое количество данных легко выдержит любая СУБД, но требуется высокая скорость обработки запросов и возможность работы в многопользовательском режиме. Версию я выбрал 2000, а не 2005 в связи с тем, что 2000 менее требовательна к ресурсам компьютера, а нововведения 2005 мне бы не пригодились. Описание СУБД MS SQL Server, благодаря которому  можно понять всю мощь выбранной системы можно найти далее.

1.5 Описание средств разработки

В данном разделе я опишу все программные продукты, выбранные выше. Постараюсь выделить лишь самые значимые моменты для работы АИС и моменты, важные для разработки ПО.

 

1.5.1 «1С Предприятие». Конфигурация «Торговля и склад»

Программа "1С: Предприятие 7.7" , в частности продукт "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. Данные файлы имеют формат «DBASE IV», что позволяет открывать их посредством технологии «ADO.NET», задавая соответствующим образом строку подключения.

В 1С имеется встроенный язык программирования. Синтаксис схож с языком программирования «Basic». Само программирование в 1С имеет много общего с программированием макросов для Microsoft Office. Все операторы на русском языке (хотя имеются и их англоязычные синонимы). Обмен данными между приложениями возможен через тестовые файлы, файлы XML (используется сторонняя компонента), файлы формата «Dbase IV» и OLE. В своей работе я использовал работу с файлами «*.dbf» для обеспечения связи с удалёнными точками и работу системы 1С в качестве OLE сервера для поставки данных WEB службе. Система 1С позволяет разрабатывать дочерние формы – внешние обработки. Таким образом обеспечивается взаимодействие программы с пользователем – через формы, создающиеся в окне приложения «1С Конструктор»(программа для программирования 1С).

Хотелось бы остановить внимание на структуре конфигурации. Сама конфигурация находится в определённом каталоге, в котором кроме файлов «*.dbf» c данными находится файл «1Cv7.md» – ядро программы. В нём хранятся все программные модули, от которых зависит функционирование системы. Кроме этого из 1С имеется возможность загрузки так называемых «внешних форм» - файлов с расширением «ert». Этот файл содержит Windows форму и модуль обработки событий этой формы (можно ещё причислить – отчёты, они же – таблицы, которые также могут содержаться в файле обработки). Внешней обработке, как и встроенной, доступны все объекты системы 1С. Использование обработок позволяет проводить действия с системой, не изменяя ядро. Обработка работает в одном адресном пространстве с ядром программы.

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

Особенностью конфигурации «Торговля и Склад» является использование таких объектов, как «Регистр». «Регистр» представляет собой накопительную структуру, данные в которой изменяются при проведении документов. Это позволяет увеличить скорость получения данных. Не требуется пересчитывать данные документов, а нужно обратиться к «Регистру». Например, есть у нас регистр «ОстаткиТМЦ» и документы, которые изменяют атрибут «Количество» для указанной номенклатурной позиции в этом регистре - либо увеличивают значение, либо уменьшают его в зависимости от характера проведения операции (Реализация и возврат покупателю – уменьшает остаток, а поступление – увеличивает). Для получения количества нужно обратиться к свойству «Количество» данного регистра.

1.5.2 MS SQL Server 2000

Microsoft SQL Server 2000 нацелен на решение широкого круга задач во всех областях бизнеса, в том числе и в электронной коммерции.

Преимущества:

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

-                        Масштабируемость и надежность. SQL 2000 Server обеспечивает практически неограниченный рост объемов данных за счет увеличения надежности и масштабируемости системы, используя все преимущества мультипроцессорной обработки данных,

-                        Скорость построения решений. SQL 2000 уменьшает время создания, развертывания и выхода на рынок современных приложений для задач бизнеса, электронной коммерции, использует встроенный отладчик T-SQL. Совершенствует и ускоряет процесс поиска данных, упрощает управление, позволяет использовать создаваемые пользователем функции в других приложениях, предоставляет широкие возможности для создания web-приложений,

-                        Рекордные показатели скорости. Еще до окончательного выхода на рынок система на «Windows 2000», «SQL 2000 Server» установила новый мировой рекорд по производительности, далеко опередив конкурирующие решения на различных платформах.

Это из официального описания системы. В данной работе особо пригодились такие средства как «Query Analyzer» и «SQL Profiler». Использование последнего помогло отладить работу с базой через SQL запросы. Нельзя не отметить то, что связка SQL Server < –-- > ADO.NET хорошо проработана и оптимизирована компанией «Microsoft», что положительно сказывается на скорости обработки запросов и получения результатов. В «Visual Studio» для работы с «MS SQL Server» даже созданы специальные классы (их имена начинаются с SQL).

Сравнивая данную систему с InterBase в плане удобства работы – с SQL Server работать приятней – всё проще и наглядней. При разработке помогают Wizard’ы.

Также имеется очень мощная система T-SQL, позволяющая смешивать синтаксис SQL запросов с алгоритмическим языком, что позволяет перенести большую часть расчётов на сторону SQL сервера (хранимые процедуры).

1.5.3 MS Visual Studio.NET

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

Когда говорят о .NET языках, прежде всего подразумевают C# - язык появившийся вместе с первой версией «.NET Framework» и являющийся основным языком «.NET». Почему это там, можно вести длительные споры и приводить множество аргументов, но основным из них будет то, что язык специально создавался под новую платформу, поэтому с момента своего рождения он поддерживал все концепции платформы .NET. Не раз в компьютерной прессе были публикации по поводу того, что C# - это Java от Microsoft (дабы отойти от компании Sun). Всё, что можно было упаковать в классы, было в них и упаковано.

Были использованы такие средства программного комплекса Visual Studio 2005 beta как:

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

-                        Написание ASP.NET приложения. Хочу уточнить, что приложение было создано на .NET Framework 2.0 и ASP.NET 2.0. Первый русскоязычный хостер заявил о поддержке ASP.NET второй версии только в начале июня 2005 года. С каждой версией ASP.NET появляются новые и новые компоненты, позволяющие строить сайт из «кирпичиков», минимизируя написание программного кода конечным разработчиком. С использованием ASP.NET сайт можно сделать в минимальные сроки по сравнению с другими языками Web программирования,

-                        Доступ к данным посредством ADO.NET. Использовался доступ к таким поставщикам данных как – MS Excel (через Jet), Dbase IV, MS SQL Server,

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

2 ФУНКЦИОНАЛЬНАЯ ЧАСТЬ

2.1 Общее функционирование системы на базе «1С»

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

Работа с ними осуществляется следующим образом: в системе 1С Предприятие создаётся документ «Реализация», в котором на каждый товар устанавливается цена с самой минимальной наценкой. Далее товар отвозится на удалённую точку, на которой приходуется и отпускается по цене повыше (по другому прайсу).

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

Было принято решение – установить на каждую точку систему 1С предприятие, где ядро - копия центральной базы. Данное действие было проделано – на все точки, закуплены компьютеры, установлена система 1С, заполнены должным образом справочники. Для правильного функционирования распределённой базы требуется обеспечить:

-                        автоматическое создание новых позиций номенклатуры в удалённой в базе, если пришедший товар ранее не проходил через данную точку,

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

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

В качестве носителя информации было принято решение использовать внешний носитель информации типа «flash» по следующим причинам:

-                        надёжность,

-                        долговечность,

-                        отсутствие необходимости использовать дополнительное оборудование (последовательными разъемами (USB) снабжены все материнские платы, выпускаемые в последние пять лет),

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

Формат используемых для переноса файлов – «DBF».

2.2 Функции создания и поддержания распределённой БД

Распределённую базу данных было решено построить путём тиражирования данных с центральной базы на удалённые компьютеры.

Информационно-функциональная схема работы с удалёнными точками представлена на рисунке 2.

Рисунок 2 – ИФС «Работа с удалёнными точками»

2.3 Функции для переноса данных с сервера приложений 1С на WEB сервер (SQL Server)

Схема переноса представлена на рисунке 3.

Рисунок 3 – Схема переноса данных с сервера приложений 1С на WEB сервер (SQL Server)

Данный этап – один из самых сложных в работе данной АИС. Перед тем, как описать средства и порядок разработки подсистемы переноса данных необходимо показать – какие данные мы переносим и в каком количестве.

Схема связи справочников при переносе показана на рисунке 4.

Рисунок 4 – Схема связи справочников при переносе

Концептуальная схема переноса представлена в приложении А.

2.3.1 Функции WEB службы

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 служба показывает максимальную производительность.

2.4 Функции ASP.NET приложения

Структура страниц *.aspx и связей между ними (для построения использовался продукт «MS Visio Studio 2005»). Вид главного окна на этапе разработки представлен на рисунке 5.

Рисунок 5 – главное окно приложения Visual Studio на этапе разработки

2.4.1 Схема работа Интернет сайта

Рисунок 6 – Схема работы Интернет портала

Таблица 1 - Графические обозначения:

Графическое

обозначение

Описание

Стартовая страница

Файл с расширением «aspx» - серверная страница, формируемая на стороне сервера в HTML код при запросе её пользователем. Конкретизация по именам файлов страниц.

Файл с расширением «ascx». Пользовательский элемент управления.

Файл в формате XML.

WEB Служба. В моей работе она одна.

База данный MS SQL Server. Конкретизация по именам задействованных таблиц.

Обработка, выполняющаяся на стороне сервера. Пояснение обработок содержится в подпункте «Описание действий».

Графический файл (Bitmap).

Файл в формате Microsoft Excel

Отправка почтового сообщения

Стрелки показывают направление движения данных. Например, стрелка под номером 16 означает, что данные, полученные с формы «Skolko.aspx» меняют или добавляют записи в таблица. Стрелка под номером 26 показывает аналогично предыдущей, но показывает, что данные не только пишутся в данную таблицу, но и берутся из неё для отображения пользователю. Стрелка под номером «14» показывает, что данные берутся из таблицы «_Nomenklatura», но записи таблицы не изменяются.

В схеме не отражено:

-                        Протоколирование всех действий в таблицу _Statistika,

-                        Схема авторизации пользователей.

2.4.2 Функциональное назначение страниц

-                        Default.aspx. Стартовая страница приложения. Данная страница представлена на рисунке в следующем подразделе. На неё возложены такие функции: отображение информации о предприятии, авторизация пользователя, заказ товара,

-                        Men.aspx. Страница для менеджеров. На данной странице осуществляется авторизация менеджеров, запускается процедура переноса данных с 1С через WEB службу в MS SQL Server, выгрузка остатков с удалённых магазинов, переход к административным страницам «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] и доработан до нужного результата.

3 ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ

3.1 Общие принципы организации информационной базы

Все данные централизованно хранятся на сервере 1С. С сервера 1С поступают на удалённые торговые точки накладные, а на Web сервер поступают данные по ассортименту, остаткам и текущим ценам. С удалённых магазинов регулярно снимаются остатки, которые идут в базу данных Web сервера.

3.2 Передача данных удалённым точкам

Передача данных описана в разделе 2.2.

Передаются документы «Реализация», в том числе:

-                        наименование номенклатурной позиции,

-                        количество переданного товара,

-                        страна производитель,

-                        единицы учёта,

-                        цена отпускная,

-                        цена закупочная.

3.3 Ведение БД на WEB сервере с использованием SQL Server 2000

Концептуальная модель базы данных SQL Server показана на рисунке 7.

Рисунок 7 – Концептуальная модель базы данных на стороне WEB сервера (SQL Server).

Заполнение данной БД происходит посредством хранимых процедур, код некоторых из них приведён в приложении Г. В этом же приложение можно посмотреть пример выполнения 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)

Пароль для доступа

Email

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)

4 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ

4.1 Программные средства для создания и поддержания распределённой БД

4.1.1 Обработка на центральной базе «Выгрузка накладной»

Внешний вид программы (внешней обработки) показан на рисунке 8

Рисунок 8 – Окно подпрограммы «Выгрузка накладной»

Пользователю требуется выбрать каталог, куда будут сохранены dbf файлы с информацией по накладной, и сам документ. Алгоритм работы обработки таков:

а.       Создание каталога по имени документа,

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

в.       Последовательный проход по элементам документа «Реализация» с выгрузкой в файлы «DBF» таких свойств как:

-       Единица измерения,

-       Цена,

-       Страна происхождения,

-       Производитель (как основное свойство),

-       Наименование для печати,

-       Ставка НДС.

Синтаксис языка позволяет использовать в качестве операторов русские слова, что делает программы легко понимаемыми неопытными в 1С программистами.

4.1.2 Обработка на удалённой торговой точке - «Загрузка документов»

Флеш накопитель доставляется в магазин вместе с товаром, вставляется кассиром в системный блок.

Далее кассир по инструкции (инструкция пользователя находится в разделе 5.1.8) открывает из 1С обработку загрузки документа, представленную на рисунке 9.

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

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

В данной обработке использовался запрос, извлекающий из регистра «ОстаткиТМЦ» остатки по всем номенклатурным позициям:

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

   "//{{ЗАПРОС(Выгр_Ост)

   |РегНом= Регистр.ОстаткиТМЦ.Номенклатура;

   |РегНомКод=Регистр.ОстаткиТМЦ.Номенклатура.Код;

   |РегСклд= Регистр.ОстаткиТМЦ.Склад.Код;

   |РегКол= Регистр.ОстаткиТМЦ.Количество;  

   |Группировка РегНом без Групп;

   |Группировка РегСклд;

   |Функция КОН = КонОст(РегКол);"//}}ЗАПРОС

    ;

   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

        Предупреждение("Ошибка в запросе");

   КонецЕсли;

Этот запрос позволяет избежать перебора записей и ускорить выборку по сравнению с простым перебором в десятки раз. Время выполнения этого запроса занимает менее 8 секунд. Но как видно – синтаксис сложен и не понятен на первый взгляд. Описать работу запроса можно так: используя индексы DBF файлов, происходит выборка из регистра остатков по всей номенклатуре. В запросе вводятся локальные переменные «РегНом», «РегНомКод», «РегСклд», «РегКол», доступ к которым возможен например при переборе результатов запроса через конструкцию «Запрос.Параметр». Так как в запросе явно не указан временной период, то по умолчанию используется «точка актуальности» - термин, введённый 1С, обозначающий рабочую дату или точку актуальности итогов, то есть время, по которое системой 1С гарантируется, что данные в регистрах соответствуют действительности. Слово «Группировка» осуществляет группировку записей по внутренним переменным, позволяя перебирать результаты выполненного запроса по группировке, а функция «КонОст» указывает запросу вернуть значение переменной на конец периода (в нашем случае – на «точку актуальности»).

Также на этом маленьком фрагменте можно увидеть преимущества использования русских слов при написании программы. Комментарии в коде просто не нужны.

Так же, как и при описании обработки сохранения данных на флеш накопитель.

4.2 Автоматизация работы кассира в магазине

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

-                        Создание обработки, позволяющей ускорить печать ценников,

-                        Доработка документа «Реализация» для печати чеков продажи на фискальном регистраторе,

-                        Доработка документа «Возврат продажи» для печати чеков возврата продажи,

-                        Создание обработки, выводящей отчёт по продажам кассирам в указанном временном интервале,

-                        Изменение интерфейса кассира.

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

Работа пользователя с обработками и моими доработками ядра системы подробно описана в руководстве пользователя, представленного в разделе 5.1.

Фискальный регистратор – устройство для печати чеков по операциям купли-продажи. Данные по суммам продаж хранятся во внутренней памяти. Устройство регистрируется в налоговых органах, и ими же могут проверяться такие моменты:

-                        Каждому покупателю выдаётся чек,

-                        Каждый чек содержит информацию о компании – продавце,

-                        Сумма продаж и возвратов продаж за месяц.

В компании используются фискальные регистраторы модели «ШТРИХ ФР-К». К каждому устройству прилагаются драйвера, документация и пример работы для «1С Предприятия 7.7». Устройство подключается к компьютеру через интерфейс «RS-232». С помощью прилагаемого программного обеспечения были настроены параметры вывода информации на чек:

-                        Наименования отделов,

-                        Вывод дробной части суммы,

-                        Информационное сообщение.

Возврат может осуществляться только при наличии чека. Для сопоставления чека с документом «Реализация» на каждом чеке выводится номер документа – реализации. При оформлении возврата оператору надо выбрать документ-основание, номер которого она берёт из чека. Номер печатается под служебной информацией, без пояснения, не привлекая взгляд.

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

При возврате продажи оформляется документ «возврат продажи», при проведении которого автоматически печатается чек на возврат.

В конце рабочего дня оператор должен запустить обработку «Акт сверки», которая покажет ему сумму продаж (за минусом возвратов) за день. Данная сумма должна совпадать с фискальным отчётом (отчёт фискального регистратора по продажам при закрытии смены) и денежной суммой в кассе. Данная обработка представлена в разделе 5.1.6.

4.3 WEB приложение

Стартовая страница приложения показана на рисунке 10.

Рисунок 10 – стартовая страница web портала

На рисунке 10 отмечены пользовательские элементы управления.

4.3.1 Условия на работу WEB приложения у удалённого пользователя.

При разработке Интернет портала приходится выбирать между кроссплатформеностью и наглядностью приложения. В данном случае было выбранно удобство и красота конечного продукта. При возникновении потребности приложение может быть модернизировано соответствующим образом. Требования к компьютеру WEB пользователя таковы:

-                        Internet Explorer 6 x,

-                        Разрешение экрана выше, либо равное 1024x768,

-                        Разрешение всплывающих окон (для Windows XP SP2),

-                        Разрешение использования Java Script.

4.3.2 Используемые средства

4.3.2.1 Стандартные средства «WEB программирования»

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

4.3.2.2 ASP.NET 2.0

Были использованы следующие объекты ASP.NET 2.0:

-                        FileUpload – используется на странице «men.aspx». Объект служит для загрузки выбранного пользователем файла на сторону сервера. Данный объект был использован для загрузки на сторону сервера файла «ost.dbf», содержащего остатки розничного магазина. Этот файл автоматически сохраняется на внешний носитель информации при выгрузке накладной через обработку, описанную в разделе 5.1.8,

-                        DataView – таблица отображения данных. В  «Visual Studio 2003» для отображения данных в табличном виде использовался компонент «DataGrid», требующий большего объёма программного кода, чем «DataView». В данном компоненте автоматизированы такие действия, как: постраничный вывод указанного количества записей, выбор строки, редактирование строки. В качестве источника данных используется объект типа «SqlDataSource»,

-                        Label. Для отображения пояснительных надписей,

-                        Login. Данный класс служит для авторизации пользователя. Представляет собой объединённые в одну структуру поля для ввода имени пользователя, пароля, и поясняющие надписи к ним.

4.3.2.3 ADO.NET

Большая часть кода приложения – это работа с БД. Для работы с SQL Server использовались классы: «SqlConnection», «SqlCommand». Не буду описывать работу из Visual Studio с MS SQL Server. Она хорошо описана в [16], [22], [23].

Были использованы такие методы работы с данными как:

-                        Выполнение хранимых процедур на SQL Server’e без возврата значения (напиример «NomenObnovi», «DobTov»)

-                        Выполнение хранимых процедур на SQL Server’e с возвратом значений («NewZakaz»)

-                        Выполнение SQL кода, сформированного WEB сервером по параметрам (например сохранение прайс-листа в формате Excel представлен в приложении Е).

-                        Выгрузка данных в DataSet с помощью метода Fill.

Тексты некоторых хранимых процедур представлены в приложении Е.

4.3.3 Получение данных от WEB Службы

Для подключения к 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» (10 000 записей), 70 секунд занимает перенос в таблицу «_Ostatki» (10 000 записей) и чуть более двух минут происходит выгрузка цен (63 000 записей). Более долгая задержка выгрузки цен объясняется не большим (ударение на «о») количеством записей, а большим временем, затрачиваемым системой 1С на расчёт динамических цен. Я считаю, что было получено максимально допустимое быстродействие по получению и передачи данных.

4.3.4 Кэширование данных

В языке разметки HTML для предотвращения повторной загрузки одних и тех же данных используются фреймы. Страница делится на области (фреймы), которые могут быть повторно загружены с сервера, либо остаться на машине клиента без обновления. Данная технология считается устаревшей. Теперь для предотвращения повторной загрузки одних и тех же данных используется кэширование. Кэширование может быть явное и не явное. Не явное кэширование используется по умолчанию. WEB сервер сам взаимодействует с браузером пользователя, минимизируя передаваемый трафик.

В WEB приложении было использовано и явное кэширование. Для предотвращения повторной загрузки дерева номенклатуры в файле «derev.ascx» используется директива: «<%@ OutputCache Duration = "600" VaryByParam="none" %>». Данная строка указывает, что данный фрагмент страницы нужно кэшировать и на стороне пользователя и на стороне сервера (это выставленно по умолчанию) в течении 600 секунд.

4.3.5 Отправка электронной почты

Для отправки сообщений на электронную почту используется учётная запись внутреннего почтового сервера «InternetMagazin@mirposudy.com». В Visual Studio 2005 произошли изменения и в новом продукте используется иная схема отправки сообщений, нежели чем в Visual Studio 2003. Страницы, с которых отправляются электронные письма показаны на рисунке 11.

Рисунок 11 – Форма отправки тестового сообщения

4.3.6 Полномочия пользователей

В соответствии с требованиями к программному продукту пользователи делятся на две группы – не авторизированные и авторизированные.

Не авторизированные пользователи, они же – «гости» имеют права на просмотр есть ли товар на розничной точке (без указания конкретного количества) и видят его цену по 1 прайсу (чем выше номер прайса, тем дешевле стоит товар). Делать заказ пользователи данного типа не могут.

Авторизированные пользователи – это покупатели - оптовики, которым имя пользователя и пароль выдаётся менеджерами. Покупать товар они могут по номеру прайса, заданного менеджером. Номер прайса зависит от двух критериев: объемы предыдущих закупок и частота покупок. Данная группа пользователей может оформлять заказы на товар.

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

Информационно – функциональная схема «работа авторизированного пользователя в системе» показана на рисунке 12.

Рисунок 12 - работа авторизированного пользователя в системе

«Отчёт по товару» для выгрузки в формате Excel абсолютно идентичен данным, выводимым в DataView.

2.4.7 Проблемы и их решение

Проблемы и их решение:

-                        Невозможность взаимодействия JavaScript с кодом на C#. Решение: использовать параметры, передаваемые в строке запроса,

-                        Отсутствие документации на русском языке. Решение: изучение иностранного языка,

-                        Отсутствие средств отладки JavaScript. Решение: использование окон сообщений «ShowAlert» для отображения значений переменных. Мне это очень помогло при поиске зацикливания в одной из процедур.

5 ТЕХНОЛОГИЯ ЭКСПЛУАТАЦИИ ПРИЛОЖЕНИЯ

5.1 Инструкция оператора системы 1С на удалённом магазине

Содержание инструкции:

-                        Общие сведения,

-                        Порядок работы,

-                        Продажа (реализация),

-                        Возврат продажи,

-                        Использование меню фискального регистратора(ФР),

-                        Акт сверки,

-                        Печать ценников по подбору,

-                        Загрузка накладных.

5.1.1 Общие сведения

База данных ведётся пользователем с правами Кассира. Доступны такие действия, как:

-                        отпуск товара с распечаткой чека,

-                        оформление возврата с печатью чека на возврат продажи,

-                        загрузка накладных, полученных с основной базы, с добавлением новой номенклатуры и изменением цен в справочнике цен,

-                        формирование акта сверки.

Используется фискальный регистратор «Штрих ФР-К»

 

5.1.2 Порядок работы:

В течении дня оформляются продажи в текущем времени. Если нужно обменять товар, то оформляются последовательно возврат и продажа. В конце дня закрывается смена – делается полный отчёт с гашением на ФР и печатается акт сверки по указанному ниже алгоритму. В итоге получаем итоги, которые должны совпадать – наличность, итог по акту сверки из 1С и итог по итоговой ленте ФР.

 

5.1.3 Продажа (Реализация):

Для оформления продажи нужно:

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

Заголовок окна

Рисунок 13 – Окно документа «Реализация»

б.       Прейти на закладку «Табличная часть». Развернуть окно, два раза щёлкнув на его заголовке или на пиктограмме «развернуть». После чего нажать на кнопку «Цены…» и в появившемся окне выбрать тип цен «Розничная» и установить галку на «Включён в сумму». Результат показан на рисунке 14.

Рисунок 14 - Настройка документа «Реализация»

Надо нажать кнопку «ОК» и подобрать товар, используя кнопку «Подбор».

В виде дерева

Получаем окно, показанное на рисунке 15.

Удобный

поиск

Рисунок 15 - подбор номенклатуры

В поле «Запрашивать» для удобства работы должно быть выставлено «Количество». Для ускорения поиска желательно пользоваться кнопкой «Поиск», учитывая, что код состоит из 9 символов, а в начале идут нули.

После подбора выбранный товар появляется в нижней таблице. Нажатием кнопки «Ок» он переносится в тело документа.

в.       После подбора внизу окна высвечивается сумма, которую должен уплатить покупатель. В поле «Сумма от покупателя» надо обязательно ввести сумму, которую внёс покупатель. Потому что при печати чека будет выведена сумма сдачи.

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

 

5.1.4 Возврат продажи

Для оформления возврата продажи:

а.       Щёлкните мышкой по иконке с красным крестиком в панели инструментов 1С.

б.       Открывается окно. Аналогично предыдущему документу поля на вкладке «Шапка» должны быть установлены должным образом по умолчанию. Жмите на кнопку «Основание», выбирайте документы «Реализация» и ищите документ, по которому был отпущен товар (номер документа печатается на чеке). На вопрос – заполнять ли документ по документу основанию отвечаете утвердительно «да».

в.       Переходите к вкладке «ТМЦ и услуги (по отпускным ценам)».

В таблице отображаются все товары, которые прошли по документу – основанию. Нам нежно оставить лишь те, которые действительно возвращают. Цены должны стоять те, по которым отпускали товар. Удалить не нужные позиции можно кликая на нужной правой кнопкой мыши и выбирая пункт «Удалить строку», либо активируя строчку и нажимая на клавиатуре клавишу «Delete»(что будет быстрее).

Форма удаления показана на рисунке 16.

Рисунок 16  - Удаление позиций из документа «Возврат продажи»

г.       Нажать кнопку «Провести». Если ФР не подключён, то вывалится сообщение о невозможности распечатать чек, но товар будет возвращён на склад.

д.       Закройте окно документа (если оно не закрылось автоматически)

5.1.5 Использование меню фискального регистратора (ФР):

В меню программы 1С имеется меню «ФР»:

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

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

-                        «Суточный отчет без гашения» - выводит отчет по продажам с начала смены.

-                        «Отменить чек» - отмена чека системным администратором. Если произошла отмена чека, то надо будет перепечатать чек. Чек отменяется, если он не распечатался и фискальник «завис». Это может быть – если несвоевременно поменяли бумагу (кончилась при печати), либо зажевало бумагу, либо сбилось питание.

-                        «Проверка связи» - выдаст ошибку, если нет связи с фискальным регистратором.

5.1.6 Акт сверки:

Данная обработка показывает – что прошло по программе за указанный период.

Обработка вызывается из «Файл - > Открыть». Далее нужно выбрать каталог «С:\Base\Внешние обработки мира посуды» и дважды щёлкнуть по файлу «акт сверки для магазина.ert». После чего откроется обработка, внешний вид которой показан на рисунке 17.

Рисунок 17 - Акт сверки

Нужно указать период, покупателя и магазин. Склад можно не указывать (тогда будет по всем складам). Также можно не указывать покупателя, тогда соответственно будет выдан отчёт по всем покупателям. Хочу обратить внимания на кнопочки, выделенные на рисунке. Они позволяют сохранять и загружать параметры по умолчанию. То есть – один раз выбрав нужные вам параметры вы сохраняете настройку, а при следующей загрузке параметры будут выставлены так, как вы их выставляли в прошлый раз. Не надо будет каждый раз делать одно и то же.

После задания параметров следует нажать кнопку «сформировать». Будет получен отчёт, показанный на рисунке 18.

Рисунок 18 - отчёт по акту сверки

В случае расхождений между фискальным отчётом, актом сверки и наличностью – ищите причины ошибки.

5.1.7 Печать ценников по подбору:

Данная обработка позволяет напечатать ценники  (по 16 ценников на страницу) на выбранный товар.

Внешний вид обработки показан на рисунке 19:

Рисунок 19 - «Печать ценников по подбору»

Как видно из рисунка 19. Требуется отобрать в левой части экрана нужную позицию, дважды щёлкнуть по ней, или нажать на кнопку « > », после чего она попадёт в правую часть экрана.

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

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

Рисунок 20 - ценники

Выберите в меню пункт «Файл», далее – «Печать».

5.1.8 Загрузка накладных:

Для загрузки накладной в БД требуется:

-                          Установить flesh память в USB разъём

-                          Открыть из 1С обработку из корневой папки съемного диска «»

-                          После этого на экране появится окно обработки, показанное на рисунке 21.

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

-                          Выберите каталог с файлами перегружаемых данных (имя каталога должно совпадать с номером накладной).

-                          Выберите склад и тип цен

-                          Нажмите кнопку «Загрузить»

-                          Дождитесь обработки выгрузки и распечатайте все полученные по окончании ценники.

5.2 Эксплуатация WEB портала

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

На начальном этапе допускается непосредственное изменение записей таблиц посредством программы SQL Server.

Требования к компьютеру WEB пользователя таковы:

-                        Internet Explorer 6 x

-                        Разрешение экрана выше, либо равное 1024x768

-                        Разрешение всплывающих окон (для Windows XP SP2)

-                        Разрешение использования Java Script

Работа основана на интуитивно понятных принципах, уже устоявшихся в современном сайтостроении.

ЗАКЛЮЧЕНИЕ

Полученная АИС «Работа с покупателями» представляет собой законченный продукт, полностью отвечающий предъявленным требованиям.

В комплекс входят программные средства:

-                        для поддержания актуального состояния распределённой базы данных

-                        автоматизирующие работу кассира

-                        копирования данных с сервера 1С и с удалённых точек на WEB сервер (SQL Server 2000).

-                        Законченный Интернет портал, отвечающий поставленным требованиям

Созданная распределённая база данных успешно функционирует на предприятии более месяца. Интернет портал будет введён в коммерческую эксплуатацию с середины июля 2005 года.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1.   Прилагаемая к системе «1С  предприятие» документация и встроенная справка (синтаксис – помощник).

2.   «1С:Торговля и Склад в вопросах и ответах: Практическое пособие». Богачева Т. Г. М.: ООО «1С-Паблишинг», 2003 г. -273 с.

3.   «Конфигурирование и администрирование 1С: Предприятия». Тимофеев Г.С., Шумейко Д.А. Ростов н/Д: Феникс, 2003 г – 320 с.

4.   «1С:Предпирятие: программирование для всех». Бартеньев О.В. – М.: Диалог-МИФИ, 2004. – 464 с.

5.   «1С:Предприятие. Эффективное программирование». Усиков Т.Н. – М.:Новое знание, 2004 г. – 464с.

6.   Форум «Территория “1С”»: http://www.kuban.ru/cgi-bin/forum/forum9.cgi

7.   Клуб профессионалов 1С: http://1c.proclub.ru/

8.    «Windows Server 2003. Для профессионалов». Вишневский Алексей Викторович. – СПб.: Питер, 2004. – 767 с.

9.    «Как программировать для Internet и WWW». Дейтел Х. М., Дейтел П. Дж., Нието Т. Р.. Пер. с англ. – М.: ЗАО «Издательство БИНОМ», 2002 г. – 1184 с.

10. «JavaScript 1.5: Учебный курс». Кингсли-Хью Э., Кингсли-Хью К.: Питер, 2002 г. – 272 с.

11. «JavaScript и DHTML. Сборник рецептов. Для профессионалов». Гудман Д. – СПб.: Питер, 2004 г. – 523 с.

12. «Основы ASP.NET с примерами на C#». Оньон Ф. Пер. с англ. – М.: Издательский дом «Вильямс», 2003 г. – 304 с.

13. ASP .Net Mania – все про ASP.NET и .NET Framework: http://aspnetmania.com/

14.  «Использование C#. Специальное издание». Специалисты NIIT. Пер.с англ – М.: Издательский дом «Вильямс», 2002 г. – 528 с.

15. «Самоучитель Visual Studio .NET 2003». Гарнаев А.Ю. - СПб.: БХВ - Петербург, 2003.- 688 с.

16. «C# и платформа .NET. Библиотека программиста». Троелсен. Э. – СПб.: Питер, 2005. – 796 с.

17. «Программирование web-сервисов для .NET. Библиотека программиста». Феррара Ф., Мак-Дональд М. – Киев: BHV; СПб.: Питер, 2003. – 430 с.

18. MSDN Library for Visual Studio 2005 Beta

19. http://rsdn.ru/

20. http://www.gotdotnet.ru/

21.  «Microsoft SQL Server 7 для профессионалов». Мамаев Е., Вишневский А. – СПб: Издательство «Питер», 2000 г. – 896 с.

22. «Visual Studio .NET: разработка приложений баз данных». Постолит А. В. – СПб.: БХВ-Петербург, 2003 г. – 544 с.

23. «ADO.NET Сборник рецептов. Для профессионалов.». Гамильтон Б.- СПб.: Питер, 2005 – 576 с.

24. http://sql.ru/

ПРИЛОЖЕНИЕ А

Концептуальная модель переноса данных.

ПРИЛОЖЕНИЕ Б

Код 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_WB\nomen\", "nomen");

        }

    [WebMethod]

    public

        //******************************************************************************

        // Сохраняет и передаёт цены

        DataTable VigruzCeni()

        {

            return Vigr("GlVozrCeni", @"C:\BD_WB\ceni\", "ceni");

        }

    [WebMethod]

    public

        //******************************************************************************

        // Сохраняет и передаёт остатки

        DataTable VigruzOst()

        {

            return Vigr("GlVozrOstatki", @"C:\BD_WB\ost_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; КонецФункции 

ПРИЛОЖЕНИЕ Г

Некоторые хранимые процедуры и запросы

к системе «SQL Server»

Хранимая процедура «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))>0  BEGIN

      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("") +@"\Shabloni\Price.xls";

string path2 = Server.MapPath("") + @"\Zaka4\Price" + 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;

}