gifts2017

Универсальная загрузка любых документов из Excel с использованием нечеткого сравнения по реквизиту типа "Справочник"

Опубликовал Ugu (ge_ni) в раздел Обработки - Обработка документов

В помощь антиглобалистам!
Для мелких и очень мелких 1С - это дорого (ноутбук стоит дешевле). Поэтому практикуется такой порядок работы: в центральном офисе выгружают в Excel из 1С "Продажный лист"; торгуют и отмечают продажи в файле; приносят в офис вечером файл результата и загружают отчет о продажах за день.
Грузить можно и заявки, и перемещения, и поступления, и списания, и счета, и все для  ОС, НМА, МБП... была бы табличная часть!

По мотивам УПБ01.ert - Удар По Бездуховности, версия 1.0д
Автор: Che Burashka
E-mail: e.meil@mail.ru 
За что ему огромное спасибо!
Все его секретные кнопки тут рассекречены. Надеюсь за свои секреты он уже все деньги получил.

Особая благодарность автору внешней компоненты strmatch.dll
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=2485
  Автор: Ракунов Александр.
  E-mail: Skorp@newmail.ru
  ICQ#: 63919227
Немного невнятно в описании компоненты сказано по поводу нескольких "Кэшей":
возможны два и более Кэш по разным справочникам одновременно?
Если да, то теорию можно развить до бесконечности.

Также благодарность автору библиотеки V7XLSD7.dll .

Недавно появилась и очень интересная штучка - использована способность открывать XLS файлы и не заботиться о их закрытии даже в случае аварийной ситуации.

Порядок работы:

  1. Выбрали XLS файл (пункт 1) и он тут же загрузился в таблицу значений (окно 1). Ход загрузки отображается в строке состояния. Предполагается, что Excel файл имеет заголовки столбцов (строка 1 пункт 5а).
  2. В таблице (окно 2), отображается номер или название столбца входного Excel файла.
    Рядом с названием "Столбец" еще один столбец "Значение" - для сопоставления реквизитов документа и загружаемого файла, а фактически уже таблицы значений.
  3. Выбираем из окна "Документ" тот вид документа, который должен быть создан или догружен в результате выполнения обработки.(пункт 2)
  4. В окно списка реквизитов документа выводятся общие реквизиты, реквизиты шапки документа и реквизиты табличной части документа. Основная потребность, конечно же грузить в табличную часть, но и шапка может быть автоматически загружена. (Правда существует необходимость повторять реквизиты шапки в каждой строке Excel файла (таблицы значений)).
    Отмечаем (окно 3 пункт 3) все реквизиты, которые собираемся грузить.
  5. Выбираем реквизит по которому будем проводить нечеткое сравнение (окно 4 пункт 4).
  6. Если количество элементов для нечеткого сравнения в исходном файле с одинаковым названием велико, пытаемся построить комплексный ключ ("Наименование") для качественного поиска. В окно объединяемых столбцов, через запятую вписываем номера столбцов, которые хотим объединить.(пункт 5б) Последним записываем номер столбца с наименованием по которому будем осуществлять нечеткий поиск. (Помните! Это сработает, если в справочнике (например: "Номенклатура"), для  нечеткого сравнения, наименование элемента уже содержит объединяемые Вами (например: "Артикул" И "Наименование") ячейки). Вам заранее следует думать о названии элементов справочника, если собираетесь использовать нечеткое сравнение.(Пункт 5в)
    Можно дорисовать еще одно окно, в котором информация по справочнику будет подготовлена с формированием комплексного ключа по любой комбинации атрибутов справочника  ("Артикул"+"Наименование"+"Партия"+"ДатаПоступления" и т.д.), Кэш "заглотит" это как источник поиска, а ссылка на объект в таблице значений останется примитивной. Но мне влом! Может когда ...
  7. Проводим сопоставление реквизитов Excel файла (таблицы значений) и выбранных для загрузки реквизитов, двойным щелчком мыши по полю "Значение" напротив названия нужного реквизита таблицы значений.(окно 2 пункт 6)
  8. Выбираем, при необходимости, документ, в который собираемся загрузить информацию. (не обязательно, документ будет создан автоматически, если окно останется пустым).(пункт 7)
  9. Нажимаем на кнопку "Загрузить документ".(пункт 8)

Контролируем окно сообщений... После подготовки информации откроется окно сравнения.

Интерфейс окна интуитивно понятен за исключением 2-х нюансов.
Если в справочнике нет загружаемой позиции (нет в режиме автоматического поиска; нет в режиме ручного выбора), вы можете создать необходимый элемент справочника на основе наиболее подобного ему. Для этого:

  1. Становитесь на строку "наиболее подобного" из 20 строк и выставляете флажок "хочу новый".
    В таблице значений под окном сравнения появится список реквизитов элемента справочника и значения реквизитов взятые от "наиболее подобного". Наименование элемента будет заполнено значением несуществующего элемента. Реквизиты доступны для редактирования по двойному щелчку мыши.
  2. Нажимаете кнопку "В справочник" и созданный таким образом новый элемент справочника будет записан, и автоматически выбран в документ.

Желаю приятной работы.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ZagruzkaIzExcelstrmatch
.1251841437 1,15Mb
25.09.09
708
.1251841437 1,15Mb 708 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей (Che) Коцюра (CheBurator) 02.09.09 03:11
скриншоты лучше нарисовал бы
user624794_dianka25239; +1 Ответить
2. Сергей (Che) Коцюра (CheBurator) 02.09.09 03:15
Упомянутая в начале описания УПБ (Удар По Бездуховности) лежит здесь: http://infostart.ru/projects/393/
3. Сергей (Che) Коцюра (CheBurator) 02.09.09 03:17
"...столбец ЗПТ соответстсвующий..."
4. Ugu (ge_ni) 02.09.09 18:12
5. Дмитрий (Froloid) 03.09.09 17:20
Если вопрос ведется о стоимости 1С, то надо учесть, что MS Office не на много дешевле (если вообще дешевле)...
6. kliman (kliman) 03.09.09 21:55
Т.НоваяКолонка(ИД,,,,,30);
Недопустимый идентификатор колонки!

ошибку выкидывает
7. Ugu (ge_ni) 04.09.09 14:56
(6) В Excel у колонки болжен быть заголовок в 1 й строке. Нельзя подсовывать что попало...
8. Ugu (ge_ni) 04.09.09 15:30
(6) А что Вы грузите? Вышлите на ge_ni@mail.ru? Не мои это ошибки...
(5) Есть у меня MS ценник. Есть у меня MS Office официальный. Большинство же не покупает, и что будем делать ...?
9. Ugu (ge_ni) 04.09.09 15:44
(6) Возможно у Вас не загружена V7XLSD7.dll
...
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "V7XLSD7.dll")
10. kliman (kliman) 05.09.09 18:46
При присваивании значений периодически выскакивает след глюк:
реквизиты помеченные галочками - недоступны к выбору в окне2 п6, чтобы была возможность выбрать там необходимо несколько раз ставить и убирать галочки.
скрин http://ipicture.ru/Gallery/Viewfull/23267821.html

В окно подбора похожей номенклатуры, в строку excel; наименование аналога попадает только 70 символов, как можно увеличить??
скрин http://ipicture.ru/Gallery/Viewfull/23268017.html
11. kliman (kliman) 06.09.09 16:16
с глюком разобрался, все нормально если выбор реквизитов делать двойным кликом.
12. kliman (kliman) 06.09.09 16:27
При попытке записи номенклатуры на основании аналога, номенклатура записывается без наименований(сокращенного и полного)
13. Sk0rp (Sk0rp) 07.09.09 11:48
Тем кто обращается ко мне по поводу обработки: "Спасибо вам за вопросы, я тронут вниманием" - хочу только заметить, то я так же как и вы вижу её в первый раз. То что тут используется моя компонента для нечеткого сравнения не наделяет меня знанием о форматировании файла Excell и т.п. У обработки есть автор, я уверен, он будет рад ответить на ваши вопросы.

Автору в ответ на:
"Немного невнятно в описании компоненты сказано по поводу нескольких "Кэшей":
возможны два и более Кэш по разным справочникам одновременно?"
- Кешей может быть сколько угодно. Кеши полностью независимы и не знают друг о друге. Загонять в них можно в текстовом виде все что угодно. К какому кешу обращаетесь указавается произвольно выбранным id, главное, что бы при создании и при работе с кешем это был один и тот же id.

Спасибо за использование компоненты.
14. Ugu (ge_ni) 08.09.09 20:28
(12) Все под контролем!? Когда Вы пытаетесь создать новый элемент справочника, вы видите и Наименование и полное наименование и даже код, до того как записать его и выбрать. Далее действует запись атрибутов из табмицы значений в реквизиты справочника и все ... ??? Это называется: попробуйте еще раз !? Пришлите в конце концов то, что грузите я себе создам и загружу
15. rasswet (rasswet) 09.09.09 08:56
плюсанул за длинное, подробное описание, саму обработку не качал, без надобности на данном этапе)
16. ivanovozoo (ivanovozoo) 22.09.09 12:40
Не грузится единица в реализацию
17. Ugu (ge_ni) 23.09.09 15:03
Если Единица, тип - текст в 1С, или Единица - справочник - тогда может быть только ошибочный заголовок столбца Excel. Кстати для всех!!! Заголовок столбца в Excel должен состоять из одного слова, т.к. таблица значений не переваривает названия столбцов из 2х и более слов.
18. Ugu (ge_ni) 23.09.09 15:14
(16) Если Единица - перечисление, тогда замените строку модуля обработки ЗагрузкаЛюбыхДокументов.ert №781 на
Пер=Метаданные.РеквизитТабличнойЧасти(ИмяРеквизита);
19. Vladimir Arystamov (avi88) 27.09.09 00:37
Идея отличная я давнотакую искал, но нуждается в срочной доработке!
Т.К. если в exl таблици совмещены - обьеденены столбци то она её не видет нельзя ли ТЗ сделать на подобе как тут http://infostart.ru/public/22197/ она все таблици читает, правда есть свой глюк виснет но зато читает любые документы! http://infostart.ru/public/download.php?file=56737
20. Анна (Nysika) 17.12.09 14:19
Хорошая штука загрузила "отгрузку товаров", очень лояльно относится к названию товара выбирает достаточно правильно. Вот знать бы еще как в "окно 3" добавить параметр "код товара" чтоб можно было по артикулам загружать, а не по наименованию. Мой плюс. И спасибо.
21. Ugu (ge_ni) 21.12.09 13:11
(19,20) Очень занят... Как освобожусь обязательно добавлю эти моменты
22. Иван Ивановичч (ОльгаС) 06.03.10 16:47
При попытки загрузить документ пишет следующее: ПромТекст=ПромТекст+СокрЛП(ТЗ1.ПолучитЗначение(ТЗ1.НомерСтроки,НомерСтолбца));
{C:\DOCUMENTS AND SETTINGS\Админ\РАБОЧИЙ СТОЛ\ЗАГРУЗКАИЗEXCEL\ЗАГРУЗКАЛЮБЫХДОКУМЕНТОВ.ERT(548)}: Поле агрегатного объекта не обнаружено (ПолучитЗначение)
И ничего не формирует.
23. Ugu (ge_ni) 07.03.10 19:35
(22) Приношу свои глубокие извинения за недочёт: т.к. ".ПолучитЗначение" - содержит синтаксическую ошибку, видимо редко кто попадал в это состояние и я не заметил при тестировании! :oops: :oops: Нужно ".ПолучитьЗначение" Ай - яй- яй -яй яй!!! :cry:
24. isn Игнатьев (isn) 12.03.10 09:13
ставлю "+" за подробное описание, за проделанную работу
25. Оксана Труженникова (OksanaMM) 11.03.11 00:13
Жаль что так и не добавили поиск по артикулу. Если в экселе строка наименование больше 30символов(с пробелами)тогда при загрузке ТЧ пишет Т.НоваяКолонка(ИД,,,,,30) когда пообрезала по 30символов ТЧ загрузилась. Дальше прогнал номенклатуру так и не выдал совпадений наверное строка "Бумага А4 "Снегурочка"" отличается от "Бумага А4 "Снегурочка" 80гр\м 500л". Компоненты все загрузила. Может ошибка из-за того что у меня платформа установлена не через setup я ее просто скопировала.
26. xDee (xDee) 29.09.11 18:44
27. Александр М (Fruit83) 07.12.11 19:32
Эх...по 8-чке бы такое действо.
28. Hate (hate) 20.01.12 01:38
одназначно +, немного переписал по нужды компании, а вцелом - Шекарно
30. Э. Лукманов (erthia) 07.02.14 18:02
(23)ge_ni, будет ли сделана идентификация существующих элементов справочника по загружаемым кодам, для загрузки в документ?
31. Ugu (ge_ni) 08.02.14 00:03
Замените в запросе

ТекстЗапроса = "
|Обрабатывать НеПомеченныеНаУдаление;
|Элемент = *.ТекущийЭлемент;
|Наименование = *.Наименование;
|Функция Хеш = Сумма(0);
|Группировка Элемент Упорядочить по Элемент.Наименование Без Групп;
|";
ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"*",ТипСпра);
Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса)=0
Тогда Возврат;
КонецЕсли;
*.Наименование;
на
*.Код;

Но тогда и в Excel один из столбцов, по которому Вы собираетесь грузить, должен содержать не наименования, а коды элементов справочника
32. Э. Лукманов (erthia) 09.02.14 16:14
(31) ge_ni, как отключить нечеткое сравнение? при загрузке документа выскакивает подбор элементов, в которых совпадает:
1)часть НАИМЕНОВАНИЯ элемента
и 2) код из Excel.
Или он должен предлагать элемент совпадающий по коду, а не по части наименования.
33. Ugu (ge_ni) 09.02.14 19:45
Грузить автоматически, как не крути, не получится. Особенность нечеткого сравнения в том, что в списке подбора для кода (например 36), первой строкой (значением по умолчанию) может быть вначале
136
236
и только после этих значений
36
ну и далее
336
4336

Поиск по коду эффективен если "Тип кода" текстовый и все коды имеют одинаковую длину, например 7 символов.

в этом случае код 0000036 находится однозначно...
И значит в обработке можно поставить флаг "грузить накладную автоматически"

что еще нужно быдо доправить:
1-ну строчку

-------> ТЗ.Представление = СокрЛП(ТЗ.Элемент.Код);
//ТЗ.Представление = СокрЛП(ТЗ.Элемент.Наименование);
ТЗ.ИД = СтрЗаменить(ВРег(ТЗ.Представление)," ","");

хеш = хеш + 1;
ТЗ.Хеш = хеш;
Адин.ДобавитьВКэш(Кеш,СокрЛП(ВРег(ТЗ.ИД)),хеш,СокрЛП(ТЗ.Элемент.Код));


34. Э. Лукманов (erthia) 10.02.14 04:59
(33) ge_ni, теперь подбор элементов выдает нужные элементы, щелкаешь по первому, сообщение об ошибке: > НАЧАЛО: ПРИЕМ ИНФОРМАЦИИ ИЗ ФАЙЛА <C:\DOCUMENTS AND SETTINGS\BUH5\МОИ ДОКУМЕНТЫ\МОИ ЭЛЕКТРОННЫЕ КНИГИ\ЛИСТ MICROSOFT EXCEL.XLS>
> обработка строки накладной 0001: элемент 40119 СДЕЛАН ВЫБОР: (40119) Рычаг 24-14-104СП
ДокЗаявка.УстановитьАтрибут(ИмяРеквизита,ЗначениеРеквизита);
{C:\BASES_1S\1SBDB\EXTFORMS\ЗАГРУЗКАЛЮБЫХДОКУМЕНТОВ.ERT(808)}: Неверное имя атрибута
35. Ugu (ge_ni) 10.02.14 22:58
Вчера специально установил 7ку и загрузил "Приходную накладную" по Вашему принципу: сопоставив столбец файла Excel "Код" и реквизит накладной "Товар"... и ... всё загрузилось

У Вас проблемма с именем реквизита, который соответствует справочнику подбора по нечеткому поиску. т.е. "код" соответствует реквизиту "Товар" или реквизиту "Материал" или реквизиту"ОС" и т.д.
36. rus rf (rus_rf) 22.09.14 22:04
Ошибка при создании объекта из компоненты C:\Program Files\1Cv77\BIN\StrMatch.dll (отсутствует CLSID)
> Отказано в запуске обработки
> Не найдена компонента StrMatch.dll (нечеткое сравнение строк)
Регистрация компоненты прошла успешна! Как быть дальше?
37. rus rf (rus_rf) 22.09.14 22:07
Ошибка при создании объекта из компоненты C:\Program Files\1Cv77\BIN\StrMatch.dll (отсутствует CLSID)
> Отказано в запуске обработки
> Не найдена компонента StrMatch.dll (нечеткое сравнение строк)
Доброе время суток. Установка компоненты прошла успешно! Но увы! Как быть дальше?
38. Ugu (ge_ni) 23.09.14 23:47
Здравствуйте! Это чисто теоретически "Успешно". На самом деле Win 7 и не думал регистрировать её на вашем компьютере. Судя по всему Вы не "Администратор", хотя и числитесь наверное в списке "Администраторов". Для начала попробуйте запустить 1С от имени "Администратора". Если не поможет - нужно создать ярлык работы в режиме командной строки, запустить этот ярлык от имени "Администратора" и повторить регистрацию компоненты в командной строке.... Всё относится к периоду, когда царствовал WinXP и всё регистрировалось "в лёт" ... У Win 7 к сожалению через обряд...
39. Ugu (ge_ni) 23.09.14 23:52
Кстати лучше погуглите регистрацию библиотек для Win 7 . Вариантов решения в интернете море. Обработка как бы не сильно заморочена на регистрацию компонент, всё в традиции 1С...
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа