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

Хранилище

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

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



> При выгрузке в excel пропадают нули          
4andriy Подменю пользователя
сообщение 22.09.18, 17:35
Сообщение #1

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

Есть выгрузка в Excel даных из 1С. При выгрузке пропадают нули. Если идея добавить к полю выгрузки один символ спереди:

ТипСпр.УстановитьЗначение(КолСтр,"Представление",""*"" + Метаданные.Справочник(Ном).Представление());


Будет работать или есть еще варианты?

Сам код выгрузки:

Код
Процедура Сформировать()
    КолРек=СпсРек.РазмерСписка();
    Если КолРек=0 Тогда
        Сообщить("Нет выбранных полей для экспорта");
        Возврат;
    КонецЕсли;
    ИмяСпр="Справочник."+СокрЛП(ТипСпр.ПолучитьЗначение(СписСпр.ТекущаяСтрока(),"Идентификатор"));
    Спр    = СоздатьОбъект(ИмяСпр);

    КолУр=Метаданные.Справочник(СокрЛП(ТипСпр.ПолучитьЗначение(СписСпр.ТекущаяСтрока(),"Идентификатор"))).КоличествоУровней;
    
    Спс=СоздатьОбъект("СписокЗначений");
    Для НомУр=1 По КолУр Цикл
        Спс.ДобавитьЗначение(0);
    КонецЦикла;

    НовыеРабочиеКниги=ExcelApp.WorkBooks;
    РабочаяКнига    =НовыеРабочиеКниги.Add();
    Страница=РабочаяКнига.Worksheets(1);
    Страница.Name = СокрЛП(ТипСпр.ПолучитьЗначение(СписСпр.ТекущаяСтрока(),"Представление"));
    
    Для Ном=1 По КолРек Цикл
        ExcelApp.Cells(1,Ном).Value=СпсРек.ПолучитьЗначение(Ном);
    КонецЦикла;
    
    Стр=1;

    Если ВыбЭлем.Выбран() > 0 Тогда
        Спр.ВключатьПодчиненные(1);
        Если ВыбЭлем.ЭтоГруппа()=1 Тогда
            Спр.ИспользоватьРодителя(ВыбЭлем);
        КонецЕсли;
    КонецЕсли;
    
    НомСорт=СпсСорт.ТекущаяСтрока();
    
    Если НомСорт=2 Тогда
        Спр.ПорядокКодов();
    ИначеЕсли НомСорт=3 Тогда
        Спр.ПорядокНаименований();
    ИначеЕсли НомСорт > 3 Тогда
        Спр.ПорядокРеквизита(СокрЛП(СпсСорт.ПолучитьЗначение(НомСорт)));
    КонецЕсли;

    Если ОбрПорядок > 0 Тогда
        Спр.ОбратныйПорядок();
    КонецЕсли;
    
    Спр.ИспользоватьДату(РабочаяДата());
    
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() > 0 Цикл
        Если Спр.ПометкаУдаления() > 0 Тогда
            Продолжить;
        КонецЕсли;
        Если (ВыбЭлем.Выбран()=1) И (ВыбЭлем.ЭтоГруппа()=0) И (ВыбЭлем <> Спр.ТекущийЭлемент() ) Тогда
            Продолжить;
        КонецЕсли;
        Стр=Стр+1;
        Если Спр.ЭтоГруппа() > 0 Тогда
            Если Структурировать > 0 Тогда
                Для НомУр=0 По КолУр-Спр.Уровень() Цикл
                    СтрУр=Спс.ПолучитьЗначение(КолУр-НомУр);
                    Если СтрУр <> 0 Тогда
                        ExcelApp.Rows(СокрЛп(Строка(СтрУр+1))+":"+СокрЛп(Строка(Стр-1))).Select();
                           ExcelApp.Selection.Rows.Group();
                           Если КолУр-НомУр <> Спр.Уровень() Тогда
                            Стр=Стр+1;
                            Спс.УстановитьЗначение(КолУр-НомУр,0);
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;
                Спс.УстановитьЗначение(Спр.Уровень(),Стр);
            КонецЕсли;
        КонецЕсли;
        
        Для Ном=1 По КолРек Цикл
            ИмяРек=СокрЛП(СпсРек.ПолучитьЗначение(Ном));
            Если СокрЛП(СпсРек.ПолучитьЗначение(Ном))="Id" Тогда
                МЗнач=ЗначениеВСтрокуВнутр(Спр.ТекущийЭлемент());
            ИначеЕсли СокрЛП(СпсРек.ПолучитьЗначение(Ном))="Код" Тогда
                МЗнач=Спр.Код;
            ИначеЕсли СокрЛП(СпсРек.ПолучитьЗначение(Ном))="Уровень" Тогда
                МЗнач=Спр.Уровень();
            ИначеЕсли СокрЛП(СпсРек.ПолучитьЗначение(Ном))="Наименование" Тогда
                МЗнач=Спр.Наименование;
            ИначеЕсли СокрЛП(СпсРек.ПолучитьЗначение(Ном))="Группа" Тогда
                МЗнач=Спр.ЭтоГруппа();
            ИначеЕсли СпсТипСпр.НайтиЗначение(ИмяРек) > 0 Тогда
                МЗнач=Спр.ПолучитьАтрибут(ИмяРек).Наименование;
            ИначеЕсли СпсТипПер.НайтиЗначение(ИмяРек) > 0 Тогда
                МЗнач=Спр.ПолучитьАтрибут(ИмяРек).Идентификатор();
            ИначеЕсли СпсТипСч.НайтиЗначение(ИмяРек) > 0 Тогда
                МЗнач=Спр.ПолучитьАтрибут(ИмяРек).Код+" "+Спр.ПолучитьАтрибут(ИмяРек).Наименование;
            ИначеЕсли СпсТипВРас.НайтиЗначение(ИмяРек) > 0 Тогда
                МЗнач=Спр.ПолучитьАтрибут(ИмяРек).Наименование;
            Иначе
                МЗнач=Спр.ПолучитьАтрибут(ИмяРек);
            КонецЕсли;
            ExcelApp.Cells(Стр,Ном).Value=МЗнач;
            Если (Спр.ЭтоГруппа() > 0) И (ВыдГруппу > 0) Тогда
                ExcelApp.Cells(Стр,Ном).Font.Bold=1;
            КонецЕсли;
        КонецЦикла;
        //Если Стр> 200 Тогда
        //    Прервать;
        //КонецЕсли;

    КонецЦикла;

    Если Структурировать > 0 Тогда
        Для НомУр=0 По КолУр-1 Цикл
            СтрУр=Спс.ПолучитьЗначение(КолУр-НомУр);
            Если СтрУр <> 0 Тогда
                ExcelApp.Rows(СокрЛп(Строка(СтрУр+1))+":"+СокрЛп(Строка(Стр))).Select();
                ExcelApp.Selection.Rows.Group();
                Стр=Стр+1;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

    Страница.Outline.SummaryRow = 0;
    ExcelApp.Visible=1;
КонецПроцедуры
//*****************
Процедура ПриОткрытии()
    Форма.СписСпр.ВыполнятьФормулуТолькоПриИзменении(1);
    СписСпр.ТекущаяСтрока(1);
    УпрДоступ();
КонецПроцедуры;
//*****************
ТипСпр=СоздатьОбъект("ТаблицаЗначений");
ТипСпр.НоваяКолонка("Представление");
ТипСпр.НоваяКолонка("Идентификатор");
ТипСпр.НоваяКолонка("Номер");
КолСтр=0;
Для Ном=1 По Метаданные.Справочник() Цикл
    Если Метаданные.Справочник(Ном).Владелец.Выбран() = 0 Тогда
        КолСтр=КолСтр+1;
        СписСпр.ДобавитьЗначение(Метаданные.Справочник(Ном).Представление());
        ТипСпр.НоваяСтрока(КолСтр);
        ТипСпр.УстановитьЗначение(КолСтр,"Представление",Метаданные.Справочник(Ном).Представление());
        ТипСпр.УстановитьЗначение(КолСтр,"Идентификатор",Метаданные.Справочник(Ном).Идентификатор);
        ТипСпр.УстановитьЗначение(КолСтр,"Номер",Ном);
    КонецЕсли;
КонецЦикла;
Структурировать=1;
ВыдГруппу = 1;
СпсТипСпр=СоздатьОбъект("СписокЗначений");
СпсТипПер=СоздатьОбъект("СписокЗначений");
СпсТипСч=СоздатьОбъект("СписокЗначений");
СпсТипВРас=СоздатьОбъект("СписокЗначений");

Попытка
    ExcelApp = СоздатьОбъект("Excel.Application");
Исключение
    Предупреждение(ОписаниеОшибки()+"; программа Excel не установлена на данном компьютере!");
    СтатусВозврата(0);
КонецПопытки;



 ! 

Правила: 4
 


Сообщение отредактировал Vofka - 24.09.18, 10:44

awp Подменю пользователя
сообщение 22.09.18, 22:51
Сообщение #2

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 520
Спасибо сказали: 70 раз
Рейтинг: 51.3

4andriy @ Сегодня, 18:35 * ,

[необходимо зарегистрироваться для просмотра ссылки]

символ '


Сообщение отредактировал awp - 22.09.18, 23:05


Signature
Бухгалтер - это не профессия! Это диагноз!

twilight_dream Подменю пользователя
сообщение 23.09.18, 21:12
Сообщение #3

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

Может просто эксель настроить? Ещё есть функция Формат().


Signature

4andriy Подменю пользователя
сообщение 24.09.18, 11:23
Сообщение #4

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

awp @ 22.09.18, 23:51 * ,
ТипСпр.УстановитьЗначение(КолСтр,"Представление",""'"" + Метаданные.Справочник(Ном).Представление());
        ТипСпр.УстановитьЗначение(КолСтр,"Идентификатор",""'"" + Метаданные.Справочник(Ном).Идентификатор);
        ТипСпр.УстановитьЗначение(КолСтр,"Номер",Ном);


так?

4andriy Подменю пользователя
сообщение 24.09.18, 19:44
Сообщение #5

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

4andriy @ Сегодня, 12:23 * ,
не работает

awp Подменю пользователя
сообщение 24.09.18, 22:46
Сообщение #6

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 520
Спасибо сказали: 70 раз
Рейтинг: 51.3

4andriy @ Сегодня, 12:23 * ,
думаю так "'"


Signature
Бухгалтер - это не профессия! Это диагноз!

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

Оратор
Иконка группы
Группа: Местный
Сообщений: 336
Из: Тернопіль
Спасибо сказали: 133 раз
Рейтинг: 135.7

Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = "@";
или так
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = 4;
или так
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = "0000000000"; //количество нулей=количеству разрядов в коде

awp Подменю пользователя
сообщение 25.09.18, 9:07
Сообщение #8

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 520
Спасибо сказали: 70 раз
Рейтинг: 51.3

Название темы ввело в заблуждение! :
Где у вас теряет нули?
тут
ExcelApp.Cells(Стр,Ном).Value=МЗнач;

или тут
ТипСпр.УстановитьЗначение(КолСтр,"Представление",""*"" + Метаданные.Справочник(Ном).Представление());



Если тут
ExcelApp.Cells(Стр,Ном).Value=МЗнач;

то делаем так:
ExcelApp.Cells(Стр,Ном).Value="'" + МЗнач;




Signature
Бухгалтер - это не профессия! Это диагноз!

4andriy Подменю пользователя
сообщение 26.09.18, 10:35
Сообщение #9

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

awp @ Вчера, 10:07 * ,
нули нашлись в ExcelApp.Cells. Спасибо!

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


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

 

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