Порядок обработки результатов инвентаризации, устранение пересортицы, отнесение результатов на МОЛ.




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

22 Comments

  1. VK

    Много воды… Вольный пересказ учебника по ТиС от 1С. Так МОЛ и разбежался подписывать документы, скорее уволится. Что за отчет ПО АНАЛИЗУ ПЛАНА СЧЕТОВ, чего анализировать в ТИС, справочник план счетов? При чем здесь Штрих ТП ПРОФ?

    Не стоит путать термины Превышение и Пересортица. Превышение не есть факт пересортицы. А ввобще для проведения инвентаризации есть более «гуманные» методы, например с использованием ТСД. Кассиру кстати плевать на ошибки, сканер пикнул, товар определился, покупатель согласен, его не обсчитали, а нужное он выбрал сам на полке. Да и еще магазин то свой не светите, он далеко не эталон под Вашим руководством. Теория это одно, а практика другое

    Reply
  2. Sprite
    Reply
  3. ineoosaki

    2 Sprite

    Благодарю за такую длинный ответ на мой вопрос.

    Хотя ничего нового не подчерпнул.

    Постараюсь в ближайшее время выложить свое видение поднятой темы.

    Reply
  4. Sprite

    to: ineoosaki

    Аналогично. Будет интересно ознакомиться…

    Спасибо за оценку. 🙂

    Reply
  5. CheBurator

    Зачастую списание недостач по результатм инвентаризации не стоит делать. Бывает целесообразно «отложить» решение. Это можно сделать «переместив» излишки по учетным данным на отдельную «виртуальную» фирму-склад — тем самым исключив отсутсвующий в реальности товар из товарооборота. НО! Здесь надо быть аккуратным — и такое перемещение «настроить» в соответсвии с констанотой «Контроль отрицательных остатков»

    Reply
  6. vitaliys

    У нас хоть и не типовая ТИС, но методика проведения инвентаризации и контроля товаров похожа. Есть МОЛ «Ревизор» на котором собираются результаты миниревизий и ежедневного проведения отчета ККМ, есть порог списания недостач. Раз в квартал проводится анализ и списывается товар с «Ревизора». Миниревизии проводятся ежедневно по группам и категориям товаров, как с помощью ТСД, так и с помощью сличительных ведомостей. Для отчета ККМ предусмотрена форма «Контроль остатков», по которой проводится мини-миниревизия. Основная работа действительно направлена на устранения самих причин образования пересортицы и недостачи товаров. Самая распространенная причина: Покупатель берет 2 банки кофе (например) кассир сканирует товар, потом вводит количество 2 так как на вид банки абсолютно одинаковые, а в номенклатуре это разные позиции, ну и т.д. Много занимаюсь этим вопросом, готов обменяться опытом.

    Reply
  7. alel

    У нас ситуация следующая: Проводим инвентаризацию отдела/группы товаров, используем ТСД. При анализе полученных данных получается: По позициям(товарам) «попавшим в ТСД» результат более-менее нормальный… Но если полученные данные о фактических остатках сравнить с полным списком номенклатуры отдела/группы товаров(то есть добавить номенклатуру, которую не посчитали), то получается совсем другая, неутешительная картина.. Если кто сможет поделиться опытом, буду благодарен..

    Reply
  8. nnvlad

    ревизия супермаркетов предполагает наличие знаний не только технических, но и подводных, например бонусный товар:

    предприятию выдается бонусный бесплатный товар и не во всех программах имеется возможность учета такого товара, очень часто он просто не фиксируется и расхищается, но поскольку чаще всего бонусный товар дается не нужный поставщику, то как правило в вашей базе он тоже заведен не был и компьютер обнаруживает во время ревизии оприходованный товар без цены. Если присвоить этому товару закупочную цену, то сумма этих излишек автоматически снизит возможную сумму убытка, что не правильно!

    Таких ситуаций немало, существует схема увода такого товавра от учета и подменой другим и т.д.

    Reply
  9. Sprite

    to: nnvlad

    Очень согласен.

    Конечно не возможно дать идеальное лекарство и считать его панацеей.

    Конечно всегда надо думать головой.

    Просто надо выделять отдельные проблемы в своём магазине и стараться их окончательно решать. Не только компьютерным учетом, но и организационными методами.

    Как часть Ваших вопросов решается у меня в магазине. C учётом технических средств.

    Товар, который пришел по акции ( например: «Купи 3 по цене 2») — отдельно формируются комплекты, комплектам присваиваются ШК. Этот случай простой.

    Посложнее. «Купи консервы, получи сок в подарок». Товар «Сок» оприходуется по розничной стоимости. На «консервы» в «Штрих-М Кассира» вводится суммовая скидка, равная стоимости «Сока». При продаже продавцы пробивают Консервы (со скидкой) и сок (по розничной стоимости).

    Конкретизирую мысль. Не надо подарков по нулевой стоимости. Тем более, что в настройках кассовых программ зачастую запрещены продажи товара по цене=0 руб.. Необходимо такие «Подарки» привязывать к товарам, имеющим стоимость!

    В большинстве случаев такое возможно.

    Ну а мелочи типа «Купи гороховую кашу — получи рулон туалетной бумаги» — как решите сами. Важно ли при обороте в 6-нулей считать копейки, или посчитаем бумагу бонусом

    (в том числе и нашим продавцам)?

    Конечно, необходимо следить за тем, чтобы в случае оприходования «бонусного товара» на упаковке не маячило «Not for sale». Сегодня столкнулся с «грамотной работой» менеджера. Гонять их надо на склад. А это уже мера организационная! 🙂

    Reply
  10. Sprite

    to Atel 7 — 03.12.2007

    Считать надо всё.Даже если вдруг в учётной программе определены отрицательные остатки, то и их ТОЖЕ!

    Обычно заканчиваю инвентаризацию так:

    Написана обработка инвентаризационных ведомостей ( правда для Штрих-М ТППроф, но и в ТиС методика может быть такой же), где анализируется товар, учтённый в инвентаризацию.

    Как делать? Берём всю элементы справочника номенклатуры. Формируем Запрос по остаткам. Выкладываем в «ТЗ.Номенклатура». Выбираем Документы инвентаризации ( за период инвентаризации ). Перебираем ТЧ каждого документа. Товары выкладываем в «ТЗ.Инвентаризация». Далее цикл по «ТЗ.Инвентаризация» и поиск по коду в «ТЗ.Номенклатура» с удалением текущей строки в «ТЗ.Номенклатура». В итоге в «ТЗ.Номенклатура» будем иметь товары, не вошедшие в инвентаризацию.

    Постарался изложить понятным языком? 🙂

    Reply
  11. Wolf_DA

    А, что делать с товаром который есть в инвентаризации, но нет на остатках номенклатуры ?

    Reply
  12. Abadonna

    (11) А классный вопрос 😉

    Reply
  13. Sprite

    Блин, мужики, Вы как только родились…

    Алаверды. Вопрос на вопрос:

    «А что вы делаете с товаром, который НИКОГДА ранее не закупали, а теперь закупили?» . Оприходуете? Да!

    В нашем случае выбирайте документ «Оприходование ТМЦ» (там есть возможность обращения к плану счетов и формированию бух. проводки).

    В п. 5.3 Методических указаний по инвентаризации имущества и финансовых обязательств, утвержденных Приказом Минфина России от 13 июня 1995 г. N 49 говорится о том, что взаимный зачет излишков и недостач в результате пересортицы может быть допущен только в виде исключения:

    — за один и тот же проверяемый период;

    — у одного и того же проверяемого лица;

    — в отношении товарно-материальных ценностей одного и того же наименования и в тождественных количествах.

    Иначе говоря, нельзя зачесть излишки и недостачи по товарам разного наименования и разного количества. На это также указано в Письме Минфина России от 19 августа 2004 г. N 07-05-14/217.

    Кроме этого:

    Если выявлены недостача и излишек товаров разного вида, то зачет недостачи излишками неправомерен. Следовательно, выявленные недостача и излишек отражаются в бухгалтерском учете в общеустановленном порядке.

    В целях исчисления налога на прибыль понятие «пересортица» отсутствует, поэтому для целей налогообложения выявленная по результатам инвентаризации недостача не учитывается в составе расходов, поскольку не выполняются условия, предусмотренные пп. 5 п. 2 ст. 265 НК РФ. А выявленные излишки материалов и иного имущества учитываются в составе внереализационных доходов по рыночной цене на основании п. 20 ст. 250, п. п. 5 и 6 ст. 274 НК РФ. Взаимозачет между недостачей товаров одного вида (сорта) и излишками товаров другого вида (сорта) не производится.

    Reply
  14. igslepenko

    Может быть, я ошибаюсь, но! в конце статьи предлагается списывать недостачу на счет 73.2, однако, насколько я помню, в бухучете принято списывать недостачу на счет 94, а уже затем на расчтеты с сотрудниками. В данном случае, для разбора технологии проведения инвентаризации, это, возможно, не принципиально, но, по моему мнению, такие вещи тоже лучше прописывать точнее 🙂

    Reply
  15. Abadonna

    (13) Это ты только родился 😉 Нормальный человек, обнаружив непроходящий по документам товар, спавляет его налево :))))

    Reply
  16. Wolf_DA

    Если есть недостача в магазине (торговом зале) ее обычно относят на коллектив сотрудников, имеющих непосредственное отношение к данному товару и в данном торговом зале (складе). В Вашей схеме, Вы создаете излишнюю нервозность в коллективе выискивая конкретных (как Вам кажется) сотрудников виновных в пересорте. Т.е. если четко не организована предпродажная подготовка товаров и действия кассиров, то можно долго бороться с пересортом. Т.е. мусор на входе -> мусор на выходе. Т.е. инвентаризация есть оценка действий руководства, а по каким счетам ее разнесет бухгалтерия это вторично.

    Reply
  17. Sprite

    to Abadonna

    🙂

    Сотрудник делает так, как Вы улыбнулись.

    Хозяин делает по другому 🙂

    Мы говорим о том, как правильно и честно.

    Как воровать у хозяина — тема не этой статьи. 😉

    Reply
  18. Sprite

    Wolf_DA

    Согласен полностью.

    Пример:

    В результате инвентаризации магазина выяснено, что 3 месяца назад был принят товар по накладной с Главного склада. Сотрудник, принимавший товар, расписался в накладной за указанное количество. Реально пришло меньше (вскрыла инвентаризация на Главном складе и доп. анализ движения ТМЦ). Наказан конкретный сотрудник, принимавший товар.

    Мой вывод: Результат инвентаризации — это не только приведение в порядок товарных остатков на складе и в учетной программе, но и расследование и устранение причин недостач и пересорта. В том числе наказание деньгами конкретных сотрудников, НЕ КАЧЕСТВЕННО выполняющих свои должностные обязанности.

    А какие есть другие предложения по повышению КАЧЕСТВА работы?

    Reply
  19. Sprite

    to igslepenko

    Согласен. Постараюсь подробно.

    В бухгалтерском учете выявленные суммы пересортицы товаров оформляются следующими записями по счетам учета:

    дебет счета 94 «Недостачи и потери от порчи ценностей» кредит счета 41 «Товары» — отражена недостача товаров одного сорта (по ценам, по которым товары отражены в бухгалтерском учете организации);

    дебет счета 41 кредит счета 94 — излишек товаров другого сорта (по ценам, по которым товары учтены в бухгалтерском учете организации);

    дебет счета 41 кредит счета 41 — зачет недостачи товаров по пересортице;

    дебет счета 73 «Расчеты с персоналом по прочим операциям» кредит счета 94 — отнесение за счет виновных лиц разницы в стоимости недостающих ценностей над стоимостью излишествующих ценностей (по балансовой стоимости недостающих ценностей);

    дебет счета 73 кредит счета 98 «Доходы будущих периодов», субсчет «Разница между суммой, подлежащей взысканию с виновных лиц, и балансовой стоимостью по недостачам ценностей» — на сумму разницы между рыночной стоимостью недостач и их балансовой стоимостью (согласно ст.246 ТК РФ размер ущерба при утрате имущества определяется исходя из рыночных цен, действующих в данной местности на день причинения ущерба, но не ниже стоимости имущества по данным бухгалтерского учета);

    дебет счета 98 кредит счета 91, субсчет «Прочие доходы» — по мере погашения задолженности по недостачам учтенные разницы в стоимости недостающих товаров включаются в состав внереализационных доходов организации;

    дебет счета 91 «Прочие доходы и расходы», субсчет «Прочие расходы» кредит счета 94 — списание за счет организации разницы в стоимости недостающих ценностей над стоимостью излишествующих ценностей (по балансовой стоимости).

    Примечание. Из зарплаты работника при каждой выплате можно удержать не более 20 процентов, в особых случаях — 50 процентов (ст. 138 Трудового кодекса РФ).

    Reply
  20. mihenius

    Вышло новое разъяснение по поводу кражи и НДС

    читаем тут

    http://www.buh.ru/newsDescr-3348

    Reply
  21. evg300183

    Много воды… Вольный пересказ учебника по ТиС от 1С.-согласен

    Reply
  22. evg300183

    Постараюсь в ближайшее время выложить свое видение поднятой темы.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *