Читайте данную работу прямо на сайте или скачайте

Скачайте в формате документа WORD


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

РЕФЕРАТ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.5.2 MS SQL Server 2 21

1.5.3 MS Visual Studio.NET 22

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.3.2.2 ASP.NET 2.0 52

4.3.2.3 ADO.NET 53

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ЗАКЛЮЧЕНИЕ 70

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

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

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

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

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

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


для создания и поддержания распределённой БД

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

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

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

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

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

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

6.   Форум Территория УСФ: ссылка более недоступнаcgi-bin/forum/forum9.cgi

7.   Клуб профессионалов С: ссылка более недоступна

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

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

10. л" onclick="return false">ссылка более недоступна

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. ссылка более недоступна

20. ссылка более недоступна

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

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

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

24. ссылка более недоступна


ПРИЛОЖЕНИЕ А

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


ПРИЛОЖЕНИЕ Б

Код Web службы (Файл Service.asmx)

// Данная служба - возвращает остаток по посланному коду

using System.Web;

using System;

using System.Reflection;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Data;

using System.Data.OleDb;

[WebServiceBinding(ConformanceClaims=WsiClaims.BP10,EmitConformanceClaims = true)]

public class Service : System.Web.Services.WebService {

private

// Параметры для подключения к С

Type _1C = null; // ассоциация с программой

object tor = null; // COM объект

object rmtrade = null;

object[] args = null; // аргументы для функции

object Order = null;

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

// Подключение к С. Возвращает 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:\\\\ /NFOKS /P676676 ", "NO_SPLASH_SHOW" };

//Запуск С

_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);

}

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

// Обращается к процедуре С и возвращает таблицу с результатами

// Через неё обращение к процедурам С, которые пишут файлы 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:\.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(кд_ном) Экспорт
     Перем Ост;
     
     Ном=создатьОбъект("Справочник.Номенклатура");
     Склд = СоздатьОбъект("Справочник.Склады");
     Регр = СоздатьОбъект("Регистр.ОстаткиТМЦ"); 
     
     Склд.НайтиПоКоду("1");
     Ном.НайтиПоКоду(кд_ном); 
     
     Ост = 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;
Конецункции 
       
//*******************************************************************
//  Возвращает цену по указанным парметрам - используется в запросе внизу
Функция ВозрНомерПрайса(Кд) Экспорт
     Если Кд = "2" Тогда
          Возврат 1;
     ИначеЕсли Кд = "3" Тогда
          Возврат 2;
     ИначеЕсли Кд = "4" Тогда
          Возврат 3;
     ИначеЕсли Кд = "5" Тогда
          Возврат 4;                
     ИначеЕсли Кд = "6" Тогда
          Возврат 5;
     ИначеЕсли Кд = "7" Тогда
          Возврат 6;
     ИначеЕсли Кд = "1" Тогда
          Возврат 0;
     Иначе 
          Возврат 33;     // Если ошибка. 0 нельзя, т.к. вдруг это у нас более низкие
     КонецЕсли;
Конецункции


//*******************************************************************
// Функция возвращает цены на номенклатуру и номер прайса
Функция GlVozrCeni() Экспорт
     Перем Ост, ТабЗн;                           
    Перем КатВыгр; 
     Перем изПроц;
     
     Запрос = СоздатьОбъект("Запрос");  
     ТекстЗапроса = 
     "//{{ЗАПРОС(Цены)      
     |Номенклатура     = Справочник.Цены.Владелец;
     |ТипКод         = Справочник.Цены.ТипЦен.Код;
     |Тип               = Справочник.Цены.ТипЦен;
     |Цен            = Справочник.Цены.ТекущийЭлемент;
     |Группировка Цен; 
     |"//}}ЗАПРОС
     ;
     
     Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
          Предупреждение("Ошибка в запросе");
     КонецЕсли;                                  
     
     КатВыгр = ПарамПоИмени("КаталогВыгр") + ПарамПоИмени("Цен");
     
     ДБФ = СоздатьОбъект("XBase");
     ДБФ.ДобавитьПоле("Cena",1,8,2);
     ДБФ.ДобавитьПоле("Nomen",2,9,0);
     ДБФ.ДобавитьПоле("Prajs",1,2,0);

     ДБФ.Создатьйл(КатВыгр+"Ceni.dbf"); 
     ДБФ.КодоваяСтраница(1);  
     Запрос.НачалоВыборки();
     Пока Запрос.Группировка(1)=1 Цикл   
               Если (Запрос.ТипКод<>"10") Тогда
                    ДБФ.Добавить();           
                    гВернутьЦену(Запрос.Номенклатура, Запрос.Тип,,изПроц,,,,0);
                    ДБФ.Cena  = изПроц;
                    ДБФ.Nomen = Запрос.Номенклатура.Код;
                    ДБФ.Prajs = ВозрНомерПрайса(Запрос.ТипКод);
                    ДБФ.Записать();
               КонецЕсли;
     КонецЦикла;
     Возврат 1;
Конецункции 


//*******************************************************************
// Функция возвращает остатки номенклатуры
Функция GlVozrOstatki() Экспорт
     Перем катВыгр, дат;  
     Перем ск;
     
     ОСТ = СоздатьОбъект("XBase"); 
     ОСТ.ДобавитьПоле("Kod",2,9,0);
     ОСТ.ДобавитьПоле("Ostatok",1,5,0);
                  
     катВыгр =ПарамПоИмени("КаталогВыгр") + ПарамПоИмени("Ост"); 

     ОСТ.Создатьйл(катВыгр+"ost.dbf"); 

     ОСТ.КодоваяСтраница(1);     
     Запрос = СоздатьОбъект("Запрос");  
     ТекстЗапроса = 
     "//{{ЗАПРОС(Выгр_Ост)
     |РегНом            = Регистр.ОстаткиТМЦ.Номенклатура;
     |РегСклд           = Регистр.ОстаткиТМЦ.Склад.Код;
     |РегКол            = Регистр.ОстаткиТМЦ.Количество;   
     |Группировка РегНом без Групп; 
     |Группировка РегСклд; 
     |Функция КОН       = КонОст(РегКол);"//}}ЗАПРОС
    ;

     Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
          Предупреждение("Ошибка в запросе");
     КонецЕсли; 

     Запрос.НачалоВыборки();
     Пока Запрос.Группировка(1)=1 Цикл   
          Пока Запрос.Группировка(2)=1 Цикл   
               Если Запрос.РегСклд="1" Тогда 
                    ОСТ.Добавить();           
                    ОСТ.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

/* Служит для загрузки Номенклатуры с сервера С.

Если позиция с таким кодом, то обновляет. Иначе - добавляет

*/

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) к С, сохраняющий данные по словию в Excel:

// Копируем файл из вложенного каталога /shabloni в /zaka4

// При копировании - добавляем к имени файла rendom'om число

Random rnd = new Random();а // Для получения случайного значения

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

String str_rnd = Convert.ToInt32(rnd.NextDouble() * 1).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 = 1 * 60 * 5;

try{

ds = ws.VigruzNom(); // Получаем данные с далённой службы

}

catch{

LabelInfo.Text = "Ошибка доступа к С. Подождите 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;

}