Добавление ставки НДС 20% на старой УТ 11.0 за 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='\

12 Comments

  1. grum01

    Т.е. для «новой» УТ_10.3 есть официальное обновления по НДС (хотя они там и не нужны, существуют еще с доисторических времен), а для УТ_11.0 нет?

    Нужно помнить, что ставка НДС привязана к номенклатуре, поэтому при выборе номенклатуры будет выскакивать старая ставка, нужно будет ее перевыбрать на 20%.

    Замените в карточках номенклатуры любой стандартной обработкой. Перевыбирать каждый раз — таких дров наворотить можно…

    Reply
  2. ids79

    Не думал, что кто-то УТ 11.0 использует.

    Уж очень не удачный релиз.

    Reply
  3. mxm2

    Странно, как-то: недавно добавлял ставку НДС 20% в древнем релизе УТ 11.0. После добавления новых значений перечисления, через глобальный поиск нашлось не менее 30 упоминаний ставки «НДС18». Пришлось все эти фрагменты так или иначе допиливать… Пройдитесь на всякий случай глобальным поиском.

    Reply
  4. falsepilot

    Два дня назад добавлял ставки 20 и 20/120 в УТ 11.3.4.31. Глобальный поиск по «НДС18» выдал 389 вхождений. Наибольшее количество — в документах вида «СФ выданный на аванс» и отчетах «Книга покупок», «Книга продаж».

    После создания новых значений перечисления «СтавкиНДС», особенное внимание следует обратить вот на что:

    — в ряде случаев в коде нужно просто заменить «Перечисления.СтавкиНДС.НДС18» на «Перечисления.СтавкиНДС.НДС20»

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

    Reply
  5. luds

    Поиск лучше делать по «.СтавкиНДС.НДС18». Таким образом захватим и обращения в запросе, и встроенный язык, и расчетную ставку.

    Заменять лучше не надо, надо именно добавить.

    Внимательно следить за запросами, где в качестве параметра передаётся ставкамассив ставок. Эти запросы потом через «выбор когда» могут присваивать произвольные псевдонимы полям.

    Если интересно, рекомендации от 1С:

    Reply
  6. Proxynick

    В статье задача решена 20%.

    Пока по всей конфигурации не пройтись — работать не будет правильно. Это только справочное изменение.

    Я поиск делал с помощью «поиск ссылок на объект» выделив перечисление «СтавкиНДС».

    Ушло примерно 2 часа проход и правку всех мест где идет расчет ставки НДС. Тут не только модули, но и в тесте запроса много мест надо править. Некоторые тексты запроса проще через «конструктор запроса», а в некоторых местах пришлось текст без конструктора править.

    в результате все печатные формы формируются правильно. Расчет ставки в документах идет верно. Осталось проверить формирование отчётностей и т.п.

    Reply
  7. &rew

    Все отчеты на СКД «запиленные» будут через «Иначе» работать.

    Я древнюю переписанную в давно 11.1 обновлял. Там копипастинга часа на полтора вышло, не считая древних модулей с книгами покупок и продаж. То, что в статье — это первое, что на ум приходит. И «Программа, меняющая в ставку НДС в справочнике Номенклатура с 18% на 20% находиться…» внутри конфы и назвыется Групповое изменение реквизитов. Хотя честно не помню, есть ли в 11.0 она. Еще Нужно 3-ий шаг добавить. Делаем глобальный поиск по «18» и …

    Reply
  8. baralgins

    Все сделали как описано, появился выбор ставки 20% во всех документах продажи, договорах, ПКО, РКО, безналичные платежи, номенклатуре, а вот в документах закупки нет, подскажите где копать.

    1С:Предприятие 8.3 (8.3.13.1513)

    Управление торговлей, редакция 11 (11.3.4.228)

    Reply
  9. pioner06

    Я сделал как у автора + глобальным поиском фразу «СтавкиНДС.НДС18». В 11.0.7.21 нашлось мест 50. Копипастом и заменой пробежался. Пока вроде всё норм. Далее будет видно. Если глобальным поиском по фразе «НДС18», то около 300 мест нужно править — надеюсь этого не нужно будет делать. А то ещё часа на 3. По поводу групповой обработки внутри конфы, как-то она там странно работает. Можно менять ставку, но массово только по категориям или всё сразу. Лучше заменить обработкой автора в 1 клик. Я проверил уже.

    Reply
  10. baralgins

    Вот такая ситуация.

    Reply
  11. ansonat

    (8) Та же проблема. Некогда разбираться. Пока добавили еще один реквизит СтавкаНДС на форму, а старый скрыли. Истина где-то рядом)

    Reply
  12. ansonat

    (8)Управление торговлей, редакция 11 (11.3.4.164)

    Reply

Leave a Comment

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