<?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='\
Имеем: ТиС 941
1) делаем копию базы
2) удаляем в оригинале несколько документов
3) пытаемся воспользоваться «Переносом справочников и документов…»
чтобы перенести из копии в оригинал удаленные документы.
Результат:
Ошибка!!!! ИмяРеквизита=НомерЛистаКассовойКниги Источник=Сибирь Контейнер (ОФ033), получатель=Сибирь Контейнер, вид=СвоиЮрЛица Реквизит.Периодический=1
1С:Предприятие: НомерЛистаКассовойКниги не является константой или периодическим параметром!
еще:
1С:Предприятие: СтавкаНПсАванса не является константой или периодическим параметром!
Ошибка!!!! ИмяРеквизита=НомерЛистаКассовойКниги Источник=Семеновна ООО (ОФ009), получатель=Семеновна ООО, вид=СвоиЮрЛица Реквизит.Периодический=1
и так далее.
Зачем это нужно, Данная задача быстро и без проблем решается с помощью конфигурации «Конвертация данных».
С помощью этой конфигурации нельзя пернести объекты введенные (измененные) пользователем за определенный период. Например, если пользователи в июле исправили документ за март, то обработка перенесет и этот документ. Данная функция глубоко специфична — т.е надобность в ней встречается не часто. Но встречается. Кроме того, если перенести данные надо человеку не столь глубоко разбирающемуся в программе, то она весьма пригодится.
Насчет ошибки — исправлю.
Так что насчет этой ошибки:
Ошибка!!!! ИмяРеквизита=СтавкаНДС Источник=14.3759-10 Преобразователь (16414), получатель=14.3759-10 Преобразователь, вид=Номенклатура Реквизит.Периодический=1
1С:Предприятие: СтавкаНДС не является константой или периодическим параметром!
Ошибка!!!! ИмяРеквизита=СтавкаНП Источник=14.3759-10 Преобразователь (16414), получатель=14.3759-10 Преобразователь, вид=Номенклатура Реквизит.Периодический=1
1С:Предприятие: СтавкаНП не является константой или периодическим параметром!
в этом месте:
Если Реквизит.Периодический=0 тогда
УстановитьРеквизит(Реквизит,Источник,Получатель,ДатаДок);
Иначе
Пер=v7.CreateObject(«Периодический»);
Попытка
Пер.ИспользоватьОбъект(ИмяРеквизита,Источник);
Исключение
Сообщить(«Ошибка!!!! ИмяРеквизита=»+ИмяРеквизита+» Источник=»+Источник.Наименование+» («+Источник.ПолныйКод()+»), получатель=»+Получатель.Наименование+», вид=»+Получатель.Вид()+» Реквизит.Периодический=»+Реквизит.Периодический+»
|»+ОписаниеОшибки(),»!»);
Продолжить;
КонецПопытки;
а что значит «надо зарегестрировать Journal.dll»?
Зарегестрировать Journal.dll означает выполнить команду «regsvr32 c:progra~11cv7inJournal.dll» (либо другой путь, где лежит данная dll)
Так что насчет этой ошибки:
Ошибка!!!! ИмяРеквизита=ЦенаРеализации Источник=Проверочный товар 3 (00010025), получатель=Проверочный товар 3, вид=Номенклатура Реквизит.Периодический=1
1С:Предприятие: ЦенаРеализации не является константой или периодическим параметром!
НО ЦенаРеализации — периодический реквизит!
Для решения переноса периодических реквизитов. Можно попробовать
Если Реквизит.Периодический=1 тогда
ИмяРеквизита=Реквизит.Идентификатор;
СтароеЗначение=Источник.ПолучитьАтрибут(ИмяРеквизита).Получить(ДатаДок);
Если ПустоеЗначение(СтароеЗначение)=1 тогда Возврат; КонецЕсли;
Пер=СоздатьОбъект(«Периодический»);
Пер.использоватьОбъект(ИмяРеквизита,Получатель);
Пер.ДатаЗнач=ДатаДок;
Если Реквизит.Тип=»Неопределенный» тогда
ТипВид=ПолучитьТипВидРеквизита(Реквизит,СтароеЗначение);
Пер.НазначитьТип(ТипВид);
КонецЕсли;
Пер.Значение=СтароеЗначение;
Пер.Записать();
КонецЕсли;
У меня вопрос, пытаюсь перенести изменения с работающей в данный момент базы, но выдается ошибка о не возможности подключения, хотя при проверке на другой базе в таком же режиме все проходит на ура. В чем может быть проблема?
Попробуйте войти в этом случае в базу самостоятельно под указываемыми логином и паролем в немонопольном режиме. У меня подобная ошибка возникала, когда были не проиндекированы таблицы БД или неправильно указаны параметры соединения. Либо под данным пользователем уже кто-либо сидит, а в параметрах пользователя указан каталог.
Внесены изменения в обработку. По поводу ошибки с периодическим реквизитом — для случая когда 1С отказывается признавать периодический реквизит периодическим, сделано по совету Pap. Но, поскольку в этом случае невозможно узнать, на какую дату установлено значение, оно записывается на дату начала периода, за который переносятся объекты.
Также внесены изменения, в процедуру OLE-соединения, что, возможно, устранит проблему, с которой столкнулся Grigory.
Не переносит цены номенклатуры
Обработка гут! Пожелание: сделать отбор по комметарию, т.е. когда перегружаю определенный вид, то и нужно отбор по комметарию, подобно как в обработке документов.
По моему мнению самая корректная программа!
У нас кординально сменился план счетов, самый коректный перенос, не завязанный не к чему!
Огромное спасибо!
работает…
Спасибо за отзывы 🙂
Внесены изменения в обработку: добавлена возможность отбора документов по комментарию.
Следует называть эту обработку «Перенос документов между идентичными конфигурациями средствами OLE» Потому как справочники отдельно от документов не выгружаются. Тобишь эл.справочника выгружаются только если они входят в состав выгружаемого документа.
Так уж получилось что мне срочно нужна «корректная» обработка по переносу справочников (1Совская не корректно работает). Наткунулся на эту и обламался.
Данная обработка распростроняется бесплатно как есть и че хотите то и делаите или может настать такой момент когда заявится амон и скажет что я вор или я чего то не дапонял????
Dodzh: Вы невнимательно изучили обработку — следом за списком документов на закладке «Что переносить» начинается список справочников.
ИванИванИван: Ну что Вы, какой омон между хорошими людьми?! 🙂
А если серьезно, то эта разработка распространяется бесплатно.
Обработка оч. понравилась.
Единственный недочет. Не обрабатывается записи в ЖурналеРегистрации по УРБД. Т.е. не рассматривается вариант, что база в распределенной базе элементы и документы могут приходить с других баз.
Там следующие данные
Объект = 9, Действие = 100
Смотреть что за объект можно только через комментарий
Если Метаданные.Документ(ВСФ.Док.Вид()).Выбран()=1 Тогда
{ЗАГРУЗКА ДОКУМЕНТОВ ЗА ПЕРИОД.ERT(689)}: Поле агрегатного объекта не обнаружено (Вид)
Ошибка при загрузке справочников
ВСФ.Номер=СокрЛП(Объект.ПолныйКод());
{D:ОБРАБОТКИ7.7ПЕРЕНОС2ЗАГРУЗКА ДОКУМЕНТОВ ЗА ПЕРИОД.ERT(164)}: 1С:Предприятие: Не задан в
Что это, и как это исправить, подскажите
обмен происходит между ТИС 7.7, релиз 879
Плюсую. Вовремя пригодилось!
ТЗ.ВыбратьСтроки();
{ЗАГРУЗКА ДОКУМЕНТОВ ЗА ПЕРИОД.ERT(141)}: Значение не представляет агрегатный объект (ВыбратьСтроки)
Имеются две идентичные конфигурации, надо выгрузить 6 новых документов из одной в другую.
Вы будете смеяться, но НИ ОДНА ИЗ ВЫЛОЖЕННЫХ НА ИНФОСТАРТЕ, ОБРАБОТКА НЕ СРАБОТАЛА!!!
(26) вы просто не умеете их готовить..
В смысле, после сборки обработать напильником?
(28) даже на ИТС есть обработки по переносу…
И это, что именно у вас «не переносится» и чем вы пользовались ?
А то слишком громогласное утверждение..
Для своих задач более удобной обработки не находил. Хотя обработочка-то уже с «сединой на висках».
Автору очередной плюс.
Спасибо. Пригодилась.
К стати, немного доработал напильником в плане выстраивания документов по времени.
Благо Дарю!!
Поставила 281 релиз. В Документе Начисление ЗП при учтении документа пишет следующее:
ПерСтавка.ИспользоватьОбъект(«Ставка»,НиО);
{Документ.НачислениеЗП.МодульДокумента(134)}: Ставка не является константой или периодическим параметром!
Помогите пожалуйста!!!!!!!
Пробовал на УТ и Бух 1.6. Все работает «как надо», все довольны. В некоторых случаях лучше чем распределенка и решает все потребности. Спасибо.
я соглашусь все получилось спс
очень интересная и полезная обработка,спасибо,очень кстати
(33) Nanale, ошибка которую Вы описали, относится не к переносу данных моей обработкой, а к конфигурации. К тому же Вы не написали в какой именно конфигурации возникла ошибка — Зарплата и кадры? Поставила 281 релиз, в нем нет строки «ПерСтавка.ИспользоватьОбъект(«Ставка»,НиО);» в документе НачислениеЗаработнойПлаты. Перенос документов НачислениеЗаработнойПлаты работает нормально на 281 релизе
(25) ivanovnm, у Вас возникла ошибка с компонентной Journal.dll. проверьте, присутствет ли она по адресу C:Program Files1Cv77BIN\r
и выполните в командной строке (Пуск / Выполнить) команду: regsvr32 c:progra~11cv77inJournal.dll
Была необходимость перенести все справочники из одной базы в новую. Обработка сэкономила кучу при кучу времени. Спасибо.
RE : «Обработка выполняет перенос справочников и документов (в т.ч. все объекты по ссылкам), между двумя идентичными конфигурациями средствами OLE. Также имеется возможность переносить объекты базы, которые были изменены пользователями в определенный период» Почему-то не могу ее запустить? ошибка соединения…
Отличная простая, без наворотов обработка переноса…. автору большой плюс, очень понравилась!
Спасибо за обработку. Очень пригодилась.
Контроль уникальности единый для всех справочников по коду или по наименованию — нехорошее решение.
Научите пожалуйста, как пользоваться этой обработкой, пошагово. Спасибо.
При переноса НЕ ЗАПОЛНЯЕТЬСЯ ФИРМА!!! Бесит менять в каждом документе!!!!
(26) ivanovnm, кто бы сомневался ! необходимо скачать 6 обработок и быть занятым ими.
Это самая лучшая разработка!
База при обновлении стала выдавать ошибки, не считала, как надо, в общем намучилась я с ней и создала новую, релизов на 30 новее..
С помощью этой программки перенесла все из старой.
Методом проб добилась, что документы встали идеально!
Сначала заполнить сведения об организации учетную политику.
Закгружать в несколько этапов:
1.Справочники
2. Приходы
3. Расходы.
4. Закрытие месяца
Оборотка — один в один!
Спасибо вам огромное, восхищаюсь!