Счет-фактура с 09.06.2009 (ТиС 7.7)




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

43 Comments

  1. valent

    Странно, а почему бы не использовать для полного наименования «Фирма.ЮрЛицо.ОфициальноеНаименование»? Для таких случаев этот реквизит и существует…

    Reply
  2. profibalans
    Reply
  3. profibalans

    что делать?

    Reply
  4. profibalans

    сдается мне что это для другой конфигурации 1с.с.

    Reply
  5. Balans_n

    Добавила, появляется ошибка:

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

    Хелп!

    Reply
  6. IP43

    (1) — вопрос не ко мне а к 1С, почему они так сделали, «от греха дальше» не стал менять 🙂

    (3) — а какой релиз ТиС установлен?

    (5) — а какой релиз ТиС установлен? скорее всего очень древний в котором еще нет в глобальном модуле процедуры глБратьСуммыИзУчета и переменной глДатаПоПриказу147, к

    // Дата вступления в силу (01.01.2008) Приказу Минфина РФ №147н от 25.12.07, определяющего новый порядок переоценки активов и обязательств в части авансов

    Reply
  7. IP43

    (5) проверил на старой конфе, есть такая ошибка. Если обновлять ТиС не хочеться (невозможно), то надо закоментарить в данном отчете строки:

    //Если глЕстьРеквизитШапки(«КодОперации», ВидОсн) = 1 Тогда

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

    //Иначе

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

    //КонецЕсли;

    //

    //Если БратьСуммыИзУчета = 1 Тогда

    // СкорректироватьТаблицуОснования(Докум, ТаблицаОснования, ВидОсн);

    //КонецЕсли;

    И будет людям счастье

    Reply
  8. Jahanson

    Закоментил строки усё заработало,респект!

    Reply
  9. smd

    (7,8)А как закоментарить?Может подскажете?

    Reply
  10. ulen

    Респект

    Reply
  11. IP43

    (9) Открываешь конфигуратор, в нем открываешь файл с внешним отчетом. Переходишь в окно с ТиС, кликаешь на ругательство (ошибку), тебя переносит в конфигуратор на то менсто где ошибка. Смотришь где начинается и заканчивается код программы (7), и ставишь перед ним // (два слэша — это и есть закоментировать). В (7) код уже закоментирован.

    Reply
  12. FYL

    Помогите плиз, не могу сообразить даже где косяк искать.

    Выдает:

    Если Докум.Фирма.ЮрЛицо.ИндивидуальныйПредприниматель = 1 Тогда

    {D:BDEXTFORMSPRNFORMSSF451.ERT(819)}: Поле агрегатного объекта не обнаружено (ИндивидуальныйПредприниматель)

    у меня стоит Тогровля и склад, редакция 9.2 , 1С 7.70.025

    Reply
  13. AIG2009

    МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолноеНаименование + ?(Константа.ПоказыватьАртикул = 1, » » + ТаблицаОснования.Номенклатура.Артикул, «»);

    {EXTFORMSPRNFORMSSF451.ERT(448)}: Поле агрегатного объекта не обнаружено (ПолноеНаименование)

    Помогите плиз….И такую же ошибку как у FYL

    Reply
  14. IP43

    (13) Скажите релиз ТиС. Странно на полное наименование ругается. У вас номенклатура в СФ выбрана или что?

    (12) Надо указывать релиз ТиС, а не самой платформы. Для тех у кого дресний релиз ТиС (экспериментировал на 7.70.938) будет выложен отдельная внешняя печатная форма.

    Reply
  15. IP43

    (12) Пробуй файл SF451_Old.zip для древних релизов ТиС

    Reply
  16. smd

    (11)Спасибо

    Reply
  17. FYL

    (14) Релиз ТиС 7.70.937 .

    (15) Поставил файл SF541_Old.Zip всё заработало без проблем. Огромное спасибо. Но и тут есть неровности: В случае когда продавцом выступает Индивидуальный предприниматель, расшивровка подписи все также ставиться в графу «руководитель организации». А в остальном все нормально.

    Reply
  18. CheBurator

    (14) в ТиСе все время полное наименование определяется как

    Номенклатура.ПолнНаименование

    а Номенклатура.ПолноеНаименование совпадает с методом Номенклатура.ПолноеНаименование() — так делать не рекомендуется

    Reply
  19. IP43

    (13) — а откуда у тебя взялось:

    МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолноеНаименование

    В моем коде МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолнНаименование

    ты может не то подцепил? 🙂

    (18) — вот прикол, еслиб не ты, я бы и не заметил, что у (13) не так Полное наименование написано 🙂

    Reply
  20. CheBurator

    (19) это не прикол, а опыт… его, так сказать, не пропьешь! 😉

    Reply
  21. IP43

    (17) я делал для версии где еще небыло у своего юрлица переменной ИндивидуальныйПредприниматель. Вот так и происходит 🙂

    Reply
  22. AIG2009

    Всем огромное спасибо…проблема решилась….Файл SF451_Old.zip для древних релизов ТиС

    Reply
  23. OzzY

    Постановление Правительства № 451 от 26.05.09:

    «…в строке 2 — ПОЛНОЕ И СОКРАЩЕННОЕ наименование продавца в соответствии с учредительными документами…» Скорее всего это опечатка, но постановление — есть постановление и до получения особых разъяснений Правительства РФ его необходимо соблюдать;

    «…в строке 3 — полное или сокращенное наименование грузоотправителя в соответствии с учредительными документами. Если продавец и грузоотправитель одно и то же лицо, то в этой строке пишется «он же»…» В этой обработке «он же» не предусмотрено;

    Reply
  24. OzzY

    Сорри. Первый пункт исключить:) Только что заметил:)

    Reply
  25. IP43

    (23) Даже не стал менять в стандартном отчете. Т.к. большинство бухов просит всегда писать полностью (как говорят от греха подальше). Можно конечно по просьбам трудящихся заменить, но уже вышел новый релиз ТиС с новой СФ.

    Reply
  26. agulnara

    Выйти то он вышел, но в нем стоит «тот же», потому Ваша обработка все равно удобнее, единственный минус — при печати сч/ф на аванс не берет номенклатуру из счета (заявки), а ставит «предварительный платеж»

    Может поправите?)

    Reply
  27. agulnara

    Да.. и все остальное в авансовой сч/ф тож бы поправить… (кол-во, цена и т.п.) везде прочерки, кроме ставки 118/18% самого НДС и суммы

    Reply
  28. avilpro

    SF451_Old.zip — установил, работает на все 100%! Никаких ошибок. Все супер. Спасибо огромное!!!

    Reply
  29. IP43

    (27) Поправим на днях, буду клиенту делать и сюда залью.

    Reply
  30. IP43

    (26, 27) agulnara, забирай и проверяй изменил, обновил

    Reply
  31. sashakur

    Спасибо. Все заработало. Ура.

    Reply
  32. byxi

    скачала и старое и новое обновление для с/ф ТиС-ничего не изменилось, кроме того как вместо Он же исправилось на ———((((

    релиз ТиС 7.70.950

    Reply
  33. sashakur

    Подскажите, пожалуйста, как сделать чтобы в СФ отображалось ГТД из справочника номенклатура!!??? Ставил SF451_Old.zip — потому как старый релиз! Все работает но в графе ГТД и Страна прочерки!

    Reply
  34. IP43

    (33) Страна и ГТД должны быть в СФ, если в ней стоят, то и в форме печатаются.

    (32) А в верхнем правом углу надпись Приложения заканчивается на «N 283 от 26 мая 2009 г. N 451″» ?

    Reply
  35. sashakur

    в ГТД и Страна прочерки!!!!

    Reply
  36. sashakur

    А реально забиты в номенклатуре!!!!

    Reply
  37. sashakur

    Автор помоги!

    Reply
  38. IP43

    (35-37) а в Счет фактуре есть ГТД и Страна, не в печатной форме, а в самом документе? Если в документе нет, то и в печатной форме не будет

    Reply
  39. byxi

    (34) все получилось) я не знала что надо регистрировать внешн печатные формы

    Reply
  40. profi11

    Огромнейшее спасибо за файл файл SF541_Old.Zip

    Reply
  41. Vetal85

    шапку вроде менять не надо так как форма не азменилась, а лишь изменился порядок заполнения

    Reply
  42. Vetal85

    Спасибо за информацию, подумаю. Подсоединил Ваши файлы к ТиС 958 к док Реализация (купля-продажа) При выборе СФ451 выдает ошибку:

    НомерДокПечатнойФормы=глПреобразоватьНомерДок<<?>>(Докум.НомерДок, 0, 0);

    {C:BASETorg2009EXTFORMSSF_451.ERT(6)}: Функция не обнаружена (глПреобразоватьНомерДок)

    Если (Константа.ФормироватьСчетФактуруПоУЕвРублях.Получить(Докум.ДатаДок)=Да<<?>>)

    {C:BASETorg2009EXTFORMSSF_451.ERT(81)}: Переменная не определена(Да)

    Reply
  43. Vetal85

    По моемому 1С не доработало эти отчеты. ждем обновленную версию отчетов…

    Доработало, просто читайть надо об изменении в обновлении…

    Документы — Налоги -Журнал расчеета страховых взносов…

    Делаем два документа:

    1. ИЮНЬ — сумма уплаты за полугодие дата 30.06.10

    2. Декабрь — сумма уплаты за второе полугодие дата 31.12.10

    Переформировываем пачки — и «О чудо» — уплачено заполнилосЬ!!!

    релиз 305.

    Если уплату в первом квартале поставили не равную начисленному, то уж извольте поправлять разницу ручками. Все должно в конечном итоге идти с РСВ-1

    Добавлено через 1 минуту 17 секунд

    По моемому 1С не доработало эти отчеты. ждем обновленную версию отчетов…

    Доработало, просто читайть надо об изменении в обновлении…

    Документы — Налоги -Журнал расчеета страховых взносов — расчет страховых взносов…

    Делаем два документа:

    1. ИЮНЬ — сумма уплаты за полугодие дата 30.06.10

    2. Декабрь — сумма уплаты за второе полугодие дата 31.12.10

    Переформировываем пачки — и «О чудо» — уплачено заполнилосЬ!!!

    релиз 305.

    Если уплату в первом квартале поставили не равную начисленному, то уж извольте поправлять разницу ручками. Все должно в конечном итоге идти с РСВ-1

    Принцип один для каждой конфы — что В ЗиК что в УСН и БУх и Комплексной есть этот документ!

    Reply

Leave a Comment

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