|
v8: Excel и 1с 8.2. Расскажите в общем. | ☑ | ||
---|---|---|---|---|
0
Balabass
13.01.12
✎
04:01
|
Озадачило руководство следующим вопросом:
Есть сотни листов Excel в десятках документов. Руками туда отдел заносит данные из 1с. Сам Excel представляет из себя внутри кучу табличек разлинованных с различными показателями. Меня интересует сам механизм - как можно выгружать нужные данные из 1с в Excel. т.е. Открыть Excel программно, и для каждой ячеки а Excel грузить нужные данные? Или можно как то иначе? Просто программировать 1000 ячеек как то не айс. Быть может есть другой способ? Или как это вообще делается? |
|||
1
Азат
13.01.12
✎
04:11
|
а поиск программно открыть и поискать работу с Эксель не пробовалось?
|
|||
2
Balabass
13.01.12
✎
04:15
|
(1)Работа с Эксель - это одно. А меня интересует вообще сам алгоритм работы. Как выгружать данные? По 1 ячейке, или можно как то по шаблону выгрузить.
|
|||
3
Koala
13.01.12
✎
04:53
|
(0)"Просто программировать 1000 ячеек как-то не айс" - Автор, открой для себя цикл. Или ты что-то другое имеешь ввиду?
|
|||
4
Мятежник
13.01.12
✎
07:36
|
я делал так:
Попытка Excel = Новый COMОбъект("Excel.Application"); WB = Excel.Workbooks.Open(Объект.ИмяФайла); WS = WB.Worksheets(1); //указываем номер листа - 1 arr = WS.UsedRange.Value; //передаём таблицу в переменную WB.Close(0); Исключение Сообщить("Внимание! Файл не открыт."+Символы.ПС+"Попробуйте открыть и пересохранить данный файл программой Эксель."); WB.Close(0); Возврат; КонецПопытки; //Узнаём данные выходные данные об листе ексель МассивКолонок = arr.Выгрузить(); //Узнаём данные выходные данные об листе ексель всегоКолонок = МассивКолонок.ВГраница(); всегоСтрок = (МассивКолонок.Получить(0).Количество())-1; Номер = 0; Для Строка = 0 По всегоСтрок Цикл // Обработка нажатия Ctrl + Break ОбработкаПрерыванияПользователя(); // Добавить данные в табличную часть экранной формы Стр = ТаблицаЗначений.Добавить(); Добавление = Ложь; Попытка Если МассивКолонок.Получить(1).Получить(строка) <> Неопределено Тогда Стр.Колонка1 = Формат(МассивКолонок.Получить(0).Получить(строка), "ЧГ="); Стр.Колонка2 = МассивКолонок.Получить(1).Получить(строка); Добавление = Истина; Номер = Номер + 1; Стр.Номер = Номер; КонецЕсли; Исключение // Не редко происходит ошибка конвертации отдельной ячейки документа Сообщить("Ошибка чтения строки файла Microsoft Excel." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание); КонецПопытки; Если Добавление = Ложь Тогда ТЗОС.Удалить(СтрОС); Номер = Номер - 1; КонецЕсли; КонецЦикла; |
|||
5
Мятежник
13.01.12
✎
07:37
|
не отредактировал абзац
Если Добавление = Ложь Тогда ТЗОС.Удалить(СтрОС); Номер = Номер - 1; КонецЕсли; КонецЦикла; Нужно так Если Добавление = Ложь Тогда ТаблицаЗначений.Удалить(Стр); Номер = Номер - 1; КонецЕсли; КонецЦикла; |
|||
6
Мятежник
13.01.12
✎
07:39
|
(5)код под себя делал, пытался удалить строки где есть пустая ячейка во втором столбце.
|
|||
7
Armando
13.01.12
✎
07:40
|
СЗОТ
Что мешает функционал из excel реализовать в 1С? Тем более что "Руками туда отдел заносит данные из 1с." |
|||
8
Balabass
13.01.12
✎
08:05
|
(7) Нет времени все переносить. Там несколько десятков книг, в каждой несколько десятков страниц. Графики, отчеты, формулы, макросы...
|
|||
9
БибиГон
13.01.12
✎
08:06
|
(7) +100500
|
|||
10
БибиГон
13.01.12
✎
08:07
|
(8) а вручную заполнять надоело?
|
|||
11
Balabass
13.01.12
✎
08:18
|
Ну ты представь, что отдел вместо того, чтобы работать свою работу, сидет и 5 дней в месяце заполняет экселевские листики...
|
|||
12
badboychik
13.01.12
✎
08:35
|
а в чем необычность задачи то? только в количестве листов и ячеек?
|
|||
13
dk
13.01.12
✎
08:37
|
несколько вариантов
1. Формировать в 1с (MXL), потом сохранять в Excel (XLS) и допиливать (формулы, и прочее) 2. Сразу формировать в Excel 2.1 с использованием шаблона 2.2 без использования шаблона 3. Игры с буфером обмена - формировать в 1с потом через буфер перетаскивать в Excel 4. ... ---- может еще варианты есть выбор зависит от - навыков прога - сложности итогового документы (связи, формулы, диаграммы, статичное количество строк / колонок или динамичное, ... ) - количества отличий формы данных в 1с и в Excel - ... |
|||
14
Balabass
13.01.12
✎
08:42
|
А про Использование шаблона. Это как?
|
|||
15
Balabass
13.01.12
✎
08:42
|
(12) Да
|
|||
16
dk
13.01.12
✎
08:46
|
(14) шаблон - это обычный файл ехеля - рисуешь там названия колонок, оформляешь, формулы прописываешь, а потом из 1с только цифры в нужные ячейки записываешь
отлично подходит для сложного оформления и более менее статичных данных |
|||
17
Мимохожий Однако
13.01.12
✎
08:46
|
Количество листов и файлов не имеет значения, если формат хранения информации одинаков или поддается логическому описанию. На одном файле запрограммировал - остальные на автомате.
|
|||
18
dk
13.01.12
✎
08:49
|
(14) ты бы хоть скрины итоговых файлов кинул для примера
|
|||
19
Мимохожий Однако
13.01.12
✎
08:52
|
(18) ему надо "в общем")))
|
|||
20
badboychik
13.01.12
✎
08:58
|
(15) так какая разница 100 ячеек или 10000 в цикле? Дело только во времени.
Или там много правил по которым данные тасовать по ячейкам? Если файлы-шаблоны уже есть в экселе, пишешь выгрузки для каждого, потом само все делается. "Работа с Эксель - это одно. А меня интересует вообще сам алгоритм работы" А алгоритм работы с экселем это не тот алгоритм чтоле? |
|||
21
ptiz
13.01.12
✎
08:58
|
"Как-то иначе" это так:
из 1С данные выгружаются в один файл "Данные 1С.xls". Юзеры в своих листах ставят не цифры, а ссылки на ячейки этого файла. Это делается 1 раз, а потом только обновлять данные. |
|||
22
Balabass
13.01.12
✎
09:03
|
(12)Хорошая Идея
|
|||
23
Balabass
13.01.12
✎
09:04
|
(22) (12)->(21)
|
|||
24
Мимохожий Однако
13.01.12
✎
09:13
|
Достаточно сделать отчеты в 1С и сохранить в формате Excel. В Excel можно создать макросы обработки для других таблиц. ИМХО, вариаций великое множество. Однако общими рекомендациями не обойтись. Нужен анализ структуры данных конкретных рабочих участков... А записать в нужную ячейку понятную информацию из 1С проблем нет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |