<?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='\
Очень нужная обработка. Спасибо. Упрощу интерфейс и отдам бухгалтерам, пусть исправляют косяки.
А как сработает обработка, если расчеты ведуться по двум и более договорам.
(1) Заполнение ведется в разрезе договоров. При заполнении платежек и ордеров отбор для заполнения делается по договору, указанному в документе. Главное, чтобы в документе стоял правильный договор.
вероятно очень полезность
к сожалению в УТ 10.3.5.1 не заполняет
кто-нибудь пробовал в более ранних чем 10.3.6.8?
спасибо
(3) К сожалению, не проверял. А так на память не помню. Но, по идее, должна пойти. Проверь, есть ли, например, в документе реализации вкладка «Предоплата». Код на заполнение взят из обработки действия кнопки «Заполнить-Заполнить документы предоплаты» + дописано заполнение структуры для заполнения.
(4) + и установлен ли флаг «Вести по документам расчетов с контрагентами» в договоре контрагента.
в РТиУ разумеется — все договоры по основным видам деятельности «по док-м расчетов» — руками все и заполняли
великое зло когда контры задним числом молят изменить что-либо и … о чудо — ваша обработка
пробовал различные комбинации опций — глухо
табличные части пп не трогает вовсе
(6) > великое зло когда контры задним числом молят изменить что-либо
Это точно. Сам маюсь.
И все-таки, есть ли в РТиУ вкладка «Предоплата»? И какой код привязан в кнопке заполнения? У меня вот какой код
УправлениеВзаиморасчетами.ЗаполнитьПредоплату(ЭтотОбъект, мСтруктураПараметровВзаиморасчетов);
В обработке я вызываю то же самое, но предварительно заполняю структуру «мСтруктураПараметровВзаиморасчетов»
(6) >табличные части пп не трогает вовсе
А вот насчет платежек не могу утверждать, что будет работать. Когда там отбор по договору сделали — не заметил.
Там, в принципе, тоже все взято из типовой.
А ручками если вызвать заполнение из п/п — заполняет?
предоплата есть и в РТиУ и в ПТиУ
ручками заполнение работает — оно конечно непростое но после заполнения 3-й пп работа мартышкина…
времени жаль но делать нужно — прежде бывало братишку сажал перепроводить цепочки расчетов
отличную вещь вы изобрели
(9) Хм…. если ручками заполняет, значит, и так должно пойти. Можно отладчиком пройтись, посмотреть, на чем затыкается. Может, в 10.3.5.1 как-то по-другому делалось.
большое спасибо.очень полезная штука.Отработала в ред 10.3.3.3.Только поменяла УправлениеДенежнымиСредствами.ЗаполнитьРасшифровкуПлатежей(СтруктураПараметров); на
РаботаСДиалогами.ЗаполнитьРасшифровкуПлатежей(СтруктураПараметров); Отработала на плат. входящих и приходных кассовых ордерах, даже, если у контрагента несколько договоров.Закрывается все по соответствующим договорам. Очень нужная штука и очень срочно была нужна.Ещё раз спасибо.
(11) код заменил — не спасло
в служ.сообщениях пишет мол колдует с документами, открываю любой — расчетные не заполнены
однако ручное заполнение работает, при след.опциях:
«По текущей задолженности»
«По фактической задолженности»
«Сначала ранние задолженности»
«Подбирать сумму»
«По сумме платежа»
все остальные выключены, без отбора договоров
может беда в этом
…и хорошо бы ставку НДС устанавливать — вручную приходится в каждом пп устанавливать
А я сейчас нечто похожее для своей конторы пишу…
У Вас есть недочет — не обрабатываются документы «ВозвратТоваровОтПокупателя».
(13) да, я заметил, только поздновато. 🙂 Как появлюсь на работе, выложу дополненный вариант. Щас в отпуске. 🙂
(13) Обновил. Включил также обработку документов поставщиков (поступление товаров, возвраты поставщику)
Большое спасибо!!! Такая нужная вещь!!!
Seducer, огромное спасибо!
А не могли бы вы включить еще обработку корректировок?
(17) Каких корректировок?
Корректировок долга. Это тоже вроде расчетные документы.
(19) Хм…. видимо, я у себя позже добавил. Обработку обновил.
Спасибо, правда у меня выдает ошибку (на стр.619) — во входящем плат.поручении не заполнено поле Заказ покупателя 🙁
(21) Надо посмотреть, что у вас происходит в модуле платежки. Возможно, у вас это поле является обязательным. У меня все договора ведутся в целом. Код открыт, так что можно подправить. 🙂
А может кто сказать по конкретней из за чего вся эта фигня получается….типа была реализация а в структуре подчиненности на основании ее была еще одна реализация и ПКО…..из чего все это получается…что операторы делают не так
(23) Ну насчет моих могу сказать, что виновато исправление задним числом. Очень часто лазят. 🙁 Хоть и по служебкам, но лазят.
seducer Подскажи пожалуйста….во общем ввели торговлю где в договорах стоит признак «Вести по документам расчетов с контрагентами»…а теперь из за полного хауса….получается черти шо…. как можно или что за чем нужно сделать что бы так сказать все пере провести но только с договорами без этого признака
1) Убрать во всех договорах признак «Вести по документам расчетов с контрагентами»
2) Перепровести все документы….но предварительно очистить таб. часть «ДокументыРасчетовСКонтрагентом» … а как исправит переходники….или их в принципе не трогать
(25) Не совсем въехал в вопрос. 🙂
Признак «Вести по документам расчетов с контрагентами» не получится убрать, если есть проведенные документы с этим договором.
Можно взять копию и на ней поэкспериментировать. В обработке есть отбор, по которому можно отобрать контрагентов, договора. И попробовать перепровести (на копии, естественно) эти документы. Посмотреть, что получится. Но опять же, это не полностью устранит проблему, т.к. в документах заполняются вкладки с документами расчетов. Это надо, чтобы потом люди еще и с этими вкладками работали. Про себя хочу сказать, что я решил проблему на тот момент времени, но….. сейчас опять все перемешалось. Увы, но менеджеры такие. 🙁
Ну вопрос такой…5 дней база работала с договорами у которых есть признак «Вести по документам расчетов с контрагентами»….как теперь сделать так… (а точнее последовательность действий)…. что бы после всех этих действий….получилось бы так …как если бы мы с самого первого дня работали с договорами у которых нету признака «Вести по документам расчетов с контрагентами»
(27) Т.е. избавить от признака «Вести по документам расчетов с контрагентами»в договорах, я правильно понял?
Если да, то тут
1. Очистить таб.часть «ДокументыРасчетовСКонтрагентом» у этих документов.
2. Далее пойти по одному из двух вариантов:
а) распровести документы, убрать признак в договоре, провести документы
б) в коде временно обойти сообщение, где делается проверка на снятие признака, снять признак, перепровести документы (либо очистить регистр «ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов»)
Ну или в какой-нибудь другой вариации.
Все зависит от того, какой у вас уровень. 😀
Да ты правильно понял…спасибо….а то с этими операторами можно повесится….
PS. Уровень конечно можно и по луче 🙂 …. набираюсь опыта…спасибо таким людям как ты, а что по этой теме…то хотел уточнить не влияет ли еще этот признак как кроме движений по регистру «ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов»
(29) 😀
Ну сам признак, конечно же, не просто так в договоре стоит. Можно прогнать конфигурацию на поиск данного реквизита (глобальный поиск) и посмотреть, где он используется. 🙂
Спасибо запустилось, полезная штука.
Обычно с этими документами расчетов одно расстройство.
Могли бы и полегче придумать для чайников.
Еще раз большое спасибо.
очень полезная обработка. пришлось добавить отмену проведения платежек перед заполнением. Теперь все взаиморасчеты выравниваются быстро и легко.
Спасибо, очень нужная, но для УПП немного приходится подпиливать.
Скажите, а на платформе 8.2 работает?
(34) Да, только нужно предварительно открыть обработку в конфигураторе, чтобы она сконвертировалась под 8.2
Все бы хорошо, но…есть у нас такие ситуации (и их очень много): сначала была продажа, потом оплата, причем в платежном документе указан заказ, хотя взаиморасчеты ведутся по договору в целом. В этих случаях обработка не работает, не заполняет в платежных документах документ расчетов. Если поле заказ очистить, то все нормально.
Круто!! Работает!!!
Договора с позаказным учетом у нас скорее ошибка, поэтому просто вставил игнорирование их в обработке, чтоб в ошибку не валилось. Спасибо!!!!!!!!!!
Такая экономия времени! Ура!!! Спасибо большое!!!
А можно сделать чтобы заполнялись во входящих платежках заказ покупателя (сделка) ?