Запросы с использованием данных табличных файлов на примере xls

27.07.20

Разработка - Инструментарий разработчика

Когда ВПР недостаточно...

Скачать исходный код

Наименование Файл Версия Размер
Консоль запросов для управляемого приложения с чтением табличных файлов и обработчиком результата
.epf 3,00Mb
50
.epf 1.9 3,00Mb 50 Скачать

Представим себе ситуацию, при которой Вам надо совместить данные из файла excell и действующей базы на 1С. Впринципе можно выгрузить данные из 1С в тот же Эксель и "ПроВПРить". Но во-первых, нам могут понадобиться более продвинутые средства получения данных, чем ВПР, во-вторых, для сложных конструкций это долго, а в третьих, для порядочного 1С-ника это ФИ (не зря же мы изучали язык запросов! да и конструктор запросов- вещь крутая). Но сосредоточимся на главном - это получение данных из файла Эксель(или другого табличного файла, можно и какого-нибудь csv) и использование их в запросе.

Я использую следующую методику:

1) Сначала читаем этот файл и загоняем данные в таблицу значений (ТЗ).

2) Передаем полученную ТЗ как параметр запроса и создаем на основе нее временную таблицу (ВТ).

3) Используем полученную ВТ для дальнейших манипуляций с запросами (через 2-ой пакет запросов).

Для удобства я доработал Консоль запросов (для управляемых форм), чтобы она выполняла первые 2 пункта на автомате, читая файл и дописывая запрос до нужного нам вида. Первая строка таблицы используется как заголовки(Она обязательно должна быть!). Нам останется лишь в конструкторе запросов добавить второй пакет и в нем уже получить нужные нам выборки. В параметрах Вы можете назначить типы данных. Так же для функционала добавил исполняемый код для строк выборки. Все параметры и код сохраняются в файл вместе с запросом.

Обработку прилагаю, можете посмотреть, что да как сделано, и использовать вместо обычной консоли запросов. Или не использовать. Если обработка окажется полезной, доработаю её под другие типы файлов(csv например).

Чтобы добавить несколько таблиц, надо переименовать параметр с Таб например не Таб2 в параметрах и в самом запросе в первом пакете. так же переименовать временную таблицу, тогда после прочтения другого файла, будет добавлен новый пакет запросов и новый параметр.

-------------------------------------UPD-------------------------------------------------

Поработал с обработкой и допилил её до вполне юзабельного на мой взгляд вида:

  •  добавлены типы читаемых файлов, теперь: xls,xlsx,ods,mxl.
  • файлы теперь читаются быстрее и не требуют установленного Excel.
  • таблица по-нормальному подставляется в параметр, это особенно важно когда надо отредактировать типы данных полей (щелкнув на редактирование параметра).
  • для повторного выполнения запроса не надо каждый раз заново читать файл.
  • добавил поле для произвольного кода для обработки выборки(сохраняется вместе с запросом) .
  • добавил возможность использовать параметры в исполняемом коде.
  • добавил возможность запускать код в фоновом задании. Если код в цикле не заполнен, то по нажатию кнопки Выполнить обработку запрос не выполняется.
  • добавил возможность добавлять параметры из строки: в отладке для нужного параметра выполняете ЗначениеВСтрокуВнутр() и получившуюся строку вставляете по кнопке "из строки". Передавать можно как параметры по одному, так и всю структуру целиком.
  • добавил возможность настраивать какой лист загружать и появилась возможность "сворачивать" многоэтажные шапки.
  • добавил возможность чтения CSV.
  • добавил возможность выбрать произвольную область табличного документа.
  • отвязал обработку от БСП.
  • добавил редактор кода в отдельном окне с подсветкой кода (спасибо salexdv и его разработке //infostart.ru/public/1266087/).

Эксель Excel запрос консоль запросов для управляемого приложения кода фоновые задания.

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    124517    681    389    

732

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7709    24    6    

42

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4224    12    2    

36

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2880 руб.

14.01.2013    178551    1083    0    

861

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99577    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18344    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23838    16    15    

33

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28292    3    10    

15
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. necropunk 9 06.02.17 12:16 Сейчас в теме
Я эту задачу решал загрузкой табдока в построитель и забирая оттуда готовую ТЗ. Ну, а потом нашел, что в Инструментах Разработчика можно загружать таблицу из экселя прямо в параметры и эта проблема для меня исчезла полностью.
2. olegmedvedev 65 06.02.17 12:26 Сейчас в теме
(1)
в Инструментах Разработчика можно загружать таблицу из экселя прямо в параметры

извиняюсь за оффтоп. а как такое там выполнить можете написать?
3. necropunk 9 06.02.17 15:51 Сейчас в теме
(2) Консоль запросов, в ней пишете что-то типа
ВЫБРАТЬ
	ТабЭксель.Артикул,
	ТабЭксель.Цена
ПОМЕСТИТЬ ВТТаб
ИЗ
	&ТЗ КАК ТабЭксель
;
////////////////////////////////////////////////////////////­////////////////////


Заходите в параметры, нажимаете "Из запроса", появляется параметр ТЗ, тип таблица значений. Дважды щелкаем на словах "(0)Таблица значений" в колонке "Значение", открывается редактор таблицы значений. Сверху есть "Получить" и варианты "из файла", "из MXL" и "из запроса". Выбираем "из MXL", он просит выбрать файл с расширением MXL. Не верим ему, выбираем в типе файлов "Все файлы", выбираем файл Excel (Хорошо бы чтобы он был сделан по проавилам, то есть, в первой строке - названия столбцов, это сводит к минимуму дальнейшую обработку таблицы), он спрашивает хотим ли мы ограничить длину строк, и загружает таблицу. Пока с проблемами загрузки ни разу не сталкивался.
svilsa; abadonna83; json; fancy; olegmedvedev; +5 Ответить
4. necropunk 9 06.02.17 15:52 Сейчас в теме
(3) Ну, соответственно, в запросе надо будет написать поля, которые есть в таблице.
olegmedvedev; +1 Ответить
6. KazanKokos 10 07.02.17 11:26 Сейчас в теме
(3) Извиняюсь за оффтоп. Это же для консоли запроса а не в код? В коде какая разница откуда грузить. Грузим в ТЗ, раньше через com а теперь либо ODBC либо Табличный документ и скармливаем запросу. Или чет теперь поменялось?
7. necropunk 9 07.02.17 11:29 Сейчас в теме
(6) в консоли многим удобнее обрабатывать информацию, я, например, 1С знаю лучше, чем Excel, мне проще подавать данные на вход и уже по ним получать любую нужную информацию.
А в коде - да, в коде все по прежнему

Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(Имя);
ExcelЛист = Excel.Sheets(НомерЛиста);
Таблица = ExcelЛист.UsedRange.Value.Выгрузить();
Excel.WorkBooks.Close();
8. KazanKokos 10 07.02.17 11:37 Сейчас в теме
(7) Я раньше тоже так делал. Где не стоял эксель ставил опен офис. Но в последних версиях эту компоненту полностью(включая работу с картинками) заменяет родной "ТабличныйДокумент". Теперь только им пользуюсь. Ого. Про UsedRange не знал. Спасибо ) Надо будет посмотреть такую возможность у табдокумента
9. KazanKokos 10 07.02.17 11:41 Сейчас в теме
(8)
Построитель = Новый ПостроительЗапроса;
    ТабДок = ЭлементыФормы.ТабДокумент;
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать("C:\ххх\Увеличенные ставки 2014.mxl");
    
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, 7));
    Построитель.Выполнить();
    ТЗ = Построитель.Результат.Выгрузить();
Показать
10. necropunk 9 07.02.17 12:01 Сейчас в теме
(9) А, ну если mxl то все просто, да. Прием с построителем, кстати, начал использовать не так давно, года четыре назад, раньше почему-то пользовался другими сомнительными способами.
11. KazanKokos 10 07.02.17 12:07 Сейчас в теме
(10) А потому что на УФ выборку данных из динамического списка по другому не сделать. Делаешь там и привыкаешь :) А причем тут мхл? Если колонки правильно названы то и эксель читает и пишет
14. kild 89 16.02.18 23:48 Сейчас в теме
(3)
Сверху есть "Получить"

Что-то нет такой кнопки, какой версией Консоля запросов пользуетесь? Можете скинуть скрин?
15. necropunk 9 19.02.18 10:49 Сейчас в теме
(14) Сейчас немного изменилась загрузка, стала более функциональной, но принцип тот же - двойной клик на параметр "ТаблицаЗначений" и открывается отдельная форма загрузки.
Релиз: Портативные 4.33p
Прикрепленные файлы:
5. necropunk 9 07.02.17 11:21 Сейчас в теме
Еще один вариант загрузки из Excel от разработчика подсистемы
http://forum.infostart.ru/forum9/topic21000/message1739962/#message1739962
"В консоли запросов выбери тип запроса "ADO", затем выбери драйвер ADO XLS файлов и укажи файл. Дальше в конструкторе запроса (ИР) сделай запрос и дальше результат обрабатывай обработчиками результата."
12. DrAku1a 1715 10.02.17 16:14 Сейчас в теме
Как программисту быстро загрузить данные из Excel
Отладчик запросов - это умеет, там в редакторе таблицы значений есть два варианта загрузки - из файла (выгруженного ранее процедурой ЗначениеВФайл), и из табличного документа (откроется диалог, в которм будет поле табличного документа, куда нужно вставить данные). Единественное - при загрузке из табличного документа поддерживаются только два типа данных - строка и число.
13. Светлый ум 406 05.06.17 11:25 Сейчас в теме
16. skillful 4 09.01.24 18:57 Сейчас в теме
Кроме Строка, Число и Булево эта консоль бесполезная
Оставьте свое сообщение