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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *