Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
1
1C 8.x

Выгрузка данных в Excel с ограниченным количеством строк

13.07.2017, 14:39. Просмотров 2745. Ответов 28
Метки нет (Все метки)


Добрый день! Мне нужно выгружать в каждый файл Excel до 1000 строк с базы данных. Вот мой код:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |   ЛицевыеСчетГИСЖКХ.КодЖКХ
    |ИЗ
    |   Справочник.ЛицевыеСчетГИСЖКХ КАК ЛицевыеСчетГИСЖКХ
    |ГДЕ
    |   ЛицевыеСчетГИСЖКХ.Регион = &Регион
    |   И НЕ ЛицевыеСчетГИСЖКХ.КодЖКХ = """""; 
    Запрос.УстановитьПараметр("Регион",Регион);
    Таб = Запрос.Выполнить().Выгрузить();
    
    НомерСтроки=3;
    НомерПД=0;
    
    Для Каждого Стр из Таб Цикл   
        
        ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        ДиалогВыбора.Заголовок = "Выберите файл";
        
        Если ДиалогВыбора.Выбрать() Тогда
            ИмяФайлаДанных = ДиалогВыбора.ПолноеИмяФайла;
        КонецЕсли;  
        
        Попытка
            Эксель = Новый COMОбъект("Excel.Application"); 
        Исключение
            Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); 
            Возврат;
        КонецПопытки; 
        Книга=Эксель.Application.Workbooks.Open(ИмяФайлаДанных);
        
        Лист1 = Книга.WorkSheets(1);
        
        Для к = 1 по 1000 Цикл
            НомерСтроки=НомерСтроки+1;
            НомерПД=НомерПД+1;        
            Лист1.Cells(НомерСтроки, 1).Value =  Стр.КодЖКХ;
            Лист1.Cells(НомерСтроки, 2).Value =  "Текущий";               
            Лист1.Cells(НомерСтроки, 3).Value =  "ПД-"+НомерПД;
            Лист1.Cells(НомерСтроки, 4).Value =  Формат(Месяц,"ДФ=MM.yyyy");                
            Лист1.Cells(НомерСтроки, 5).Value =  "@";                
            Лист1.Cells(НомерСтроки, 12).Value =  "044525220";
            Лист1.Cells(НомерСтроки, 13).Value =  "40702810400010005163";
            Состояние("Кол-во= "+НомерПД);
        КонецЦикла;
        
        Попытка
            Книга.SaveAs(ИмяФайлаДанных); 
        Исключение
            Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); 
            Возврат;
        КонецПопытки;
        Эксель.Application.Quit();
    КонецЦикла;
Выдает ошибку {ВнешняяОбработка.ПД.Форма.Форма.Форма(56)}: Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Excel): Ошибка доступа к документу 'Шаблон импорта платежных документов от 03.07.2017 12-44.xlsx', допускающему доступ только для чтения. Файл не сохранен!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2017, 14:39
Ответы с готовыми решениями:

Выгрузка данных в Excel
Добрый день! Посмотрите пожалуйста. Есть в обработке таблица значений, в которую я выгружаю данные...

Создать программу ввода текста с клавиатуры с заранее не ограниченным количеством строк
Создать программу ввода текста с клавиатуры с заранее не ограниченным кол-вом строк, признаком...

Выгрузка данных в Excel (добавление нужного количества строк с объединением ячеек)
Добрый день! Пару дне уже бьюсь не могу найти решения. Подскажите ребята. Нужное количество данных...

Почему разработчики Excel'я сделали его ограниченным: 65 тыс. строк на 252 столбца?
Кто знает, почему разработчики Excel'я сделали его ограниченным: 65 тыс. строк на 252 столбца? И,...

28
Модератор
Эксперт 1С
3054 / 2747 / 515
Регистрация: 10.03.2011
Сообщений: 10,525
Записей в блоге: 1
13.07.2017, 19:59 2
Цитата Сообщение от Ermak27 Посмотреть сообщение
допускающему доступ только для чтения
ответ в вопросе
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
13.07.2017, 20:46  [ТС] 3
Dethmontt, как сделать, чтобы сохранить файл и открыть новый чтобы загрузка пошла дальше, потому что большее 1000 строк в БД
0
Модератор
Эксперт 1С
3054 / 2747 / 515
Регистрация: 10.03.2011
Сообщений: 10,525
Записей в блоге: 1
13.07.2017, 23:54 4
Ermak27, проверить если счетчик = 1000 повторить все что у тебя там происходит
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
14.07.2017, 11:09  [ТС] 5
Dethmontt, мне не понятно куда вставить условие если

Добавлено через 8 минут
Dethmontt, мне нужно чтобы строки из БД заполнялись дальше в новом файле. Например в азе данных 2000 строк, добавляем файл excel, записали 1000 строк, файл сохранился и требует добавить следующий файл, я добавляю и продолжается запись до 2000 строк.
0
Эксперт 1С
3039 / 1980 / 524
Регистрация: 25.06.2009
Сообщений: 6,936
14.07.2017, 11:15 6
Ermak27, у вас код рабочий вообще? Зачем вы предлагаете выбрать файл для каждой строки таблицы?)
Сделайте в цикле обхода Таб счетчик и заполняйте файл до значения 1000, потом обнуляете счетчик и создаете новый файл.
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
14.07.2017, 11:26  [ТС] 7
GreenkA, Код у меня работает, только не сохраняет. Не могу понять как сделать, можете показать как.
0
Эксперт 1С
3039 / 1980 / 524
Регистрация: 25.06.2009
Сообщений: 6,936
14.07.2017, 11:36 8
Ermak27, не сохраняет, выдавая ту ошибку выше? Вам же ответили, в чем дело. Вы выбираете для изменения файл с ограниченными правами - только чтение. Выбирайте другой, создавайте новый, сделайте что-нибудь)
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
14.07.2017, 11:59  [ТС] 9
Все разобрался. Код правильный, просто файл был открыть в процессе
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
26.10.2017, 14:35  [ТС] 10
Цитата Сообщение от GreenkA Посмотреть сообщение
Сделайте в цикле обхода Таб счетчик и заполняйте файл до значения 1000, потом обнуляете счетчик и создаете новый файл.
Добрый день! Можете подсказать как это сделать?
0
Эксперт 1С
3039 / 1980 / 524
Регистрация: 25.06.2009
Сообщений: 6,936
26.10.2017, 14:40 11
Ermak27, вы же написали, что решили задачу)3 месяца прошло...
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
26.10.2017, 14:44  [ТС] 12
GreenkA, я проверил на файл где было 50000 строк, но до конца файл не до делал. Сейчас стал обрабатывать файл и смотрю что обработка не рабочая. Не могу понять почему все 3000 строк одно значение записывает и постоянно требует файл.

Добавлено через 2 минуты
Идея была такая, выгрузил справочник, получилось в таблице 2900 строк, мне нужно выгрузить в шаблон формата xls максимум 1000 строк. Я создаю 3 одинаковых шаблона и начинаю выгружать в них по 1000 строк, получается что два шаблона будет по 1000 строк а третий шаблон 900 строк.
0
Эксперт 1С
475 / 413 / 92
Регистрация: 26.09.2012
Сообщений: 1,871
26.10.2017, 15:35 13
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |   ЛицевыеСчетГИСЖКХ.КодЖКХ
    |ИЗ
    |   Справочник.ЛицевыеСчетГИСЖКХ КАК ЛицевыеСчетГИСЖКХ
    |ГДЕ
    |   ЛицевыеСчетГИСЖКХ.Регион = &Регион
    |   И НЕ ЛицевыеСчетГИСЖКХ.КодЖКХ = """""; 
    Запрос.УстановитьПараметр("Регион",Регион);
    Таб = Запрос.Выполнить().Выгрузить();
    
    НомерСтроки=3;
    НомерПД=0;
    ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок = "Выберите файл";
    
    Если ДиалогВыбора.Выбрать() Тогда
        ИмяФайлаДанных = ДиалогВыбора.ПолноеИмяФайла;
    КонецЕсли;  
    
    Для Каждого Стр из Таб Цикл 
        Если НомерСтроки = 1000 Тогда
            НомерСтроки = 0;
            Попытка
                Книга.SaveAs(ИмяФайлаДанных); 
            Исключение
                Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); 
                Возврат;
            КонецПопытки;
            Эксель.Application.Quit();
            Попытка
                Эксель = Новый COMОбъект("Excel.Application"); 
            Исключение
                Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); 
                Возврат;
            КонецПопытки; 
            Книга=Эксель.Application.Workbooks.Open(ИмяФайлаДанных);
            
            Лист1 = Книга.WorkSheets(1);
            
        КонецЕсли;
        
        НомерСтроки=НомерСтроки+1;
        НомерПД=НомерПД+1;      
        Лист1.Cells(НомерСтроки, 1).Value =  Стр.КодЖКХ;
        Лист1.Cells(НомерСтроки, 2).Value =  "Текущий";             
        Лист1.Cells(НомерСтроки, 3).Value =  "ПД-"+НомерПД;
        Лист1.Cells(НомерСтроки, 4).Value =  Формат(Месяц,"ДФ=MM.yyyy");                
        Лист1.Cells(НомерСтроки, 5).Value =  "@";               
        Лист1.Cells(НомерСтроки, 12).Value =  "044525220";
        Лист1.Cells(НомерСтроки, 13).Value =  "40702810400010005163";
        Состояние("Кол-во= "+НомерПД);        
    КонецЦикла;
    Если не НомерСтроки = 0 Тогда
        Попытка
            Книга.SaveAs(ИмяФайлаДанных); 
        Исключение
            Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); 
            Возврат;
        КонецПопытки;
        Эксель.Application.Quit();
    КонецЕсли;
Правда не тестил
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
27.10.2017, 09:32  [ТС] 14
Joker_vad, выдает ошибки
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(693,17 )}: Переменная не определена (Книга)
<<?>>Книга.SaveAs(ИмяФайлаДанных); (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(698,13 )}: Переменная не определена (Эксель)
<<?>>Эксель.Application.Quit(); (Проверка: Толстый клиент (обычное приложение))


Добавлено через 17 часов 7 минут
Добавил в начала кода
1C
1
2
    Перем Книга;
    Перем Эксель;
выдает ошибку {ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(1827)} : Значение не является значением объектного типа (SaveAs) Файл не сохранен!
0
Эксперт 1С
475 / 413 / 92
Регистрация: 26.09.2012
Сообщений: 1,871
27.10.2017, 09:55 15
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |   ЛицевыеСчетГИСЖКХ.КодЖКХ
    |ИЗ
    |   Справочник.ЛицевыеСчетГИСЖКХ КАК ЛицевыеСчетГИСЖКХ
    |ГДЕ
    |   ЛицевыеСчетГИСЖКХ.Регион = &Регион
    |   И НЕ ЛицевыеСчетГИСЖКХ.КодЖКХ = """""; 
    Запрос.УстановитьПараметр("Регион",Регион);
    Таб = Запрос.Выполнить().Выгрузить();
    
    НомерСтроки=3;
    НомерПД=0;
    ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок = "Выберите файл";
    
    Если ДиалогВыбора.Выбрать() Тогда
        ИмяФайлаДанных = ДиалогВыбора.ПолноеИмяФайла;
 Попытка
            Эксель = Новый COMОбъект("Excel.Application"); 
        Исключение
            Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); 
            Возврат;
        КонецПопытки; 
        Книга=Эксель.Application.Workbooks.Open(ИмяФайлаДанных);
        
        Лист1 = Книга.WorkSheets(1);
    КонецЕсли;  
    
    Для Каждого Стр из Таб Цикл 
        Если НомерСтроки = 1000 Тогда
            НомерСтроки = 0;
            Попытка
                Книга.SaveAs(ИмяФайлаДанных); 
            Исключение
                Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); 
                Возврат;
            КонецПопытки;
            Эксель.Application.Quit();
            Попытка
                Эксель = Новый COMОбъект("Excel.Application"); 
            Исключение
                Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); 
                Возврат;
            КонецПопытки; 
            Книга=Эксель.Application.Workbooks.Open(ИмяФайлаДанных);
            
            Лист1 = Книга.WorkSheets(1);
            
        КонецЕсли;
        
        НомерСтроки=НомерСтроки+1;
        НомерПД=НомерПД+1;      
        Лист1.Cells(НомерСтроки, 1).Value =  Стр.КодЖКХ;
        Лист1.Cells(НомерСтроки, 2).Value =  "Текущий";             
        Лист1.Cells(НомерСтроки, 3).Value =  "ПД-"+НомерПД;
        Лист1.Cells(НомерСтроки, 4).Value =  Формат(Месяц,"ДФ=MM.yyyy");                
        Лист1.Cells(НомерСтроки, 5).Value =  "@";               
        Лист1.Cells(НомерСтроки, 12).Value =  "044525220";
        Лист1.Cells(НомерСтроки, 13).Value =  "40702810400010005163";
        Состояние("Кол-во= "+НомерПД);        
    КонецЦикла;
    Если не НомерСтроки = 0 Тогда
        Попытка
            Книга.SaveAs(ИмяФайлаДанных); 
        Исключение
            Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); 
            Возврат;
        КонецПопытки;
        Эксель.Application.Quit();
    КонецЕсли;
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
27.10.2017, 10:53  [ТС] 16
Joker_vad, по просил выбрать файл, я выбрал, сразу же по просил пере сохранить его, я пере сохранил, и все. Открываю файл а они пустой, а где там 1000 строк?
0
Эксперт 1С
475 / 413 / 92
Регистрация: 26.09.2012
Сообщений: 1,871
27.10.2017, 10:56 17
1C
1
Таб = Запрос.Выполнить().Выгрузить();
Сколько записей вернула?
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
27.10.2017, 10:57  [ТС] 18
Joker_vad, в отладчике показало что в таб = 0
0
Эксперт 1С
475 / 413 / 92
Регистрация: 26.09.2012
Сообщений: 1,871
27.10.2017, 10:58 19
Ну тогда все адекватно отработало, у вас 0 строк к записи в эксель
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
27.10.2017, 11:03  [ТС] 20
Joker_vad, спасибо большое, буду разбираться.

Добавлено через 4 минуты
Joker_vad, я разобрался с пустой таблицей, но что то не так работает. В каждый раз идет пере записывания файла, а должен просить новый файл куда записывать следующую информацию или создавать копию файла
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2017, 11:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Отчет с ограниченным количеством записей
Здравствуйте,как можно сделать чтобы в каждом клубе было по три записи с лучшим...

Сортировка массива с ограниченным количеством сравнений
Задача состоит в следуещем: &quot; Ввести пять попарно различных целых чисел a, b, c, d, e....

Авторизация пользователя с ограниченным количеством попыток
Всем привет! На форме для авторизации имеется два элемента edit (для пароля и для имя...

Вывод числа с ограниченным количеством знаков после запятой
float m; m = (6.0221412927*pow(10,23.0))/23; cout &lt;&lt;&quot;Количество атомов в 1 мг...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.