<?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='\
Вот бы под БП 8.0 такую штуковину !!! А так +1 !!!
+1
полезная вещь.
Если ее немного доработать и добавить субконто в ТЧ получится универсальная 😉
Не только для переноса остатков, а так же для корректировки текущего сальдо по субконту
А вот мой вариантhttp://infostart.ru/profile/14620/projects/1938/
Типа реклама))
Сформировала. Это +.
«После заполнения документ достаточно перебросить в новую базу любыми доступными средствами и сформировать проводки»
А подскажите хоть одно средство. Плиииз.
Самое простое Import77.ert и Export77.ert с ИТС, для продвинутых пользователей поможет конфигурация «Конвертация данных», а также можно использовать целую кучу обработок с данного сайта по выгрузке-загрузке…
Может я чего-то не понимаю, но как мне ЭТО в мою базу запихнуть?
Скачиваешь, распаковываешь файл из архива с расширением *.md в отдельную папку, прописываешь в окне запуска 1С 7.7 путь к этой папке после чего заходишь в полученную базу с единственным документом в режиме конфигуратора, открываешь эту конфигурацию, в ветви документы, позиционируешься на единственном документе и копируешь его (Ctrl-C) в буфер обмена. Не закрывая эту конфу открываешь в конфигураторе базу, в которую надо вставить документ, заходишь в ветвь документы рабочей базы, и вставляешь в нее скопированный документ (Ctrl-V). Закрываешь базу с сохранением изменений. Да, перед тем как проделать описанную процедуру не забудь сохранить базу (меню «Администрирование») чтобы в случае сбоя или неправильного понимания описанного процесса всегда можно было вернуться к старому варианту базы…
Strange Device, а как быть с этим… при проведении?
глСообщениеПроведения<<?>>(ТекстСообщения, ТекущийДокумент(), 1);
{Документ.ОстаткиПоСчетам.Модуль Документа(24)}: Процедура не обнаружена (глСообщениеПроведения)
Операция.ПервичныйДокумент = глПредставлениеПервичногоДокумента<<?>>(Контекст);
{Документ.ОстаткиПоСчетам.Модуль Документа(38)}: Функция не обнаружена (глПредставлениеПервичногоДокумента)
глСообщениеПроведения<<?>>(ТекстСообщения, ТекущийДокумент(), 0);
{Документ.ОстаткиПоСчетам.Модуль Документа(76)}: Процедура не обнаружена (глСообщениеПроведения)
глПриПроведении<<?>>(ТекущийДокумент());
{Документ.ОстаткиПоСчетам.Модуль Документа(77)}: Процедура не обнаружена (глПриПроведении)
Этот документ предназначен для использования в типовой конфигурации бухгалтерского учета, если указанных процедур нет в конфигурации это означает, что Вы используете либо самописную конфигурацию, в которой действительно нет указанных процедур, в этом случае эти процедуры можно добавить в глобальный модуль Вашей конфигураци из глобального модуля типовой бухгалтерии 7.7, либо отказаться от использования данного документа вообще. В случае, если Вы используете типовую бухгалтерию очень старого релиза, скорее всего более десяти лет выпуска, этих процедур тоже может не быть, в данном случае способ решения проблемы точно такой же как и указанный для нетиповой конфигурации…
Поюзал данный документ. Суммы в валюте на счетах
60.6, 60.11, 62.6 — не перенеслись. (в рублях всё ок)
Есть мысли как это побороть?
(11) min2, а сформировались в бухсправке?
(12) да, каюсь валютным учетом я никогда не занимался и клиентов с валютным учетом ни одного не было, поэтому валютных остатков переносить даже не пытался, если такое критично и очень нужно, то, в принципе, могу доделать…
Скажите, если в базе нет док. Бух. справка, то его можно просто создать у себя, или же можно заменить чем-то другим?
Второй вопрос — при попытке переноса со счета 41 (товары) выдает нулевые суммы.
(14) Serge_ASB, Здесь два варианта переноса остатков, первый, старый с документом ввода остатков, этот документ надо добавить в конфигурацию (причем, поскольку я добавлял его на сайт достаточно давно, то скачать его с сайта можно совершенно бесплатно), второй сделал позже (поэтому сайт за него требует денег в колечестве 1 бабка :-)), чтобы не заморачиваться добавлением новых объектов в конфигурацию обработка, которая формирует остатки на документах бухгалтерская справка. Если в Вашей конфигурации нет документа Бухгалтерская справка, то скорее всего у Вас некая неизвестная мне самописная конфигурация, потому что во всех известных мне типовых российских бухгалтериях такой документ есть уже больше десяти лет. Можно попытаться скопировать этот документ из типовых конфигураций, но в этом случае будьте готовы, то ряд процедур глобального модуля придется добавлять в Вашу конфигурацию руками — подобные вопросы уже были выше.
Что касается второго вопроса, то, в принципе остатки по 41-му счету в типовом варианте, увы, не содержат суммовых остатков по складу 🙁 , в этом можете убедиться посмотрев более подробно настройки второго субконто «МестаХранения», я, конечно, пытался в ряде случаев получать эти остатки распределением сумм пропорционально количеству, но вполне может быть, что такое распределение не во всех случаях работает корректно, иными словами возможность получения остатков сильно зависит от настроек субконто для текущего счета и в некоторых случаях не может быть корректно получено 🙁