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

Хранилище

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

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



> Выгрузка в DBF          
EritikWoW Подменю пользователя
сообщение 01.06.15, 1:23
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

С.Х. Инагро 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 Подменю пользователя
сообщение 01.06.15, 3:37
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

Немного изменил обращение.. теперь Ф.И.О получаю через "регистр сведений"
Процедура ВыгрузитьНажатие(ДокументыНаЭкспорт)
    
    Файл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 Подменю пользователя
сообщение 02.06.15, 8:49
Сообщение #3

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

Так с чем нужна помощь?

EritikWoW Подменю пользователя
сообщение 02.06.15, 16:56
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

Хотел что бы мне помогли оптимизировать "код" под стандарты программирования.... если я где то в нем сделал не так !

logist Подменю пользователя
сообщение 02.06.15, 17:02
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

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

EritikWoW Подменю пользователя
сообщение 02.06.15, 18:41
Сообщение #6

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(logist @ 02.06.15, 18:02) *
Фамилия = "";
Имя = "";
Отчество = "";
КонецЕсли;



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

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

И если там не чего не будет то так и так будет ""... бо в регистре они же в строке и хроняться 0_о

Petre Подменю пользователя
сообщение 03.06.15, 8:23
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1148 раз
Рейтинг: 1230.2

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

Первый раз они вообще будут неинициализированы. А дальше будут иметь значения предыдущих итераций.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

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

EritikWoW Подменю пользователя
сообщение 03.06.15, 15:52
Сообщение #8

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

Всем спс ! За то что не отказали ! =)))

KORASP Подменю пользователя
сообщение 15.06.15, 13:40
Сообщение #9

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


 i 

Ответ на Ваш вопрос - здесь http://pro1c.org.ua/index.php?showtopic=23553
Правила, п.6
 


Сообщение отредактировал logist - 15.06.15, 14:24

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


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

 

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