Группа: Пользователи
Сообщений: 7
Спасибо сказали: 4 раз
Рейтинг: 0
Помогите! Ув. программисты. Есть обработка клиент банк 1С 7.7 с Приват24. Приват24 выгружает файл в dbf формате. Вот проблема с датой. В сткуктуре выгружаемого файла дата в Character. Не могу никак переобразовать ее в дату.
//**************************************************************** // Вспомагательная функция для нахождения пути и имени файла в строке //****************************************************************************** Функция НайтиПоследнийСимвол(Стр,Символ) Для Ном = 1 По СтрДлина(Стр) Цикл Поз = СтрДлина(Стр)-Ном; Зн = Сред(Стр,Поз,1); Если Зн = Символ Тогда Возврат Поз; КонецЕсли; КонецЦикла; Возврат 0; КонецФункции //НайтиПоследнийСимвол
//****************************************************************************** Процедура ПриОткрытии() Пар = Форма.Параметр; Если ПустоеЗначение(Пар) = 1 Тогда Сообщить("Отчет вызывается только из ПП ""Обмен информацией между ПП ""1С:Предприятие 7.7"" и системами ""Клиент-Банк"""); СтатусВозврата(0); Возврат; КонецЕсли; ИмяФормы = "ПриватБанк"; //Для сохранения значений ТипОперации = Пар.Получить("ИмпортЭкспорт"); //Тип операции Если ТипОперации = "ИМПОРТ" Тогда РСчет = Пар.Получить("РСчет"); Иначе РСчет = Пар.Получить("РСчет"); МФО = Пар.Получить("МФО"); КонецЕсли; Путь = ВосстановитьЗначение(ИмяФормы + ТипОперации + "Клиент_Банк_Путь_к_Выписке"); спКодировка.ТекущаяСтрока(ВосстановитьЗначение(ИмяФормы + ТипОперации + "Клиент_Банк_Кодировка")); Результат = 0; Поз = НайтиПоследнийСимвол(Путь,"\"); Если Поз>0 Тогда сКатал = Лев(Путь,Поз); сФайл = Прав(Путь,СтрДлина(Путь) - Поз); Иначе сКатал = ""; сФайл = Путь; КонецЕсли; Форма.Заголовок(ИмяФормы+": настройки "+ НРег(ТипОперации) + "а",0); КонецПроцедуры //ПриОткрытии
//****************************************************************************** Функция УстДоступность() КонецФункции //УстДоступность
//**************************************************************** // Выбор файла при начале выбора значения элемента формы "Путь" //****************************************************************************** Функция ВыбратьФайл() Поз = НайтиПоследнийСимвол(Путь,"\"); Если Поз>0 Тогда сКатал = Лев(Путь,Поз); сФайл = Прав(Путь,СтрДлина(Путь) - Поз); Иначе сКатал = ""; сФайл = Путь; КонецЕсли; Если ТипОперации = "ИМПОРТ" Тогда Если ФС.ВыбратьФайл(0,сФайл,сКатал,"Открыть файл для ""клиент - банка""","Все файлы (*.*)|*.*","",) = 0 Тогда Возврат 0; КонецЕсли; Иначе Если ФС.ВыбратьФайл(1,сФайл,сКатал,"Создать файл для ""клиент - банка""","Все файлы (*.*)|*.*","",) = 0 Тогда Возврат 0; КонецЕсли; КонецЕсли; Путь = сКатал + сФайл; Возврат 1; КонецФункции //ВыбратьФайл
//****************************************************************************** Функция Экспорт_Файла_ДБФ(Знач Параметр) ФайлБД = СоздатьОбъект("XBase"); ИмяФайла = Путь;
Попытка Если ФС.СуществуетФайл(Путь) = 1 Тогда ФС.УдалитьФайл(Путь); КонецЕсли; Исключение Сообщить("Невозможно перезаписать файл с предыдущей выгрузкой.","!!!"); Возврат 0; КонецПопытки;
Попытка ФайлБД.СоздатьФайл(Путь); Исключение Предупреждение("Ошибка создания файла " + Путь); Возврат 0; КонецПопытки; Если ФайлБД.Открыта() = 0 Тогда Предупреждение("Ошибка открытия файла " + Путь); Возврат 0; КонецЕсли; Для Ном = 1 По Параметр.РазмерСписка() Цикл Сп = Параметр.ПолучитьЗначение(Ном); Если ТипЗначенияСтр(Сп) <> "СписокЗначений" Тогда Продолжить; КонецЕсли; ФайлБД.Добавить();
Попытка ФайлБД.Записать(); Сообщить("Добавлена запись №" + ФайлБД.НомерЗаписи()); Исключение Предупреждение("Ошибка записи!"); Возврат 0; КонецПопытки; КонецЦикла; ФайлБД.ЗакрытьФайл(); Возврат 1; КонецФункции //Экспорт_Файла
//****************************************************************************** Функция Импорт_Файла_ДБФ(Параметр) ФайлБД = СоздатьОбъект("XBase"); Попытка ФайлБД.ОткрытьФайл(Путь,,0); Исключение Предупреждение("Ошибка отрытия файла " + Путь); Возврат 0; КонецПопытки; Если ФайлБД.Открыта() = 0 Тогда Предупреждение("Ошибка отрытия файла " + Путь); Возврат 0; КонецЕсли; ФайлБД.КодоваяСтраница(спКодировка.ПолучитьЗначение(спКодировка.ТекущаяСтрока()) ); КвоПлатежей = 0; ФайлБД.Последняя(); Пока (ФайлБД.вНачале() = 0) Цикл //Если проведено не вчера - возврат Состояние("Обраатывается строка №" + ФайлБД.НомерЗаписи()); Если (ФайлБД.DATE <> Параметр.Получить("ДатаДок")) Тогда ФайлБД.Предыдущая(); Продолжить; КонецЕсли; Если (СокрЛП(Цел(ФайлБД.COUNT_A)) = Параметр.Получить("РСчет")) Тогда Сп = СоздатьОбъект("СписокЗначений"); Сп.Установить("РСчет",СокрЛП(Цел(ФайлБД.COUNT_B))); Сп.Установить("МФО",СокрЛП(Цел(ФайлБД.MFO_B))); Сп.Установить("ОКПО",СокрЛП(Цел(ФайлБД.OKPO_B))); Сп.Установить("Контрагент",СокрЛП(ФайлБД.NAME_B)); Сп.Установить("Банк",СокрЛП(ФайлБД.BANK_B)); Сп.Установить("Расход",ФайлБД.SUMMA); Сп.Установить("Приход",0); Сообщить("Платеж в " + СокрЛП(ФайлБД.NAME_B)); ИначеЕсли (СокрЛП(Цел(ФайлБД.COUNT_B)) = Параметр.Получить("РСчет")) Тогда Сп = СоздатьОбъект("СписокЗначений"); Сп.Установить("РСчет",СокрЛП(Цел(ФайлБД.COUNT_A))); Сп.Установить("МФО",СокрЛП(Цел(ФайлБД.MFO_A))); Сп.Установить("ОКПО",СокрЛП(Цел(ФайлБД.OKPO_A))); Сп.Установить("Контрагент",СокрЛП(ФайлБД.NAME_A)); Сп.Установить("Банк",СокрЛП(ФайлБД.BANK_A)); Сп.Установить("Приход",ФайлБД.SUMMA); Сп.Установить("Расход",0); Сообщить("Платеж от " + СокрЛП(ФайлБД.NAME_A)); Иначе ФайлБД.Предыдущая(); Продолжить; КонецЕсли; КвоПлатежей = КвоПлатежей + 1; Сп.Установить("Содержание",СтрЗаменить(ФайлБД.N_P ,РазделительСтрок," ")); Сп.Установить("НомерПП", ФайлБД.N_D); Параметр.ДобавитьЗначение(Сп); ФайлБД.Предыдущая(); КонецЦикла; ФайлБД.ЗакрытьФайл();
Возврат 1; КонецФункции //Импорт_Файла
//****************************************************************************** Процедура Выполнить() СохранитьЗначение(ИмяФормы + ТипОперации + "Клиент_Банк_Путь_к_Выписке",Путь); Если ТипОперации = "ИМПОРТ" Тогда Рез = Импорт_Файла_ДБФ(Пар); Иначе Рез = Экспорт_Файла_ДБФ(Пар); КонецЕсли; Если Рез = 1 Тогда Результат = 1; СтрокаДействийФормы = "#Закрыть"; КонецЕсли; КонецПроцедуры //Выполнить
//****************************************************************************** Процедура ПриЗакрытии() Если Результат = 1 Тогда Пар.Установить("Ок",1);// Все нормально СохранитьЗначение(ИмяФормы + ТипОперации + "Клиент_Банк_Путь_к_Выписке",Путь); СохранитьЗначение(ИмяФормы + ТипОперации + "Клиент_Банк_Кодировка", спКодировка.ТекущаяСтрока()); Иначе Пар.Установить("Ок",0); // Что-то не получилось или нажата Отмена КонецЕсли; КонецПроцедуры //ПриЗаписи
// ====================================== Процедура ПриНачалеВыбораЗначения(Рекв,ФСО) Если Рекв = "Путь" Тогда ВыбратьФайл(); ФСО = 0; КонецЕсли; КонецПроцедуры
Группа: Местный
Сообщений: 56
Из: Киевская обл.
Спасибо сказали: 20 раз
Рейтинг: 0
Ну если вообще, то вытащить из строки год, месяц, число и применить: ВашаДата = Дата(Год, Месяц,Число). Синтаксис: Дата(<Год>,<Месяц>,<Число>) Назначение: Преобразует переданные в качестве числовых параметров Год, Месяц, Число в значение типа 'Дата'. Год указывается 4-х значным числом (вместе с веком). Возвращает значение типа 'Дата'. Параметры: <Год> - числовое выражение. <Месяц> - числовое выражение. <Число> - числовое выражение.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!