<?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='\
(0) Форма в стиле «клюшек».
http://infostart.ru/public/14228/ или других, цены не будет. Или за деньги будешь продавать.
Сделай лучше по образцу
или на СКД )) ваще нарядно былоб
На СКД, кстати, хорошая тема.
Спасибо за конструктивную критику, немножно доработал обработку.
(4)
1. При выборе партнёра контрагента можно подставлять автоматически, если он один.
2. При добавлении в дополнительные обработки предупреждение: обработка требует разрешить использование в небезопасном режиме.
ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина);
Кстати, в будущей УТ 11.0.6 тоже работает.
Спасибо, сделано, ну и если организация одна, тоже автоматом ставится
(6) Держи облагороженную обработку, можешь опубликовать как свою.
[+] Форма в стиле 8.2.
[+] Сохранение настроек.
[+] Открытие документа в печатной форме.
[+] Небольшой рефакторинг кода.
Ошибка:При сверке с поставщиками у которых сальдо на начало периода дебетовое — выводит кредитовое!
Было бы возможно, поставила бы сотню плюсов! Спасибо!Отлично. Всё работает на Управление торговлей, редакция 11.0 (11.0.6.9)
Поручику отдельное спасибо за «наводку»…
В УТ 11.0.6.9 есть стандартная обработка «Сверки взаиморасчетов»
В УТ 11.0 печатная форма документа «сверка взаиморасчетов» очень не удобоваримая , непонятно зачем нужно было разработчикам выдумывать велосипед, если уже давно была нормальная форма акта сверки, которая в бухгалтерии предпр. 2.0 под 8.2 кстати осталась в нормальном виде.Всё возможные стандартные средства уже проверены и сделаны определенные выводы … Взаиморасчеты в УТ 11 в любом виде (акты, ведомости и пр.)не удобно сделаны, т.к либо нужно «проходить» всех контрагентов на конец каждого периода и делать зачет задолжостей , либо привязку док.оплаты и док. отгрузки (заказа), а иначе долги дает в развернутом виде, а нужно (хотя бы в печатной форме) , чтобы взаиморасчеты были «свернуты», поэтому очень нужен был такой акт сверки, который представлен здесь. Теперь остается дождаться , чтобы ведомость взаиморасчетов со «свернутыми долгами» появилась, как это реализовано в УТ 10.3 (типа «по договору в целом»)
Мое мнение, как обычного пользователя-потребителя продукта- бухгалтера, а не программиста, возможно оно поможет кому-нибудь понять наши приземленные потребности.
Очень нужная вещь, особенно когда пользователи-бухгалтера хотят видеть В УТ 11 привычное. Спасибо, все работает. Это еще один аргумент, чтобы консерваторы-бухгалтера не кричали «Вот Ваша 8-ка…, а говорили все есть.»
Спасибо. Работает. При этом мягко сказать «удивлен» отсутствием в типовой УТ стандартной формы акта сверки !!!
(5) ,
«Кстати, в будущей УТ 11.0.6 тоже работает.»
А эта обработка работает в УТ 11.0.7 ?
(15) Проверь сам. Ещё не хватало, чтобы я чужие работы проверял.
в mxtv разница между стандартной 8,2 УТ?
(0) На УТ 11.0.7.13 уже не работает. Функция ФамилияИнициалыФизЛица() из модуля ФормированиеПечатныхФорм перенесена в ФизическиеЛица.
Могу подарить рабочую версию.
С 1С мы без работы не останемся. Постоянные переносы процедур, переименования модулей, объектов не дадут скучать.
(18) Поручик,
На УТ 11.0.7.13 уже не работает. Функция ФамилияИнициалыФизЛица() из модуля ФормированиеПечатныхФорм перенесена в ФизическиеЛица.
Могу подарить рабочую версию.
Я бы не отказался от рабочей версии в 11.0.7.13 😉
(19) Обязательно повторять сообщение? Если автор согласится, выложу.
«Обязательно повторять сообщение? Если автор согласится, выложу.»
Добрый день. Если есть уже рабочая версия под 11.0.7.13 выложите пожалуйста, т.к. у меня на данный момент ещё нет такой версии УТ для доработки.
Добавил файл обработки для версии УТ 11.0.7.13
Акт_Сверки_11.0.7.13
(21) Надо было указать номер сообщения в круглых скобках, тогда я бы получил уведомление и вывалил в тот же день. Кстати, в своём варианте я сделал вывод входящей даты и номера в поступлении товаров и поступлении ДС.
«Надо было указать номер сообщения в круглых скобках, тогда я бы получил уведомление и вывалил в тот же день»
Извините, мало общаюсь на форумах поэтому не знал таких нюансов
Ваш Акт сверки немного подглючивает, посмотрите на первом скриншоте в акте сверки сальдо на 31.12.11 в колонке Дебет, а на втором скриншоте, сальдо на начало периода 01.01.12 в колонке кредит…т.е. неправильно переносит сальдовку между годами.
Вот еще один пример неверного отображения данных, в этом случае на конец 2011 года сальдовки нет. А в 2012 году она появляется причем в удвоенном размере оборотов 2011 года…
(26) Спасибо, посмотрю в чём причина, постараюсь исправить.
(26) исправил найденные ошибки
(28)Спасибо, сейчас потестим!!!
(27) Посмотрел, для тех партнеров которых я приводил в пример, все нормально. Попробовал взять партнера с более частыми отгрузками, вот что получилось: опять проблема с сальдо…
(31) Спасибо за сообщение, тестирую обработку, пока что не получается воспроизвести ситуацию, которая изображена на экране. Использую и возвраты и предоплату и не доплату: а также ситуацию когда один контрагент выступает и в качестве покупателя и в качестве продавца, ни как не выходит.
Может я смогу помочь еще информацией, этот партнер — это партнер родитель, т.е. у него есть еще несколько партнеров у которых контрагент просто ИП Никитенко. Я пораскрывал в акте сверки реализации и туда пападают все реализации по контрагенту ИН Никитенко, а партнеры (клиенты) в этих реализациях разные. А сальдо, возможно, переносится только по оному партнеру.
Прикреплю еще один скриншот, который охватывает весь период на предыдущих скриншотах.
И скриншот, где видно какая структура у партнера ИП Никитенко.
Интересно узнать, работаете ли Вы надо доработкой акта сверки? Я думаю причина его некорректной работы кроется именно в том, что имеются партнеры-родители и контрагенты-родители.
(34) К сожалению пока ещё не разбирался с описанной Вами ситуацией, на текущий момент много работы. Как только обновлю версию отчёта сразу же отпишусь в комментариях.
а как произвести печать из самого документа?
(36) Обработка сделана не как внешняя печатная форма. Поэтому ни как.
Не проверил ли кто работоспособность отчета на УТ 10? Заранее, спасибо.
данная обработка будет работать на КА в управляемом интерфейсе?
1С:Предприятие 8.2 (8.2.17.169)
Управление торговлей, редакция 11.1 (11.1.1.11)
В ней нет реквизитов ТекущийРуководитель уже… Соответственно нужно изменить код для подбора руководителя и бухгалтера из подчиненного справочника ОтветственныеЛицаОрганизаций.
нашел код вот этот в модуле пользователя:
ТекущаяОбласть = Макет.ПолучитьОбласть(«Подвал»);
ТекущаяОбласть.Параметры.ДатаОкончания = Формат(ДатаОкончания, «ДФ=dd.MM.yyyy»);
ТекущаяОбласть.Параметры.Организация = Организация;
ТекущаяОбласть.Параметры.Контрагент = Контрагент;
ТекущаяОбласть.Параметры.СальдоКонечное = Формат(ИтоговоеСальдо, «ЧДЦ=2»);
ТекущаяОбласть.Параметры.СуммаПрописью = СуммаПрописью;
ТекущаяОбласть.Параметры.Результат = Результат;
ТекущаяОбласть.Параметры.ОрганизацияИНН = Организация.ИНН;
ТекущаяОбласть.Параметры.КонтрагентИНН = Контрагент.ИНН;
ТабличныйДокумент.Вывести(ТекущаяОбласть);
и после него вставил вот так:
// Получить выборку по ответственным лицам организации.
Выборка = Справочники.ОтветственныеЛицаОрганизаций.Выбрать( , Организация);
Пока Выборка.Следующий() Цикл
ФИО= ФизическиеЛица.ФамилияИнициалыФизЛица(Выборка.ФизическоеЛицо.Наименование);
Должность = сокрЛП(Выборка.ОтветственноеЛицо);
Если СокрЛП(Должность) = «Руководитель» тогда
РуководительФИО = ФИО;
РуководительДолжность = Должность;
КонецЕсли;
Если СокрЛП(Должность) = «Главный бухгалтер» тогда
ГлавныйБухгалтерФИО = ФИО;
ГлавныйБухгалтерДолжность = Должность;
КонецЕсли;
КонецЦикла;
Если ТипПодписи = «Руководитель» Тогда
ТекущаяОбласть = Макет.ПолучитьОбласть(«Подпись»);
ТекущаяОбласть.Параметры.ФИО = РуководительФИО;
ТекущаяОбласть.Параметры.ПредставлениеДолжности = РуководительДолжность;
ТабличныйДокумент.Вывести(ТекущаяОбласть);
ИначеЕсли ТипПодписи = «Оба» Тогда
ТекущаяОбласть = Макет.ПолучитьОбласть(«Подпись»);
ТекущаяОбласть.Параметры.ФИО = РуководительФИО;
ТекущаяОбласть.Параметры.ПредставлениеДолжности = РуководительДолжность;
ТабличныйДокумент.Вывести(ТекущаяОбласть);
ТекущаяОбласть = Макет.ПолучитьОбласть(«Подпись»);
ТекущаяОбласть.Параметры.ФИО = ГлавныйБухгалтерФИО;
ТекущаяОбласть.Параметры.ПредставлениеДолжности = ГлавныйБухгалтерДолжность;
ТабличныйДокумент.Вывести(ТекущаяОбласть);
Иначе
ТекущаяОбласть = Макет.ПолучитьОбласть(«Подпись»);
ТекущаяОбласть.Параметры.ФИО = ГлавныйБухгалтерФИО;
ТекущаяОбласть.Параметры.ПредставлениеДолжности = ГлавныйБухгалтерДолжность;
ТабличныйДокумент.Вывести(ТекущаяОбласть);
КонецЕсли;
ТекущаяОбласть = Макет.ПолучитьОбласть(«МП»);
ТабличныйДокумент.Вывести(ТекущаяОбласть);
Возврат ТабличныйДокумент;
Хотел еще шапку доработать, чтобы вписывались сами ответственные лица, но руки пока не дошли…
(41) romul_666,
спасибо за код…