<?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='\
ИМХО для небольшого предприятия — это удобная вещь! (+)
ИМХО для предприятий, с несколькими видами деятельности (в т.ч. НДС-18% и Без НДС), надо распределять затраты по видам деятельности, а если нельзя конкретно распределить, то распределять пропоционально выручке. И это удобнее делать в проводках.
(2) Согласен, и вариантов может быть куча: можно при помощи данной обработки распределить по видам деятельности и по подразделениям, а статью затрат выбрать — распределяемые, и потом программа сама разделит по НДС/без НДС/ЕНВД.
именно такая обработка нужна для 7.7. Может подскажете, где можно взять? )
(4) Если очень надо, могу нарисовать и для 7.7. Только так красиво не получится, в доке Услуги сторонних организаций нет возможности даже внешнюю форму прикрутить, по-этому либо отдельная внешняя обработка либо изменение конфигурации…
Обновил обработку. Могла возникнуть ситуация, когда нераспределенные копейки в результате округления падали не на строку с максимальной суммой. В случае с большими суммами и небольшим количеством строк такое вообще не случается. Но когда наоборот, то вполне может быть ситуация, подробно рассмотренная вhttp://infostart.ru/projects/2780/ . Планирую в будущем, если будет надо, поправить алгоритм, как там описано.
Добавил обработку для Бухгалтерии 7.7.
(4) Смотрите…
(7) Ура !
идея хорошая, нужно попробовать…
хорошая идея
для УПП 1.1 работает? Скачала, обработка вроде открылась, но выбрать документ ссылку не получается, список документов не открывается
(11) Вообще-то для УПП не рассматривалось. В УПП в этом документе другие поля в услугах. Но в-общем работает, проверил на релизе 1.2.19.1 (какой был). Какие поля есть, заполняет, другие нет. Переделать не сложно, модуль не большой. Тут главное идея…
А обработку прямо открывать не нужно, нужно ее подключить в меню Сервис — Доп.отчеты и обработки — Обработки заполнения таб.частей — Добавить — выбрать этот файл, сохранить. Потом в заполненном документе Поступление на закладке услуги нажать Заполнить и выбрать Распределение поступления.
В УПП 1.1 такого нет ( в меню Сервис — Доп.отчеты и обработки — Обработки заполнения таб.частей) :((, это только в 1.2….
Борюсь за распределение ОПЗ между подразделениями, так как в УПП 1.1 этого нет, думала, может хоть Вашей обработкой облегчить жизнь, но и тут облом:(
(13) Можно попробовать обновить конфигурацию, или вставить модуль обработки в документ и к кнопке привязать…
(14) Обновление конфигурации до 1.2 — наболевший вопрос: очень много доработок и за обновление выставляют огромный счет (почти как новое внедрение). Поэтому пока работаем на 1.1. Будем пробовать вставить модуль в документ…
(13)+ Немного доделал обработку: теперь можно пользоваться через Файл — открыть. Посмотрите.
Попробовала
пишет ошибку
{Форма.Форма(25,28)}: Переменная не определена (РаботаСДиалогами)
мКнопкиЗаполненияТЧ = <<?>>РаботаСДиалогами.СформироватьПодменюЗаполненияТЧ(ДокументСсылка, СоответствиеТЧ, Новый Действие(«НажатиеНаДополнительнуюКнопкуЗаполненияТЧ»));
(14) Понятно, версия слишком отличается. К сожалению такого старого релиза УПП у меня нет, проверить не могу.:(( На 1.2 работает… Придется Вам самим встраивать в конфигурацию
(17) Хотя нет, я там лишнего написал в 18, попробуйте сейчас, обновил обработку.
Открыла, спросил способ отражения расходов, заполнила, выдал :
{ВнешняяОбработка.РаспределениеПоступления(55)}: Ошибка при вызове метода контекста (Свернуть): Неверное имя колонки
ТаблицаУслуг.Свернуть(«СпособОтраженияРасходов,Номенклатура,Содержание,СтавкаНДС,СчетУчетаНДС,ОтражениеВУСН,Цена»,
по причине:
Неверное имя колонки
Для семерки все же можно было бы не извращаться с материалами, а использовать «ПрочиеОбъекыУчета». Но +
(21) Весь смысл не в справочнике материалов, а в подчиненном справочнике «Назначения использования» — там заносится база распределения. А в «ПрочиеОбъекыУчета» — без серьезного конфигурирования я не понимаю, как туда базу воткнуть…
(22)Там три уровня. Вместо владельца берем родителя, а процент загоняем в наименование.
(20) Видно сильно структура поменялась. Два варианта решения задачи: Вы мне можете скинуть имена всех реквизитов, что используются в ТЧ услуги в этом доке у Вас (смотреть в конфигураторе), или взять и ручками поправить этот модуль — там в трех местах всего…
(23) А счет затрат и 3 уровня аналитики по БУ и НУ?
(25)Да не спорю я, так универсальней. Мое замечание касалось примера из описания. Счет и два субконто — в самом документе, по третьему субконто (Подразделения) делим обработкой.
Заказ
Количество
Номенклатура
НоменклатурнаяГруппа
ОбъектСтроительства
Подразделение
ПодразделениеОрганизации
Продукция
Проект
СерияПродукции
Содержание
СтавкаНДС
СтатьяЗатрат
Субконто1
Субконто2
Субконто3
Сумма
СуммаНДС
СчетЗатрат
СчетУчетаНДС
НДСВключенВСтоимость
ХарактеристикаПродукции
ВидДеятельностиНДС
ВидНалоговойДеятельности
Амортизируется
Цена
ТС
РасходБП
ПутевойЛист
(27) Юлия, напишите какой-нибудь адрес эл.почты, туда скину…
(28) написала в личку