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

ФункцияглВернутьЦену(Номенклатура,ТипЦены,ДатаЦены=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");

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

Реферат

Компьютеры, программирование

Другие рефераты по предмету

Компьютеры, программирование

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

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

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

  1. надёжность,
  2. долговечность,
  3. отсутствие необходимости использовать дополнительное оборудование (последовательными разъемами (USB) снабжены все материнские платы, выпускаемые в последние пять лет),
  4. невозможность использования глобальной компьютерной сети 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 службы таков:

  1. получает запрос от ASP.NET приложения,
  2. обращается к 1С как к COM объекту. В 1С выполняются процедуры, сохраняющие результат своей работы в DBF файлы,
  3. подключение к DBF файлам посредством ADO.NET, перекачка данных в структуру DataTable,
  4. сериализация DataTable и отправка структуры запрашивающему приложению.

Код процедур, добавленных в глобальный модуль системы 1С показан в приложении В. Как из него видно данные процедуры работают по схожим алгоритмам:

  1. Выборка данных из БД посредством запросов
  2. Незначительная обработка полученных данных (например расчёт динамических цен через глобальную функцию системы, замена кода прайса на порядковый номер)
  3. Перебор результата и сохранение в DBF файл.

Функция «ПарамПоИмени» используется для хранения параметры выгрузки (имена файлов и каталогов) в настроечном файле «nastr.txt», что даёт дополнительную гибкость разработанной системе.

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

Проблемы, возникшие при разработке и их решение:

  1. Безопасность COM. По умолчанию стоит запрет на использование COM объектов удалёнными пользователями. Поэтому на любую попытку обращения к COM объекту удалённому пользователю выдаётся сообщение, что доступ запрещён. Для решения данной проблемы следует установить разрешения в «Панель управления --> Администрирование --> Службы компонентов». Выбрать локальный компьютер, вкладку DCOM, найти объект 1С 7.7, прейти на вкладку его свойств и установить разрешение на использование данного COM объекта не только локальным пользователям,
  2. Разрушение объекта. После использования объекта его следует убрать из памяти. Но получается интересная ситуация в MSDN написано, что объект будет автоматически разрушен после окончания его использования вызвавшим приложением. На практике же оказалось, что после окончания использования объекта, процесс «1cv7s.exe» остаётся висеть в памяти неопределённое время, которое может составлять от 1 до 30 минут. WEB служба обращается к 1С с использованием одного и того же имени пользователя и пароля. А в системе 1С нет возможности запустить два сеанса одного пользователя. При попытке повторного доступа с именем пользователя, который уже вошёл в систему - выдаётся ошибка. Для того, чтобы ускорить разрушение объекта, вызывается функция 1С объекта - «ExitSystem» - принудительное закрытие программы. Время разрушения уменьшается до 10 минут. При попытке повторного доступа в течении этих 10 минут к 1С, генерируется исключительная ситуация, которая отлавливается и выводится сообщение пользователю с просьбой подождать 15 минут до повторного обращения к 1С.

Особенности WEB службы, позволившие ускорить и упростить разработку:

  1. Скрытие от разработчика процесса сериализации передаваемого набора данных в XML формат и передача запрашивающему приложению результата в XML формате,
  2. Как видно из программного кода службы (приложение Б) разработка функций сервиса ничем не отличается от разработки функции какого нибудь приложения на C#. Чтобы функция (или процедура) была доступна для вызова из вне, перед ней должны стоять ключевые слова «[WebMethod]». Итого, получается что для работы сервиса нужно создать лишь несколько функций, возращающих результат заданного типа,
  3. Неявная компиляция исходного кода сервиса в исполняемый файл (dll). Службу можно написать и с использованием программы «Блокнот», указать путь к файлу в IIS и сервис заработает,
  4. Неограниченные возможности по созданию программного кода. Доступны все технологии платформы программирования от 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», но записи таблицы не изменяются.

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

  1. Пр

Похожие работы

<< < 1 2 3 4 5 6 7 8 > >>