<?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='\
А скрин?
Чего то база не подцепляется
База может не подцеплятся, если она, например, не проиндексированна… попробуйте поставить галочку «монопольно».
Скрин попробую счас добавить.
Кстати рекомендую таблицы соответствия сохранять, мне это пригодилось.
«Перечисление»
ТекОбъект.УстановитьАтрибут( ТаблицаДокументов.ПолучитьЗначение( ЖЖ_, «Наименование» )ОСОДВ1.2.ERT(1810)}: Поле агрегатного объекта
не обнаружено (Идентификатор)
Наверное надо установить проверку на пустое значение…
Сейчас разрабатываю новую версию, где перечисления можно будет тоже сопоставлять… и как всегда будет возможность автоматически назначать соответствия для одноименных…
Кстати если кто-нибудь поучаствует в совершенствовании обработки, будет просто прекрасно…
Вродь все мы хотим сделать этот мир лучше.
(6) Не обещаю. Но подумаю…
Сыровато…
При подключении к базе выдается диалог регистрации, хотя она есть в списке зарегистрированных баз 1С…
Через OLE, вообще-то, при переносе данных надо всегда подключаться монопольно…
(8) Сорри, смотрел на portable-версии 1С, наверное поэтому запрашивала регистрацию базы.
Упс! Здесь есть уже…
По моему удобнее получать данные из Оле, чем передавать их туда 🙂
Весч интересная надо будет потестить ))
11, так и есть за исключением пометки на удаление перенесенных документов, ито если это необходимо.
Теперь программа умеет делать из остатков бо бухитогам документы. 💡
Нужно перенести справочники из одной базы в другую. Я конечно и тупой, но может кто-то объяснит как пользоваться этой обработкой. заранее огромный респект 😮
(15) В мануале описаны этапы переноса информации. на каком этапе возникает проблема? Из какой базы в какую делаем перенос? В каком городе находится уважаемый пользователь?
(15). В общем случае нужно задать соответствия, выбрать для каждого справочника и реквизита базы, в которую переносим, соответствующий источник в базе, из которой достаем информацию. По умолчанию программа находит соответствия для одноименных элементов конфигурации.
Сорри, если непонятно изложил вопрос! Вот проблема по порядку:
1. Есть рабочая база 1с:Предприятие 7.7 для бюджетных учреждений релиз 633.
2. Бухгалтера решили завести еще одну базу для другого подразделения.
Моя задача перенести коды КБК Справочники-Организационная структура-Балансодержатели-#наименовани балансодержателя# двойной клик- вкладка Коды КБК. А так же Справочники-Бюджетная классификация-КБК.
Что хотел спросить: как запустить обработку ОСОДв1.3.ert? а именно куда ее нужно поместить и чтосделать чтоб у меня появилось окно как на скриншоте? что значит через OLE? на какомто форуме прочитал про обработку Tranref.ert которая вроде по описанию сможет мне помоч, скачал, но и сней тож ума не дал. Подкажите, плиз,что делать? ❓
(18), поместить ее можно куда угодно в пределах доступности меню «файл-открыть»… собственно открыть её как внешнюю обработку, т.е. нажать «файл-открыть».
Думаю пригодится 🙂
uri-fl. Перенес номенклатуру из ТиС, все корректно (за исключение, «абсолютного переноса»-я думал помеченные на удаление объекты он переносить не станет)
❓ Не смог перенести остатки по счетам, хотя бы по тем же товарам…
В инструкции про остатки ни слово, можно пояснить!??
(21).Pic_nic, для того что бы перенести остатки по регистрам, нужно немного исхотриться, программа была разработана для работы с бух. итогами, но если есть желание и необходимость то всегда можно ухитриться… например если сформировать документ списание по всем товарам в исходной базе и загрузить этот документ как ввод остатков. Кастыль, но вариант рабочий.
(22) Так, а зачем вкладка «ОСТАТКИ»!??
если он их не тащит?
и…
😉 можно ли с этим бороться, да бы не раздувать номенклатуру!??
(23) Pic_nic. Вкладка остатки нужна для работы с бух. итогами.
По поводу помеченных на удаление: я не стал исключать возможность перенесения помеченных, так как моих клиентов интересовал полноценный попозиционный перенос остатков по бух. итогам, а даже помеченные на удаление могут участвовать в остатках. Как правило, перед перенесением база «чистилась» от помеченных, которые уже никому не нужны.
Согласен, что можно было сделать и удобнее, а это уже показывает низкий уровень моего опыта работы с системой, буду работать над собой.
Кстати говоря, можно и самому немного усилий приложить что бы программа работала более «красиво». 🙂 и поделиться с другими.
🙂 Спасибо!
При переносе документов выдает следующую ошибку:
СоответствиеДокументыТекст.Записать( ИмяФайлаСоотДок );
{C:TEMP1СOSOD_V1_3ОСОДВ1.3.ERT(370)}: Неверное имя файла!
Подскажите плиз как ее исправить!
Переношу из 464 конфы в 508. Бух учет 7,7
(26) Рекомендую прочитать мануал. Там написано.
Нужно задать имя файла соответствий на вкладке документы, нажав кнопочку «..»
Спасибо большое, помогло. Я просто файл-соответствий указывал на закладке справочники, а на документах не стал, думал он сам подгрузится.
Подскажите плиз еще:
При переносе остатков выскакивает такое сообщение:
Если ( ( Уровень <= УровеньКонецШапка ) Или ( УровеньКонецШапка = -1 ) ) Тогда
{C:TEMP1СOSOD_V1_3ОСОДВ1.3.ERT(1249)}: Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
(28) Эт нужно ковырятся, при наличии времени просмотрю, а если есть желание, то можно и в коде самому поковыряться:).
Спасибо за обработку давно искала такую
«Неудачная попытка подключения к базе»
Не могу никак подключить и даже в монопольном режиме(
Если после всего написанного есть проблемы с подключением, мне на ум приходит только:
проверьте кодовую страницу ИБ и проиндексируйтесь с помощью конфигуратора.
(28) Та же ошибка. Вопрос автору: УровеньКонецШапка присваивает -1 только в том случае, если РежимДокумент = 0. Соответственно, при переносе остатков по коду 1С сюда не заходит и УровеньКонецШапка остаётся неопределённым. Пробовал перенести всё, выбрав период, где заведомо нет документов. Не помогло.
После изучения кода, проб и ошибок нашёл как подредактировать обработку, чтобы работала. Не могу прикрепить файл. Если кому надо, могу выложить на народ.
Товарищи, завтра или послезавтра постараюсь выложить версию без этой ошибки. потерпите пожалуйсат
всем привет. а есть аналогичные обработки?
проблема такая. есть 2 идентичные базы.
первая база велась с 2005 года по 31.12.09. с 1-го января сделали чистую базу и перенесли только справочники (без остатков). по текущий день пользователи забивают в ней документы.
теперь с 1-й базы нужно перенести остатки на 31.12.09. структура баз абсолютно одинаковая.
Скинь рабочею обработку!!!! Заранее спасибо!!! 😀
Всех прошу меня простить за то что до сих пор не выложил обработку. Извините меня пожалуйста. Уделяю время другим делам. Но для тех кто хочет переносить остатки не из регистров подойдет версия 2. она рабочая и оттестированная… Версия 3 делалсь для переноса остатков из регистров и получилась костылявая.
ПС. Актуальность работ для 7.7 снижается. Let’s go to 8 version.
Вот только немного не понятно, в какой базе надо запускать обработку? В источнике или в приемнике?
(38) обработка запускается в источнике. В поле «Каталог базы» — путь к базе-приёмнику.
После изучения кода, проб и ошибок нашёл как подредактировать обработку, чтобы работала. Не могу прикрепить файл. Если кому надо, могу выложить на народ.
Доброго времени суток….Выдается такая ж ошибка » Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)»…плиз, если не сложно киньте рабочую версию на ящик Nik178@list.ru …надо срочно перенести остатки..
Заранее большое спасибо!!!
Спасибо!!!
(41) Слава Богу!
Кстати я выложил снова версию 1.2. Там не должно быть проблемы с «УровеньКонецШапки». Если кому нужна будет именно 1.3 обращайтесь лично.
Спасибки
(0) Пробовал остатки перенести — все отлично, почти… Не переносит документы как субконто. Неужели для этого нужно перенести документы все? Ошибка выскакивает в строке 914:
ЕстьвСоот = ЗнДляЗапСуб.НайтиПоНомеру( ТекДок_.НомерДок, ТекДок_.ДатаДок, ТекДок_.Вид( ) );
И не хватает все-таки объяснялки.
ЗЫ. Валюта тож не перенеслась (((
по каким реквизитам выполняется поиск справочников в базе-приемнике?
Все Ок!
Добрый день!
Открываю обработку в Бух 7.7 УСН (релиз 220), нажимаю кнопку «Обновить», выдает ошибку:
Для Индекс=1 По БазаОле.Метаданные.Справочник() Цикл
{D:ОБРАБОТКИ7.7ОСОДВ1.3.ERT(1559)}: Значение не представляет агрегатный объект (Метаданные)
Причем когда открываю в Бух 7.7 ОСН (релиз 570) там все нормально читает.
Что не так?