Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выгрузка в DBF
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
EritikWoW
С.Х. Инагро 8.2

Доброго времени суток ! Ребят помогите оптимизировать код плз... под стандарты !
Это выгрузка в DBF "ИНАГРО_ЗарплатаКВыплатеОрганизаций"
Процедура ВыгрузитьНажатие(ДокументыНаЭкспорт)
    
    Если DOS = Истина
    Тогда ANSI = Ложь;
    Кодировка = "DOS"
    ИначеЕсли ANSI = Истина
    Тогда Dos = Ложь;
    Кодировка = "ANSI"
    КонецЕсли;

    ФайлDBF = Новый XBase;
    
    ФайлDBF.Поля.Добавить("PROJ_REF","C",14,0);     //Номер
    ФайлDBF.Поля.Добавить("BRANCH","C",3,0);          //
    ФайлDBF.Поля.Добавить("ZPKOD","C",10,0);           //
    ФайлDBF.Поля.Добавить("CARD_NO","C",22,0);         //Номер карты
    ФайлDBF.Поля.Добавить("LSTBL","C",20,0);           //ИНН
    ФайлDBF.Поля.Добавить("FAM","C",50,0);             //фамилия
    ФайлDBF.Поля.Добавить("NAME","C",50,0);          //Имя
    ФайлDBF.Поля.Добавить("OT","C",50,0);              //Отчество
    ФайлDBF.Поля.Добавить("RLSUM","N",15,2);          //Сумма
    ФайлDBF.Поля.Добавить("INN","C",20,0);            //ИНН
    ФайлDBF.Поля.Добавить("RLKOD","C",30,0);         //
    ФайлDBF.Поля.Добавить("CARD_PR_S","C",4,0);       //
    ФайлDBF.Поля.Добавить("TYPE","C",4,0);             //Тип
    ФайлDBF.Поля.Добавить("CARDBRANCH","C",3,0);       //
    ФайлDBF.Поля.Добавить("SYBR_NAME","C",4,0);       //
    ФайлDBF.Поля.Добавить("FUND_REF","C",14,0);     //


    Попытка
        ФайлDBF.СоздатьФайл(ФайлВыгрузки );
    Исключение
        Предупреждение("Ошибка создания файла " + ФайлВыгрузки);
        Возврат;
    КонецПопытки;

       Если РаботникиОрганизации.Количество() > 0 Тогда
    ТабРабОрг = РаботникиОрганизации.Выгрузить();
        Для Каждого Строка Из ТабРабОрг Цикл
                Если  ЭтотОбъект.Проведен = Истина  Тогда
                ФайлDBF.Добавить();
                КонецЕсли;
                        ФИОРаботника     = Строка.Сотрудник;                        
                        ПозицияФ        = Найти(ФИОРаботника," ");
                        ФамилияР        = Лев(ФИОРаботника,ПозицияФ-1);
                        //=//=//=//=//=//=//=//=//=//=//=//=//=//=//=//=///=//=//=//=//=//=//=///=//=//=//=//=//
                        ДлинаСтроки = СтрДлина(ФИОРаботника);
                        инд = 1;
                        Пока инд <= ДлинаСтроки и Найти(" ",Сред(ФИОРаботника,инд,1))=0 Цикл
                        инд = инд + 1;
                        КонецЦикла;
                        Если инд <= ДлинаСтроки Тогда
                        ИмяОтчество = Сред(ФИОРаботника,инд+1);
                        КонецЕсли;
                        ПозицияИ        = Найти(ИмяОтчество," ");
                        ИмяР         = Лев(ИмяОтчество,ПозицияИ);
                        //=//=//=//=//=//=//=//=//=////=//=//=//=//=//=///=//=//=//=//=//=//=///=//=//=//=//=//=//
                        ДлинаСтроки = СтрДлина(ИмяОтчество);
                        инд = 1;
                        Пока инд <= ДлинаСтроки и Найти(" ",Сред(ИмяОтчество,инд,1))=0 Цикл
                        инд = инд + 1;
                        КонецЦикла;
                        Если инд <= ДлинаСтроки Тогда
                        Отчество = Сред(ИмяОтчество,инд+1);
                        КонецЕсли;
                        ПозицияО        = Найти(Отчество," ");
                        ОтчествоР         = Прав(ИмяОтчество,ПозицияО);
                        //=//=//=//=//=//=//=//=//=////=//=//=//=//=//=///=//=//=//=//=//=//=///=//=//=//=//=//=//
                        Фамилия     = СтрЗаменить(ФамилияР," ","");
                        Имя         = СтрЗаменить(ИмяР," ","");
                        Отчество    = СтрЗаменить(ОтчествоР," ","");                         
                        Карта = Строка.НомерКарточки;
                        НомерКарты = Лев(Карта, 4) + "********" + Прав(Карта,4);
                        ИНН = Строка.Сотрудник.Физлицо.КодПоДРФО;
                        //Меняем символы
                        Фамилия        = СтрЗаменить(Фамилия,"і","i");
                        Имя            = СтрЗаменить(Имя,"і","i");
                        Отчество    = СтрЗаменить(Отчество,"і","i");

                        
                        //ФайлDBF.PROJ_REF
                        ФайлDBF.BRANCH      = "2F4";
                        ФайлDBF.ZPKOD       = "014";
                        ФайлDBF.CARD_NO        = НомерКарты;
                        ФайлDBF.LSTBL       = ИНН;                        
                        ФайлDBF.FAM            = Фамилия;        
                        ФайлDBF.NAME        = Имя;        
                        ФайлDBF.OT            = Отчество;
                        //ФайлDBF.RLSUM                        
                        ФайлDBF.INN            = ИНН;
                        //ФайлDBF.RLKOD                        
                        ФайлDBF.CARD_PR_S   = "1";
                        ФайлDBF.TYPE        = "CARD";
                        //ФайлDBF.CARDBRANCH
                        //ФайлDBF.SYBR_NAME
                        //ФайлDBF.FUND_REF
                        
                        
                        Если Кодировка = "DOS" Тогда
                        ФайлDBF.Кодировка = КодировкаXBase.OEM;
                        Иначе
                        ФайлDBF.Кодировка = КодировкаXBase.ANSI;
                        КонецЕсли;        
                        ФайлDBF.Записать()                            
            КонецЦикла;
    КонецЕсли;
    
    ФайлDBF.ЗакрытьФайл();
    Попытка
        Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки);
    Исключение
        Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки);
    КонецПопытки;
    
    
    Возврат;    
    
КонецПроцедуры
EritikWoW
Немного изменил обращение.. теперь Ф.И.О получаю через "регистр сведений"
Процедура ВыгрузитьНажатие(ДокументыНаЭкспорт)
    
    ФайлDBF = Новый XBase;
    
    ФайлDBF.Поля.Добавить("PROJ_REF","C",14,0);     //Номер
    ФайлDBF.Поля.Добавить("BRANCH","C",3,0);          //
    ФайлDBF.Поля.Добавить("ZPKOD","C",10,0);           //
    ФайлDBF.Поля.Добавить("CARD_NO","C",22,0);         //Номер карты
    ФайлDBF.Поля.Добавить("LSTBL","C",20,0);           //ИНН
    ФайлDBF.Поля.Добавить("FAM","C",50,0);             //фамилия
    ФайлDBF.Поля.Добавить("NAME","C",50,0);          //Имя
    ФайлDBF.Поля.Добавить("OT","C",50,0);              //Отчество
    ФайлDBF.Поля.Добавить("RLSUM","N",15,2);          //Сумма
    ФайлDBF.Поля.Добавить("INN","C",20,0);            //ИНН
    ФайлDBF.Поля.Добавить("RLKOD","C",30,0);         //
    ФайлDBF.Поля.Добавить("CARD_PR_S","C",4,0);       //
    ФайлDBF.Поля.Добавить("TYPE","C",4,0);             //Тип
    ФайлDBF.Поля.Добавить("CARDBRANCH","C",3,0);       //
    ФайлDBF.Поля.Добавить("SYBR_NAME","C",4,0);       //
    ФайлDBF.Поля.Добавить("FUND_REF","C",14,0);     //


    Попытка
        ФайлDBF.СоздатьФайл(ФайлВыгрузки );
    Исключение
        Предупреждение("Ошибка создания файла " + ФайлВыгрузки);
        Возврат;
    КонецПопытки;

       Если РаботникиОрганизации.Количество() > 0 Тогда
    ТабРабОрг = РаботникиОрганизации.Выгрузить();
        Для Каждого Строка Из ТабРабОрг Цикл
                Если  ЭтотОбъект.Проведен = Истина  Тогда
                ФайлDBF.Добавить();
            КонецЕсли;
            

        
                ФИОРаботника     = Строка.Сотрудник.Физлицо.Наименование;
                Запрос = Новый Запрос;
                Запрос.УстановитьПараметр("Наименование",    ФИОРаботника);    
                ТекстЗапроса = "ВЫБРАТЬ
                               |    ФИОФизЛиц.Фамилия,
                               |    ФИОФизЛиц.Имя,
                               |    ФИОФизЛиц.Отчество
                               |ИЗ
                               |    РегистрСведений.ФИОФизЛиц КАК ФИОФизЛиц
                               |ГДЕ
                               |    ФИОФизЛиц.ФизЛицо.Наименование = &Наименование";
                Запрос.Текст = ТекстЗапроса;                    
                Выборка = Запрос.Выполнить().Выбрать();        
                Пока Выборка.Следующий() Цикл
                Фамилия = Выборка.Фамилия;
                Имя = Выборка.Имя;
                Отчество = Выборка.Отчество;
                КонецЦикла;

                                                
                        Карта         = Строка.НомерКарточки;
                        Длина        = СтрДлина(Карта);
                        НомерКарты     = Лев(Карта, 4) + "********" + Прав(Карта,4);
                        ИНН         = Строка.Сотрудник.Физлицо.КодПоДРФО;
                        //Меняем символы
                        Фамилия        = СтрЗаменить(Фамилия,"і","i");
                        Фамилия        = СтрЗаменить(Фамилия,"І","I");
                        Имя            = СтрЗаменить(Имя,"і","i");
                        Имя            = СтрЗаменить(Имя,"І","I");
                        Отчество    = СтрЗаменить(Отчество,"і","i");
                        Отчество    = СтрЗаменить(Отчество,"І","I");
                        

                        
                        ////ФайлDBF.PROJ_REF
                        ФайлDBF.BRANCH      = "2F4";
                        ФайлDBF.ZPKOD       = "014";
                        Если Длина > 0 тогда
                        ФайлDBF.CARD_NO        = НомерКарты;
                        Иначе ФайлDBF.CARD_NO        = "";
                        КонецЕсли;
                        ФайлDBF.LSTBL       = ИНН;                        
                        ФайлDBF.FAM            = Фамилия;        
                        ФайлDBF.NAME        = Имя;        
                        ФайлDBF.OT            = Отчество;
                        //ФайлDBF.RLSUM                        
                        ФайлDBF.INN            = ИНН;
                        //ФайлDBF.RLKOD                        
                        ФайлDBF.CARD_PR_S   = "1";
                        ФайлDBF.TYPE        = "CARD";
                        //ФайлDBF.CARDBRANCH
                        //ФайлDBF.SYBR_NAME
                        //ФайлDBF.FUND_REF
                        
                        
                        Если Кодировка = "DOS" Тогда
                        ФайлDBF.Кодировка = КодировкаXBase.OEM;
                        Иначе
                        ФайлDBF.Кодировка = КодировкаXBase.ANSI;
                        КонецЕсли;        
                        ФайлDBF.Записать()                            
            КонецЦикла;
    КонецЕсли;
    
    ФайлDBF.ЗакрытьФайл();
    Попытка
        Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки);
    Исключение
        Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки);
    КонецПопытки;
    
    
    Возврат;    
    
КонецПроцедуры

Vofka
Так с чем нужна помощь?
EritikWoW
Хотел что бы мне помогли оптимизировать "код" под стандарты программирования.... если я где то в нем сделал не так !
logist
                Запрос = Новый Запрос;
                Запрос.УстановитьПараметр("ФизЛицо",    Строка.Сотрудник.Физлицо);    
                Запрос.Текст = "ВЫБРАТЬ
                               |    ФИОФизЛиц.Фамилия,
                               |    ФИОФизЛиц.Имя,
                               |    ФИОФизЛиц.Отчество
                               |ИЗ
                               |    РегистрСведений.ФИОФизЛиц КАК ФИОФизЛиц
                               |ГДЕ
                               |    ФИОФизЛиц.ФизЛицо = &ФизЛицо";
                Выборка = Запрос.Выполнить().Выбрать();        
                Если Выборка.Следующий() Цикл
                 Фамилия = Выборка.Фамилия;
                 Имя = Выборка.Имя;
                 Отчество = Выборка.Отчество;
                        Иначе
                 Фамилия = "";
                 Имя = "";
                 Отчество = "";
                КонецЕсли;
EritikWoW
Цитата(logist @ 02.06.15, 18:02) необходимо зарегистрироваться для просмотра ссылки
Фамилия = "";
Имя = "";
Отчество = "";
КонецЕсли;



Хммм.... мне кажеться или такого быть не может т.к.

Цитата(logist @ 02.06.15, 18:02) необходимо зарегистрироваться для просмотра ссылки
Запрос.УстановитьПараметр("ФизЛицо", Строка.Сотрудник.Физлицо);

И если там не чего не будет то так и так будет ""... бо в регистре они же в строке и хроняться 0_о
Petre
Цитата(EritikWoW @ 02.06.15, 19:41) необходимо зарегистрироваться для просмотра ссылки
И если там не чего не будет то так и так будет ""... бо в регистре они же в строке и хроняться 0_о

Первый раз они вообще будут неинициализированы. А дальше будут иметь значения предыдущих итераций.
EritikWoW
Всем спс ! За то что не отказали ! =)))
KORASP

 i 

Ответ на Ваш вопрос - здесь необходимо зарегистрироваться для просмотра ссылки
Правила, п.6
 
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.