<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Вот это серьезный подход. Неужели еще и бесплатно?
В том виде, в котором она здесь или на сайте — программа бесплатная, если сами с ней разберётесь, то пользуйтесь, пожалуйста. Коды открыты, при необходимости всё можете доработать. Этой программе почти пять лет — проверена на множестве загрузок.
Отличная работа!
Спасибо!
Опять com, или через ADO?
Спасибо автору, полезная вещь, думаю многим пригодиться в архивчик себе записал. Зачет!
(5) Yashazz,
COM-OLE
программа старая, на тот момент когда её делал было популярно OLE. И ещё есть нюанс — подключаться к ADODB.Connection для Экселя разных версий, нужно с разных объектов — не совсем удобно (может, я что путаю, поправьте).
Вешь незаменимая можно даже 1с ником не быть) если она есть !
В чём отличие обеих моих программ — в том что «Универсальная загрузка из Эксель-таблиц» может загружать «Цены номенклатуры» с поиском только по Наименованиям товаров, а «Загрузка прайс-листов из Экселя» загружает тоже «Цены номенклатуры», но поиск производит по справочнику «Номенклатура» и регистру «Номенклатура контрагентов», при этом как по Наименованию так и по Полному наименованию, с разными комбинациями поиска.
Тема и сейчас актуальна. Тоже есть подобная работа. Но подключение к файлам иксел в 8.0 и 8.2 отличается. Зачет — пусть тема «иксел + 1с» продолжается.
пишет код и наименование пустое ? где искать
(11) alcazar1888,
Напишите, пожалуйста, полный текст сообщения…
Здравствуйте, существует ли возможность, с помощью Вашей обработки, создавать и заполнять приходный кассовый ордер от неавтоматизированной торговой точки, согласно данным ккм выведенным в эксель дата, сумма, номер отчета? И если существует, то Прошу связаться со мной. Спасибо.
Грамотно! Спасибо!
(13)pannamera,
поддерживаю. Быбо бы здорово привязать загрузку с неавтоматизированной торг. точки.
{Форма.Форма.Форма(61)}: Ошибка при вызове конструктора (COMОбъект)
ОбъектExcel= Новый COMОбъект(«Excel.Application»);
по причине:
Недопустимая строка с указанием класса
Вообще не получается предпринять никаких действий, подскажите в чем проблема?)
Спасибо!
(13) pannamara,
Программа может загружать только табличные части отдельных документов, сами документы списком она создавать не умеет.
Такой вариант, как правило, реализуется в не универсальных обработках — слишком много нюансов при создании каждого конкретного вида документа в каждой конкретной конфигурации.
(15) pannamara,
MS Excel какая версия?
корректно установлен? функциональность не ограничена лицензией?
ексель 2007 полностью рабочий
классная обработка лучше стандартной которая идет на дисках
не работает говорит несовместима версия
(21) alcazar1888,
Обработка сохранена под версией 1С:Предприятия 8.2.14.533, под более ранними версиями, в том числе 8.2.13 может не открываться, нужно один раз её открыть в Конфигураторе
полезная вещь
полезная вещь,нормуль
Спасибо! ))
Если бы могла создавать отдельные документы списком — то было бы то что надо.Хотелось бы ПКО на основе данных из ехеля — списком и датами.
{Форма.Форма.Форма(75)}: Поле объекта не обнаружено (Справочник1)
Док = Справочники.Справочник1.ПолучитьФормуСписка();
Т.е вообще не открывается БП 8.2. 2,0.25.5
(27) ulas,
Проверил все модули обработки, не могу найти в тексте такую строку, это в файле скаченом с этого сайта или с моего?
Спасибо, будем пользоваться.
если бы еще можно было писать запросы…
в общем, полезность подобных обработок я бы выразил для себя в следующих возможностях (такое миниТЗ на разработку желающим):
— таблицы произвольной структуры с приведением ссылок
— загрузка через ADO
— загрузка нескольких таблиц с возможностями писать к ним запросы тут же во встроенной (или открываемой) консоли запросов с выводом «запросного» результата
— возможность загружать данные из результирующие «запросной» таблицы в справочники, документы с той или иной степенью автоматизации
— возможность сохранять загруженные данные в файл (просто в виде тз)
На практике, во время эксельных миграций, часто бывает некоторое сборище xls-файлов, которые надо собрать воедино в некую общую структуру и, как минимум, протестить на всякие дубли, пропуски в данных, нарушения логической целостности и прочий мусор.
Как максимум, подобные собранные, перегруппированные и оттестированные данные как раз и заливаются в документы, справочники.
(31) romansun,
такие планы есть, работаем…
Возможно ли использовать данную обработку для синхронизации двух идентичных баз?
Спасибо !
Полезная штука, очень понравилась, буду юзать!
Автору зачет.
Побольше таких
Спасибо большое
(33) n949eo,
Нет, для синхронизации самая удобная вещь — это распределенная база.
возможно ли с помощью данной обработки грузить документы с табличной частью или она подходит только для загрузки справочников? Чем она отличается от стандартной обработки Загрузка табличного документа?
(36) Sirena,
Можно загружать табличные части, последняя версия для 8.2 позволяет загружать любую таблицу документа, ранние версии (для 8.1 и 8.0 с моего сайта) могли только таблицу Товары. Также можно зарегистрировать как внешнюю печатную форму и открывать из кнопки Печать в документе (для удобства).
Отличие от обработки с диска ИТС:
+ можно выбирать какие строки загружать,
+ настройки сохраняются в файл,
+ таблицу перед записью в базу можно отредактировать
— нельзя указать значение для подстановки, нужно создать дополнительную колонку и заранее её заполнить в экселе
— не работает с бух.счетами и субконто
(37) спасибо за такой подробный ответ, буду смотреть Вашу обработку!!!!
Спасибо!
Спасибо! Очень нужная и полезная вещь.
Отличная программа! Спасибо.
можно рассказать как закурзить 3 позиции цен в номенклатуру по порядку
(42) alcazar1888,
посмотрите здесь, этот вопрос обсуждался —Форум zronet.ru (загрузка цен)
а что значит — OLE был популярный?
какие объемы вообще грузились за раз, если через OLE?
(44) AlexO,
максимальный объём таблицы был около 60 тыс. строк — список контрагентов разбили на три таблицы, не позволяло ограничение в 64 тыс.строк, грузилось почти 7ч каждую таблицу.
посмотрите здесь, этот вопрос обсуждался —Форум zronet.ru (загрузка цен)
Спасибо за ссылку. очень вовремя.
Добрый день!
Есть задача загружать из Экселя картинки!
Сам реализовал эту задачу сахраняя файл экселя как веб файл и с появившейся папки беру картинки!
Как можно напрямую брать из экселя картинки? Если есть идея подскажи пожалуйста!?
Супер! Реально круто, мне очень помогла
Автору зачет и огромное спасибо.
Исправлена ошибка:
Ошибка при вызове метода контекста (СодержитТип)
возникающая при загрузке таблицы, если наименование одного из столбцов совпадало с именем реквизита загружаемого справочника, ошибка была только в версии от 18.10.2011г. в более ранних версиях её не было.
Кажется там не хватает строчки
Excel.Quit();
Или что-то в этом роде 🙂
(50) ron,
строка есть, но к сожалению срабатывает она только при благоприятном окончании загрузки, тогда процесс экселя закрывается. При неблагоприятном или остановке по ошибке процесс экселя остается подвешенным.
Благодарю, намного функциональнее той, что идет с ИТС
Спасибо! Полезная обработка.
хочу запустить в КА 1.1, выходит сообщение: «Программа не смогла определить принадлежность вашей конфигурации к типовым решениям «Фирмы 1С»
Хорошая обработка, да. Плюс однозначано.
Очень востребовано! Автору спасибо!
Спасибо! очень кстати!
Вещь стоящая
(54) Odini4ka13,
В конфигурации КА я не проверял, поэтому написал такое сообщение, но как мне говорили, её нужно указывать при открытии как Управление торговлей и всё будет работать, также с 1С:Розницей…
(59)
хорошо, я выбираю УТ программа выдаёт сообщение (см.рисунок)
настройки проверили всё нормально
Долго искал, но оно того стоило! ) Спасибо большое!
В УПП 1.3 (1С:Предприятие 8.2.13.219) при заполнении табличной части Планов (продаж, закупок, производства) в поле Номенклатура идёт заполнение по Номенклатурным группам. Можно ли сделать так, чтобы заполнение происходило именно по Номенклатуре, а не по НГ? В exel-файле список номенклатуры, но обработка пытается искать эти названия в номенклатурных группах. Если такой номенклатурной группы нет, то выдает ошибку. Если такое название встречается в НГ, то подставляется именно НГ а не элемент номенклатуры.
Для бухов и простых пользователей — самое то, но загрузка данных из табличного документа с ИТС для меня удобнее, т.к. в ней есть обработчики событий, что позволяет по произвольному алгоритму искать данные.
Не советую никому грузить большие объемы из excel — медленно
(62) t1313,
Мой договор с 1С не распространяется на УПП, когда писал обработку, то не рассчитывал на её совместную работу с УПП. В данный момент занимаюсь версией 2, поэтому с вер.1, кроме исправления ошибок никаких доработок делать не рассчитываю (не хватит сил заниматься текучкой и двумя программками), по этой причине она в открытом доступе и с открытым кодом.
(63) echo77,
Согласен )))
сам часто пользуюсь загрузкой данных из табличного документа с ИТС, хочу в вер.2 объединить лучшее из обеих программ…
Полезная штуковина
Пригодится, однозначно +
Для бухов и простых пользователей — самое то, но загрузка данных из табличного документа с ИТС для меня удобнее, т.к. в ней есть обработчики событий, что позволяет по произвольному алгоритму искать данные.
Не советую никому грузить большие объемы из excel — медленно
На один док работает аж бегом. Меня вполне устраивает!
При попытке загрузить данные из файла появляется сообщение:
»
Программа не смогла определить принадлежность вашей конфигурации к типовым решениям «Фирмы 1С»
»
Что делать?
Конфигурация 1С:Предприятие 8.2 (8.2.12.75)
В другую БД загрузилось и заработало всё.
Нужно заполнить документ «Установка цен номенклатуры».
Загружает инфу из файла ок.
Но при нажатии на кнопку «Сохранить (Загрузить таблизу в ИБ)» выдает сообщение «Не указано, по какой колонке производить поиск уже существующих позиций в справочнике.».
А как настроить?
Спасибо. Надо попробовать загрузить прайс и номенклатуру от поставщиков…. надеюсь справлюсь
(70) nae,
Для этого лучше использовать вторую обработку, загрузку прайс-листов, она и цены контрагентов сделает и номенклатуру контрагентов приведет в соответствие с экселем
Для этого лучше использовать вторую обработку, загрузку прайс-листов, она и цены контрагентов сделает и номенклатуру контрагентов приведет в соответствие с экселем
А мне нужно вбить в базу розничную цену, что б работал 42 счет корректно.
Номенклатуру надо оставить в соответствии с БД а не екселем.
Дошло до меня как выбирать отбор по колонке, но при выборе «Товары:Номенклатура:Наименование(Поиск)» и нажатии на кнопку «Сохранить», появляется сообщение «Значение не является значением объектного типа (Родитель)».
Что не так делаю?
(72) <Aleks>,
если работаете в Управлении торговлей, для «розничного» склада нужно работать с Переоценкой товаров в рознице
(72) <Aleks>,
если работаете в Управлении торговлей, для «розничного» склада нужно работать с Переоценкой товаров в рознице
[+] [−]
Нет, работаю Бухгалтерия предприятия, редакция 2.0 (2.0.18.1)
Прежде чем переоценивать, нужно оценить, вроде как…
Объясните по поводу ошибки, очень надо…
(75) <Aleks>,
по-поводу ошибки:
«Не указано, по какой колонке производить поиск уже существующих позиций в справочнике.»
при указании соответствия полей 1С — колонкам экселя для одной из колонок нужно выбрать по какому полю искать существующие позиции, например, если товары ищете по Наименованию то нужно из списка выбрать «Наименование (поиск)», тогда колонка окрасится в жёлтый цвет и будет считаться ведущей…
при указании соответствия полей 1С — колонкам экселя для одной из колонок нужно выбрать по какому полю искать существующие позиции, например, если товары ищете по Наименованию то нужно из списка выбрать «Наименование (поиск)», тогда колонка окрасится в жёлтый цвет и будет считаться ведущей…
Уже выше писал:
»
при выборе «Товары:Номенклатура:Наименование(Поиск)» и нажатии на кнопку «Сохранить», появляется сообщение «Значение не является значением объектного типа (Родитель)».
«
(77) <Aleks>,
скрин ошибки можно посмотреть?
Люди!!!! Подскажите бухгалтеру: почти разобрался, но не получается иерархия….. На БП 8.2 ред2.0 хочу загрузить справочник Номенклатура/Товары/Автомат/ (наименование поставщика) У меня все валится в корень Номенклатуры.
КодГр Код Наименование
$ZRONET$-> $ZRONET$->00000000001 Товары
$ZRONET$->00000000001 $ZRONET$->00000000057 Автомат
$ZRONET$->00000000001/00000000057 $ZRONET$->00000000058 BPW
$ZRONET$->00000000001/00000000057/00000000058 $ZRONET$->00000000059 SEGMENT-PLüAK.150 HOHL
$ZRONET$->00000000001/00000000057/00000000058 $ZRONET$->00000000060 ANLENKUNG 433 401 003 0 150
$ZRONET$->00000000001/00000000057/00000000058 $ZRONET$->00000000061 ANLENKUNG (VERTIKAL) 612025001
$ZRONET$->00000000001/00000000057/00000000058 $ZRONET$->00000000062 ABSPERRHAHN 452 002 132 0 077
Вот кусок эксел файла. Что делаю не так???!?!?!
Тема, которая всегда актуальна! Конфигурации меняются, а выгрузки из Excel по-прежнему актуальны! Автору респект!
Спасибо !
Полезная штука, очень понравилась, буду юзать!
Автору зачет.
Побольше таких
Спасибо большое
Абсолютная солидарность. Очень нужно и очень вовремя! Респект.
Подскажите как запустить обработку в КА 1.1, выдает сообщение Программа не смогла определить принадлежность вашей конфигурации к типовым решениям «Фирмы 1С»
А в УТ ред 11 будет работать? Требуется загрузить справочник номенклатуры в котором одному значению товара соответствует несколько значений штрихкода!!!
(83) mirkomp,
Нет, в Управляемых формах не работает
Спасибо! В тему.
Очень удачная обработочка, мои потребности почти полностью покрывает..
PS Допилю… )
В УПП 1.3 (1С:Предприятие 8.2.13.219) при зaполнении табличной чaсти Планов (продаж, закупок, производства) в поле Номенклатура идёт заполнение по Номенклатурным группам. Можно ли сделать так, чтобы заполнение происходило именно по Номенклатуре, а не по НГ? В exel-файле список номенклатуры, но обработка пытается искать эти названия в номенклатурных группах. Если такой номенклатурной группы нет то выдаeт ошибку. Если тaкое назвaние встречается в НГ, то подставляется именно НГ a не элемент номенклатуры
Спасибо !
Полезная штука, очень понравилась, буду юзать!
Автору зачет.
Побольше таких
Спасибо большое
{ВнешняяОбработка.ЗагрузкаExcel.МодульОбъекта(2499)}: Значение не является значением объектного типа (Родитель)
ИмяТабличнойЧастиДокумента=СокрЛП(глоСоответствиеКолонок.Найти(ТаблицаЗагрузки.Колонки[2].Имя,»Фаил»).Реквизит.Родитель().Имя); // получим имя загружаемой табличной части документа по 3-ему столбцу
Вопрос Выше задавали , но ответа не последовало, подскажите что не так.
конфигурация УТ 10.3 (10.3.17.4) 1С:Предприятие 8.2 (8.2.15.294)
Пришлите мне, пожалуйста, загружаемую таблицу по адресу sup@zronet.ru, и опишите какие настройки при загрузке делаете (объект загрузки, настройки полей)
Здравствуйте, существует ли возможность, с помощью Вашей обработки, создавать и заполнять оприходование ордер от товаров в УТ, ? И если существует, то Прошу связаться со мной. Спасибо.
Уперся в предупреждение «Не указано, по какой колонке производить поиск уже существующих позиций в справочнике»
Дальше, хоть кол на голове обработки чеши. — НЕ РАБОТАЕТ! Ну не надо мне производить поиск уже существующих позиций, мне надо чтобы просто лепила строки в справочник!!!!!
Обработка помогла. Спасибо автору, но она не смотрится как решение, доведенное до совершенства.
Реально долго ждал а самому лень! спасибо огромное! Есть номер кошелька для спасибо!)))
Но помоему под Розницу не подойдет! а почему никто не хочет сделать что то для Розницы? или на сегодня конфа в которой каждый день прибавляется более 150 наименований и позиций товаров не актуальна?
Подскажите, точно работает под Розницей?
(90) у меня выскочило такое же сообщение при попытке загрузить товары в документ Поступление товаров и услуг
{ВнешняяОбработка.ЗагрузкаExcel.МодульОбъекта(2499)}: Значение не является значением объектного типа (Родитель)
ИмяТабличнойЧастиДокумента=СокрЛП(глоСоответствиеКолонок.Найти(ТаблицаЗагрузки.Колонки[2].Имя,»Фаил»).Реквизит.Родитель().Имя); // получим имя загружаемой табличной части документа по 3-ему столбцу
в 8.1 работаю с этой обработкой уже 2,5 года, файл такой же, из которого гружу в 8.1
платформа 8.2.14.540
проверила, с документом Реализиция товаров и услуг — такая же беда
это очень неожиданно)
(90) отловила еще такой момент — ошибка появляется, если поиск Номенклатуры по артикулу или наименованию, а если по коду, то грузит нормально
но вопрос в том, что синхронизация с поставщиком по артикулу и между другими базами тоже,
ну или хотя бы по наименованию…
заранее спасибо!
(90) если взять версию для 8.1, с которой я работаю, и конвертировать в 8.2 и попробовать загрузить в док поступление товаров и услуг, то когда в колонке жмешь Товары: Номенклатура, не появляется окно с выбором, по чему искать (по коду, артикулу, наименованию), а появляется ошибка Не указано, по какой колонке производить поиск уже существующих позиций в справочнике.
то есть, ни старая не хочет в 8.2 работать, ни новая
(99) как выяснилось, по коду тоже не грузит
методом научного тыка обнаружила, что ошибка появляется, если колонка, по которой выставляешь Поиск — не первая!
сделала артикул первой колонкой — загрузилось
и по наименованию тоже!
Ура!
но все-таки интересно, почему так:) раньше можно было грузить с любого направления