Автор: 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. Спасибо!