Закрытие 23 сч в соответствии с ПБУ 10/99 "Расходы организации" и в соотв. со ст.318, 319 Налогового Кодекса




Принцип обмена данными из 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='\

21 Comments

  1. Арчибальд

    Проблема 23 счета интересная, Минфином (1С соответственно) практчески не регламентируемая. Частично в статье http://infostart.ru/blogs/1040/ я этого касался.

    Т.е. общая потребность у производственных предприятий: поделить услуги вспомогательных производств по адресатам (номенклатура основного производства, свои вспомогательные цеха, внешние потребители, и еще, я бы добавил, изготовление материалов).

    Из скринов, к сожалению, не видно, какую идею Вы применили. Учтены ли в составе затрат вспомогательных цехов услуги, оказанные им другими вспомогательными цехами. Из приложенного текста тоже мало можно извлечь.

    Может, опишете свое решение в виде статьи? С удовольствием принял бы участие в обсуждении…

    Reply
  2. gutentag

    А что помешало сделать обработку для табличной части документа, что бы кнопка прописывалась автоматически?

    Имхо можно в учетной политике прописать, что счет 23 части «Услуги сторонним клиентам» закрывается через счет 20. А затем распределять/закрывать 23-счет в 20 по видам деятельности.



    ЗЫ. Просьба сделать для распределения 29-счета или вообще более универсальную обработку в т.ч. для 25 и 26 счетов

    Reply
  3. Арчибальд

    (2) Хошь конфу семерочную? Для Бух 4.4, правда… И вроде бы без 25,26 (не помню точно). Производственные отчеты на счетах 20 23, 29, взаимные услуги цехов, продажа на сторону с 23, незавершенка по цехам…

    Reply
  4. gutentag

    (3) спасибо, но я бухгалтер, а не программер не смогу воспользоваться :-/

    И в семерке(если не менять типовую конфигурацию), я бы все «вспомогательные счета» через 20счет перегонял при помощи «заполнялки/расперделялки» для бухгалтерской справки в в виде внешней обработки. Хотя знаю, что «перегонять» услуги выполненные вспомогательными подразделениями через счет 20 — не есть правильно (….Ну, если только прописать в учетной политике, что услуги оказываемые более 1-месяца/раза являются основным видом деятельности).

    —-

    ЗЫ. точно также я бы и 19-счет распределял бы по «Облагаемым НДС» и «Не облагаемым НДС» операциям.

    Reply
  5. Арчибальд

    (4)»Расперделялка» — зачоооООот :))

    Reply
  6. popkovsf65

    Ответы на комментарии:

    № 2: Дык и пожалуйста делайте! Еслиф сделаю чё будет?

    Reply
  7. popkovsf65

    Семерочную ненадо, пройденный этам, ужо в 2003 годе написал распределение вспомогательных счетов (23, 25, осталные не было прицендента)

    Ща на 8.1, так что 7.7 исчерпала свою актуальность!

    Reply
  8. popkovsf65

    Арчибальду спасибо, можна даже плюсиков не ставить!

    И так всё ясно!

    Reply
  9. Арчибальд

    (8) Ну, если плюсики не нужны, тогда конечно…

    А хочется поставить плюс за интересную мысль по способам распределения (на любой платформе). Но не хотите — Ваше дело.

    Reply
  10. popkovsf65

    А нам программерам много надо, мы и так MAC адрес спрячем

    Reply
  11. gutentag

    (6) Мне просто не понятно, почему это не сделано работа выложена в виде текста, а не обработки табличной части :-/

    —-

    это высказал пожелание/идею. но ее еще надо додумывать….

    Я 23 и 29 счета не имею. ИМХО если бы имел счета 23 и 29, то сделал бы как написал в (2).

    Reply
  12. popkovsf65

    По просьбе gutentag обновление см. в файлах для скачивания

    Reply
  13. gutentag

    > Закрытие 23 сч в соответствии с ПБУ 18

    Не в соответствии с ПБУ 18(оно определяет взаимосвязь между бух.прибылью и прибылью в соотв. с НК) , а элемент учетной политики в сответствии с ПБУ 10/99 «Расходы организации» и в соотв. со ст.318, 319 Налогового Кодекса.

    Reply
  14. popkovsf65

    Спасибо за консультацию!

    Reply
  15. anig99

    я распределяю пропорционально в УПП внешней обработкой — одновременно по бухсчетам и затратным регистрам. После этого стандартный механизм Распределение материалов и Распределение прочих затрат их подхватывает и при расчете себестоимости все ок.

    Reply
  16. gutentag

    (15) > я распределяю пропорционально

    — по-подробнее, пожалуйста: пропорционально чему(какой базе)?

    Reply
  17. anig99

    пропорционально объему производства в учетных ценах (регистр выпускпродукциибухучет)

    Reply
  18. popkovsf65

    Как помню, что рассказывала гл. бух, то берется выручка по

    вспомогательному производству и основному по отдельности.

    Считается их коэффициент по отношению к всей выручке. Ну а потома в

    весь 23 счет распределяется по етим коэффициентам по номенклатурной

    группе, подразделениям, статьям затрат.

    Reply
  19. popkovsf65

    У вас есть возможность проверить! Дотуп для скачивания = «Все»

    Reply
  20. maria7777777

    в ответ на данную тему: мои бухи также долго бились над решением данной задачи, все равно распределение 23 счета происходит некорректно, решили действовать дедовским способом… базу и проценты считают бухи вручную, а распределяют с помощью вот этой обработки http://infostart.ru/public/60252/

    Reply
  21. popkovsf65

    После обнародования закрытие 23 сч было доработано. В течении 2009-2010 г. закрывался 23 сч. идеально. Только надо было соблюдать порядок проведения документов. С 2011 перешли на «директ-костинг» и проблема с 23 сч отпала. Могу выложить конфу и описание технологии закрытия 23 сч., если конечно проблема актуальна! Но советую всем переходить на «директ-костинг».

    Reply

Leave a Comment

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