Разукрупнение (разделение, дробление) и частичная ликвидация основных средств




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

42 Comments

  1. German

    Уровень!, «снимаю шляпу»

    Reply
  2. makas

    Тут только за картинку с «машиной» надо ставить отдельный плюс!

    А за статью — отдельный респект от пользователя БП 2.0!

    Reply
  3. maxprofi

    (1) German,

    спасибо

    Reply
  4. maxprofi

    (2) makas, )))

    Недолго осталось старушке, максимум через полгода проводим БП 2.0 в последний путь…

    Reply
  5. makas

    (4) maxprofi,

    Недолго осталось старушке, максимум через полгода проводим БП 2.0 в последний путь…

    Если 1С не «обрубит обновления» как это было с БП 1.6, тогда имхо еще долго бухи не слезут с БП 2.0

    Reply
  6. maxprofi

    (5) makas,

    Если 1С не «обрубит обновления» как это было с БП 1.6, тогда имхо еще долго бухи не слезут с БП 2.0

    В 1С хорошо знают такую неудобную привычку бухов, поэтому очень хотят обрубить:

    http://www.1c.ru/news/info.jsp?id=16872

    «К 2014 году поддержку редакции 2.0 конфигурации «Бухгалтерия предприятия» предполагается прекратить».

    Хотя, может быть, и страшилка, поскольку только лишь «предполагается». Возможно, дадут еще годик, чтобы проститься.

    Reply
  7. help1Ckr

    За оформление и труд однозначно плюс!

    Reply
  8. kiko_r

    чуть не съел свой «котелок» когда нажимал ОК. Потрясающе!!!!

    Reply
  9. tango

    (6) maxprofi, дадут и больше — франи не успевают свои шняги на уф перевести

    Reply
  10. jonybanchicov

    Супер!

    Поростите, а сделать из 2х объектов 1 — реализвано в типовом функционале?

    Reply
  11. maxprofi

    (10) jonybanchicov, нет, слияние не реализовано. Но обычно в нем и нет необходимости — приняты к учету два объекта по отдельности, так и остаются, бухгалтер не будет париться слиянием, зачем? Разукрупнение же нужно, когда деваться просто некуда — например, сняли и продали навесное оборудование с основного средства, или, скажем, передали в другой филиал через 79 счет. Речь идет исключительно про регламентированный учет, в управленческом, конечно, потребности могут быть самыми разнообразными.

    Слияние ОС «просто так» требуется разве что «крупняку», когда начинаются фантазии всяких «методологов» из «отделов внутреннего аудита» по «оптимизации учета». Но у крупняка для этого есть собственные программисты и консультанты 1С. Или франчик поможет за несколько сотен тыров ))

    Reply
  12. maxprofi

    (10) Однако, если очень хочется, можно сделать «модернизацию одного ОС другим»:

    1. Списать одно из них с учета документом «Списание ОС».

    2. Оприходовать на склад «полученный после демонтажа материал» документом «Оприходование товаров»: Д 10 — К 91.

    3. Списать материал на затраты по модернизации «Требованием-накладной»: Д 08.03 — К 10.

    4. Провести модернизацию второго ОС документом «Модернизация ОС»: Д 01 — К 08.03.

    Если из двух рождается вообще новый объект, а не один присоединяется к другому, то можно списать оба ОС, поскидывать полученное на 08.03 и ввести новый объект документом «Принятие ОС к учету». Получится монтаж нового объекта из «б/у материалов, полученных от демонтажа».

    Но здесь нужно быть готовым объяснить налоговой, почему у «нового» объекта срок использования меньше, чем положено. Либо ставить его снова на полный срок, но тогда, соответственно, растянется период амортизации и списание стоимости ОС на затраты. Технически метод есть, а риски пусть берет на себя ГБ.

    Reply
  13. jonybanchicov

    Вот реальная ситуация:

    Было две квартиры с разными кадастровыми номерами и часть подъезда. Всё вместе объединили и получили

    новый объект. Старые свидетельства о собственности юстиция изъяла ….

    Reply
  14. maxprofi

    (13) jonybanchicov, реальные действия ГБ в данной реальной ситуации: морду кирпичом, и никаких операций в учете не проводить )) Это не мои фантазии, а результаты консультаций у трех ГБ с 15-25летним опытом.

    Суть в чем — ни объединение, ни разукрупнение ОС напрямую законодательством не предусмотрены, и поэтому в дело вступает так называемое профессиональное суждение бухов, методологов, аудиторов. Когда встречаете в их статьях оговорку «по нашему мнению, ля-ля-ля», это вот оно и есть — рассуждения без ссылок на нормативно-правовую базу.

    В случае с разукрупнением выбора нет — приходится разделять, поскольку дальше с отдельными кусками объекта производятся какие-то значимые действия (просто так, «чтобы было» в здравом уме никто ничего такого делать не станет).

    А насчет объединения ОС, подлежащих госрегистрации (как в вашем случае), есть, например, вот такое профессиональное суждение:

    «Относительно государственной регистрации права собственности хотелось бы отметить следующее.

    Государственная регистрация является доказательством существования зарегистрированного права собственности на здание, но не является условием для принятия его в качестве основного средства.

    ПБУ 6/01 не содержит специального условия о наличии факта государственной регистрации права собственности на объект недвижимости для учета этого объекта только в качестве единого основного средства. Так, например, существуют общеизвестные случаи, когда в бухгалтерском учете числятся несколько основных средств, а свидетельство о праве собственности на эти основные средства оформлено одно. Это, в частности, возможно при учете АЗС, имеющих здание магазина, кафе и т.д.

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

    Брызгалин А.В., Федорова О.С., Харалгина О.Л., Королева М.В., Ильиных Д.А., Ефремова Е.С., Митрофанова И.А., Кондрашова Н.А., Курдяев А.Е. Налог на прибыль: сложные вопросы из практики налогового консультирования // Налоги и финансовое право. 2012. N 8. С. 22 — 26, 37 — 343.

    То есть можно не объединять ваши квартиры. Но можно и объединить, прямого запрета нет. Как думаете, что выберет большинство главбухов? ))

    Вот и я до создания обработки сделал десятки разукрупнений ОС и ни одного объединения. Это не значит, что оно не нужно вообще никогда и никому. Нужно, но в исчезающе редких случаях по сравнению с разукрупнением — если профсуждение какого-нибудь ГБ настойчиво заставляет ее оформлять операции вместо того, чтобы пить чай с пряниками.

    Reply
  15. IZaylenkova

    Супер!!! Раньше приходилось делать кучу манипуляций с документами, чтобы разукрупнить ОС.

    Reply
  16. shoy

    Интересно, какую такую кучу манипуляций можно было сделать, чтобы ОС разукрупнились?

    Я, вот, честно, не знаю такого набора или его последовательности!

    Reply
  17. shoy

    Благодарю за такую содержательную публикацию. Очень понравилось.

    Только теперь форму ОС-6 переделать осталось, чтобы хоть как то отразить факт Частичной ликвидации.

    Нет ли у кого под рукой?

    Reply
  18. unsimple

    Грандиозно! Респект!

    Reply
  19. Lukich66

    За 25 лет в бух.учете лишь в одной орг. столкнулся с «частичной ликвидацией»( читай разукрупнением ) ОС, и то это связано с тем , что изначально была оприходована ОС( 2-я технологическая линия содержащая 5 реакторов, каждый из которых сам по определению является ОС), В н.в. после N-лет эксплуатации и в связи с изменениями в технологии принимается решение демонтировать один из реакторов, а на его место поставить новый с другими характеристиками. Есть проект,смета и т.д. и т.п. Срок полной амортизации 2-ой ТЛ еще не закончился. Вопрос к автору.

    Что бы Вы могли порекомендовать ГБ для правильного отражения в УПП возникшей ситуации ?

    Reply
  20. maxprofi

    (20) Lukich66,

    Разукрупнение ОС часто встречается в отраслях, где ОС имеют размытые границы, и невозможно однозначно определить «комплекс конструктивно сочлененных компонентов…» и так далее по классическому определению объекта ОС. Например, я много работал с телекоммуникационными операторами, там бухи пускаются во все тяжкие, кто во что горазд. Кто-то принимает каждую железку как отдельный объект, кто формирует укрупненные объекты типа «Узел связи», постоянно их модернизируя новыми железками по ходу развития сети (и тут разукрупнение частый гость — сняли маршрутизатор с узла и продали клиенту как б/у для организации связи с его стороны, или просто списали по моральному устареванию). А одни девчата вообще реализовали крайний случай в бухучете — единственный объект ОС «Городская сеть передачи данных» стоимостью несколько сотен млн руб.

    Или вот лет 8-9 назад была опупея с регистрацией сооружений кабельной канализации как объектов недвижимости — сотнями отдирали их от укрупненных объектов «Линия связи». Для бухов тотальный гемор, а для 1Сников дополнительная икра на хлеб с маслом.

    Reply
  21. maxprofi
    Reply
  22. FKLDOZ

    maxprofi , Вы супер! Описание впечаляет! Скачала обработку, буду делать разукрупнение по ней.

    Reply
  23. FKLDOZ

    (22) maxprofi, делаю по Вашей обрабоке «Разукрупнение ОС». В ведомости по амортизации для ОС, который разукрупняю не показана сумма уменьшения. Хотя а обортке по счету 01.01 показан Кредит суммы. Это верно? Так и должно быть?

    У меня ухгалтерия предприятия, редакция 2.0 (2.0.64.23).

    На ИТС смотрела как там делали частичную ликвидацию, там показана сумма уменьшения.

    Reply
  24. maxprofi

    (23) Спасибоси ))

    (24) Да, по задумке программистов 1С так и должно быть… В БП 2.0 в отчете «Ведомость амортизации ОС» с какого-то перепуга гвоздями прибиты условия типа «ГДЕ Обороты.Регистратор ССЫЛКА Документ.ПринятиеКУчетуОС» и т.п., в некоторых местах обороты по регистратору Документ.ОперацияБух так же сознательно исключаются в тексте запроса.

    В статье на ИТС пример приводится для БП 3.0, в этой конфигурации 1С опомнилась и по видам регистраторов уже ничего не фильтрует, оборот по кредиту счета 01 — значит уменьшение стоимости без всяких экивоков.

    Reply
  25. human_new

    Огромная работа, благодарю!

    Reply
  26. Alex_E

    Отличная вещь! Есть пара вопросов/предложений — в БП 3.0.41.56, вылезла ошибка в строке

    ДокОбъект.ЗаполнениеДвижений.Очистить();

    — закомментарил, т.к. отладчик показывает, что ЗаполнениеДвижений в операции сейчас отсутствет;

    стал «разукрупнять» ОС принятое к учету в 2008 году, сразу закомментарил проверку на запись регистров в закрытом периоде, т.к. кроме этих самых регистров ничего в тех периодах не меняется, но записать сведения об ОС туда нужно, ради этого отменять, потом устанавливать запрет, ИМХО, ни к чему, в большинстве случаях запрет будет стоять, но ни на какие последовательности запись регистров сведений по ОС не повлияет, поэтому сделал так:

    Процедура УстановитьПериодЗаписейРегистра(ТДатыПринятия, НаборЗаписей)
    
    Если НаборЗаписей.Количество() > 0 Тогда
    Для каждого Запись Из НаборЗаписей Цикл
    СтрокаПринятия = ТДатыПринятия.Найти(Запись.ОсновноеСредство, «ОсновноеСредство»);
    Если СтрокаПринятия <> Неопределено Тогда
    Запись.Период = СтрокаПринятия.ДатаПринятия;
    НаборЗаписей.Записывать = Истина;
    НаборЗаписей.ОбменДанными.Загрузка = Истина;//+++добавил
    КонецЕсли;
    КонецЦикла;
    
    //Если НаборЗаписейРегистраСведенийВЗакрытомПериоде(НаборЗаписей) Тогда //+++убрал
    // ОтменитьТранзакцию();
    // ВызватьИсключение «Установлена дата запрета изменения данных прошлых периодов»;
    //КонецЕсли;                            //—убрал проверку
    КонецЕсли;
    
    КонецПроцедуры
    

    Показать

    Может я не прав, но без этих изменений записать операцию не удалось.

    А так — плюс однозначно — «пилить» ОС время от времени приходится, метод тот же, но руками — долго и муторно, тут дёшево и сердито 🙂

    Да, забыл, — оптом заменил все

    Предупреждение(

    на

    ПоказатьПредупрждение( ,

    , а то у бухгалтера матерное слово «модальных» в сочетании с «запрещено» нервный тик вызывает, но это так, мелочь)))))))))))))))

    Reply
  27. nordwest

    Спасибо, обработка отличнейшая!

    Подскажите, пожалуйста, УПП 1.3 «Ведомость амортизации за период» не отражается амортизация за последний месяц (месяц списания).

    Т.е., например:

    амортизация на начало периода = 100 руб

    амортизация за период = -100

    амортизация на конец периода = 0

    Но здесь нет 10 руб (амортизация, которая начислена в текущем месяце)

    Это правильно?

    Reply
  28. kiko_r

    Просто потрясающе!!!!

    Reply
  29. tunesoft

    Спасибо за обработку, работает отлично как в БП 2 так и в БП 3.

    Reply
  30. kauksi

    Просто супер пупер обработка!

    Про объедининие: бывают люди покупают два земельных участка, и объединяют их в один. Поскольку аммортизации в таких случаях нет, делаем просто Дт0804 Кт 01

    а потом модернизация ОС

    в случае зданий методика описана тут http://www.consulting.ites.ru/publications/publ0022.shtml. Если реализуете, не грех и продавать новую крутую обработку за небольшие денежки

    Reply
  31. marlin479206

    Вы — просто ГЕНИЙ ! Давно не встречала такой качественной работы. Обработку обязательно скачаю.

    Reply
  32. marlin479206

    Файл скачала, проверила. Бухгалтерия 3.0.44.188. При проводке операции выдается сообщение об ошибке «Поле объекта не обнаружено(ЗаполнениеДвижений)». Жаль. Очень хорошая обработка, нужная. Как можно исправить????

    Reply
  33. kg2

    (33)Вы исправили? Работает у Вас эта обработка в БП 3.0.44.188 ?

    Reply
  34. kg2

    В БП 3.0.44.199 тоже при сохранении ошибка

    «Не удалось сохранить данные движения документа » Поле объекта не обнаружено(ЗаполнениеДвижений)».

    Как исправить?

    Reply
  35. akim2040

    Извините что подымаю старую тему, но что хочет от меня обработка во время проведения.

    Амортизация в этом месяце уже начислялась для основного средства Нежилое помещение 40 лет Октября 62 стр. 4 пом. 75 пл. 13916,9 кв. м . 1 этаж (000000457), инв. № 0000378.

    Укажите эти данные в документах принятия к учету или изменения параметров начисления амортизации (Меню «ОС»,»НМА»).

    ?

    заранее благодарю за ответ

    Reply
  36. Bobak

    В БП 3.0 не работало. Поправил, теперь работает. Ну, то есть в БП 3.0 работает, как в остальных конфигурациях я не знаю.

    Автор, куда скинуть изменения?

    Reply
  37. citkhv

    (37) Суда скинь изменения у меня ошибка ЗаполнениеДвижений не обнаружено

    Reply
  38. marlin479206

    (38)

    Reply
  39. marlin479206

    В последней версии БП 3.0 программа перестала работать. Кто знает как исправить?

    Reply
  40. Shilov

    Подскажите пожалуйста. Задействуется ли 91 счёт при разукрепнении ?? БП 3.0. Необходимо разделить ОС для последующей продажи его части.

    Reply
  41. citkhv

    После обновления БП3.0 обработка перестала работать пишет не обнаружен метод объекта ПодготовитьТаблицуАмортизацияОС. Как исправить?

    Reply
  42. Kyda

    Добрый вечер! Уважаемый автор, будет ли обновление у вашей обработки? очень надо земельный участок поделить.

    Reply

Leave a Comment

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