Ниже я привежу пример формирования и отправки файла формате 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");
КонецПроцедуры