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

14.03.25

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Консоль запросов для управляемого приложения с чтением табличных файлов и обработчиком результата
.epf 3,01Mb ver:1.9
56
56 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.10.467

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

См. также

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

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

15500 руб.

02.09.2020    183150    1017    403    

965

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    23747    156    84    

155

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

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

22200 руб.

06.10.2023    20143    51    19    

86

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

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

15000 руб.

10.11.2023    13559    55    33    

76

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    30330    103    48    

147

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    2264    4    0    

7

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    19050    7    32    

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

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


Заходите в параметры, нажимаете "Из запроса", появляется параметр ТЗ, тип таблица значений. Дважды щелкаем на словах "(0)Таблица значений" в колонке "Значение", открывается редактор таблицы значений. Сверху есть "Получить" и варианты "из файла", "из MXL" и "из запроса". Выбираем "из MXL", он просит выбрать файл с расширением MXL. Не верим ему, выбираем в типе файлов "Все файлы", выбираем файл Excel (Хорошо бы чтобы он был сделан по проавилам, то есть, в первой строке - названия столбцов, это сводит к минимуму дальнейшую обработку таблицы), он спрашивает хотим ли мы ограничить длину строк, и загружает таблицу. Пока с проблемами загрузки ни разу не сталкивался.
Новичок1с; svilsa; abadonna83; json; fancy; olegmedvedev; +6 Ответить
4. necropunk 11 06.02.17 15:52 Сейчас в теме
(3) Ну, соответственно, в запросе надо будет написать поля, которые есть в таблице.
olegmedvedev; +1 Ответить
6. KazanKokos 11 07.02.17 11:26 Сейчас в теме
(3) Извиняюсь за оффтоп. Это же для консоли запроса а не в код? В коде какая разница откуда грузить. Грузим в ТЗ, раньше через com а теперь либо ODBC либо Табличный документ и скармливаем запросу. Или чет теперь поменялось?
7. necropunk 11 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 11 07.02.17 11:37 Сейчас в теме
(7) Я раньше тоже так делал. Где не стоял эксель ставил опен офис. Но в последних версиях эту компоненту полностью(включая работу с картинками) заменяет родной "ТабличныйДокумент". Теперь только им пользуюсь. Ого. Про UsedRange не знал. Спасибо ) Надо будет посмотреть такую возможность у табдокумента
9. KazanKokos 11 07.02.17 11:41 Сейчас в теме
(8)
Построитель = Новый ПостроительЗапроса;
    ТабДок = ЭлементыФормы.ТабДокумент;
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать("C:\ххх\Увеличенные ставки 2014.mxl");
    
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, 7));
    Построитель.Выполнить();
    ТЗ = Построитель.Результат.Выгрузить();
Показать
10. necropunk 11 07.02.17 12:01 Сейчас в теме
(9) А, ну если mxl то все просто, да. Прием с построителем, кстати, начал использовать не так давно, года четыре назад, раньше почему-то пользовался другими сомнительными способами.
11. KazanKokos 11 07.02.17 12:07 Сейчас в теме
(10) А потому что на УФ выборку данных из динамического списка по другому не сделать. Делаешь там и привыкаешь :) А причем тут мхл? Если колонки правильно названы то и эксель читает и пишет
14. kild 93 16.02.18 23:48 Сейчас в теме
(3)
Сверху есть "Получить"

Что-то нет такой кнопки, какой версией Консоля запросов пользуетесь? Можете скинуть скрин?
15. necropunk 11 19.02.18 10:49 Сейчас в теме
(14) Сейчас немного изменилась загрузка, стала более функциональной, но принцип тот же - двойной клик на параметр "ТаблицаЗначений" и открывается отдельная форма загрузки.
Релиз: Портативные 4.33p
Прикрепленные файлы:
17. Новичок1с 4 29.04.24 16:38 Сейчас в теме
(3)

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