Импорт справочников из MS Excel




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

91 Comments

  1. cs25

    Нужная штуковина. +1 или +10 !!!

    Reply ↓
  2. tujhjd

    Спасибо опробуем.

    Reply ↓
  3. usa

    Очень интересно… 5 с плюсом

    Reply ↓
  4. PowerBoy

    По многочисленным просьбам убрал пароль на модуль обработки.

    Reply ↓
  5. programmist

    Доброго времени суток!

    Пытаемся с помощью Вашей обработки Импорт справочников из MS Excel (http://infostart.ru/projects/760/) загрузить справочник Номенклатура в конфигурацию Элит: Строительство. Бухгалтерский учет.

    Создаем лист с наименованием Номенклатура и 3 строки в таблице:

    Код Наименование Родитель ЭтоГруппа

    00000000014 Просто так Истина

    00000000015 Валик ВМ 250 /МЕХ 00000000014

    Все поля в таблице типа Текст. При импорте данных в конфигурации не создается группа с кодом 00000000014, а создается просто элемент.

    В чем может быть проблема?

    Reply ↓
  6. PowerBoy

    Поле ЭтоГруппа должно быть общим, иначе значение ИСТИНА будет восприниматься как текст

    Reply ↓
  7. PowerBoy

    (6)В смысле формат этого поля должен быть типа «Общий»

    Reply ↓
  8. programmist

    Спасибо за ответ, но ничего не получается…

    Выкладываю файл и обработку с помощью которой пытаюсь загрузиться:

    http://astoma.fatal.ru/zagrdan.zip

    Платформа 8.0.18.2

    Конфигурация Бухгалтерский учет 1.5.20.2

    Конфигурация Элит: Строительство. Бухгалтерский учет 2.0.8.1

    Посмотрите, пожалуйста. Буду очень благодарен.

    Спасибо.

    Reply ↓
  9. PowerBoy

    Конечно простая смена формата не поможет — так эксель устроен.

    Делаешь так:

    1.Выделяешь столбец ЭтоГруппа

    2.В меню запускаешь Данные — Текст по столбцам — Готово.

    Увидишь, что значения Истина в столбце преобразовались в ИСТИНА.

    Да а где плюс за разработку и помощь?

    Reply ↓
  10. programmist

    Спасибо. Помогло. Плюсиками отблагодарил :).

    Reply ↓
  11. Drawde

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

    Код Наименование Родитель ЭтоГруппа

    00000000001 Товары ИСТИНА

    00000000013 Grohe 00000000001 ИСТИНА

    00000000088 Grohe 22951 ООМ кран Цанга 00000000013

    Reply ↓
  12. PowerBoy

    Да.

    Имя столбца в экселе: БазоваяЕдиницаИзмерения/КлассификаторЕдиницИзмерения

    Данные в столбце код из КлассификаторЕдиницИзмерения.

    Reply ↓
  13. Drawde

    Все получилось спасибо огромное!!!!

    Прошу прощения за глупые вопросы, я пока только учусь 🙂

    А возможно ли помимо всего прочего также импортировать цены закупки и цены продажи?

    Reply ↓
  14. terek

    подскажите, как вообще использовать эту обработку? Где ее запускать или откуда? Я хочу из Excell занести данные в справочник Номенклатура. Буду очень признателен, если растолкуете в самом подробном формате, каким образом обработку запускать.Заранее благодарен

    Reply ↓
  15. PowerBoy

    (14) Обработка запускается как и все внешние обработки через меню Файл — Открыть.

    Структуру Excel файла смотри в описании обработки.

    Reply ↓
  16. PowerBoy

    С Новым годом всех!!! Вроде не много и пил. :)))

    Reply ↓
  17. Drawde

    А возможно ли помимо всего прочего также импортировать цены закупки и цены продажи?

    Reply ↓
  18. PowerBoy

    установка цен в бухгалтерии это документы,

    да и хранятся они (цены) в регистрах сведениях.

    так что данная обработка для этого не подойдет.

    Reply ↓
  19. adk

    Приветствую!

    Очень полезная вещь.Спасибо

    Reply ↓
  20. elsifer

    а как можно запустить под 8.1?

    Reply ↓
  21. PowerBoy

    (22) Добавил версию для 8.1

    Reply ↓
  22. Ygich

    сюда бы еще работу с регистрами сведений. чтоб и адреса и цены и все все загружал… ладно сам не безрукий допишу пару процедурок )))

    Reply ↓
  23. PowerBoy

    (24)(19)(…)

    Всем кто спрашивал выложил загрузку документов их MS Excel

    http://infostart.ru/projects/1920/

    Reply ↓
  24. MarioLast

    Как сделать, чтобы адреса, ценыф и Елект.адрес тоже загружал? Помогите разобраться

    Reply ↓
  25. PowerBoy

    (26)Куда загружал?

    Reply ↓
  26. MarioLast

    В Контрагенты чтобы загружал. Там есть подчиненные справочники, в них вводится контактная информация о контрагенте, мыло, адрес, и т.п. Вот у меня в екселе эти данные есть, и вручную для каждого клиента вводить…очень долго. Можно это автоматизировать?

    Reply ↓
  27. PowerBoy

    (28)Адреса, мыло и т.д. находятся в рег.сведений, т.е. этой обработкой такие данные не загрузить.

    Reply ↓
  28. poppy

    (28, 24, 19)

    Для загрузки данных из Иксела в табличные части документов, регистры сведений и справочники имеется обработка ЗагрузкаДанныхИзТабличногоДокумента.epf на диске ИТС. Как для платформы 8.0, так и для 8.1.

    Reply ↓
  29. mrnovel

    Товарищи бойцы, а где можно посмотреть пример эксель-листа для загрузки номенклатуры в 8.1 УТ? Спасибо!

    Reply ↓
  30. Dalion

    Штрих коды можно грузить? Если да, то хотел бы с Вами пообщаться, скиньте Ваши координаты.

    Reply ↓
  31. PowerBoy

    (32) Никогда не грузил.

    Reply ↓
  32. alex_ub

    Как можно импортировать в 1с 8,1 УТ 10,3,3,3 в справочник Номенклатура из экселя наименование, ед. изм. , цена, ШТРИХКОД

    Reply ↓
  33. alex_ub

    выложите пожалуйста примерный файл экселя чтобы загружался ШТРИХКОД, наименование, цена, ед.изм номенклатуры

    Reply ↓
  34. helganovak

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

    Reply ↓
  35. msadu

    Спасибо, очень нужная штука. Вроде работает. Вот только как быть Регистрами..

    Reply ↓
  36. miroslaw

    Спасибо за программу. Для начального заполнения, и дополнения справочников само то. Попробовал, понравилось. Не всё получилось, подскажите пожалуйста как назвать столбцы чтобы загружались Тип номенклатуры-товар и ставка НДС-18% и какие значения писать. Перепробовал много вариантов… не получается.

    Reply ↓
  37. PowerBoy

    (38) У перечислений берется его синоним, у НДС-18% — будет просто «18%». (без ковычек конечно)

    Reply ↓
  38. miroslaw

    (39) я ставлю название столбца ВидыНоменклатуры/ТипНоменклатуры

    а в ячейках пишу «Товар» или «1» не получается…

    В чём ошибка?

    Reply ↓
  39. PowerBoy

    (40) «/ТипНоменклатуры» — можно не писать. Если ВидыНоменклатуры справочник — то в ячейках ставиться код товара. Если перечисление — то его синоним.

    Reply ↓
  40. ron1

    Очень нужная обработка.

    Reply ↓
  41. Kuznetsova

    замечательно. это то,что было мне нужно!

    Reply ↓
  42. _ddv

    Поскажите как прописать поле Полное Наименование в Excel

    Reply ↓
  43. PowerBoy

    (44) ПолноеНаименование — это функция. В Excel надо задать колонку Родитель.

    Reply ↓
  44. NRMT

    Спасибо огромное ! Импортировал успешно банки, контрагенты. Не получается Номенклатура с ед. изм.

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

    http://webfile.ru/3325438

    Вот ссылка на образец Контрагентов.

    http://webfile.ru/3325469

    Reply ↓
  45. PowerBoy

    (46) Не уникальны коды номенклатуры, ед.изм. заполнены не везде.

    Reply ↓
  46. NRMT

    (47) Спасибо ! Все получилось.

    Reply ↓
  47. v.l.

    А как заполнить цену товара? Каким методом? Конфигурация УТ

    Reply ↓
  48. lara52

    Спасибо, все получилось

    Reply ↓
  49. oskar

    Класная вешь

    Reply ↓
  50. паук

    извините, если туплю. импортировал успешно контрагентов и договоры контрагентов (пока не полностью. свойства не знаю как заполнить). а как сделать, чтобы в таблице контрагенты / [выбранный контрагент] / счета и договоры / договоры контрагентов появился список договоров? это не табличная часть. конфигуратор говорит, что это СправочникСписок.ДоговорыКонтрагентов

    Reply ↓
  51. паук

    все, поставило.

    Reply ↓
  52. паук

    спасибо за прогу.

    Reply ↓
  53. паук

    а как, все-таки у справочника «договоры контрагентов» заполнить таблицу «свойства»?

    Reply ↓
  54. паук

    все, опять нашел 🙂

    Reply ↓
  55. Nicolau

    ШтрихКоды не грузятся! Не получается у меня!Помогите!

    Reply ↓
  56. ron1

    А можно с помощью этой обработки заполнить курсами за полгода справочник Валюты?

    Reply ↓
  57. MoroZ-z-zOFF

    Хочу заметить что если коды уникальны только в пределах подчинения родителю то корректно заполнить иерархический справочник из Exel не получится. Значения с одинаковыми кодами заменяются без проверки родителя.

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

    Reply ↓
  58. dima_infostar

    извините, но я нифига не сумел =(

    Reply ↓
  59. svoma

    Здравствуйте утилита очень полезная спасибо, я в принципе разобрался с основными полями номенклатуры.

    Но вопрос?

    Как забивать Штрих коды, у нас огромный список товаров с присвоенными штрих кодами, поэтому смысл в импорте, только если со штрих кодами.

    Я в 1с управление торговлей полный чайник, если бы вы разместили файл примера в XLS, я бы поспал пару ночей)

    Заранее спасибо!

    P.S.

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

    http://prognow.ru/video/read_data_from_excel5_part.swf

    http://prognow.ru/video/file_open.swf

    http://prognow.ru/video/read_data_from_excel5_part.swf

    Reply ↓
  60. PowerBoy

    (61) Никогда не сталкивался с штрих кодами, ни с торговлей — у меня бухгалтерия :(.

    Reply ↓
  61. SpyDeR2009

    10 +

    Reply ↓
  62. Yurii463070

    Только у меня такой косяк, что в строке 425 Модуля Объекта не находит поле объекта ?

    Reply ↓
  63. PowerBoy

    (64) Имя справочника проверьте.

    Reply ↓
  64. floraukraine

    У меня вообще нихрена не пашел, говорит что не может инициализировать Ексель

    Reply ↓
  65. Kulak

    переносит только наименование. как перенести остальное? может есть какой нибудь пример. Заранее благодарен

    Reply ↓
  66. Kulak

    с полным наименованием вроде разобрался. Интересует вопрос можно ли заполнить ЕдиницаХраненияОстатков. Почему то не получается пока не заполнена вкладка «Еденицы» Базовая — шт. ЕдиницаХраненияОстатков — кор

    штук в коробке может быть разное количество

    Reply ↓
  67. ddk78ddk

    Огромная благодарность автору — очень помогло, учитывая, что запускаться надо было срочно, а времени на изучения 8-ки не было.

    Тем, у кого надо импортировать реквизит типа справочника — Обратите внимание на строку 459 — ошибочная передача наименования справочник — из за этого невозможно создать объект в функции ПолучитьСсылкуНаСправочник

    Reply ↓
  68. gnomm

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

    Заранее спасибо

    Reply ↓
  69. 01011000001

    Добрый день!

    файл перестал работать в связи с обновлением 8.1 на 8.2…

    подскажите, пожалуйста, может быть где-то можно взять новую обработку подобного рода?

    Reply ↓
  70. Coolwinder

    Обработка замечательная, почти во всем разобрался… Кроме того, как заполнить свойства номенклатуры. Кто нить помогите плиз. Как должна выглядеть структура в этом случае?

    Reply ↓
  71. Coolwinder
    паук пишет:

    все, опять нашел

    Объясни как?

    Reply ↓
  72. pav.79

    У меня 1.77 внешняя обработка имеет расширение *.ert, а твоя *.epf? Как мне ее запустить и приступить к дальнейшему изучению.???? :))))

    Reply ↓
  73. pav.79

    *.epf являются внешней обработкой 8.0, *.ert — обработка 7.7 я правильно понял???? Если моё утверждение верно, то есть ли аналогичная обработка для 7.7?????

    Reply ↓
  74. Altair777

    (75) кому адресованы вопросы?

    по поводу первого вопроса. Если Вы не знаете «ert» — обработка 7.7, то бессмыслено давать ответ на второй.

    Reply ↓
  75. pav.79

    Я все понял, прочитал мат часть. И все получилось, обработка хорошая, но мне не пригодилась. Моя конфигурация все может и умеет сама 😀

    Reply ↓
  76. Archimedes

    Здравствуйте, Уважаемый!

    Спасибо за проделанную работу! но…

    Данные из столбца «Полное наименование» не импортируются (из столбца «ПолноеНаименование» тоже).

    Данные из столбца «Группа контрагентов» не импортируются.

    Данные из столбца «Код по ОКПО» не импортируются.

    А вот «ИНН» и «КПП» нормальное импортировались.

    Модуль не «любит» названия полей с пробелами?

    Reply ↓
  77. PowerBoy

    (71) Добавил версию для 8.2

    Reply ↓
  78. MAX3000

    Спасибо. Не плохая штуковина.

    Reply ↓
  79. anna_black

    Спасибо. Нужная обработка. Отдельное спасибо за уточняющие комментарии автора.

    Reply ↓
  80. m0lekula

    Отлично! Спасибо, нужненько! 🙂

    Reply ↓
  81. serrj_dream

    очень нужная штука спасибочки

    Reply ↓
  82. serrj_dream

    кому нужно пример с иерархией ловите для версии 8.1

    Reply ↓
  83. maxply

    Нормальненко.

    Reply ↓
  84. ninos89

    спасибо огромное! незаменимая вещь при работе с иерархией

    Reply ↓
  85. voyger_men

    Урааа, столько времени сэкономлю, спасибо большое что выкладываете свои труды!

    Reply ↓
  86. bu1

    Александр здравствуйте, хотел бы проконсультироваться, загружаю контрагентов, возник вопрос при загрузки банковский счет и договор, каким образом указать Excel файле название колонки. Помогите пжт разобраться. Прикрепленный файл является уже начитой заготовкой по загрузке данных. Конифгурация: Бухгалтерия 2.0

    Reply ↓
  87. andikad

    Спасибо, нужная обработка !

    Reply ↓
  88. alean

    Судя по интересу проблема загружать данные из Экселя по-прежнему очень актуальна.

    Хотелось бы в описании увидеть каким методом обработка читает данные

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

    Reply ↓
  89. N_aix

    Нужная штуковина. Спасибо.

    Reply ↓
  90. Sasha255n

    Автору данной обработки однозначно +++++ очень пригодилась и выручила.

    Reply ↓
  91. Asmir

    Для работы и закачки данных очень нужный отчет!

    Reply ↓

Leave a Comment

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