<?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='\
Впечатляет работа с таблицей. Сделано мастерски. Только не до конца понятны механизмы переноса, например, по какому полю идет синхронизация? По коду или наименованию, а если в спровочнике вообще нет кода и наименования (ТИС: Спровочник.Цены )
Как переносится история элементов?
Есть ли возможность рекурсивного переноса всех связанных объектов?
Синхронизация идет по полю с таким знаком (!).
Два щелчка по другому реквизиту сменит реквизит синхронизации.
Да добавлю что полем синхронизии может быть код, наименование или реквизит с установленным признаком сортировки.
Переносится вся история в пределах периода + значение на начало периода.
Какие связанные объекты? Если подчиненные справочники, тогда конечно.
>Какие связанные объекты? Если подчиненные справочники, тогда конечно.
Да, подчиненные элементы, например, цены товара из ТиС
Например, значения реквизитов это тоже элементы справочников или документов.
Достаточно интересная разработка (и актуальная!), но до Rocket Launcher’а ей еще как до Китая ползком! А как быть с остальными объектами метаданных (Перечисления, Виды Субконто, Планы Счетов и т.д.)? Интерфейс разработки достаточно хороший и простой, но надо смотреть на вещи в более глобальном контексте.
imsoftware, а ты попробуй и посмотри.
Как это в глобальном масштабе? Как соотнесется сия обработка и движение планет?
Обновлено
Вообще-то нужно сообщать о мнении хотя-бы или ошибки!
97% закачки и ступор.
Пытаюсь скачать тоже 97% и стоп
Надо просто сохранять на диск , а не качалками . Тогда сохраняет.
надо попросить автора заново залить этот файл, действительно плохо качается
Скинул. Может чё с серваком?
Что значит «По ссылкам» и что задаёт Период.
Вообще было бы не плохо хоть маленькое описание работы прилепить.
По ссылкам означает что если есть в объекте, который вы решили загружать , реквизит типа справочник или документ то этот объект будет загружен.
P.S. обработка не предназначена для использования простыми пользователями, надо знать хоть какие-то «основы» програмирования, без их знаний она бесполезна и даже опасна.
Исправил перенос пустого значения даты.
Сталкнулся с таким фактом при подключении через ОЛЕ значения типа число иногда передаются не правильно. Пример иногда значение 2.00, передаётся 1.999999.
Тэнкс
Очень удобная обработка… Ничего лишнего… Спасибо!
Вещь конечно удобная!
НУ есть вопросы:
1. Если в спровочниках один и тот же код но разные наименования, обработка перезатрет?
2. Два документа под 1 номеров, что будет в этом случае?
3. Как работать с программой если такая ситуация есть, две бухгалтерии одинаковые но нужно перикидовать с одной (реализацию, поступление, кассу) в другую где так же может быть (реализацию, поступление, кассу)
Вещь конечно удобная!
НУ есть вопросы:
1. Если в спровочниках один и тот же код но разные наименования, обработка перезатрет?
После проверки справочники с одним и тем же кодом (наименование изменилось, а значит данные перезатерлись)
2. Два документа под 1 номеров, что будет в этом случае?
таже сама ситуация
3. Как работать с программой если такая ситуация есть, две бухгалтерии одинаковые но нужно перикидовать с одной (реализацию, поступление, кассу) в другую где так же может быть (реализацию, поступление, кассу)
Видно нужно добавлять префикс к документам, сравнение не по наименованию а по коду 🙁
1) Значок (!) в идентификаторе реквизита справочника означает, что поиск будет вестись по этому реквизиту. Таким реквизитом может быть код, наименование или реквизит с установленным признаком «сортировка».
2) Два документа с одним номером и в одном периоде нумерации? Конечно перезапишется, для того и создана.
3) Нужно установить разные префиксы в нумерацию документов у каждой базы.
Спасибо
Ща… тестону, как раз вовремя попалась под руки, а то клиент мну дибает, а мне такой влом писать біло, как вспомню скоко там всего аж плохо делается! Рес+1
Что-то в расходных накладных негрузиться парития
Sinaps Какая конфигурация?
В настройках переноса для реквизита расходной наклодной «партия» стоит пометка загружать?
Как сделать что-бы 7ка не задавала вопрос о смене даты или ответить «Esc» и закрыть открытое OLE окно?
Типовая ТиС.
Требуется перетащить/синхронизировать между родственными базами Номенклатуру (код, наименование, полное наименование) и базовую единицу измерения. Вопрос: как синхронизировать между базами Спр.Единицы причем условием синхронизации должна быть пара «ОКЕИ+ШК»
???
В ТиС у каждой еденицы номенклатуры вроде как должна быть только одна единица для каждого ОКЕЙ, и неё может быть или не быть ШК, т.ч. условие остается одно. В описании есть заготовка для «расширенного отбора».
Товарищ Сержант, разрешите обратиться?
Из бюджетной конфы (релиз 609, свернута и сжата (удалены неиспользуемые элементы толстых справочников и пожата база) на начало года) переношу в пустую авансовые отчеты (ВСЕ) за неделю (всего 10 штук). Остальное все по ссылкам. Перенеслось все корректно (10 ав. отчетов, с десяток элементов в нескольких справочниках), НО ВРЕМЯ РАБОТЫ 1,5 ЧАСА (ОБРАБОТАНО/ЗАГРУЖЕНО 9217 ССЫЛОК)!!!! Для 10 документов и десятка элементов в нескольких справочниках? Что за бред? Можно ли как-нибудь ускорить сие мероприятие оптимизацией кода (сам лезть не хочу)?
Машина Atlon 2000+, 256Mb опертивки.
_toro_ спасибо за сообщение. Я решил проверить информацию и нашел у себя ошибку: не обрабатывались значения типа «ВидСубконто» (используется в справочнике «Журналы»), исправил.
Создал пустую базу 6ой бюджетки и заполнил её из демоконфигурации, вот результаты.
Все операции с 07.04.2007 21:39:00 завершены в 21:58:15 07.04.2007
Обработано объектов: 15980
Изменено элементов справочников: 15667
Изменено документов: 96
Проведено документов: 70
Не удалось првести документов: 13
Intel 1500M, 512mb.
_toro_ Если надо загрузить только авансовые отчеты то надо только для них поставить «загружать все», все остальные объекты должны загружатся «по ссылке».
2 Serjant
> Если надо загрузить только авансовые отчеты то надо только для них поставить «загружать все», все остальные объекты должны загружатся «по ссылке».
Дык я так и делал :).
Сейчас затетстим еще раз.
Ну, скорость работы не изменилась. Но сейчас действительно все корректно перенеслось.
http://infostart.ru/projects/874/?ref=8252 справляются с той же задачей практически мгновенно. Но в таких алгоритмах есть один нюанс. Если реквизит Справочника1 ссылается на Справочник2, а реквизит Справочника2 ссылается на Справочник1, тогда такие алгоритмы, теоретически, должны упасть в бесконечный цикл. Я так понимаю, в этой обработке использован принципиально иной алгоритм. Для корректной ли отработки данной ситуации в ущерб времени работы?
Хочется понять, почему все-таки так долго.
Объясни, pls, суть алгоритма работы этой обработки.
Подобные обработки, построенные на рекурсивном вызове процедуры переноса агрегатного объекта (рекурсия-рекурсия…рекурсия, пока не дойдем до атомарного объекта (строка, число, дата)), как, например, эта
Всё просто, если мы загружаем реквизит по ссылке тогда заполняются: уникальный идентификатор, владелец, родитель. Все остальные реквизиты заполняются после загрузки основного объекта.
Чуть ускорил, пока больше возможностей не вижу.
Изменил отбор документов для загрузки.
+
+1
Спасибо. Всех с праздниками!
Не загружает!
При открытии файла произошла ошибка : C:Program Files1Cv77Зарплата 2008PRBasicfiltr1.txt was not found.
.РазмерБуфера();zC43F675574AE.ОткрытьФайл(КаталогПользователя()+»filtr1.txt»,0);z6F0F93E9E0AD=»»;zC43F675574AE
{F:1С ОБРАБОТКИ1С ВЫГРУЗКА-ЗАГРУЗКА ДОКУМЕНТОВPERENOSOLE&MLG.ERT(541)}: Ошибка при выполнении метода объекта компоненты C:Program Files1Cv77Зарплата 2008PRBasicv7plus.dll
А файл КаталогИБ()SYSLOG1cv7.mlg есть?
Документы переносит,но при условии что отказываешься от переноса справочников.При этом тащит пустые.Мне очень понравилось,но если бы вы решили эту проблему,тогда 100+++
Какую ошибку выдала программа при переносе? Что такое пустой документ, он помечен на удаление? Сейчас переносится база, но там я переношу только документы, а справочники только по ссылке. Вечерком попробую со справочниками, пока у меня зависимости переноса документов от переноса справочников не было.
Согласен с gif(43 сообщение). При выборе условий загрузки «по ссылкам» справочников и документов ошибок никаких не выдает. Пишет, что все операции завершены: изменено 0, обработано 0, проведено 0. Может быть это из-за использования одного и того же списка значений в секции «Загружать» для документов и справочников или одних и тех же значений в этом списке. Поэтому он воспринимает только документы или только справочники.
adik_ Если ставишь для всех справочников и докментов «по ссылке», кто-же на что должен ссылатся 🙂
Пример: В документе есть реквизит Контрагент. Если загружать эти документы, то загрузятся «по ссылке» и контрагенты из этих документов. Если выбрать для Контрагентов «не загружать» то не загрузятся контрагенты. А если выбрать для Контрагентов «Все», то загрузится весь справочник Котрагентов.
Логично. Но тогда это взаимоисключающие друг друга настройки и одновременно их выставлять нельзя, а стоят они по умолчанию. Создается впечатление, что обработка не работает.
adik_ Для примера вот как происходит создание новой «чистой» базы из старой.
1. Делается свертка итогов в копии старой базы.
2. В настройках обработки помечаем на загрузку:
1) константы,
2) Из справочников: все классификаторы которые нужны для нормальной работы базы загружаем полностью, все остальные по ссылкам (нам не нужны уже неиспользуемые элементы.)
3) Документы ввода остатков.
3. Загружаем документы ввода остатков, период только тот день когда сформированы остатки.
4. После загрузки остатков ставим все справочники по ссылкам и загружаем документы за период после ввода остатков.
В результате получаем базу без муссора прошлых периодов.
я вот тренируюсь по этой программе и вопрос есть, из демки 7.7 бух хочу перебросить документ приказ о принятии на работу в демку 7.7 зик. как сделать это?
aslanbek Структура конфигурации бухии и зика различаются, для таких переносов рекомендую потренироватся на «Конвертации данных», там есть примеры переноса.
Призапуске обработки появляется ошибка:
;z34F856E76950.Ссылка.ДобавитьЗначение(z34F856E76950.ПолныйИдентификатор,z34F856E76950.Тип+».»+z34F856E76950
{E:DEVELPERENOSOLE&MLG.ERT(57)}: Значение не представляет агрегатный объект (ДобавитьЗначение)
Накой кадаброй было все переделовать под кадабру 🙂
А так молодца, на будущее, если ты не хочешь делиться кодом, то некуй его выкладывать 😉
нормальненько!!!!
Пишет что не может открыть базу данных.Есть какие то особенности?
(54) Особенностей никаких нет. Если база открывается в режиме предприятия, то и в ОЛЕ откроется.
запускаю обработку, он дает мне окошко для авторизации, выбираю пользователя, набираю пароль, и после этого обработка останавливается и говорит, что не может открыть базу данных
(56) С семеркой не работаю, но могу предположить что дело в том, что каталог пользователя занят. Нужно или выбрать нактивного пользователя, либо в конфигураторе очистить поле каталог у пользователя под которым пытаетесь заходить.
(57) Спасибо, очистил каталог пользователя в конфигураторе-помогло
Эта обработка может перенести документ ввод остатков ТМЦ из ТиС в Комплексную?
Если да, то что значит ошибка
,1,0);z8720EB63EC9E=Макс(z8720EB63EC9E,zC21BC14141F5(z533C545C5F99,Идентификатор,z533C545C5F99.ПолучитьАтрибут
{D:3DSWORK1CНОВАЯ БАЗАATC1EXTFORMSPERENOSOLE&MLG.ERT(408)}: 1С:Предприятие: Неверное имя атрибута
(59) Перенос осуществляется между едиентичными, и без настроек соответствий. Для настраиваемых переносов есть КД.
Подскажите плиз откуда скачать эту обработку
«Перенос справочников, документов и настроек констант между одинаковыми конфигурациями»
А то я обсуждения читаю а где ее саму взять не пойму
Я имею ввиду перенос между идентичными конфигурациями 8.2
(61) Отсюда:http://infostart.ru/public/14022/
(62) Хотя это не 8.2, а, наоборот, 7.7
а будет работать между зарплата+кадры 77 и зарплата+кадры 77
и можно ли перенести отдельно форму Т-2 у сотрудников?
Форма Т-2 хранится в реквизитах справочника «Сотрудники». Без переноса сотрудников не взлетит…
Спасибо! О-о-очень облегчает жизнь бухгалтеру, не «имеющему» собственного программиста!
Достойная обработка для выполнения переноса справочников в идентичных конфигурациях. Отработала быстро и без потерь ссылок. Проводил загрузку на больших объемах данных. Базы данных как файловые так и клиент серверные. Неплохой инструмент для переноса, но если есть опыт работы с КД то лучше ею
Спасибо, очень помогло
Полезная вещь
Очень помогло
Спасибо огромное! По Вашей обработке учил примеру реализации задания. И для себя несколько полезных идей подсмотрел.
А данная обработка переносит Банк»Выписки» в идентичную бухгалтерию
(74) Переносит обработка всё, но надо правильно настроить поиск. Рекомендую тренировку на копии.
обычно к таким рекомендациям прислушиваются после экспериментов
Пожелание автору.
Не делайте секрета и укажите в описании, что Ваш код закрыт (обработан обсфукатором).
Неприятно же обнаружить это тому, кто скачивал ради ознакомления с алгоритмом.