<?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) задача у вас «типовая» и «часто встречаемая»…
пожелания бухгалтеров оправданы и имеют место быть…
я пока не касаюсь вашего решения…
(0)
я пока не касаюсь вашего решения в целом, пока напишу что мне не нравится добавленная вами табличная часть в документе «Комплектация ном-ры». Проблемы известны : в момент записи у вас определяется одна партия, при закрытии месяца другая по причине что документы довезли и допориходовали… при этом придется перезаполнять табличную часть Комплектации или по всем документам при закрытии месяца или при каждом проведении документов приходов….
в принципе у вас основная задача — это определить корректно себестоимость списания. она решается другим способом, не надо плодить табличные части в Комплектациях….
(0) почему пришлось переписывать алгоритмы проведения? как у вас обмен происходит? с помощью типовых правил обмена? пробовали просто переопределить в правилах обмена выгружаемую номенклатуру на ПредопределнныйВашТовар? почему этого не достаточно?
(5) Rustig,
Скорее всего потому, что при таком подходе НДС «плывет» при типовом проведении.
(6) поясните пож-та
(5) Попробую пояснить, но не знаю насколько доходчиво это получится. Для начала просто попытайтесь врубиться в элементарные вещи. В одной реальной поставке товары имеют различную себестоимость и различную наценку. Это не овощная лавка, где на приход от поставщика накручивается процент наценки и товар по этой цене выставляется в торговый зал. Поэтому какие бы то ни было расчеты — пересчеты по «сводной» позиции номенклатуры исключаются. Все данные берутся из УТ или ТиС (давайте далее будем считать что это УТ) после оформления и перероведения там всех документов (восстановления последовательности) и закрытия месяца по торговым операциям. И даже если партия по какой-то причине там отсутствует, то в БП мы все равно должны указать документ и себестоимость хотя бы 1 копейку — что бы исключить пересчет. Потому и пришлось переписывать алгоритмы проведения в тех документах где разработчиками эти условия не выполнялись. В возврате товаров от покупателя можно было указать только документ сделки т.е. продажи. Представьте себе, что это это «Отчет о розничных продажах» на 100 000 рублей с себестоимостью на 70 000 рублей. и общим количеством N штук, килограммов, квадратных метров. Возвращают какую-то фмговину стоимостью 20 рублей и с/с 10. И если этого не указать, то программа тупо подставит первую по дате прихода партию и списанную по ней с/с разделит на списанное по ней же кол-во. И вместе с «копеечным» товарам вернет нам 1000 рублей себестоимости. Или наоборот с «дорогим» вернет копейки. И неизвестно, что хуже. Но в любом случае косяки в учете обеспечены, и чем дальше — тем будет хуже. Поэтому и пришлось «допиливать» конфигурацию, что бы в УТ и БП все было 1:1 и реальные данные а не черте что! Аналогично и при разукомплектации, которой подвергается конкретный товар, поступивший к нам по конкретной поставке и по четко обозначенной себестоимости которые в стандартном документе засунуть некуда.
Типовые правила обмена тоже пришлось допиливать подменой товарных позиций и выполняя свертку по поставкам.
(6) Не понимаю как НДС вообще куда-то может плыть. Тем более, что в УСН он вообще отсутствует.
(8) я согласен с тем, что конфигурация УТ полностью не автоматизирована в этом вопросе. Есть, где развернуться внедренцам.
У БП 2.0 есть механизм «не рассчитывать себестоимость самой, а брать из УТ» — и я так понимаю, вы это используете? Остается только допилить корректный расчет себестоимости в УТ и обмен из УТ в БП….
Хотел бы разобраться вот с чем: у вас в документах кто выбирает ключ «ДокументОприходования»: сама программа автоматически или человек-оператор?
и еще, пока не ясно, у вас «чистое» ФИФО или «доработанное» ФИФО ?
непонятно как так может быть:
ведь по ФИФО все четко — пришел товар за 10р, продали за «все равно за сколько», возвращают его, должен сесть приход соразмерно возвращаемому кол-ву и себестоимости 10р… напишите пож-та пример сложного учета себестоимости товара, из которого следуют ваши выводы.
(9) В УТ ничего допиливать не надо. Там программа все считает правильно. При переносе в БП я переношу не тупо документы из УТ, а с учетом их движений по регистру «Партии товаров на складах» откуда и беру значения документов оприходования и себестоимости. И операторам на этом заморачиваться не только не нужно (у них другие задачи), но и вредно даже: такого накосячат, что мама родная, только дай им волю.
В ФИФО все четко, когда четко указан товар, а когда вместо него и приходуется и продается то, что вы назвали «ПредопределнныйВашТовар» вся четкость пропадает. И все приходится указывать конкретно. Попробуйте это самостоятельно осмыслить. Или посмотреть в УТ как там проводится возврат от покупателя, введенный на основании реализации. И сопоставить с тем, о чем я писал в предыдущем посте.
(10)
ясно, за пояснение спасибо, сразу и непонятно
Приходуется и продается товар в УТ, а в не в БП! В УТ ФИФО корректно считается — ваши слова. Остается только перенести все в БП с привязкой к документам партиям. Мне не нравится что вы сворачиваете строки в документах БП по документам партиям — отсюда проблемы с ФИФО. В проводках БП надо не рассчитывать стоимость списания, а брать из табличной части документа, которая заполняется из УТ в момент обмена.
(11) Rustig,
«В проводках БП надо не рассчитывать стоимость списания, а брать из табличной части документа, которая заполняется из УТ в момент обмена» так я про то же самое говорю. Но: в возврате от покупателя отсутствовал реквизит «Документ оприходования» и при проведении программа расчетным путем его определяла. Когда я его добавил и начал заполнчть данными из УТ — все стало работать нормально. Аналогичная ситуация и с разукомплектацией. Кажется, что мы с Вами воду в ступе толочь начинаем.
Расскажите лучше, как вы цитаты в текст своего ответа вствляете, чтобы они выделялись?
Подход неплох, тоже в одном проекте думали над ним, но потом отказались по следующим причинам:
— если документ партии из УТ не отражался в бух.учете, то в бухгалтерию в качестве документа оприходования ничего не перегрузится, при проведении определится свой документ партии — и вечный минус в БП по товару в разрезе документов обеспечен
— себестоимость из УТ штука интересная, особенно, например для УТ 10.3. Вся себестоимость либо с НДС, либо вся без НДС. И если есть несколько юр лиц, часть на ОСН, часть на УСН — то не забудьте при обмене добавить/убрать НДС тем, кому он нужен/не нужен, и с учетом ставок 10 или 18 (в принципе, на этапе выгрузки УТ кривовато, но можно определить, какой был НДС и был ли он).
Остановились на варианте все же переносить номенклатуру, но не тянуть документы партии и себестоимость. И там, где можно, в БП поставить учет МПЗ по-средней.
(12)
когда оформляете сообщение, над окном ввода текста должны присутствовать кнопки — среди них есть «кавычки» — оформление текста в виде цитаты — между тегами вставляйте скопированный текст, или сначала выделите его в чужом сообщении, а затем жмите оформить в виде цитаты, веб-страница сама подставит в ваше сообщение цитату
Нет, не начали, это только вам кажется — вы эту проблему несколько лет «сопровождаете», поэтому в статье «проглотили» часть мысли… я восполнил некоторые пробелы.
и все-таки осталось не ясно:
1) вы сворачиваете ТЧ в документах БП? чем аргументируете?
2) у вас до сих пор проблемы с тем, что
(14)
Товар везде один и тот же (для исключения каких-либо недоразумений он подставляется в параметрах выгрузки поиском по коду) и сворачиваем табличную часть в разрезе документов поставки. Какие тут еще аргументы нужны?
по второму тегу: тут тоже проблем никаких нет. Надо просто обязательно указывать документ поставки и себестоимость (определяются, как я уже говорил, при выгрузке данных в БП). Указанные суммы по указанным поставкам списываются при проведении документов с 41 счета без каких-либо пересчетов и подмены указанных значений. А описанная мной проблема, на которую Вы и ссылались возникала в типовом (от 1С) возврате от покупателя с отсутствующем в ТЧ реквизите «Документ оприходывания».