<?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='\
я вот до сих пор удивляюсь, кому это из идеологов УТ пришла «такая» умная мысль хранить себестоимость партий товаров только в одной валюте и не пересчитывать в национальную?
в любой валюте? 😮 да вам надо нобелевскую премию вручить!
внеоборотные активы в управленческом учете
(1) (2) Удивляет сарказм )
Есть «посчитанные» данные в валюте упр учета, очень часто она не национальная. Но, бывает что хочется посмотреть на эти же цифры, но в «другой валюте», как будто эта «другая валюта» у нас является валютой упр. учета. Данный отчет эту возможность и предоставляет — ни больше и не меньше.
(3)Ссылка на сайт 1С:УУ не вдохновила по двум причинам :
1. Страница «Они уже внедрили» на доработке (нет возможности сравнить с количеством внедренных конфигураций УТ).
2. Отчет предназначен для УТ 10.3. Если в 1С:УУ данный функционал реализован — это замечательно. В УТ этого нет — а, хочется.
как раз в данном случае это был не сарказм… я посмотрю Ваш отчет, и думаю, что поставлю плюс… имелось ввиду следующее, что взаиморасчеты с контрагентами ведуться в двух валютах, а себестомость партий товаров только в управленческой… вот это маразм и сильно портит жисть
2(2): на лету пересчитывать из валюты в валюту нет никаких сложностей, так что нобелевскую премию можете оставить себе )
(4) вот именно, что пересчет идет именно по валюте упр учета, а не по валюте договора — причем основные регистры на котором строится отчет — «Продажи» и «ПродажисСебестоимость». Они то все в валюте упр учета.
Вы правы — пересчитать на лету не проблема, выложил как готовое решение + получилось внести изменения «аккуратно» — можно использовать как «рыбу» для переделки других отчетов УТ.
С учетом того, что почти все типовые отчеты в УТ 10.3 довольно удобны в части запроса — внесение изменений по пересчету становится очень простым делом.
курс берется из справочника…а желательно из курса взаимоотношений в каждом документе…и это было правильнее, так как в один день могут осуществлятся продажи по разным курсам…а в курсе покупки у поставщика вообще нельзя ориентироваться на курс справочника, т.к. покупаешь заграницей в несколько этапов и разными кусками, которые получаются по разным курсам…
(6) Насколько помню в регистры пишутся суммы пересчитанные по курсу валюты управленческого учета на дату документа из валюты и курса документа.
Т.о если валюта документа = валюте упр учета, а курс отличается — то, сумма которая попадет в регистр будет больше или меньше суммы указанной в документе.
Имхо, в данном случае курс и валюта документа не играют абсолютно никакой роли — можно смело опираться на данные в регистре и курс валюты упр. учета на дату документа.
Или я не прав? 😉
Вопрос в том, что например мне очень важно, чтобы в управленческий
учет попадала правильная сумма евро, для того он у меня и указан в
евро. Иначе говоря, при каждом проведении любого документа, в евро он
или в рублях, в справочнике курса я устанавливливаю правильную
цифру… В итоге я идеально вижу картину в евро, чего мне и надо…но
для финансового отчета требуется стоимость проданного в рублях, чего
при управленческом в евро в итоге отчетом не увидишь…приходится
дорабатывать в Экселе, опираясь на записанный курс взаиморасчетов по
отдельно каждому документу… К сожалению ваша обработка не выдала
правильных цифр, так как все документы пересчитываюся через курс в
справочнике, для этого надо было всю базу проводить через один курс,
указанный в справочнике, но тогда бы в отчетах по евро, встроенных в
программу картина бы была кривая (неправильная)…Не знаю, удалось ли
объяснить… может быть в итоге то, чего мне хотелось от подобного
отчета — слишком сложная задача, но скорее всего через курс
взаиморасчетов по каждому отдельному документу — это решаемо…
(8) интересно, а как вы перепроводите документы? Ведь по Вашему сообщению выходит, что фактически для каждого документа используется «свой» курс валюты. и похоже что эта информация (связка документ — курс) нигде не сохраняется.
сохраняется…в комментариях заполняю информацию по каждому документу…в любой момент можно снова перепровести по правильному для этого документа курсу
(10) Мдя…. Вам не кажется, что данное решение как минимум странно?
Ну да ладно, Вам виднее, наверное )
А какие еще есть решения?…мне нужна точная евровая сумма управленческого учета…Может мне и не виднее, я просто нашла такой способ точности учета, а какие еще есть возможности?
подскажите…
(13) У тебя какая версия УТ?
10.3.7.9
Если есть возможность постучись в аське — 331631312. постараюсь помочь.
спасибо, обязательно, завтра
Если вести управленческий учет в валюте например в USD, то при получении данных в рублях данные будут ошибочны, ниже пример:
Купили товар по 3000 руб., курс в базе 30.00 руб., Себестоимость = 100 USD
Продаём товар по 6000 руб., курс в базе 32.00 руб., Стоимость продажи в USD = 187,5 USD. Прибыль в USD = 87,5 USD.
И тут самое главное, какова прибыль в рублях? Из условия видно, что должна быть 3.000 руб., но по отчёту (курс берётся на дату продажи) 87,5 * 32 = 2800 руб.
Поэтому, чтобы отчёт выводил фактическую прибыль в рублях, надо считать так:
ПрибыльВРуб = (ПродажиUSD * КурсНаДатуПродажи) — (СебестоимостьUSD * КурсНаДатуДокументаОприходования), т.е. в цифрах так:
3000 = (187,5 * 32) — (100 * 30) = 6000 — 3000
ываыв
По примеру данного отчета создан отчет«Валовая прибыль по поставщикам» .Спасибо автору за подробные комментарии.
(18) barmolei3,
С точки зрения математики и количества денег в валюте «руб.» расчет однозначно верен, но, представьте, что Ваш бизнес жестко привязан к USD, тогда 3000 руб. для Вас не будут тремя тысячами с точки зрения прибыли на день продажи. 3000 руб. на день продажи равны 93,75 USD, но ведь это абсолютно не соответствует действительности, т.к. прибыль в долларах составила всего 87,5 USD.
Таким образом, если рассчитывать прибыль по предложенному Вами алгоритму, на конец месяца мы получим абсолютно разные цифры и в прибыли в деньгах, и в прибыли в процентах по разным валютам.
В 1С 7.7 похожий отчет считал прибыль в валюте, отличающейся от учетной, по курсу на день формирования отчета. Ни на день закупки, ни на день продажи, а именно на день формирования отчета. Полагаю, такой подход является правильным, т.к. аналитическую ценность отчет все равно представляет лишь в той валюте, в которой ведется управленческий учет. А остальные валюты являются лишь эквивалентом той, которая нам важна.
Если представить ситуацию, что мы месяц торговали, а в конце месяца решили рассчитаться с поставщиками и конвертировать все полученные по сделкам деньги в валюту учета, то, в принципе, у нас и получится картина, которую выдавал нам отчет в 1С 7.7 — прибыль в рублях будет равна прибыли в долларах, умноженной на курс доллара на день формирования отчета.
(18) barmolei3, на самом деле данный учет является правильным.
У меня вопрос, а где в данной обработке необходимо изменить код, чтобы считалось именно по курсу поступления, а не продажи.
Мое руководство ведет учет в другой программе и отчеты строят в 3-х валютах: Euro (товар, закупаемый в евро), USD (товар, закупаемый в USD) и руб. (товар, закупаемый в руб.). При чем все продается в рублях (по курсу на день продажи).
И формула расчета прибыли и наценки должна быть именно (ПродажиUSD * КурсНаДатуПродажи) — (СебестоимостьUSD * КурсНаДатуДокументаОприходования), т.к. если курс берется на дату продажи в обоих случаях, то из-за скачков курса себестоимость считается неправильно.
(22)
ознаграждений) исправить источник данных — не Продажи, а Продажи себестоимость. И тут же Регистратор на ДокументОприходования.
Необходимо в добавляемом запросе (процедура ИсправитьТекстЗапросаДляРасчетаУправленческойСебестоимостиИВ
(23) вроде исправил, но выдается ошибка…»Неверные параметры»
Перед выполнением запроса в отладчике получите «собранный» запрос и проверьте хоть конструктором его синтаксис.
(18) Кому удалось решить этот вопрос? ссылку дайте пожалуйста…
Подскажите пажалуйста, имею 1с 8,3 УТП 1.2 при формирование вашего отчета вылазит ошибка «не включать ндс в стоимость партий» как ее исправить?
(5) Добрый день! Скачал отчет все отлично но есть один небольшой ньюанс!
У меня валюта упр.учета Доллар а валюта рег.учета рубль. Теперь весь прикол курс к примеру 30
Сам прикол начинается в том что у меня есть договора в которых тип цен выбран розничный в долларах но валюта самого договора рубли! и у меня считает многие позиции неправильно! Что мне делать что посоветуете?
есть какой то другой вариант? я хотел бы видеть что бы то что в договорах хоть и рубль пускай покажет и себестоимость и продажу в рублях или если поменял на доллар то в долларах! Ваш же отчет как только выбираю доллара считает по курсу но только почему то сам доллар делит на 30 а в рублях показывает цену продажи и себестоимость по цене долларовой и получается что я цена продажи 5000 рублей себестоимость 0.14 центов! в итоге прибыль 4999.86 рублей показывает или наоборот))) как мне решить данную проблему? Заранее благодарен!