-  Установить 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. *****/cgi-bin/forum/forum9.cgi

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

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

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

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

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

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

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

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

15.  «Самоучитель Visual 2003». - СПб.: БХВ - Петербург, 200с.

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

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

18.  MSDN Library for Visual Studio 2005 Beta

19.  http://*****/

20.  http://www. *****/

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

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

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

24.  http://*****/

ПРИЛОЖЕНИЕ А

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

ПРИЛОЖЕНИЕ Б

Код 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();

// Теперь у нас всё как надо - выгрузилась БД в файл.

// Подключаемся к ней через

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 Службой из

//******

//Загрузка номенклатуры, которую получаем от удалённой службы

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

mandType = 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;

}

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4