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