Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Обработка Приват24 клиент-банк , Не могу иправить ошибку          
vethera Подменю пользователя
сообщение 16.02.12, 17:02
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 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;
    КонецПопытки;
    

    ФайлБД.ДобавитьПоле("TIP","C",4,);
    ФайлБД.ДобавитьПоле("N_D","C",10,);
    ФайлБД.ДобавитьПоле("DATE","C",8,0);
    ФайлБД.ДобавитьПоле("SUMMA","N",17,2);
    ФайлБД.ДобавитьПоле("COUNT_A","C",16,0);
    ФайлБД.ДобавитьПоле("NAME_A","C",40,0);
    ФайлБД.ДобавитьПоле("OKPO_A","C",10,0);
    ФайлБД.ДобавитьПоле("MFO_A","N",9,0);
    ФайлБД.ДобавитьПоле("BANK_A","C",45,0);
    ФайлБД.ДобавитьПоле("COUNT_B","C",16,0);
    ФайлБД.ДобавитьПоле("NAME_B","C",40,0);
    ФайлБД.ДобавитьПоле("OKPO_B","C",10,0);
    ФайлБД.ДобавитьПоле("MFO_B","N",9,0);
    ФайлБД.ДобавитьПоле("BANK_B","C",45,0);
    ФайлБД.ДобавитьПоле("N_P","C",160,0);
    ФайлБД.ДобавитьПоле("PACKET","C",1,0);

    Попытка
        ФайлБД.СоздатьФайл(Путь);
    Исключение
        Предупреждение("Ошибка создания файла " + Путь);
        Возврат 0;
    КонецПопытки;
    Если ФайлБД.Открыта() = 0 Тогда
        Предупреждение("Ошибка открытия файла " + Путь);
        Возврат 0;
    КонецЕсли;
    Для Ном = 1 По Параметр.РазмерСписка() Цикл
        Сп = Параметр.ПолучитьЗначение(Ном);
        Если ТипЗначенияСтр(Сп) <> "СписокЗначений" Тогда
            Продолжить;                
        КонецЕсли;
        ФайлБД.Добавить();
      
        ФайлБД.TIP = "Crrp";
        ФайлБД.COUNT_A = Сп.Получить("НашСчет");
        ФайлБД.MFO_B = Сп.Получить("МФО");
        ФайлБД.MFO_A = Сп.Получить("НашМФО");
        ФайлБД.COUNT_B = Сп.Получить("Счет");
        ФайлБД.OKPO_B = Сп.Получить("ОКПО");
        ФайлБД.OKPO_A = Сп.Получить("НашОКПО");
        ФайлБД.NAME_B = Сп.Получить("Контрагент");
        ФайлБД.NAME_A = Сп.Получить("НашаФирма");
        ФайлБД.SUMMA = Сп.Получить("Сумма");
        ФайлБД.N_D = Сп.Получить("НомерПП");
        ФайлБД.N_P = Сп.Получить("Содержание");
        ФайлБД.DATE = Сп.Получить("ДатаПП");
        ФайлБД.BANK_B = Сп.Получить("Банк");
        ФайлБД.BANK_A = Сп.Получить("НашБанк");
        
        Попытка
            ФайлБД.Записать();
            Сообщить("Добавлена запись №" + ФайлБД.НомерЗаписи());
        Исключение
            Предупреждение("Ошибка записи!");
            Возврат 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;
    КонецЕсли;
КонецПроцедуры  


спКодировка.ДобавитьЗначение(1, "DOS");
спКодировка.ДобавитьЗначение(0, "WINDOWS");




Что и где надо изменить, не пойму.


т.е., если я меняю в dbf файле поле на DATE, и перебиваю вручную даты, сохраняю, тогда втягивает.

 i 

Выделяйте код!
 


Сообщение отредактировал MATEVI - 16.02.12, 17:08
Причина редактирования: Последнее китайское предупреждение! Не будете следовать правилам будете искать свои темы в корзине!

Vofka Подменю пользователя
сообщение 16.02.12, 17:25
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

В 1С дата в каком виде попадает? Как строка, в каком формате?

Читатель Подменю пользователя
сообщение 16.02.12, 18:37
Сообщение #3

Говорящий
Иконка группы
Группа: Местный
Сообщений: 56
Из: Киевская обл.
Спасибо сказали: 20 раз
Рейтинг: 0

Ну если вообще, то вытащить из строки год, месяц, число и применить: ВашаДата = Дата(Год, Месяц,Число).
Синтаксис:
Дата(<Год>,<Месяц>,<Число>)
Назначение:
Преобразует переданные в качестве числовых параметров Год, Месяц, Число в значение типа 'Дата'. Год указывается 4-х значным числом (вместе с веком).
Возвращает значение типа 'Дата'.
Параметры:
<Год> - числовое выражение.
<Месяц> - числовое выражение.
<Число> - числовое выражение.

Спасибо сказали: vethera,

Домовик Подменю пользователя
сообщение 17.02.12, 10:01
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

Импорт? я вижу участие поля Date только здесь:

Если (ФайлБД.DATE <> Параметр.Получить("ДатаДок")) Тогда
            ФайлБД.Предыдущая();
            Продолжить;
        КонецЕсли;


Можно попробовать применить функцю ДАта():

Если (Дата(ФайлБД.DATE) <> Параметр.Получить("ДатаДок")) Тогда
            ФайлБД.Предыдущая();
            Продолжить;
        КонецЕсли;


Или Дата(Строка(ФайлБд.date)), или Дата(СоклЛП(Строка(ФайлБД.date))).

но в коде нет присвоения Дате значения поля Date . В список значений заносятся все поля,кроме Date. Это весь код?

Сообщение отредактировал Домовик - 17.02.12, 10:05

Спасибо сказали: vethera,

Kaliban Подменю пользователя
сообщение 17.02.12, 10:04
Сообщение #5

Говорящий
Иконка группы
Группа: Местный
Сообщений: 97
Спасибо сказали: 28 раз
Рейтинг: 0

Читатель дело говорит
    ДатаСтр=ДБФ.DATE; 
    год=Сред(ДатаСтр,3,2);
    мес=Сред(ДатаСтр,5,2);
    дн=Сред(ДатаСтр,7,2);
    дтВыписки=Дата(год,мес,дн);


Только подправьте циферки, мы ж не знаем в каком формате у вас дата

Спасибо сказали: vethera,

vethera Подменю пользователя
сообщение 17.02.12, 11:44
Сообщение #6

Молчаливый
*
Группа: Пользователи
Сообщений: 7
Спасибо сказали: 4 раз
Рейтинг: 0

Дата в структуре передаваемого файла


DATE Character 8

по форме ГГГГММДД

Zaval Подменю пользователя
сообщение 17.02.12, 11:48
Сообщение #7

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Подставьте в код из 5 сообщения правильные цифры и сравнивайте дтВыписки и дату из 1с.

Второй вариант - превратите дату 1с в строку из 8 символов.

Спасибо сказали: vethera,

Читатель Подменю пользователя
сообщение 17.02.12, 11:53
Сообщение #8

Говорящий
Иконка группы
Группа: Местный
Сообщений: 56
Из: Киевская обл.
Спасибо сказали: 20 раз
Рейтинг: 0

Ну вот - считайте какие позиции.
год=Сред(ДатаСтр,1,4);

И так делее.

Спасибо сказали: vethera,

vethera Подменю пользователя
сообщение 17.02.12, 11:56
Сообщение #9

Молчаливый
*
Группа: Пользователи
Сообщений: 7
Спасибо сказали: 4 раз
Рейтинг: 0

Ура!!!!!! Спасибо получилось!!!!!!!

В итоге выглядет так:

ДатаСтр=ФайлБД.DATE; 
    год=Сред(ДатаСтр,1,4);
    мес=Сред(ДатаСтр,5,2);
    дн=Сред(ДатаСтр,7,2);
    дтВыписки=Дата(год,мес,дн);        
    Если (дтВыписки <> Параметр.Получить("ДатаДок")) Тогда
            ФайлБД.Предыдущая();
            Продолжить;
    КонецЕсли;


простите, не получается у меня выделить код , этоя дляадминистратора
Причина редактирования: Ладно. Matevi.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 25.04.24, 5:31
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!