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




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

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

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

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