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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *