Как Выгрузить файлы и папки из каталога на FTP Код 1C v 8.2 УП
Функция ВыгрузитьФайлыИПапкиНаFTP_Рекурсивно(Соединение, НачальныйКаталогВыгрузкиFTP, НачальнаяПапкаВыгрузкиКомп, ТекущаяПапка=Неопределено)
Рез = Истина;
Если ТекущаяПапка = Неопределено Тогда ТекущаяПапка = НачальнаяПапкаВыгрузкиКомп КонецЕсли;
МассивФайлов = НайтиФайлы(ТекущаяПапка, "*");
ТекКаталог = СтрЗаменить(НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(ТекущаяПапка, НачальнаяПапкаВыгрузкиКомп, ""), "\", "/"), "//", "/");
Если Прав(ТекКаталог, 1) <> "/" Тогда
ТекКаталог = ТекКаталог + "/";
КонецЕсли;
Для Каждого НайденныйФайл Из МассивФайлов Цикл
Файл = Новый Файл(НайденныйФайл.ПолноеИмя);
Если Файл.ЭтоКаталог() Тогда
ЕстьТакаяПапка = Соединение.НайтиФайлы(НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(НайденныйФайл.Путь, НачальнаяПапкаВыгрузкиКомп + "\", ""), "\", "/"), НайденныйФайл.Имя).Количество() > 0;
Если не ЕстьТакаяПапка Тогда
НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.УстановитьТекущийКаталог(ТекКаталог);
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;
Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;
НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.СоздатьКаталог(НайденныйФайл.Имя);
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", каталог " + НайденныйФайл.Имя + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;
Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.УстановитьТекущийКаталог(НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(НайденныйФайл.ПолноеИмя, НачальнаяПапкаВыгрузкиКомп + "\", ""), "\", "/") + "/");
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;
Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;
ВыгрузитьФайлыИПапкиНаFTP_Рекурсивно(Соединение, НачальныйКаталогВыгрузкиFTP, НачальнаяПапкаВыгрузкиКомп, НайденныйФайл.ПолноеИмя);
Если не Рез Тогда
Возврат Ложь;
КонецЕсли;
Иначе
НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.УстановитьТекущийКаталог(ТекКаталог);
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;
Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;
// почему-то иногда при большой выгрузке глюкает ((
// а со второй попытки выкладывается.... странно...
НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.Записать(НайденныйФайл.ПолноеИмя, НайденныйФайл.Имя);
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", файл " + НайденныйФайл.ПолноеИмя + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;
Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;
#Если Клиент Тогда
Состояние("Выгрузка файла: " + НайденныйФайл.ПолноеИмя);
#КонецЕсли
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции
// ПРИМЕР обращения к функции
КаталогиДляПередачиНаFTP = Новый Соответствие;
// цикл и в нем
КаталогиДляПередачиНаFTP.Вставить(СсылкаНаЭлементСправочника);
// Конец цикла
// Теперь Выгрузим все на FTP
Для Каждого Выборка из КаталогиДляПередачиНаFTP Цикл
ВыборкаДетальныеЗаписи = Выборка.Ключ;
Соединение = Новый FTPСоединение(ВыборкаДетальныеЗаписи.FTPСервер,
ВыборкаДетальныеЗаписи.FTPПорт,
ВыборкаДетальныеЗаписи.FTPПользователь,
ВыборкаДетальныеЗаписи.FTPПароль, ,Ложь);
ВыгрузитьФайлыИПапкиНаFTP_Рекурсивно(Соединение, ВыборкаДетальныеЗаписи.FTPКаталогВыгрузки, ВыборкаДетальныеЗаписи.КаталогВыгрузкиДанных);
КонецЦикла;
Как загрузить файлы с FTP Категория:
Работа с Интернет, Почтой (Mail), FTP Как выгрузить результат запроса с отбором по регистратору в табличную часть, табличное поле? Выгрузка результата запроса в табличную часть документа, справочника
Код 1C v 8.х Запрос=Новый Запрос;
// Получим суммы начисленные документами НачислениеЗарплатыРаботникамОрганизаций в ПериодВзаиморасчетов
Запрос.Текст="
|ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизаций.Период,
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор,
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизаций.Организация,
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов = &ПериодВзаиморасчетов
| И ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций
|";
Запрос.УстановитьПараметр("ПериодВзаиморасчетов",Дата("01.09.2009 0:00:00"));
Результат = Запрос.Выполнить();
// Выгрузим Результат Запроса в ТЗ
ТзВрем = Результат.Выгрузить();
Для Каждого стр Из Тзврем Цикл
// ТаблЧастьДокРезультат - Табличная часть на форме, создаем в ней новую строку
НовСтр=ТаблЧастьДокРезультат.Добавить();
// Заполняем значения новой строки значениями результат запроса:
ЗаполнитьЗначенияСвойств(новстр, стр);
//ВНИМАНИЕ!!! ЗаполнитьЗначенияСвойств( - работает только когда имена колонок табл части и результата запроса совпадают!
//Если не совпадают, то обычным способом:
НовСтр.Дата = стр.ПериодВзаиморасчетов;
НовСтр.Сумма = стр.СуммаВзаиморасчетов;
КонецЦикла;
Выгрузка результата запроса в табличное поле с типом данных Таблица Значений
Код 1C v 8.х Запрос=Новый Запрос;
// Получим суммы начисленные документами НачислениеЗарплатыРаботникамОрганизаций в ПериодВзаиморасчетов
Запрос.Текст="
|ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизаций.Период,
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор,
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизаций.Организация,
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов = &ПериодВзаиморасчетов
| И ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций
|";
Запрос.УстановитьПараметр("ПериодВзаиморасчетов",Дата("01.09.2009 0:00:00"));
Результат = Запрос.Выполнить();
// Выгрузим Результат Запроса в ТЗ
ТзВрем = Результат.Выгрузить();
// ТЗРезультат - это Табличное Поле на Форме, присваиваем ему таблицу значений
ТЗРезультат=ТзВрем;
//Создаем колонки в табличном поле, после чего видим в поле тз
ЭлементыФормы.ТЗРезультат.СоздатьКолонки();
Категория:
Запросы Как отчет на СКД сохранить в таблицу значений, а потом выгрузить в файл? Допустим у нас есть отчет с ОсновнойСхемойКомпановкиДанных,
Создадим ФормуОтчета:
На форму добавим Кнопку Выгрузка( Процедура ДействияФормыВыгрузка(Кнопка) ) и Выбор Периода формирования отчета
ВНИМАНИЕ!!!
Ошибка генерации макета
по причине: Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений
Выводить можно только Группировки:
Код отчета будет следующий:
Код 1C v 8.х Процедура ДействияФормыВыгрузка(Кнопка)
//Выберем файл для сохранения выгрузки
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Выберите файл для сохранения данных";
Диалог.ПолноеИмяФайла = "NDFL_"+Формат(НачПериода,"ДФ=MM_yyyy");
Диалог.Фильтр = "TXT (*.txt)|*.txt";
Диалог.МножественныйВыбор = Ложь; Диалог.Каталог = "D:\";
Если Диалог.Выбрать() Тогда
ФайлСохранения = Диалог.ПолноеИмяФайла;
//Выгрузим результат отчета СКД в Таблицу Значений
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеТЗ = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ДанныеТЗ);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//Выгрузим данные из Таблицы значений в Файл, запись данных в файл построчно
Текст = Новый ЗаписьТекста(ФайлСохранения, КодировкаТекста.ANSI);
Текст.ЗаписатьСтроку("Организация~КПП~Начислено13~Начислено30");
Для Каждого стр из ДанныеТЗ Цикл
Текст.ЗаписатьСтроку(СокрЛП(Строка(стр.Организация))+"~"+СокрЛП(стр.ПодразделениеОрганизацииКПП)+"~"+Формат(стр.Начислено13,"ЧГ=0")+"~"+Формат(стр.Начислено30,"ЧГ=0"));
КонецЦикла;
Текст.Закрыть();
КонецЕсли;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
// установить парметры периода для отчета СКД
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[4].Значение = НачПериода;
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[5].Значение = КонПериода;
КонецПроцедуры
Смотрите так же:
Вывод отчета СКД в коллекцию значений - Дерево Значений Категория:
Схема Компоновки Данных Выгрузить результат запроса в Дерево Значений, Дерево Значений на форме Код 1C v 8.х // Вывод результата запроса в Табличное Поле - Дерево значений
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.ПериодВзаиморасчетов КАК ЗаМесяц,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо КАК Работник,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(, ) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток < 5
| И ВзаиморасчетыСРаботникамиОрганизацийОстатки.ПериодВзаиморасчетов > ДАТАВРЕМЯ(2011, 1, 1, 0, 0, 0)
|
|УПОРЯДОЧИТЬ ПО
| ЗаМесяц,
| Работник
|ИТОГИ
| СУММА(Остаток)
|ПО
| ЗаМесяц
|АВТОУПОРЯДОЧИВАНИЕ";
//Выгрузим результат запроса в Табличное Поле с Типом значения Дерево значений
ЭлементыФормы.Долги.Значение = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
//Создадим колонки для вывода данных
ЭлементыФормы.Долги.СоздатьКолонки();
//Настроим ширину колонок табличного поля
ЭлементыФормы.Долги.Колонки.Работник.Ширина=23;
ЭлементыФормы.Долги.Колонки.ЗаМесяц.Ширина=17;
ЭлементыФормы.Долги.Колонки.Остаток.Ширина=11;
еще пример:
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Наименование ИЕРАРХИЯ";
Результат = Запрос.Выполнить();
Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЭлементыФормы.Дерево.СоздатьКолонки();
Категория:
Запросы Автоматическая выгрузка загрузка данных используя регламентное задание Для обмена данными между программами необходимо сделать следующее:
1. При помощи Конвертации Данных создать правила выгрузки данных
2. Нужно чтобы в конфигурации была обработка
УниверсальныйОбменДаннымиXML , желательно последней версии!
(При помощи ее и созданных правил будут выгрузаться и заружаться данные)
3. В 1-вой базе Добавляем Регламентное задание:
Имя - Выгрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ВыгрузимИзЗУП():
Код 1C v 8.х //Выгрузка кадровых данных
Процедура ВыгрузимИзЗУП() Экспорт
Обработина = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработина.РежимОбмена = "Выгрузка";
Обработина.ДатаНачала = НачалоДня(ДобавитьМесяц(ТекущаяДата(),-1));
Обработина.ДатаОкончания = КонецМесяца(ТекущаяДата());
Обработина.ИмяФайлаОбмена = "D:\ZUP_BUH_EXCH\Upload.xml";
Обработина.ИмяФайлаПравилОбмена = "D:\ZUP_BUH_EXCH\Zup-Buh.xml";
Обработина.ЗагрузитьПравилаОбмена();
Обработина.ВыполнитьВыгрузку();
КонецПроцедуры
4. Во 2-ой базе Добавляем Регламентное задание:
Имя - Загрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ЗагрузкаВБУХ():
Код 1C v 8.х Процедура ЗагрузкаВБУХ() Экспорт
Обработина = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработина.ИмяФайлаОбмена = "D:\ZUP_BUH_EXCH\Upload.xml";
Обработина.РежимОбмена = "Загрузка";
Обработина.ОптимизированнаяЗаписьОбъектов = Истина;
Обработина.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
Обработина.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
Обработина.ЗагружатьДанныеВРежимеОбмена = Истина;
Обработина.ВыполнитьЗагрузку();
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос Как скопировать, выгрузить данные из одной таблицы значений в другую? Как скопировать или выгрузить данные из одной таблицы значений в другую таблицу значений?
1. Добавление, копирование строк из одной таблицы значений в другую таблицу значений:
Код 1C v 8.х Для каждого СтрокаТЗ Из Таблица1 Цикл
ЗаполнитьЗначенияСвойств(Таблица2.Добавить(), СтрокаТЗ)
КонецЦикла;
2. Можно использовать метод
Скопировать() объекта ТаблицаЗначений:
Первым параметром в этот метод передается массив строк для копирования, если он не указан - копируются все строки таблицы значений. Этот параметр также может содержать отбор по значению колонок.
Вторым параметром передается список колонок для копирования в формате "Колонка1, Колонка2...". Если параметр не указан, копируются все колонки таблицы.
Допустим, есть таблица значений ТЗ с колонками Код, Номенклатура и Цена.
С помощью следующего кода мы
выгрузим из этой таблицы в новую таблицу значений ТЗ1 все значения, содержащиеся в колонках Номенклатура и Цена:
Код 1C v 8.х ТЗ1 = Новый ТаблицаЗначений;
ТЗ1 = ТЗ.Скопировать("Номенклатура,Цена");
В следующем примере мы
выгрузим все строки исходной таблицы, в которых значение поля Цена = 15000.
Код 1C v 8.х ТЗ1 = Новый ТаблицаЗначений;
ПараметрыОтбора = Новый Структура("Цена",15000);
ТЗ1 = ТЗ.Скопировать(ПараметрыОтбора);
Категория:
Работа с Таблицей Значений