Правим справочники в Excel-е





Вроде бы ничего нового, но все же…
Очень удобно выгрузить справочник в Excel и там его уже "подкрутить" как хочешь, используя формулы, фильтры и тп…. или просто отдать неопытному пользователю для исправления названий, реквизитов и других реквизитов, при этом не переживая, что пользователь что-нибудь серьезно испортит…
Версия 2! Ввод новых элементов, редактируем даты, перечисления, справочники
05.02.09 — Теперь работает на подчиненных справочниках
29.03.12 — Добавлена возможность подбора элементов с помощью UCHOICE.ERT

Позволяет редактировать текстовые и числовые значения. Периодические значения читаются/записываются только на текущую дату. Есть простые фильтры (все/только неудаленные, по списку). Работает в любой конфигурации 7.7. Без ВК — только 1С и Ексель.

Тестировалась с 11-ой версией Excel-я (Office 2003), с другими версиями может «немного глючить» — сам не проверял.
Весь код, касающийся работы с Екселем подробно прокомментирован 🙂 — может служить неплохим пособием для изучения методов работы с Excel по OLE.

P.S. На больших справочниках скорость конечно не очень…

Версия 2
Новое во второй версии:
Появилась возможность добавления новых элементов — просто дописываем снизу таблицы.
Появилась возможность редактировать Перечисления с контролем правильности заполнения.
Появилась возможность редактировать реквизиты типа «Справочник», но с небольшими ограничениями: Справочник должен содержать только уникальные наименования элементов, не должен быть подчиненным и общее кол-во элементов не должно превышать 255 штук!
Появилась возможность проверки данных без их записи в базу данных.
Оптимизирована загрузка из Екселя — чем меньше измененных элементов — тем быстрее загружается.

99 Comments

  1. ediks

    При установленной галке «Без групп» вылетает ошибка:

    Если Запрос.Выполнить(ПостроитьТекстЗапроса())=0 тогда

    {J:1CGMSMSFOREF2XLS.ERT(168)}: Группировка СсылкаНаЭлементБез <<?>> групп;

    Запрос[11] : Переменная ‘СсылкаНаЭлементБез’ не опеределена

    Ошибка при формировании запроса к справочнику.

    Reply
  2. CheBurator

    +1 за «правильную» идею

    Reply
  3. Noy

    (1) Таки опечатался…. Уже обновил.

    (2) сенкс, а с реализацией есть серьезные недостатки?

    тов.Сhe Burashka отдельное спасибо — всегда оперативно смотрит новые разработки и комментирует.

    Reply
  4. mdzen

    весьма неплохо

    Reply
  5. europro

    очень хорошая идея

    Reply
  6. tigrus

    Если код элемента справочника начинался с «нуля» (пример: 0000087), то после корректировки какого либо его реквизита код становистся «без нулей» (пример: 87)

    Это НЕ ЕСТЬ ГУД…..

    Reply
  7. CheBurator

    (6) при выгрузке по оле надо выгружать не просто код типа спр.Код, а навроде

    «‘»+спр.код

    Reply
  8. v_clim

    А как с подчиненными справочниками быть?

    Reply
  9. sll

    а у меня вообще отказывается работать… «код не уникальный», и до свидания… это при том, что коды вообще никто не трогал :-\

    Reply
  10. Noy

    (6) Сенкс за выловленный баг. Уже исправил — если тип кода текстовый — то формат ячеек ставится текстовый.

    (7) лучше жестко устанавливать формат ячеек — надежнее.

    (8) Подчиненные справочники этой обработкой не обрабатываются

    (9) Попробуй свежую версию — возможно у тебя код текстовый (см. пост 6), если не получится — скинь мне excel файл — попробую посмотреть. fn()inbox.ru

    Reply
  11. Снп_1

    Очень не плохая обработка и я думаю будет очеь востребованной многими. Плюсую редко, но в данном случае явно «+»

    Reply
  12. ded00786

    Что ещё, кроме плюса, я могу добавить к сказанному?..

    Reply
  13. Noy

    (12) Спасибо, этого достаточно 🙂

    Reply
  14. malichenko.a

    Меня интересует, а есть такая же, только с загрузкой новых данных. Ато часто приходится корректировать данные с добавлением новых….

    Reply
  15. Noy

    (14) Полно! как на этом портале (например http://infostart.ru/projects/?rubric=76) так и в инете по поиску

    Reply
  16. vsevolod

    Спасибо, хорошая обработка, вот только поставила в тупик: при выгрузке справочника номенклатуры с атрибутами наименование и штрихкод выгружает все наименование и часть штрихкодов (в справочнике 1C все штрихкода присвоены все EAN13) почему то некоторые штрихкода не выгружает. Что может быть?

    Reply
  17. Noy

    (16) Скорее всего часть штрих-кодов находится в подчиненном справочнике (единицы измерения)

    Reply
  18. Oleg_nsk

    первый раз в жизни плюсанул! а ускорить обработачку нельзя?

    Reply
  19. vsevolod

    В продложение (16) : Нет, штрихкодов в подчиненных справочниках нет, все они одинаково созданы в карточке товара номенклатуры при первом поступлении на склад.

    Reply
  20. Noy

    (18) Основной тормоз — получение/запись данных через ОЛЕ в Ексель. На подходе вторая версия, с большим функционалом, большей скорость загрузки (загружаются только измененные элементы, а не все подряд), но меньшая скорость выгрузки.

    Ускорить можно, если выгружать/читать через АДО или используя скрипт+массив, ну или ВК (Йоксель например) — но слишком много переписывать.

    За плюс — спасибо!

    (19) Попробуй с диска ИТС универсальный отчет печати справочников — там сформируй отчет по своему справочнику и сравни с полученным из этой обработки. Я думаю что они будут идентичны. Просто мысль, что программа пропускает некоторые значения по своей прихоти — абсурдна 😉

    Reply
  21. Noy

    Обновил. Если что — сильно не пинайте! Но критика нужна!

    Reply
  22. GluckMaster

    Извините за вопрос чайника… а как загрузить обработку в конфигурацию… требует код?

    Reply
  23. Noy

    (22) Вы можете подключить в конфигурацию первую версию обработки. Вторую версию можете добавить в дополнительные возможности.

    Reply
  24. ruzelka

    Несомненно ПЛЮС)))))))

    Reply
  25. Noy

    (24) Спасибо. А то вон некоторые (22) уже в конфигурацию внедряют, а плюс поставить им лень!

    Reply
  26. kiselev

    Очень полезная вещь!

    Спасибо за идею!

    Обязательно буду внедрять!

    +1

    Reply
  27. senya_i

    Обработочка Просто СУПЕР!!!

    Очень сильно помогла!!

    Reply
  28. Andress

    Мега полезная вещь!

    Reply
  29. strah4

    Мегаидея. Но сколькож труда вложено 5+

    Reply
  30. Денис77

    Для 8.1 бы

    Reply
  31. Abadonna

    (30) Зачем Денису7.7 надо для 8.1? 😉

    Reply
  32. Денис77

    Мне для версии 8.1 надо. Я работаю в 8.1.

    Reply
  33. Noy

    (32) К сожалению я работаю в 7.7, 8.1 видел тока на картинках 🙂

    Но в принципе там ничего сложного — все ОЛЕ-команды в первой версии обработки прокомментированы в коде — можешь смотреть как пример и переписать на 8.1

    (31) 77 — это не версия, а скорее всего год выпуска 🙂

    Reply
  34. Nik_O

    Добрый день.

    Хорошая обработка и коментариев много. Спасибо.

    Есть вопрос. Как диаграммы в EXCEL добавлять из

    1С? Очень буду рад если поможите, а то инфы по

    этому вопросу найти не могу.

    Reply
  35. Noy

    (34) Диаграммы добавляются через объект Charts. Проще всего в любой книге Excel запустить макрос на запись, построить простейшую диаграмму, остановить макрос, а затем его просмотреть — там все достаточно просто. Значение констант (типа xlColumnClustered) можно посмотреть через View — Object Browser в Редакторе Visual Basic, методы (например SetSourceData) просто в справке.

    Удачи.

    Reply
  36. Burguin

    Если б я умел так программировать…

    Ной Вы супер!

    Reply
  37. Душелов

    (36) Если Вы не умеете программировать, то чего вы хотите? Есть пожелания — велкам в раздел «работе». оговариваем деньги и сроки, и нет проблем.

    Reply
  38. Burguin

    (37) =) ДЫк я учусь! и не понятно ваше «то чего вы хотите»?, я же на сказал что я вообще не умею… так что Вы, Дядько, ошиблись =)

    Reply
  39. Душелов

    (38) Признаю, был не прав, как говорится, «не в то окно» отправил 🙂

    Reply
  40. Burguin

    (39) =) Опа… 1с-ный умор…

    Прикольно! =) МОжешь в личку еще подобных фраз накидать ?? а я на курсах потом повыеживаюсь =)

    Reply
  41. oksiel

    Не работает выгрузка Перечисления. На строке «Ексель.Range(Область).Validation.Add(3,1,1,(«=»+ОбластьЗначений));» вылетает с ошибкой

    В «закрытой» версии то же самое.

    Перечисление было Булево Да/Нет

    Reply
  42. Noy

    (41) Это Excel «выеживается» — попробуй на другом компьютере запустить.

    Сам замечал тоже самое, причем как-то странно — сегодня есть, завтра нету…

    природу глюка так и не понял.

    Reply
  43. oksiel

    +(41) Excel 2003. Ставит 2007-й не собираюсь, т.к. привык к этому.

    И еще забыл, респект свой выразить.

    Долго искал что-то подобное, т.к. необходимо бывает выверить данные раздав их исполнителям и после внести в базу. Думал (если не найду

    Reply
  44. Noy

    (41) Спасибо, что опять поднял тему этого глюка — теперь на свежую голову нашел в чем дело.

    Все зависит от стиля ссылок, который устанавливается в параметрах (R1C1 ил A1,B1 и тд).

    Перезалил обновленную (и открытую) версию…

    Reply
  45. msadu

    Спасибо большое. Было бы супер если выгрузить всех справочников разом по листам Excel книги

    Reply
  46. Noy

    (45) Это уже будет какой-то «грабер» информации из базы 🙂

    Не представляю где и кому может такое понадобиться.

    Reply
  47. Euroset

    спасибо тебе умный человек!!! Очень поможет найчиться с экселём работать и еженедельные отчеты выгружать! Плюс тебе однозначно =)

    Reply
  48. cipis52

    очень миленькая обработка.Благодарю за остроумие Автора!

    Reply
  49. Noy

    (49) Судя по всему мою обработку ты даже не смотрел.

    Reply
  50. Noy

    (52) Просто именно так, как ты указал в (49) в моей обработке и реализовано — отдельная колонка для ЗначениеВСтроку(), а наименования используются как идентификатор только в перечислениях и справочниках типа «Валюта» для указания реквизитов справочника, который редактируется.

    Правда в примечание пихнуть не догадался — хотя и не сильно надо…

    Reply
  51. Ashwood

    При попытке выгрузки справочника Контрагенты вылетает ошибка:

    Если (нужныйСправочник.ОсновноеПредставление<>»ВВидеНаименования») тогда

    {…1CV77REF2XLS_V2_OPEN.ERT(259)}: Поле агрегатного объекта не обнаружено (ОсновноеПредставление)

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

    Reply
  52. Noy

    По первой ошибке — так сразу и не скажу — надо бы в отладчике покрутить (может там реквизит неопределенного вида).

    Да, обработка не работает с подчиненными справочниками, хотя там подправить недолго…

    Reply
  53. niceejik

    при выгрузке номенклатуры не выгружается цена…

    как сделать выгрузку с ценой ?

    Reply
  54. zaic

    57. не выгружается поскольку незачем, цены там правятся по другому.

    Reply
  55. niceejik

    а как выгрузить номенклатуру с ценой в эксель и обратно потом

    Reply
  56. Noy

    На скорую руку добавил вывод Владельца — можете редактировать цены.

    Reply
  57. ignio

    Класс!!

    Reply
  58. KingS

    Уже давно сказал + за хорошее исплонение, но вот представился случай непосредственно попробовать. Скажу так: мне очень понравилось!!! обработка работает стабильно с разными базами! Есть конечно некоторые минусы, но их можно решить и ручками. Автор молодец!

    Reply
  59. Andzhej

    норма

    Reply
  60. itiro

    отлично просто! плюс

    автору — еще бы добавить возможность корректировки цен

    Reply
  61. andreyshell

    Блин! Чертовски хочется все это под 8.1 !!!

    Reply
  62. Душелов

    (65) Берет код 7-ки и переписываете под 8-ку. Тем более автор прокомментировал всю работу с экзелем.

    Reply
  63. maximus-72

    Эта прога мне пригодится, я пользователь 1С 7,7,

    но дилетант. Прогу скачал, а как ее запустить чтоб работала?

    Сорри )))

    Reply
  64. Noy

    (67) В 1С меню Файл — Открыть — выбираешь скачанный файл…

    Reply
  65. subski

    ЗАМЕЧАТЕЛЬНАЯ ВЕСЧЬ, автору респект +

    Reply
  66. YooMax

    Супер! «+»

    Reply
  67. 1981ink

    Супер мульон плюсов, кто нибудь что нить подобное для 8 ки видел

    Reply
  68. ninny

    Обработка очень хорошая. Дурацкий вопрос.Как с помощью нее загнать базовую цену, если остатка на складе еще нет (для прайса).

    Reply
  69. NushaN

    Почему-то часто не видит изменений, г-рит, что данные в файле и справочнике идентичны :(, хотя реквизит полностью перезаполняется.

    Reply
  70. romanovkv

    А можно её доработать чтоб на 8-ке работала?

    Reply
  71. euro24

    Такая же ерунда как у NushaN:

    Почему-то часто не видит изменений, г-рит, что данные в файле и справочнике идентичны :(, хотя реквизит полностью перезаполняется.

    Reply
  72. Noy

    (75) , (73) Сбросьте мне два Excel-файла — до изменений и после — я попробую разобраться в чем дело.

    fn()inbox.ru

    Reply
  73. s_sid15

    Спасибо автору.

    Одна проблема. При загрузке кидает товар мимо папок групп. В чем причина?

    Пробовал и в 2003 и в 2007. Такая же история.

    Reply
  74. Noy

    (77) Если вы про «новый» товар — то так и должно быть. Раскидывать дальше нужно ручками.

    Обработка позиционируется как «редактор» а не «импорт» соответственно и функционал по импорту только базовый.

    Reply
  75. s_sid15

    (78) Спасибо.

    Жаль, что не раскидывает «новый» — это было бы вообще супер.

    Но даже в таком состоянии — это лучшее, что я нашел.

    Reply
  76. мх

    (76) Ну и как? Сбросили они вам? Разобрались?

    Я тоже заметил: вносил изменения во все элементы — но в одном из них изменение не фиксировалось. Справочник подчиненный (если это имеет какое-нибудь значение)

    Reply
  77. Noy

    (80) Нет, никто не откликнулся.

    Reply
  78. мх

    (81) Если снова столкнусь с таким эффектом — какие файлы вам выслать?

    1. До изменений (только что выгруженные данные)

    и

    2. После изменений (если изменения не определяются).

    Reply
  79. Noy

    (82) лучше оба. если не получится — то хотя бы ‘после изменений’

    Reply
  80. мх

    (83) Файлы отправил на указанный адрес.

    Почему-то вышли большие. Хотя всего по 15 строк, а письмецо получилось на 10 мб.

    Почтовый ящик выдержит?

    Reply
  81. Noy

    (84) Ящик выдержал 😉

    теперь о проблемах этой обработки:

    файлы получаются большие — потому что я использую предпоследние колонки и предпоследние строки для хранения служебной информации.

    проблема из (80) — глюк в коде обработки — последний элемент не записывается (точнее не анализируется).

    С целью ускорить сравнение реквизитов я использовал хитрую (как я тогда думал) конструкцию — в конец файла (предпоследние колонки) добавлял что-то типа контрольной суммы (простая функция СЦЕПИТЬ). В процессе загрузки обработка проверяет только равенство предпоследних колонок — если они равны — реквизиты элемента не проверяются.

    А на практике такая конструкция привела к тому, что если в редактируемом файле поменять структуру (достаточно добавить/удалить колонку), то предпоследние колонки «съезжают» со своих мест и обработка начинает работать неправильно. (так скорее всего и произошло в (73),(75)) .

    Исправить этот глюк можно просто:

    закомментировать строку 573

    Если ПолучитьЗначениеЯчейки(Ексель,х,254)=ПолучитьЗначениеЯчейки(Ексель,х,255) тогда Продолжить; КонецЕсли;

    тогда загрузка будет более медленная, но будут сверятся все элементы.

    Сорри, если эта недоработка принесла кому-нибудь серьезные неудобства.

    Reply
  82. мх

    (85) Спасибо.

    У меня, правда, номер строки немного другой — но не далеко от указанного.

    Теперь, кажись, порядок.

    Reply
  83. bandy

    Отличная обработка, честно отработала. Спасибо огромное. Плюсую с удовольствием.

    Reply
  84. 2stars

    Я сама не программист, но пытаюсь облегчить себе работу при помощи вашей обрабраки:-) Может подскажите выбивается ошибка при попытке загрузки, как ее исправить…….

    Если (ТекРеквизит.Тип=»Строка») или (ТекРеквизит.Тип=»Число») или (ТекРеквизит.Тип=»Дата») или (ТекРеквизит.Тип=»Перечисление») или (ТекРеквизит.Тип=»Справочник») тогда

    {C:DOCUMENTS AND SETTINGS1С ПРИМОЧКИREF2XLS_V2_OPEN.ERT(534)}:

    Буду очень признательна!:-)

    Reply
  85. 2stars

    и еще Поле агрегатного объекта не обнаружено (Тип)

    Reply
  86. 2stars

    😉

    Reply
  87. 2stars

    сама разобралась Все НО…… спасибо!!!!! 😳

    Reply
  88. alon

    Я знал, что такая обработка должна существовать, только найти не мог!

    Reply
  89. Noy

    (93) пожалуйта.

    приходите еще…

    Reply
  90. nnv30

    И у меня почему-то не видит изменение, тоже говорит, что данные в файле и справочнике идентичны , хотя реквизит полностью перезаполняется. Если разобрались с этой проблемой подскажите. Может быть потому что реквизит периодический?

    Reply
  91. Noy

    (95) колонки добавлял или удалял…

    смотри (85) — там описана такая ситуация

    Reply
  92. nnv30

    Я закоментировала эту строку, теперь не говорит что данные в файле и справочнике идентичны, но при загрузки не заменяет изменённый реквизит.

    Reply
  93. Noy

    (97) Периодические реквизиты менются на ТекущаяДата().

    Отчет о загрузке изменений в справочник показывает изменения? Тип значения реквизита какой?

    Reply
  94. nnv30

    нет не показывает, меняю счет затрат в основных средствах

    Reply
  95. Noy

    (99)

    Позволяет редактировать текстовые и числовые значения.



    Появилась возможность редактировать Перечисления с контролем правильности заполнения.

    Появилась возможность редактировать реквизиты типа «Справочник», но с небольшими ограничениями

    ….

    Данная обработка не редактирует такие типы значений. Для более комфортной работы не используйте режим «Не защищать лист (не рекомендуется)».

    В других режимах (с защитой листа) значения, которые обработка не обрабатывает, будут защищены от редактирования.

    Reply
  96. nurislam

    Нормальная и очень нужная штука

    Reply
  97. nll.jojo

    удобно очень, советую

    Reply
  98. egoel

    Ух ты какая шикарная штука!

    Reply
  99. alon

    Если у справочника есть реквизит типа справочник неопределенного вида, то выдает ошибку

    Если (нужныйСправочник.ОсновноеПредставление<>»ВВидеНаименования») тогда

    {REF2XLS_V2_OPEN.ERT(270)}: Поле агрегатного объекта не обнаружено (ОсновноеПредставление)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *