<?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='\
даже странно что такие решения стали выкладываться бесплатно, автору + 🙂
Ай , да автор. Ай ,да молодец. Не проверяя — только за идею +.
Не проверяя — только за идею +.
Сначала плюс за важный шаг в учете производственных затрат.
Теперь вопросы: откуда взять коэффициенты распределения? Как мы поступаем со вторичными затратами (раз есть первичные затраты, вторичные, очевидно, тоже рассматриваются)?
(2) Согласен.
(4) коэффициенты беруться на основании учетной политике.
Имхо наиболее удобно брать = заполнять коэффициенты пропорционально фонду оплаты труда(относимых к определенным видам деятельности) или суммы реализации(с учитывая что вид деятельности облагается НДС и не облагается НДС). А если нельзя определить к какому виду деятельности относится расход(затрата) тогда пропорционально реализации.
—-
Литература по теме: ПБУ 10/99 «Расходы организации», ст.318, 319 Налогового Кодекса.
Всем спасибо за отзывы и плюсы.
(4) По поводу коэффициентов. Пожалуй соглашусь с gutentag, коэффициенты должны устанавливаться на основе учетной политики организации. В качестве коэффициентов могут быть и всевозможные «чел/час»,»тн/км»,»кв/ч» и т.д., если мы говорим о услугах вспомогательных производств. Для выпущенной готовой продукции в качестве коэффициента скорее всего будет ПлановаяСтоимость*Количество. Тут важно понимать одно коэффициент <> доля, доля вычисляется как отношение коэффициента получателя к сумме коэффициентов всех получателей одного источника.
Если же имелось ввиду автоматическое (или автоматизированное) заполнение коэффициентов, то в данных обработках эта опция отсутствует, однако при необходимости никто не мешает ее туда прикрутить.
По поводу вторичных затрат, не совсем понятен вопрос. Вторичные затраты распределяются, также как и первичные. Важно, что вкладывается в понятие «вторичные затраты», по мне так как только первичные затраты ушли от одного объекта к другому они уже стали вторичными.
(7) Цех №1 (электроцех) освещает цех №7 (котельную), а котельная отапливает электроцех. Отопление электроцеха и освещение котельной — явно вторичные затраты, коэффициенты к учетной политике в данном случае отношения не имеют (и даже меняются в зависимости от времени года), и совсем не относятся к готовой продукции, тем более, ее реализации. Ну и? Как прикручивать опцию автоматизированного заполнения коэффициентов?
вот спасибо!
Это просто супер! Согласен с 1
(8) Вы совершенно правы, а я вот ошибся с формулировкой — в учетной политике, конечно же, устанавливаются правила получения коэффициентов, а не сами коэффициенты (точнее коэффициенты тоже могут устанавливаться, но это скорее исключение, нежели правило). В приведенном Вами примере, в учетной политике должно быть отражено, что затраты «Цех №1 (электроцех)» распределяются пропорционально количеству отпущенной электроэнергии, а затраты «Цех №7 (котельная)» распределяются пропорционально количеству отпущенного пара, т.е. коэффициентами будут выступать натуральные показатели. Под автоматизированным заполнением коэффициентов в данном случае, я имел ввиду получение коэффициентов на основе анализа документов «Отчет производства за смену».
Кстати, приведенный Вами в (8) пример, существует в выложенном мной примере «Пример для УниверсальноеРаспределениеЗатратТест»: объект с кодом 683 «23 — Цех №1 (Электроснабжение)» и объект с кодом 704 «23 — Цех №7 (Котельная)». Они взаимодействуют также, как Вы и описали. При этом коэффициентами для «23 — Цех №1 (Электроснабжение)» являются «квт/ч», а для «23 — Цех №7 (Котельная)» — «гкал».
P.S. Приведенный мной пример «Пример для УниверсальноеРаспределениеЗатратТест» содержит реальные взаимосвязи объектов реального предприятия (по этическим соображениям в нем изменены названия объектов, значения коэффициентов и суммы первоначальных затрат).
Выложил статью, в которой описывается дополнительная область применения данного алгоритма распределения затрат и общее описание работы самого алгоритма,http://infostart.ru/blogs/1196
у нас нечто подобное в 7ке сделано. по договорам которые в работе раскидываем затраты набравшиеся по 25му счету…
(6),(7),(8) Затраты надо грамотно классифицировать как прямые и накладные, а не первичные и вторичные. С такой классификацией не только вас не поймут, но и вы долго будете понимать о чем речь идет. Основной недостаток универсальной системы распределения затрат хочется выделить отсутствие возможности реализации сложного алгоритма при распределении накладных затрат. Примером хочу отметится, если базой служиться полученная рентабельность по выручке(СуммаРениабельности1=ВыручкаПродукция1*1.2, СуммаРениабельности2=ВыручкаПродукции2*1.02 и т.д) при этом сформировавшееся распределение служит базой для последующего, т.е. динамиченское. Как здесь эта обработка поведет себя?
Лично я не сторонник универсальности, поскольку реализовывал оч. сложные алгоритмы. Автору большой ПЛЮС за единомыслие!!!
(15) За большой ПЛЮС, спасибо.
(14) Мы говорим о разной классификации затрат, т.е. классификации для разных целей. Попробую дать еще одно определение: Первичные затраты — это затраты, сумма которых известна из первичных документов. Вторичные затраты — это затраты, которые возникают при распределении от одних объектов к другим, т.е. затраты полученные одним объектом от другого, при распределении и есть вторичные, их сумма изначально неизвестна и формируется в процессе распределения.
По-поводу приведенного примера сложной схемы распределения. В интерактивном режиме данная задача обработкой не решается. А вот в программном, ничто не мешает распределить затраты один раз, на основе результатов установить новые коэффициенты и провести распределение еще раз. При проведении повторного распределения, можно оставить связи только тех объектов, которые так или иначе, связаны с объектами, для которых меняются коэффициенты.
(14)Ну, если речь идет о торговой фирме и оценке менеджмента, то накладные расходы действительно подлежат первоочередному вычурному анализу. А на простом заводе они сводятся к зарплате управленческого аппарата, т.е. постоянны. Здесь на первый план выходит анализ эффективности цехов, который без учета вторичных затрат невозможен.
Нельзя задать период, очень не хватает!
Период добавить-то можно, только не понятно зачем. Может лучше дату, на которую должны формироваться проводки.
Пока не пользовался, но + за грамотную проработку и справку
Спасибо!
А нельзя ли эту обработку адаптировать под УПП. очень нужно, а то мне выдает ошибку: Поле объекта не обнаружено (новнаяОрганизация)
ЗначениеИзПараметраСеанса = ПараметрыСеанса[Сред(ИмяПараметра, 3)]; и обработка запоролена
(22) Постараюсь посмотреть к понедельнику. Если не сложно версию конфигурации напишите на всякий случай.
Вот — Управление производственным предприятием, редакция 1.2 (1.2.20.1)
Заранее, спасибо 🙂
Demarsh, получилось у вас посмотреть для упп?
Demarsh, скажите пожалуйста стоит ли еще ждать? очень нужна эта обработочка 🙁
ТатьянкаО, сорри, была срочная работа — только освободился. Завтра обязательно будет обновление. Кстати, паролем защищен только модуль объекта (т.е. модуль самой обработки) — в нем находятся процедуры и функции, которые будут работать в любой конфигурации. А вот ошибка проявляется из модуля Формы — он как раз незапароленный и его можно изменять, просто при сохранении на предложение ввести пароль следует нажать отмена, при этом изменение модуля формы будет записано.
ТатьянкаО, обработка обновлена и теперь ее можно использовать и в конфигурации «Управление производственным предприятием». Также исправлен ряд мелких ошибок.
Спасибо за обработку! Жаль не переделали под 2,0
за идею+
Идея хороша, но код модуля под паролем.