Версия для печати темы (https://pro1c.org.ua/index.php?s=60d8ca3e91cb14ef42deee1977b97a5a&showtopic=47946)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ При выгрузке в excel пропадают нули

Автор: 4andriy 22.09.18, 17:35

Есть выгрузка в 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);
КонецПопытки;



 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 4
 

Автор: awp 22.09.18, 22:51

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

http://pro1c.org.ua/redirect.php?https://stackoverflow.com/questions/17359835/what-is-the-difference-between-text-value-and-value2

символ '

Автор: twilight_dream 23.09.18, 21:12

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

Автор: 4andriy 24.09.18, 11:23

awp @ 22.09.18, 23:51 * ,

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


так?

Автор: 4andriy 24.09.18, 19:44

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

Автор: awp 24.09.18, 22:46

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

Автор: volodya1122 25.09.18, 8:51

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

Автор: awp 25.09.18, 9:07

Название темы ввело в заблуждение! :
Где у вас теряет нули?
тут

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

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



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

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



Автор: 4andriy 26.09.18, 10:35

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua