Отправить файл на удаленный FTP-сервер

Ниже я привежу пример формирования и отправки файла формате dbf на удаленный ftp сервер. Такая задача довольно часто встречается в практике 1С программиста. Что примечательно мы будем создавать файл во временном каталоге файлов 1С сервера. У такого подхода несколько преимуществ. 1-ое нет проблем с правами на файл, 1с сервер сам создаст нужные файлы и вы будете гарантированно иметь на них права. 2-ое на файловой системе не будет лишних файлов.

Итак для начала нам нужно написать функцию которая будет возрашать нам установленное соединение.

&НаСервере
Функция ПодключитьсяКFTPСерверу()
 
    Соединение = Новый FTPСоединение(
        "88.88.88.88", // адрес ftp сервера
        21, // порт сервера
        "login", // имя пользователя
        "parol", // пароль пользователя
        Неопределено, // прокси не используется
        Истина, // пассивный режим работы
        0, // таймаут (0 - без ограничений)
        Неопределено // незащищенное соединение
    );
 
    Возврат Соединение;
 
КонецФункции

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

Процедура СформироватьПрайс()
	СформироватьПрайсНаСервере();
КонецПроцедуры	
	

Процедура СформироватьПрайсНаСервере()
	//Текст сформирован автоматически из Управляемая консоль отчетов 3.8.9

	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

	//Установка значений параметров
	Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоНаименованию("Центральный (с сериями, ордерный)"));)
	Запрос.УстановитьПараметр("ВидЦены", Справочники.ВидыЦен.НайтиПоНаименованию("Оптовая"));)

	Запрос.Текст = "ВЫБРАТЬ
	               |	ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
	               |	МАКСИМУМ(ТоварыНаСкладахОстатки.Серия) КАК Серия
	               |ПОМЕСТИТЬ ПоследнииСерии
	               |ИЗ
	               |	РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
	               |ГДЕ
	               |	ТоварыНаСкладахОстатки.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ТоварыНаСкладахОстатки.Номенклатура
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
	               |	СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК Остаток,
	               |	МАКСИМУМ(ШтрихкодыНоменклатуры.Штрихкод) КАК Штрихкод
	               |ПОМЕСТИТЬ ОстаткиИШк
	               |ИЗ
	               |	РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
	               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
	               |		ПО ТоварыНаСкладахОстатки.Номенклатура = ШтрихкодыНоменклатуры.Номенклатура
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ТоварыНаСкладахОстатки.Номенклатура
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ПоследнииСерии.Номенклатура КАК Номенклатура,
	               |	ЦеныНоменклатурыСрезПервых.Цена КАК Цена
	               |ПОМЕСТИТЬ ПоследниеЦены
	               |ИЗ
	               |	ПоследнииСерии КАК ПоследнииСерии
	               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПервых(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПервых
	               |		ПО ПоследнииСерии.Номенклатура = ЦеныНоменклатурыСрезПервых.Номенклатура
	               |			И ПоследнииСерии.Серия = ЦеныНоменклатурыСрезПервых.УТР_Серия
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ПоследнииСерии.Номенклатура.Код КАК НоменклатураКод,
	               |	ПоследнииСерии.Номенклатура КАК Номенклатура,
	               |	ПоследнииСерии.Номенклатура.УАС_СтранаПроизводителя КАК Страна,
	               |	ПоследнииСерии.Серия.ГоденДо КАК Срок,
	               |	ПоследнииСерии.Серия.УТР_Производитель КАК Производитель,
	               |	ОстаткиИШк.Штрихкод КАК Штрихкод,
	               |	ОстаткиИШк.Остаток КАК Остаток,
	               |	ПоследниеЦены.Цена КАК Цена,
	               |	ПоследниеЦены.Номенклатура.Наименование КАК Наименование,
	               |	ПоследнииСерии.Серия.Номер КАК Серия
	               |ИЗ
	               |	ПоследнииСерии КАК ПоследнииСерии
	               |		ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиИШк КАК ОстаткиИШк
	               |		ПО ПоследнииСерии.Номенклатура = ОстаткиИШк.Номенклатура
	               |		ЛЕВОЕ СОЕДИНЕНИЕ ПоследниеЦены КАК ПоследниеЦены
	               |		ПО ПоследнииСерии.Номенклатура = ПоследниеЦены.Номенклатура";

	Результат = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = Результат.Выбрать();
	
	
	//Создаем дбф
	НовыйФайл = Новый XBase; //существует два вида кодировки ANSI (win) и OEM (dos) 
	НовыйФайл.Кодировка = КодировкаXBase.OEM; //описываем колонки: 
	НовыйФайл.Поля.Добавить("CODEPST","C",36); 
	НовыйФайл.Поля.Добавить("NAME","C",200);
	НовыйФайл.Поля.Добавить("CNTR","C",100);
	НовыйФайл.Поля.Добавить("FIRM","C",150);
	НовыйФайл.Поля.Добавить("QNTPACK","N",8,0);
	НовыйФайл.Поля.Добавить("EAN13","C",13);
	НовыйФайл.Поля.Добавить("GDATE","D");
	НовыйФайл.Поля.Добавить("QNT","N",15,0);
	НовыйФайл.Поля.Добавить("PRICE","N",15,2);
	НовыйФайл.Поля.Добавить("RATEPACK","N",10,0);
	
	Каталог = КаталогВременныхФайлов();
	ИмяФайла = "Price.DBF";
	ИмяПромежуточногоФайла = Каталог + ИмяФайла;
	НовыйФайл.СоздатьФайл(ИмяПромежуточногоФайла); 
	НовыйФайл.Записать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		НовыйФайл.Добавить();		
		НовыйФайл.CODEPST = ВыборкаДетальныеЗаписи.НоменклатураКод;
		НовыйФайл.NAME = ВыборкаДетальныеЗаписи.Наименование;
		НовыйФайл.CNTR = ВыборкаДетальныеЗаписи.Страна;
		НовыйФайл.FIRM = ВыборкаДетальныеЗаписи.Производитель;
		НовыйФайл.QNTPACK = 0;	
		НовыйФайл.EAN13 = ВыборкаДетальныеЗаписи.Штрихкод;
		НовыйФайл.GDATE = ВыборкаДетальныеЗаписи.Срок;
		НовыйФайл.QNT = ВыборкаДетальныеЗаписи.Остаток;
		НовыйФайл.PRICE = ВыборкаДетальныеЗаписи.Цена;
		НовыйФайл.RATEPACK = 1;
		НовыйФайл.Записать();
	КонецЦикла;
	НовыйФайл.ЗакрытьФайл();
	Соединение  = ПодключитьсяКFTPСерверу();
	Соединение.УстановитьТекущийКаталог("/Price");
	Соединение.Записать(ИмяПромежуточногоФайла, "Price.dbf"); 
КонецПроцедуры
Posted in 1CПомеченные

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *