|   |   | 
| 
 | 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С проблем нет.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |