Правим справочники в 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 не будет опубликован. Обязательные поля помечены *