<?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='\
Ошибка при проверки подключения.
Подскажите на каких релизах вы тестировали?
Управление торговлей, редакция 11.2 (11.2.3.108)
Бухгалтерия предприятия, редакция 3.0 (3.0.43.89)
(1) IDija, от версий конфигураций не должно зависить. Попробуйте перерегистрировать компоненту COM -соединения и проверить путь к базе, пользователя и пароль. На платформе 1С:Предприятие 8.3 (8.3.7.1917) работало точно.
«что исключает задвоения данных и корректность переноса».
Исключает корректность переноса чтоль?)
И есть подозрение что «задвоение»
Скачал, посмотрел.. переписываю
Замеченные неточности в описании:
1. КонецГода(Объект.ДатаОстатков) — это не «на заданную дату»!
2. Искать только «по Уникальному Идентификатору» недостаточно,
если при первом обмене выполнялось сопоставление одинаковых объектов.
Например: Если УИД Организации в приёмнике другой — в документах будут «гробы»,
а дальее по цепочке…не подберутся договора…создадутся новые с «гробом» … и т.д.
3. Не указано, что взаиморасчеты будут «по договорам» даже если ваш бух хочет «по заказам»
Чего мне не хватило:
1. Взаиморасчеты с прочими «76» счет.
2. Взаиморасчеты с подотчетниками
Добрый день!
Обработка не работает. При загрузке остатков и документов выдает соответствующие ошибки. Скрины ошибок в приложении.
(5) Доброго времени суток!
Перед запуском обработки важно проделать следующий пункт: Стандартными средствами переносятся только справочники и денежные документы.
т.е. настроить типовой обмен данными между УТ и БП и выполнить обмен справочниками из УТ.
Спасибо, но стандартная синхронизация была выполнена, справочники перенесены.
(7) Еще раз посмотрел скрины с ошибкой и заметил что Дата остатков — 29.08.17. Обработка ставит дату на конец года Даты остатков. Это мой недочет в описании обработки.
Вы можете открыть обработку в конфигураторе, зайти в модуль Формы обработки. И изменить строку 165:
на
Тогда остатки будут браться на конец выбранного дня.
(8)Добрый день!
Изменил строку, результат — те же ошибки. Сколько возьмете за то, чтобы Ваша обработка заработала конкретно на моей УТ?
Добрый день!
Обработка не работает.
Ситуация аналогичная описанной Михаилом Б. Те же ошибки…
(5)У меня то же самое… Не работает…..
ЕСЛИ У ВАС возникла проблема при переносе остатков, попробуйте этот рецепт
Проблема возникает если в разрезе счетов по 41 счету в БП есть остатки без склада
(бухгалтер вел счета без аналитики по складам)
мое решение: добавил в форму реквизит СкладПоУмолч типа СправочникСсылка.Склады
в форме соотв вывел этот реквизит
При заполнении этой формы выбираю Склад по умолчанию, который будет подставляться , если идут есть остатки номенклатуры без склада
и в функции Процедура ЗагрузитьНаСервере
в стр ~ 182 заменил
на этот код:
Показать
(12) andreysan, спасибо за ваш ответ.
Совершенно верно, это может быть причиной возникновения ошибки. Ведения учета в БП у каждого индивидуально и все ситуации при написании обработки отловить сложно.
Привет! а как обработка будет работать с ут 11.4? или даже не стоит пробовать?
(14) Привет! Теоретически должна работать. Возможно потребуется незначительные изменения, в случае изменения структуры данных в ут 11.4.
Сегодня попробовал перенести остатки. Доработка выдала «поле объекта не обнаружено (хозрасчетный)»
это если я использую перенос остатков. версия бп 3.0.55.16.
а если пробую перенос документов:
если выбрать переносить реализации, то ничего не происходит.
если выбрать переносить поступления, то выдает ошибку «Поле объекта не обнаружено (ПоступлениеТоваровУслуг)»
(16) Проверил на УТ 11.4.1.271 и БП 3.0.55.16, обмен остатками проходит. Если есть опыт работы с конфигуратором, попробуйте отследить на каком месте происходит сбой.
(16) Вы, по всей видимости, запустили выгрузку в БП. Я так же ошибся сначала и у меня вышла такая же ошибка. Запускать надо в УТ.
Ошибка в другом — при загрузке остатков ДС, если в кассе нет остатков, то в строке 487 ТекДок = «», соответственно ТекДок.Кассы вызывает ошибку.
Alex z
В обработке для работы в конфигурации Управление торговлей, редакция 11 (11.4.2.123)
в стоке 1110 и 1113 нужно заменить
ПоступлениеТоваровУслуг на ПриобретениеТоваровУслуг.
Добрый день! При переносе остается связь документов на основании или каждый документ переносится отдельно?
(20) В документах переносимых обработкой, связи сохраняются.
Добрый день, при попытку выгрузить номенклатуру он выдает Значение не является значением обьектного типа (УникальныйИндификатор) и не дает загрузить, а документы выгрузил, но склад и найменование обьект не найден
(22) Добрый день! Похоже что начальная синхронизация не была сделана или склады по ней не синхронизировались.
(23) Здравствуйте. Точно такая же ошибка с идентификатором. Начальная синхронизация сделана. Скачивал посл. строчку.
(23) изменил как советовали в (12), теперь получаю такую ошибку:
{ВнешняяОбработка.ПереносОстатковИзБПвУТ.Форма.Форма.Форма(248)}: Деление на 0
СтрокаТЧ.Цена = СтрокаТЧ.Сумма / СтрокаТЧ.Количество;
(25)
Где-то вылазит нулевое кол-во. Попробуйте в отладчике поймать проблему.
Или добавить заполнение цены в попытку
Добрый день! При попытке перенести приход их БП 3.0.72.54 в УТ 11.4.8.92 ошибка «РегистрСведений.УчетнаяПолитикаОрганизаций.МодульМенеджера(151)}: Индекс находится за границами массива». Есть варианты её лечения?
(27) Проверьте заполнена ли учетная политика организации в УТ.