Перенос данных из Бухгалтерии 7.7 в Бухгалтерию Предприятия 8.1, 8.2




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

38 Comments

  1. Арчибальд

    Имею склонность поставить плюс. И не хочу бороться с этой склонностью, ибо я гораздо сильнее 😎

    Reply
  2. Ish_2

    Боишься пинков — не лезь в авторы.

    «Прошу сильно не пинать» — фраза аутсайдера .

    Reply
  3. Famza

    (2) Я не люблю словесных баталий ни о чем. «Прошу сильно не пинать — первый раз все-таки» — перефразировать на «Укажите какие правила нарушил»?

    А пинков боятся — в авторы не лезть, я ж вроде вылез…Туше? 🙂

    Reply
  4. Ish_2

    (3) Туше будет после появления в теме фразы «Попробуй пни !»

    Reply
  5. Культурный

    К сожалению инвентаризации остатков для проверки переноса недостаточно. Инвентаризация показывает ситуацию по счетам, а по регистрам нет. А вы уверены, что все нужные движения по регистрам сделаны? Это раз. Также рекомендую сопоставить данные НУ и БУ. Особенно если перенос внутри года. На Бухгалтерии 2.0 проблемы в этом направлении гарантированы.

    Reply
  6. Famza

    (5) Пункт 6 я не зря так обозвал — ведь придется проверять не только синтетику, сколько аналитику БУ. Инвентаризация выявит корректность переноса остатков по всем разделам учета БУ — ведь не зря же они введены в документе «Ввод первоначальных остатков». НУ сформируется при проведении документов, а вот «нужные движения по регистрам» останутся на совести 1С — все же делалось штатными средствами…

    Также хочу обратить внимание на вполне работоспособный вариант http://www.infostart.ru/public/19504/ , но в моем случае при переносе остатков придется писать несколько отчетов в связи с изменением конфигурации 1С:Бухгалтерия 7.7. А лень двигатель прогресса — проще напрячь машину, чем самому напрягаться — потому и появилась эта статья 😉

    Reply
  7. Культурный

    Я просто рекомендую перепроверить движение по регистрам и по НУ. Мы недавно делали перенос из 7.7 в 8.2,2.0 и обнаружили кучу проблем и неточностей. Основные направления проблем я показал в предыдущем сообщении.

    Reply
  8. Famza

    (7) Для этого и нужен пункт 6… 🙂

    Reply
  9. Культурный

    Ок

    Reply
  10. bvv003

    через файл переносится отлично,на любую дату!!!!!Попробуйте !

    Reply
  11. Famza

    (10) Конечно. А еще лучше использовать конфигурацию КД. Но в данном способе даже не пришлось сопоставлять объекты и тд. Хочу повториться, что «конфигурация изменена под нужды нашего производства.»

    Reply
  12. forexclubalex

    Пишет вот такое

    Ошибка получения данных из информационной базы 1С:Предприятия 7.7: «Ошибка исполнения обработчика: Конвертация_ПередВыгрузкойДанных: Для получения итогов по данному периоду требуется временный расчет!»

    как это понять?Делаю все по описанию!

    Reply
  13. bomba

    (12) Ну посчитай итоги на ту дату по которую переносишь, тебе русским языком написало

    Для получения итогов по данному периоду требуется временный расчет!» 
    Reply
  14. Famza

    (12) Для выполнения полного пересчета итогов — пункт 3:

    а) в режиме 1С:Предприятие — Операции — Управление бухгалтерскими итогами — кнопка «Установить расчет» по: 1 квартал нужного года

    б) кнопка «Полный пересчет итогов»

    Reply
  15. Famza

    На УПП 8.2, редакция 1.3, если кто переходил с Бухгалтерии 7.7 — поделитесь мнениями.

    Reply
  16. pawellkrv

    +1 за лозунг «Лень двигатель прогресса» 😉

    Reply
  17. Irek-kazan

    (15) как раз сейчас этим занят… пока делиться особо не чем

    Reply
  18. Irek-kazan

    (15) может Вы чего-то нарыли?

    Reply
  19. Famza

    (18), (19) Да рыть тут пока нечего. Я представляю себе так: либо перенос через «Конвертация данных», либо перенос данных с использованием типовых обработок и правил, поставляемых на итс. Только вот правила конвертации придется под себя затачивать, если конфа 7.7 нетиповая уже. Именно этим мне пока некогда заняться — на работе заваливают хотелками. Максимум что успел подготовить базу 7.7 к переносу — принцип как в этой публикации. Но переход неизбежен — http://www.1c.ru/news/info.jsp?id=15011

    Reply
  20. Vida

    Не поняла, так получилось или нет выполнить перенос посреди года. Т.е. остатки на начало + все документы за полгода?

    Reply
  21. Famza

    (21) Если вопрос по переносу Бух-БП — то да конечно, иначе этой статьи не было б. Причем совсем недавно протестировал перенос данных из Бух 545 в БП 2.0.39.9 — все как описано в методичке. Единственное что я не делал, так это сверку по субсчетам — общие суммы посмотрел )))

    Reply
  22. Vida

    (22) ой хорошо, надеюсь проконсультируете!

    У меня сходные релизы с указанными в обработке 7.7=538 8.2=32.4

    Мне нужно перенести остатки на начало года 2012 и все документы, которые ввели в нем до сегодняшней даты.

    Поясните плиз пункты

    3: правильно ли я поняла что рассчитать итоги в 7.7 нужно на 2013 год?

    4: в 8.2 при переносе тоже указываем 2013 год? «Остатки на начало года»

    5: если нач. остатки сформируются на 13 год… не поняла, если у меня будут остатки сформированы на 31.12.12 И если я поменяю скопом эту дату (на какую?) как же может быть верно?

    и документы за 12, они перенесутся? Экспериментирую, но все долго…

    И запуталась в годах…

    Reply
  23. Famza

    (23) Vida, принцип простой: ДЕЛАТЬ ВСЕ В КОПИИ БАЗЫ!

    подготовить базу 7.7 — например на 31,07,12, значит нужно убить все доки начиная с 01,08,12. В итоге останутся только итоги на 31,07,12.(Прошу прощение за тавтологию))) А если рассчитать итоги на 1 квартал 2013 года — они же так и останутся итогами на 31,07,12. Это нужно для того чтобы при переносе в пустую базу БП сразу указать «Загрузить данные из Бух 7.7» — «Загрузить из информационной базы» и там периодичность выбрать «Остатки на начало года» и выбрать год 2013 — а это и есть остатки на 31,07,12, хотя они перенесены на 2013 год. После перноса все документы ввода первоначальных остатков в БП можно перенести на 31,07,12 — там есть такая возможность. Ну а потом наслаждаться проверкой итогов ))).

    А теперь по пунктам:

    3. Да, на 1 квартал 2013

    4. Да, остатки на начало 2013

    5. Остатки будут сформированы БП на 31,12,12. Но это же остатки в Бух 7.7 на 31,07,12 ))). Просто переносим на нужную дату

    Reply
  24. Vida

    (24) спасибо за подробнейщий ответ. Поо копии конечно да! Про 13 год все поняла… почти

    Получается в итоге у меня не будет документов за первые полгода 12, только остатки на дату Х? Мне то изначально хотелось остатки на 31.12.11 и все доки за 12…

    Как лучше выбирать эту дату, после которой все удалить в 7.7? Это последний закрытый квартал, месяц? А документы «после» Х — бухгалтерам придется повторно заносить в 8.2 — этого никак нельзя избежать? Вы никак вопросы не решали?

    Закончилась выполняться обработка переноса. Из всех документов перенеслить только «Счет-фактура выданный» без проводок, с комментарием «Создан автоматически документом <Ввод начальных остатков 00000000059 от 31.12.2012>»

    И еще от 31.12.2012 документы «Документ расчетов с контрагентами (ручной учет)», «Ввод начальных остатков» и от 01.01.13 «Установка цен на номенклатуру».

    Наверное что-то лишнее перекрутила в 7.7, попробую еще на новой копии)))

    Еще (21) пишете, что недавно переносили из Бух 545 в БП 2.0.39.9

    Как считаете мне лучше тоже обновиться ДО, или не имеет значения?

    Reply
  25. Famza

    (25) Vida, имхо, лучше обновиться, но вряд ли правила переноса данных 1С обновляла в 2011 году)))

    Получается в итоге у меня не будет документов за первые полгода 12, только остатки на дату Х? Мне то изначально хотелось остатки на 31.12.11 и все доки за 12…

    Как лучше выбирать эту дату, после которой все удалить в 7.7? Это последний закрытый квартал, месяц? А документы «после» Х — бухгалтерам придется повторно заносить в 8.2 — этого никак нельзя избежать? Вы никак вопросы не решали?

    Ну переход с 7ки на 8ку — это немаленький шажок. Есть ли смысл тащить все хвосты из 7ки? Может лучше начинать с остатков?

    Если вы перенесете остатки на 31,12,11 — то для бухов будет хорошая учеба работы в БП))). Я думаю, что вам некоторое время все равно придется вести учет в двух программах. Но лучше следовать рекомендации 1С и переход с делать уже в 2013 — еще проще будет — ознакомьтесь с ними, там описано и на счет закрытых периодов. Пока можно пробный учет вести — как обучение персонала, например.

    По поводу документов — штатный перенос предполагает перенос остатков и документов за период в БП («Остатки на начало года и документы» за период). Но при переходе на 8ку насколько целесообразно переносить документы — решать вам, учитывая опыт (5), (7). Для все остального лучше использовать «Конвертацию данных».

    Попробуйте сразу «Остатки на начало года и документы» за период (январь 2012 — сентябрь 2012). В данном случае моя статья вам не поможет — вы ж не одни остатки хотите перенести )).

    Reply
  26. WKBAPKA

    тю, емае, я думал реальный перенос… я сам так умею… а для тех бухгалтерий, которым уже лет по 10, правила не писали 🙁

    Reply
  27. Famza

    (27) WKBAPKA, дык че тогда раньше не выложили «реальный перенос»? Я бы почитал и тоже так бы сумел )))

    Reply
  28. WKBAPKA

    я очевидные вещи не выкладываю… возможность переноса данных реализована в типовых конфигурациях и там же описана…

    Reply
  29. Famza

    (29) WKBAPKA, и что же теперь делать с этой публикацией, мистер очевидность? Надеюсь хоть кому-то помогла. Последний коммент из флуда.

    Reply
  30. WKBAPKA

    Да что хочешь то и делай… я выразил свое мнение … я могу таких статей наклепать… берем книжку от типовой и начинаем писать 😉

    например, можно написать статью, как создать новую базу в 1С:Предприятие 8.2

    со скриншотами и можно даже подготовить презентацию, может даже видеопрезентацию…

    еще можно написать статью с картинками, как правильно сохранить копию табличного документам в Excel…

    еще, можно написать развернутую статью эдак страниц на 5, о том, как сформировать оборотно-сальдовую ведомость в бухгалтерии, с подробным историческим описанием происхождения слова «Субконто»…

    ну тем у меня много которые можно опубликовать 😉

    ПЫ СЫ: кстати, еще можно написать, о том как можно написать статью о переносе данных из 7.7 в 8-ку!

    Reply
  31. WKBAPKA

    а вот что делать, когда база 7.7. старая и нет такой вот возможности переноса… я переводил такие базы на 8-ку, но статью лень писать…

    Reply
  32. Famza

    WKBAPKA,

    (31) — это же здорово, что есть куча тем! Попутного ветра.

    (32) — молодец. Я тоже могу… на клавиатуре кнопки нажимать, но вот что-то стало лень…

    Reply
  33. WKBAPKA

    я думаю, что те кто занимаются переводом клиента с одной версии на другую должны обладать определенной квалификацией. А писать статью, типа я открыл Америку, как то уж дико.

    Reply
  34. Famza

    (34) WKBAPKA, значит я дикий )))

    Reply
  35. WKBAPKA

    😉 ну может быть

    Reply
  36. llg_44

    Автору спасибо. Считаю, что любая работа поможет новичку.

    Я дополню. Выполняется все очень просто.

    Свертка базы в любой бухе есть wrap.ert — документы все удалить. База будет легче. Тут можно и на результат свертки посмотреть, проверить остатки. Поправить, если что не так.

    Остатки на конец предыдущего периода. Для типовых все просто — два варианта:

    выгрузка файловым обменом

    выгрузка подключение com

    Затем только наблюдаем.

    С нетиповыми поступить можно так:

    — проверить наличие настроек плана счетов. Это важно

    — создать двумя из способов счета в базе 8

    — можно выполнить обновление на типовую, остатки с настроенных счетов никуда не денутся.

    — настройки все уже выполнять в 8-ке. Так экономичнее потому, что некоторые возможности уже могут работать и в типовом механизме 8.

    Про уникальные и отраслевые конфигурации простого пути переноса нет. Только правила и обработки программным путем.

    Reply
  37. Famza

    (37) llg_44, для меня не было все так просто и обрезание базы как выяснилось — недопустимо, потому что требовалось сохранить часть документов с начала времен — из-за все того же НДС. Да и обработок по обрезке БД я перепробовал весьма немало. К примеру, штатная умирает через пару часов работы. Так что обрезание не приносит облегчения ))) (простите за каламбур).

    Перед тем как оформить статью было немало чего опробовано. Но на то он и ларчик…

    Reply
  38. rs2003

    Автору спасибо, много нужного узнал

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *