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




Принцип обмена данными из 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='\

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 не будет опубликован. Обязательные поля помечены *