Вы больше не будете разбирать Excel как раньше

07.05.18

Интеграция - Загрузка и выгрузка в Excel

Кому не приходилось разбирать файлы в формате Excel? Все матерятся, плюются, требуют обещаний что "это в последний раз", но таки пишут загрузку из Excel. Потом форматы меняются, строки съезжают, колонки переставляют... Вам это не надоело?

Скачать файл

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

Наименование По подписке [?] Купить один файл
Больше вы не будете разбирать Excel как раньше:
.epf 15,26Kb
67
67 Скачать (1 SM) Купить за 1 850 руб.

Согласитесь, было бы неплохо получить инструмент, который принимал бы запросы к данным со слабовыраженной и нестабильной структурой в том виде, в котором человек объяснял бы другому человеку правила по которым он глазами находит колонку "цена" в УПД. Ну, например:

о цене мы точно знаем, что это число, оно находится в колонке с названием содержащим слово "цена", и оно располагается между наименованием и ставкой НДС

Сформулированный "запрос" содержит основные критерии (тип, название колонки) и "подстраховку" (расположение относительно других данных), которые не позволят выбрать что-то лишнее. При этом, как вы могли заметить, такой "запрос" не привязан к какому-то одному формату, с помощью него можно успешно найти цену и в УПД и в Накладной и в ТОРГ-12. И уж тем более, там ничего не написано ни про номер колонки в которой стоит цена ни про номер строки с которой начинаются товары.

Но если так может человек, почему так не может 1С?

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

Фактически, такой "запрос" можно получить в виде фразы ГДЕ языка запросов 1С, построив нужным (и автоматическим) образом фразу ИЗ. Фраза ВЫБРАТЬ особого интереса не представляет и будет статичной. Если "перевести" описание колонки Цена, данное выше, с человеческого на язык запросов 1С, получится примерно такое:

ГДЕ ТипЗначения(Слово) = Тип(Число) И СловаВыше ПОДОБНО ""%ЦЕНА%"" И СловаСлева ПОДОБНО ""%[А-Я]%"" И СловаСлева.Длина > 3 И ТипЗначения(СловаСправа) = Тип(Число)

Разберемся, в том, что тут понаписано.

Основные параметры

Во-первых надо понять, что мы имеем дело с обычным запросом, ну т.е. с его фразой "ГДЕ". Соответственно, для описания условий нам доступны все возможности языка запросов: сравнения, равенства, манипуляции периодами, математические выражения, оператор "ПОДОБНО", и все остальное, что только можно написать в обычном запросе.

Во-вторых, для рассмотрения доступно само поле. О нем доступны следующие сведения:

  • в реквизите Слово.Значение хранится "чистое" значение поля.
  • в реквизите Слово.ОригинальноеЗначение хранится значение поля в том виде, в котором оно было в изначальном экселе, без очистки.
  • в реквизитах Слово.НомерСтроки и Слово.НомерКолонки хранятся координаты позиции слова в исходной таблице.
  • Слово.Длина содержит длину строки (для не строк - длину строкового представления соответствующего значения).

Для наглядности и простоты написания, выражения "Слово.Значение" и "Слово" - эквивалентны, т.е. когда вы не уточняете какое имеете ввиду поле у таблицы "Слово" - будет подставлено поле по-умолчанию "Значение".

В-третьих, доступно все окружение каждого поля. Например, если мы хотим описать какое-то поле через его предшественника - ставку НДС, мы можем написать "СловаСлева ПОДОБНО "18\%". Другой пример - описание поля через заголовок столбца: "СловаСверху ПОДОБНО "%ЦЕНА%". Ну и так далее, всего возможно 8 вариантов обращения к окружению, все описаны в справке. Каждое из окружающих слов содержит туже структуру его описания, что и само Слово (Значение, ОригинальноеЗначение, НомерСтроки, НомерКолонки, Длина). И также, при опускании ".Значение" - оно будет поставлено автоматически (т.е. записи "СловаСлева" и "СловаСлева.Значение" эквивалентны).

В-четвертых, требуется осознать следующую вещь: "Слева" - это не значит "непосредственно в соседней слева ячейке". Это значит где-то слева. Такой подход помогает нам легче обращаться к наименованиям колонок (они же могли быть и 3 и 10 строк назад), а также не иметь проблем при объединениях ячеек. Но, если есть уверенность в непосредственной близости каких-то данных, всегда можно написать "СловаСлева.НомерКолонки + 1 = Слово.НомерКолонки"

В-пятых, в каждом направлении (влево, вверх...) мы можем анализировать не одно поле. В таком случае мы можем обзывать поля как хотим, главное - оставить префикс из того набора, который у нас есть. Например, при поиске количества хотим чтобы оно следовало за "шт" и "796": "СловаСлеваИмяЕдИзм = "ШТ" И СловаСлеваКодЕдИзм = 796". Естественно, если написать еще какое-то условие для синонима СловаСлеваКодЕдИзм - будет понятно, что это требование к тому же самому полю, а не к третьему.

Углубимся в технику

Технически, весь объем данных (Excel, табличный документ, Word, не важно) помещается в таблицу значений с колонками Значение, ОригинальноеЗначение, НомерСтроки, НомерКолонки, Длина, где каждая запись соответствует одной ячейке. Далее, таблица значений помещается в запрос и она соединяется сама с собой по правилам, в результате которых каждому слову (синоним Слово) получаются сопоставлены слова стоящие в той же строке слева от него (синоним СловаСлева), в той же строке справа от него (СловаСправа) в той же колонке выше него (СловаВыше) и в той же колонке ниже (СловаНиже). Области этих четырех соединений схематично показаны ниже, на первой схеме.

Кроме того, есть еще 4 таблицы: представляющие все ячейки справа (ВсеСловаСправа) и все ячейки слева (ВсеСловаСлева), независимо от строки - вторая схема. И все ячейки сверху (ВсеСловаВыше) и все ячейки снизу (ВсеСловаНиже) независимо от колонки - третья схема. Т.е. если предыдущие таблицы представляли собой "линию" из ячеек, то эти таблицы - это поле ячеек. Соединения всех таблиц происходит по координатам ячейки в реквизитах НомерСтроки и НомерКолонки. И, естественно, реально объявляются во фразе ИЗ только те таблицы, которые используются во фразе ГДЕ.

Есть также дополнительный вариант, для "условно-не-табличных" данных (например, требуется вычленить из шапки документа номер, дату) - хорошо работает принцип когда каждое слово по одному помещаются в таблицу (получается, что каждое конкретное слово становится доступно для анализа отдельно от остального окружения в ячейке). За это отвечает реквизит РежимРаботы функции ТаблицаСловПоМассиву. Нумерация строк и колонок при этом остается как в оригинале. Так очень эффективно бороться, например, с датами (их пишут все кому как в голову взбредет: кто-то в одной ячейке, кто-то в трех, кто-то еще псевдо-печатное оформление оставляет в стиле "___")

Также отдельное внимание стоит обратить на разборщика входящих данных (функция ОкультуритьТекст). Эта функция строит т.н. "чистое" значение по оригинальному значению, без нее весь банкет был бы невозможен. Она работает так:

  • переводит все в верхний регистр
  • определяет соответствует ли значение одному из шаблонов даты, если да - пытается привести значение к типу дата.
  • определяет можно ли привести значение к числу. если да - приводит. при этом разные написания вроде "1 234.50", "1`234,50", "1.234,50" и т.п. будут обработаны успешно.
  • для строк - все символы кроме букв, цифр и символов "-", "/", "(", ")", заменяет на пробелы, удаляет пробелы в начале и конце строки, удаляет повторяющиеся пробелы.

В результате ее работы мы получаем т.н. "чистое" значение, однако, если нам все-же захочется проанализировать оригинальное значение - оно сохраняется в реквизите ОригинальноеЗначение.

Визуальная консоль запросов

Для проверки запросов в процессе разработки функциональности (ну и для поиграться) предназначена визуальная консоль, которую вы видите в гифках и можете скачать ниже. Пользоваться консолью проще простого:

  • в табличный документ консоли копи-пастим эксель
  • пишем текст своего запроса
  • жмем выполнить - соответствующие запросу ячейки будут подсвечены

В консоли есть справка и простейшие примеры. В модуле объекта изолированы процедуры, которые вы должны переместить в свой общий серверный модуль для программного использования.

Методика программного использования

При разборе документов у меня методика использования получилась следующая:

  • Думаем, какой столбец будет опорным. Это должен быть столбец, определить элементы которого можно с наименьшей погрешностью. Я выбрал цену. (многообещающе выглядела ставка НДС, но ее нет в некоторых форматах)
  • Делаем запрос ко всем значениям опорного столбца. Для цены у меня такой запрос: "ГДЕ СловаСлева ПОДОБНО ""%[А-Я]%"" И СловаСлева.Длина > 3 И ТипЗначения(СловаСправа) = Тип(Число) И СловаВыше ПОДОБНО ""%ЦЕНА%"" И ТипЗначения(Слово) = Тип(Число)"
  • Далее, пишем по одному запросу к каждому типу значений (один запрос - количество, второй - наименование, третий - сумма и т.д.), используя в них конструкции типа Слово.НомерСтроки В (&НомераСтрокОпорныхЗначений).
  • Если нужно получить одно значение, а получить четко одно невозможно - можно приоритезировать результаты поиска по каким-то критериям, например, по номеру колонки или длине строки (при программном использовании доступна также установка фразы УПОРЯДОЧИТЬ ПО) Вроде как не совсем красиво выбирать наименование между "шт" и "Туфли женские" опираясь на длину строки, но мне не встречалась ситуация, когда такой критерий подводил.

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

Код полностью открыт, запароленных и/или обфусцированных участков кода нет. Писал на платформе 8.3.9.2233. Удачи!

См. также

SALE! 20%

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

Универсальная обработка для загрузки документов из Excel в 1С одним нажатием. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

6000 5100 руб.

09.11.2016    234122    1062    898    

1003

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

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", МагнитЭкспресс (быв.Казань-Экспресс), "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом", "Золотое Яблоко" в документы "Отчет комиссионера (агента) о продажах" и другие, работает в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

2400 руб.

12.08.2021    35489    348    68    

155

SALE! 30%

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

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    106920    313    173    

326

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 10.10.2024, версия 9.8 - 9.13)

15600 руб.

20.11.2015    156052    378    378    

513

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

Загрузка данных отчета о реализации и продаже товаров из сервиса Яндекс.Маркета «Беру» в 1С из Отчетов Excel для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3; Управление нашей фирмой, редакция 3.0 и Розница, редакция 3.0 в документ «Отчет комиссионера о продажах».

4800 руб.

09.12.2020    25342    252    1    

114

SALE! 15%

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

11100 9435 руб.

29.10.2014    216743    657    527    

456
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gubanoff 63 07.05.18 11:23 Сейчас в теме
Почерпнул несколько идей, есть оригинальные моменты, спасибо.
chebser; KEV8383; Liris; +3 Ответить
2. Evil Beaver 8243 07.05.18 13:04 Сейчас в теме
А можно что-то типа мастер-класса для тупых? мол, "вот задача, вот файл эксель, а вот так мы теперь сможем делать"...

А то звучит круто, но непонятно. Жажду демонстрации на живых людях данных
bytesoft; Dmitri93; chebser; rpgshnik; zqzq; kild; +6 Ответить
5. m-rv 972 07.05.18 15:39 Сейчас в теме
(2) Непонятно в чем вопрос, если пример использования в техногенном смысле - консоль как раз реализует программный интерфейс. Если в более прикладном смысле - то суть то весьма проста - берем эксель и разбираем где цена где количество, где артикул и записываем в документ.
23. Evil Beaver 8243 09.05.18 22:49 Сейчас в теме
(5) пошаговый пример: как взять Вашу консоль и с ее помощью разобрать какой-нибудь excel?
paybaseme; kalyaka; azhilichev; kild; +4 Ответить
3. dandykry 11 07.05.18 14:06 Сейчас в теме
Как-то сталкивался с проблемой "плавающих колонок". пошел от обратного и сделал обработку с пользовательской настройкой.
1) Пользователь читает файл с таблицей
2) Выбирает на каждый предопределенный параметр область ТД. (К примеру контрагент у меня вот в этой ячейке, а колонка с номенклатурой тут. А вот тут сумма и цена)
3) Обзывает свое творение "ТОРГ-12 от Рога и копыта"
4) Загружает

При открытии очередного файла с таблицей, происходит поиск наиболее подходящей из сохраненных настроек (Проверялись предопределенные Дата, Контрагент, колонка номенклатуры, Сумма, цена по нескольким алгоритмам).
Если таких много, то дает выбрать. Так же дает выбрать, если поиск не увенчался успехом (К примеру критерий того же контрагента провалился, а на самом деле просто формат текста был неверный)

Если приходит что-то новое, пользователь начинает настраивать новую настройку. (Зато сам видит, что изменились колонки/ячейки, а не "программист плохой снова денег хочет")
7. m-rv 972 07.05.18 15:43 Сейчас в теме
(3) все привыкли вбивать параметры "номер первой строки товары" и "номер колонки цены" цифрами, ваш вариант гораздо более юзерс-френдли. а если его еще раскрасить разными цветами (цена фиолетовым, количество зеленым...) - наверно весьма футуристично будет выглядеть ))
9. dandykry 11 07.05.18 15:58 Сейчас в теме
(7) Цветасто было) Как раз для выбора существующего варианта подкрашивались области, но вообще идея в целом провальная.
В целом закончилось все тем, что "программист плохой". Воткнулось все в алгоритмы поиска данных. Только для поиска номенклатуры было где-то 15 штук, и этого оказывалось мало. По артиклу, штрих-коду, наименованию, парсингу Наименование+характеристика (штук 5 кажется)...... Поэтапный поиск. Комбинированные. И в итоге вариантов становилось больше. Сначала делал все новые и новые функции, после решил, что возможность загрузки алгоритма через тхт (чтобы на коленке можно было бы им отправить тхт с новой функцией, которую можно было бы вставить в Выполнить(ТекстИзФайла)). После решил, что иметь регистр сведений с "Контрагент", "Номенклатрура", "Как выглядит в ехсел" куда дешевле, чем исполнять сотни запросов. Оказалось нужно хранить для разных баз. В итоге родилась конфигурация к которой через COM (в перспективе планировался web-сервис) можно было получить гуид номенклатуры или контрагента по текстовому представлению. ( к счастью до этого не дошло, развитие этого франкенштейна окончилось)
33. CheBurator 2712 10.10.19 23:47 Сейчас в теме
(3) у меня практически точно также сделана загрузка в 77.
визуально выбирает колонки табличногодокумента(йоксель, прочитан эксель) соответсвующие предопределенным параметрам. Получаем схему данных. Эта настройка привязывается к контрагенту (или юзер простовыбирает схему из перечня схем). выбранную/привязаную схему можно оценить - показывает "раскраску" документа по текущей схеме. жмакает юзер загрузить, дальше как обычно.
конечно это исключительно интерактивная работа.
слава богу что таких "обменов данными" все меньше...
4. bulpi 217 07.05.18 15:10 Сейчас в теме
Во людям делать не фиг :)
Sersh2010; paybaseme; chebser; rpgshnik; kuzyara; zzumma; kild; depresnjak; +8 Ответить
6. KapasMordorov 428 07.05.18 15:41 Сейчас в теме
Автор молодец.
В реальной жизни можно проще.
Для названий колонок мне хватило массивов подстрок по каждой колонке и разбор наименований колонок в двух строках.
Что-то нестандартное пришлось придумывать для разделения артикула и наименования номенклатуры.
Всё.
8. m-rv 972 07.05.18 15:47 Сейчас в теме
(6) кстати да, артикул из наименования у меня тоже выделяется. это самая спорная часть функциональности, поэтому в основной статье не стал писать, но раз уж вы затронули эту тему: наименование номенклатуры помещается в отдельный запрос в варианте "ПоСловам", далее ищутся слова, содержащие цифры (в моем варианте в артикуле всегда есть хотябы одна цифра) и самое длинное слово считается артикулом.
10. depresnjak 3 07.05.18 19:06 Сейчас в теме
По зависимостям: только платформа или есть ещё БСП etc?
11. m-rv 972 07.05.18 19:39 Сейчас в теме
12. CheBurator 2712 08.05.18 00:18 Сейчас в теме
все равно все алгоритмы - эмпирические. без предварительного визуального исследования человеком - не разобрать. а хотелось бы сказать "торг12" и получить на выходе "линенынй данные"
14. m-rv 972 08.05.18 07:42 Сейчас в теме
(12) да, все так. думаю, что можно построить некую "матрицу" в которой будут предопределенные настройки запросов для каждого вида входящих документов и предопределенные параметры записи в объект системы, но это уже следующий "слой".
13. HAMMER_59 253 08.05.18 06:53 Сейчас в теме
Красно было на бумаге, да забыли про овраги, а по ним ходить...

Так я и не уловил, для каждой ячейки будем делать проверку, а нет ли где-то там там выше, ячейки со словом цена? Это же сколько проверок будет для 1000 строк и 20 колонок?

А потом, окажется, что там не "цена", а "Цена", а еще окажется, что и в другой колонке тоже присутствует слово цена. А потом, окажется, что под табличной часть сначала итоговые значения, а затем и вовсе подвал, и из него еще подтянутся значения.

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

Допускаю, что возможно, есть какая-то задача, для которой подходит решение предложенное в данной статье,
15. m-rv 972 08.05.18 09:05 Сейчас в теме
(13)
про 1000 строк - вопрос интересный, теоретически понятно, что язык запросов, на котором все построено способен переваривать и не такие объемы, но на всякий случай проверил, нашел документ на 1300 строк, результаты такие:
- обработка строк (см. разборщик входящих данных) работает порядка 45 секунд. это вообще довольно затратная с точки зрения производительности история.
- запрос в том виде, в котором он приведен выше выполняется около 120 сек.
- если выкинуть из него условие по наличию справа числа (цены) - запрос выполняется около 5 сек.
- если добавить условие на значение поля ниже - запрос работал 10 минут, я не дождался.
таким образом, имеет место экспоненциальный рост времени выполнения в зависимости от количества используемых таблиц (что логично), но в целом, для условий фоновой обработки и очень большого документа для разора (99% документов, это все-таки до 100 строк) - результат считаю удовлетворительным.
BigB; romankoav; HAMMER_59; +3 Ответить
16. user971146 08.05.18 09:11 Сейчас в теме
Мда уж) Время идет а велосипеды у нас все придумывают)

Сделано 10 лет назад, живое видео
https://www.youtube.com/watch?v=eVQQYeg8zKo
17. sonGodv 43 08.05.18 09:32 Сейчас в теме
Так же сталкивался с такими задачами и искал оптимальное решение. Склонился все же к пути 1С. Вставляем данные из Excel в табличный документ и в нем уже определяем где и что. Пример в БП 3.0 в справочнике номенклатура Загрузить
Прикрепленные файлы:
Rega; Irwin; swimdog; alex-l19041; dmpas; +5 Ответить
18. user971146 08.05.18 09:50 Сейчас в теме
(17) не очень себе решение. Учитывая что из УПД, Торг12 - не так просто и колонку скопировать с "чистыми" данными - все будет с лишним мусором. И колонок там много разных.
И если номенклатура отличается и нет записей в номенклатуре поставщиков - ничего не найдет.
Точно также как не распознает половину добавочных данных типа единиц (которые могут быть у поставщика криво названы), ндс, и прочего.
Ну и напоследок не сможет работать с характеристиками.

Подходит исключительно когда нет характеристик, номенклатура 100 процентное совпадение, единицы и все остальное - тоже самое.
Короче под идеальную таблицу, номенклатуру и тп...
Много ручной работы и ковыряние со вставками колонок - где же тут автоматизация.
22. kuzyara 2090 09.05.18 21:32 Сейчас в теме
(18) Автоматизация ручной загрузки из excel - ну как сказать... Кто-то же сделал ручную работу на входе - на выходе получаем что получаем. Есть же стандартизированные форматы, протоколы, EDI, EnterpriseData...
19. m-rv 972 08.05.18 09:58 Сейчас в теме
(17) (16)
в первую очередь решение предлагается для автоматической обработки. то, что вы видите в консоли - это всего лишь метод проверки написанного запроса. далее, запрос должен работать сам по себе, без пользователей, которые ему подсказывают.
20. МимохожийОднако 142 09.05.18 07:42 Сейчас в теме
Вопрос рядом с темой. При автоматической обработке файла через регламентное задание СОМ-соединение читает файлы XLS не всех форматов и это усугубляется наличием сервера 1С на 64-разрядах. Как в этом случае быть? В моём случае контрагенты шлют файлы на почту и нет возможности заставить их менять форматы, удобные нам. Приходится эти "неправильные" файлы разбирать запуском клиентского приложения через планировщик операционной системы.
21. user971146 09.05.18 13:39 Сейчас в теме
(20) а что в поиске никаких готовых решений нет? Мне кажется загрузок уже несколько тысяч.
25. taurus__ 80 20.06.18 17:31 Сейчас в теме
(20)ADODB. Установка одновременно 32 и 64 версии AccessDatabaseEngine на сервере 1с. + 64х битный обычный офис. Читаем файл ADODB, если проблема "unexpected format", делает пересохранение через excel.application и заново открываем ADODB. На практике читает 100% текстовых и 95% эксельных файлов, которые шлют разные поставщики. (5% - обычно не "родной" эксель - а программно сформированный с косяками из всяких кривых приложений)
31. МимохожийОднако 142 26.06.18 22:30 Сейчас в теме
(25) Вот из-за этих 5% пришлось делать запуск через планировщик для чтения не прочитанных с первой попытки файлов кривого формата через excel.application
24. kild 92 20.06.18 11:46 Сейчас в теме
Вы больше не будете разбирать Excel как раньше

Будем, будем. Подсмотрите, например, как в типовой реализована загрузка номенклатуры из файла.
26. bugagashenka 203 21.06.18 05:23 Сейчас в теме
А как будет работать, если, например, нужна цена, а этих несколько? Цена начало конец акции, полки, закупки, продажи и т.п.?
27. m-rv 972 21.06.18 08:08 Сейчас в теме
(26) Если вы можете определить значение через его окружение - значит у вас все получится, нужно только аккуратно сформулировать правила. В вашем случае, полагаю, поможет анализ названий колонок, если цен фиксированное количество, или выбор минимального (максимального) значения, если количество цен заранее неизвестно.
28. kembrik 10 25.06.18 11:27 Сейчас в теме
Идея конечно интересная, но только для самых простых случаев. "Загрузка здорового человека" должна из одной колонки делать запись в номенклатуру поставщика, тут же создавать номенклатуру с определенным видом, определять нужна ли характеристика, знать правила именования в трёх справочниках, привязывать их к номенклатуре поставщика, ориентироваться какие доп. реквизиты и свойства необходимы но не заполнены, а какие даром не нужны, делать проверку по штрихкоду "а ну как у нас такое уже есть" наплевав на наименование, понимать данные в каких колонках пойдут в допсвойства, а в каких в реквизиты, уметь создавать наборы допреквизитов как номенклатуры, так и характеристик и прочее прочее прочее

В нашем случае пишется однократно парсер под каждого поставщика, который как раз и раскидывает вышеперечисленное добро в универсальный файл загрузки нужного формата, а оттуда уже стартует "магия"

Создание "всего и сразу", да "на лету" с таким уровнем доверия к входящим данным -ну, не знаю.
29. m-rv 972 26.06.18 11:28 Сейчас в теме
(28) Вы говорите о том, что у вас сложный алгоритм работы с полученными данными. Надо много всего проверить в базе данных, создать несколько объектов и т.п. Иными словами, вы говорите что у вас сложности на этапе использования данных.
Предложенный метод же отвечает на вопрос о том "как данные взять", а не о том "как данные использовать".
30. kembrik 10 26.06.18 15:09 Сейчас в теме
(29) Да если бы не заголовок - и зануду бы не включал. Способ наверное прекрасно подходит для загрузки многоообразия табличных вариантов Торг-12, но я не вижу как его приспособить для загрузки прайсов и свойств номенклатуры. Как в вашем алгоритме будеть обработано объединение ячеек? Пример на картинку. Справится ли чудо запрос c конструкцией "Если наименование поля включено в подшапку Свойства Харакреристики, то положить его в ячейку Характеристика_ЭтоСвойство_ИмяСвойства?
Прикрепленные файлы:
32. m-rv 972 27.06.18 07:44 Сейчас в теме
(30) куда ж без колхозного маркетинга?! )))
над вопросом с объединением я на самом деле голову ломал не одну неделю. в итоге оставил "по умолчанию": значение будет только в левой верхней ячейке. второй вариант был - заполнять соответствующим значением все объединенные ячейки. наверно, нужно было сделать это опцией.
а что касается прайс-листа - то в нем вероятно не одна тысяча строк - для такого этот инструмент действительно ограниченно годен, поскольку сильно деградирует производительность с ростом объема файла (там, как вы понимаете все на полных соединениях)
34. d.zhukov 1474 10.01.20 07:51 Сейчас в теме
Больше не требуется создавать очередную обработку загрузки из Excel. Есть универсальный загрузчик из Excel в 1С, который загружает все что нужно из любых товарных документ и при этом ничего настраивать и программировать не нужно. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить".

Подробнее: https://infostart.ru/public/560551/
Оставьте свое сообщение