АИС "Работ с покупателями"
РЕФЕРАТ
ВКР содержит пояснительную записку на 85 листах формата А4, включающую 21 рисунок, 11 таблиц, 24 литературных источника, 5 приложений.
WEB ПРОГРАММИРОВАНИЕ, WEB СЛУЖБА, С, C#, АВТОМАТИЗАЦИЯ, ADO, ТИРАЖИРОВАНИЕ, ИНСТРУКЦИЯ, COM.
Цель работы - автоматизация работы с покупателями.
В процессе работы проведён анализ аппаратных и программных средств предприятия, выбраны технологии и средства для решения поставленных задач.
Результаты работы используются на предприятии. Программный комплекс выполняет следующие задачи:
- ускорение обслуживания покупателей на розничных торговых точках,
- ведение точного чёта товаров на далённых точках,
- поддержка распределённой базы данных,
- предоставление полной информации по текущему ассортименту компании интерактивным пользователям Интернет портала,
- публикация новостей и данных о компании на Интернет портале,
- возможность оформления заказов через Интернет.
.
СОДЕРЖАНИЕ:
TOC \o "1-5" ВВЕДЕНИЕ 7/a>
1 ПОСТАНОВКА ЗАДАЧИ НА ПРОЕКТИРОВАНИЕ 8/a>
1.1 Назначение и цели создания программного комплекса 8/a>
1.2 Что было до внедрения АИС. 10/a>
1.3 Структура компьютерной сети предприятия 11/a>
1.4 Выбор программных средств и технологий взаимодействия 12/a>
1.4.1 Выбор СУБД для автоматизации
хозяйственно-складской деятельности
и построения распределённой БД 13/a>
1.4.2 Выбор среды разработки 14/a>
1.4.3 Передача данных через локальную сеть 15/a>
1.4.4 Выбор языка программирования 15/a>
1.4.5 Выбор СУБД для Web сервера 16/a>
1.5 Описание средств разработки 16/a>
1.5.1 лС Предприятие. Конфигурация Торговля и склад 16/a>
1.5.3 MS Visual Studio.NET 22/a>
a href="#_Toc106719">2 ФУНКЦИОНАЛЬНАЯ ЧАСТЬ 25/a>
2.1 Общее функционирование системы на базе лС 25/a>
2.2 Функции создания и поддержания распределённой БД 26/a>
2.3 Функции для переноса данных с сервера приложений С на WEB сервер (SQL Server) 28/a>
2.3.1 Функции WEB службы 29/a>
2.4 Функции ASP.NET приложения 34/a>
2.4.1 Схема работа Интернет сайта 35/a>
2.4.2 Функциональное назначение страниц 37/a>
a href="#_Toc106719341">3 ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ 39/a>
3.1 Общие принципы организации информационной базы 39/a>
3.2 Передача данных удалённым точкам 39/a>
3.3 Ведение БД на WEB сервере с использованием SQL Server 2 39/a>
a href="#_Toc106719345">4 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРИЛОЖЕНИЯ 45/a>
4.1 Программные средства для создания и поддержания распределённой БД 45/a>
4.1.1 Обработка на центральной базе Выгрузка накладной 45/a>
4.1.2 Обработка на удалённой торговой точке - Загрузка документов 46/a>
4.2 Автоматизация работы кассира в магазине 48/a>
4.3.1 словия на работу WEB приложения у удалённого пользователя. 51/a>
4.3.2 Используемые средства 52/a>
4.3.2.1 Стандартные средства WEB программирования 52/a>
4.3.3 Получение данных от WEB Службы 53/a>
4.3.4 Кэширование данных 54/a>
4.3.5 Отправка электронной почты 55/a>
4.3.6 Полномочия пользователей 56/a>
2.4.7 Проблемы и их решение 57/a>
a href="#_Toc106719361">5 ТЕХНОЛОГИЯ ЭКСПЛУАТАЦИИ ПРИЛОЖЕНИЯ 59/a>
5.1 Инструкция оператора системы С на далённом магазине 59/a>
5.1.3 Продажа (Реализация): 60/a>
5.1.5 Использование меню фискального регистратора (ФР): 64/a>
5.1.7 Печать ценников по подбору: 66/a>
5.1.8 Загрузка накладных: 68/a>
5.2 Эксплуатация WEB портала 68/a>
a href="#_Toc106719372" rel="nofollow" >ЗАКЛЮЧЕНИЕ 70/a>
a href="#_Toc106719373">СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 71/a>
a href="#_Toc106719374">ПРИЛОЖЕНИЕ А КОНЦЕПТУАЛЬНВЯ МОДЕЛЬ ПЕРЕНОСА ДАННЫХ 73/a>
ПРИЛОЖЕНИЕ Б КОД WEB СЛУЖБЫ (ФАЙЛ Service.asmx) 74/a>
ПРИЛОЖЕНИЕ В ФУНКЦИИ ГЛОБАЛЬНОГО МОДУЛЯ, ФОРМИРУЮЩИЕ ДАННЫЕ ДЛЯ WEB СЛУЖБЫ 78/a>
ПРИЛОЖЕНИЕ Г НЕКОТОРЫЕ ХРАНИМЫЕ ПРОЦЕДУРЫ И ЗАПРОСЫ К СИСТЕМЕ SQL SERVER 82/a>
ПРИЛОЖЕНИЕ Д КОД РАБОТЫ С WEB СЛУЖБОЙ ИЗ ASP.NET 84/a>
для создания и поддержания распределённой Б
4.1.СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Прилагаемая к системе лСа предприятие документация и встроенная справка (синтаксис - помощник).
2. лС:Торговля и Склад в вопросах и ответах: Практическое пособие. Богачева Т. Г. М.: лС-Паблишинг, 2003 г. -273 с.
3. Конфигурирование и администрирование С: Предприятия. Тимофеев Г.С., Шумейко Д.А. Ростов н/Д: Феникс, 2003 г - 320 с.
4. лС:Предпирятие: программирование для всех. Бартеньев О.В. - М.: Диалог-МИФИ, 2004. - 464 с.
5. лС:Предприятие. Эффективное программирование. сиков Т.Н. - М.:Новое знание, 2004 г. - 464с.
6. Форум Территория УСФ:
ПРИЛОЖЕНИЕ А
Концептуальная модель переноса данных.
ПРИЛОЖЕНИЕ Б
Код 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;
}