Счет-Фактура 2012 г. №1137 с дополнительными возможностями




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

23 Comments

  1. tonias

    Вылезает ошибка:

    БратьСуммыИзУчета = глБратьСуммыИзУчета<<?>>(Докум.ДатаДок, Докум.ДокОснование.КодОперации);

    {C:PROGRAM FILES1CV771SBDBEXTFORMSPRNFORMSGSF2006.ERT(377)}: Функция не обнаружена (глБратьСуммыИзУчета)

    БратьСуммыИзУчета = глБратьСуммыИзУчета<<?>>(Докум.ДатаДок);

    {C:PROGRAM FILES1CV771SBDBEXTFORMSPRNFORMSGSF2006.ERT(379)}: Функция не обнаружена (глБратьСуммыИзУчета)

    Reply
  2. Кащей

    Тоже самое, блин ( Релиз 949

    Reply
  3. Кащей

    Обновился до 958 — все в порядке )

    Reply
  4. ufo58

    Все верно. так и должно быть.

    в ТиС ИЗМЕНЕНИЯ В РЕЛИЗЕ 7.70.951

    в Компл ИЗМЕНЕНИЯ В РЕЛИЗЕ 7.70.482 — ОПЕРАТИВНЫЙ УЧЕТ

    «Отражение рублевого эквивалента взаиморасчетов без переоценки авансов»

    «Согласно Приказу Минфина РФ №147н от 25.12.07 с 01.01.08 вступают в силу изменения ПБУ 3/2006 «»Учет активов и обязательств, стоимость которых выражена в иностранной валюте»».

    Для операций по договорам в валюте или условных единицах с 01.01.08 сумма авансов засчитывается без переоценки.

    Теперь проведение документов по взаиморасчетам после 01.01.08 выполняется с учетом изменений в ПБУ.

    Проведение документов до 01.01.08 остается прежним.

    Это цитата из документации 1С по обновлениям версий.

    Кроме этого … в более свежие версии внесены еще несколько изменений.

    Reply
  5. kishbb

    вовремя, спасибо!

    ТиС 7.7ред.9.2…поставил GSF2006 — ошибка(см выше)… обновился до релиз 958… получил вот такую небольшую проблему!

    печать сф — при выборе в параметрах страницы: «портрет» после закрытия окна сф, 1С вновь возвращает в «ландшафт» и ни как нехочет сохранять выбранные параметры….как сделать так чтобы этого не происходило… причина? да просто экономия бумаги…))))

    P.S. поможите…плиззз…

    Reply
  6. ufo58

    Версию обновил.

    Учел поправку. Спасибо.

    Reply
  7. Donat

    Плюс за то, что поставил для Всех, хотя разработка уже банальна.

    Reply
  8. Lexeich

    Скажите, пожалуйста, господа, а как в ваших печатных формах учитывается порядок заполнения счёт-фактуры в случае выполнения услуг а не отгрузки товаров? По новым правилам тогда в графе «грузополучатель» и «грузоотправитель» должны стоять прочерки. Все так и есть?

    Reply
  9. ufo58

    Обработка делалась на основе «типовой» версии СчФ 1С.

    Там, увы прочерка нет.

    Если подкинете ссылочку на «прочерк», может будет и «прочерк», если удастся решить вопрос «совместного» использования СчФ для товара и услуг. Т.е. в одном документе будет и товар и услуга (напр. доставка).

    Кстати, Lexeich (8) прав. 1С выпустила новые версии конфигураций и там учтены последние изменения СчФ. Так что данная обработка уже не актуальна.

    Оставляю ее только потому что в ней есть дополнительный функционал. Может кому и сгодится.

    Reply
  10. natakolo

    Спасибо, не пришлось писать под старую базу (её не обновляли несколько лет:)

    Только поставила первой в диалоге обхода кнопку «Печать», а то стояло «Автосохранение параметров»

    Reply
  11. Gruel

    Спасибо огромное!!!

    Reply
  12. pincet

    класс, Юрыч, только добавь туда еще и СчФ 2011

    Reply
  13. Stana

    все работает, спасибо большое!

    Reply
  14. kalashnikovS

    Можно еще уту вот обработку до 2012 года №1137 обновить

    Reply
  15. nikodim2012

    У нас Главбух и иногда Руководитель пишутся не ФИО, а ФИ.

    Это как то можно поправить?

    И ещё не совсем верно отображается форма на аванс, на товар, на услуги.

    Где-то нужны прочерки, где-то ещё что-то…

    Reply
  16. ufo58

    (15) nikodim2012,

    «ФИО» или «ФИ» — серьезный вопрос (почти по-Гамлету)

    причем, вы сами говорите «иногда». Как быть?

    если руководство так сильно …. капризничает — поправить можно

    в конфигураторе (в печатных формах) — это не сложно

    а вот как быть с «иногда»? …….

    что касается авансов ….

    можно конкретней?

    там, по-идее, в случае с авансом должны быть прочерки

    в строке Грузополучатель

    в табл. части код страны, «имя» страны, ГТД — либо пусто, либо прочерк

    я не нашел законодательного указания что именно (прочерк или пробел)

    если подкинете ссылочку — бузусловно поправлю

    Reply
  17. nikodim2012

    Пока не удалось понять, из-за чего пишется ФИ, вместо ФИО, у разных людей.

    В предыдущей форме 451 всё нормально….

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

    на услуги, на товар.

    А вот по поводу заполнения они кинули мне ссылку http://www.diadoc.ru/files/invoice/

    И ещё сказали, что в вашей сф 2012 некоторые графы в шапке не совсем верно названы.

    Reply
  18. ufo58

    (17) nikodim2012, отличная ссылка. спасибо

    по поводу имени «граф» — сегодня исправлю. утром поставлю обновление

    по поводу ФИО ….. прошу простить, но … это хороший пример «некорректного» описания ошибки

    если я правильно понял, в печатной форме иногда печатается Петров А.П. иногда Сидоров К. ?

    если так, необходимо проверить в спр. сотрудники и физ.лица написание краткого и полного имени «правильной» и «неправильной» печати сотрудника.

    чудес не бывает. по крайней мере в программе

    она либо работает, либо нет

    по поводу авансов …. придется еще «поковыряться» на сайтах

    придется либо доказывать как это должно быть …. либо подстраиваться …

    Reply
  19. nikodim2012

    Да, вы всё верно поняли, насчет ФИО. Бух правда отчасти решила проблему:

    «Нужно в самой 1С-

    где уполномоченные лица -т.е

    СПРАВОЧНИКИ — структура

    компании — фирмы

    там нужно занести

    инициалы БЕЗ точек» и тогда всё печатается ок.

    Но вот с точками — через одного человека, то ФИО, то только ФИ.

    Насчет печати на аванс и на услуги — я так понял, бух знает,

    что там должно быть, что где-то прочерки, где-то нули,

    а где то — данные, в зависимости от того, на что

    печатается(товаравансуслуги). Может, мне напечатать

    сюда её эти мысли? Они могут помочь?

    Она даже может скинуть форму, как должно быть.

    Reply
  20. gigagr

    В типовой С 7.7 Торговля и Склад релиз 973 (последний на сегодняшний день) при использовании печатной формы «Печать Счета-фактуры образца 2012 года с выбором грузоотправителя, грузополучателя» если идет подбор товара из разных партий не правильно формируется таблица — вместо нужного товара (номенклатуры)из второй партии влезает строка с товаром из первой строки, хотя в просто в печатно форме сейчас делает правильно — указывая одну строку, а ниже — в том числе перечисляет партии. А как в вашей форме это происходит?

    Reply
  21. gigagr

    Уважаемый автор, не дождавшись ответа скачала и проверила — у вас строки товара, подобранного из разных партий правильно формируется, но моя бух капризничает, что в строках в т.ч. не проставляются (не делятся) цены и налоги — можете мотивировать или она права:

    Добавка шагрень Е/Р 166 кг 1.000 30-00 30-00 без акциза 18% 5-40 35-40

    в т.ч. 166 кг 0.750 —— —— — —— — 792 Турция 10502070/270112/0000755

    в т.ч. 166 кг 0.250 —— —— — —— — 792 Турция 10502070/1201312/0002332

    Reply
  22. ufo58

    День добрый

    Прошу простить за задержку с ответом (командировка 🙁 )

    Что касается сути вопроса:

    В «типовых» формах печати разбиение одной позиции товара с разными ГТД

    проходит только по колонке количества и номеров ГТД

    Итоговая строка находится перед строками разбивки.

    Обязательность разбиения сумм в «детализирующих» строках,

    мне не смогли подтвердить ни знакомые аудиторы ни знакомые бухгалтера.

    Если Вашему бухгалтеру это удастся (доказательно !!!), может подавать в суд на 1С.

    В противном случае, могу только процитировать

    http://www.forum.mista.ru/topic.php?id=213327

    Reply
  23. gigagr

    Прошла аудиторская проверка — заставили разбивать суммы в «детализирующих» строках…

    Reply

Leave a Comment

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