<?php // Полная загрузка сервисных книжек, создан 2025-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 и всё списали. Скопировали инвентаризацию, сменили склад, обновили учетные остатки и всё оприходовали на нужный склад.
Всё могу понять…кроме одного — пошто тут счет 000 приплели? Надо перебросить остатки с пустого склада на склад — ну и делаем напрямую с Кт в Дт — 000 извращение…и ешё, склады не только в регистре бухгалтерии могут быть, нужно посмотреть, возможно понадобится ещё регистры двигать….
(1) и (2) прежде чем писать, поучите бух.учет
(3)О как! Ну дык поучите неразумных, а то как — то из серии сам дурак, и ничё конкретного!
Главный вопрос, Вы в каком ПБУ в Плане счетов видели счет 000, чтобы использовать его в оборотах?
«Счет 000 является специальным счетом плана счетов типовой конфигурации «Бухгалтерия предприятия» и предназначен для ввода начальных остатков при начале работы с системой… »
Действительно, причем здесь 000, но так захотели бухи, обработку делал на заказ, могу переделать, если кому нужно
В других регистрах склады не используются
(5)
— бухи могут много чё захотеть)))) Потом может случиться, что на вопрос тем бухам: — А почему у Вас в базе такое (придумайте что сами, например в оборотах по балансовым счетам есть счет 000, который в балансе не участвует)? будет ответ: — А программист дурацкий попался! (вопрос/ответ — реальный случай из практики) …
ИМХО Не всё
то золото, что блеститчто бухи требуют надо делать, иногда стоит позадавать вопросы,и сделать по более/менее по уму…(5)
они потом захотят с балансового счета списать на забалансовый. будем ждать новых обработок 🙂
Разобрался со счетом «000», проводки нужно формировать сторнирующие, чтобы оборот по счету в целом не изменился, если делать напрямую, то обороты изменяются, что влияет на баланс в целом и возникают вопросы у налоговой, обработку поправил!
(8) Вот интересно, а чего с ним разбираться — он ДЛЯ ВВОДА НАЧАЛЬНЫХ ОСТАТКОВ. Используется в движениях с балансовыми счетами БУ (не НУ) только один раз — на дату ввода тех самых остатков, больше его использовать в оборотах текущих периодов НЕЛЬЗЯ, ибо в Плане счетов бухгалтерского учета его НЕТУ!!!! Искусственный это счет, придуманный для ввода остатков в ПРОГРАММУ…
НЕ, ну завышение оборотов — это страшно, а использование счета, которого нет — нормально)))) Использовать другой счет для сторно и оприходования по складам религия не позволяет?
Так я и не понял как она с пустого склада переносить должна?
На все кнопки жал, ничего не заполняет и не создаёт.
И счета не подбирает, ругается, что для данного типа подбор недоступен.
какой релиз? учет по складам включили? подробное описание ошибки?
Релиз как в заголовке, учёт по складам включен.
Остальное как написал. Нужно с пустого склада перенести на существующий остатки.
Скрин
Бухгалтерия предприятия, редакция 3.0 (3.0.67.74)
Платформа 1С:Предприятие 8.3 ((8.3.13.1644)
Выберите организацию, дату остатков и нажмите заполнить, если у вас счета не из списка («07», «08.04», «10», «21», «41», «42.01», «43», «45», «004.01», «003.01») то добавьте вручную, кнопка заполнить (в новой версии)
проверьте план счетов, Субконто2 должно быть «Склады»
(15) А свежая опять за СМ?
Остатки на 10.1 и 41.1, Кнопка заполнить не заполняет счета. Плюсом добавил. Сформировать ничего не делает.
Субконто склады третье.
Настройки делали как у вас на 2-х последних скринах.
Учет номенклатуры по:
1)Товары
2)Партии
3)склады
давайте адрес скину
(18) Я скачал, СМ не списало.
Так а что дальше? Я чуть ниже написал по новой версии..
(19) исправил, качайте
(20) Что со мной не так, почему на мне споткнулось?
При открытии заполняет счета, по кнопке СОЗДАТЬ выдаёт ошибку:
{ВнешняяОбработка.ПереносОстатковНаСклад.Форма.Форма.Форма(64)}: Значение не является значением объектного типа (Пустая)
Если Выборка.Склад = NULL ИЛИ Выборка.Склад.Пустая() Тогда
В журнале операций появилась пустая проведённая операция.
(21) что в настройках учета?
(22) По партиям галочка стоит у нас, как и у вас в скриншотах публикации.
(23) давайте скайп зайду удаленно посмотрю
(24) Скайп или тимвьюер? И в какое время удобно?
Напиши в личку, что у меня не уходят сообщения.
Скачал вашу обработку, есть вопросы, ответите?
спрашивайте
Я правильно понимаю, что движение по регистрам, в частности «Раздельный учет НДС» не формируется?
Просто без этого регистра, при включенном Раздельном учете НДС, пользы от скаченной обработки никакого нет
Добрый день. сделал вручную проводку по переносу 10-000 -сторнирующую, и 10 основной склад -000 , Раздельный учете НДС-включен, после пытаюсь списать материалы. Увы выдает ошибку : «Для целей учета НДС не списано 2,000 товара Топливо АИ 92 (АМ 462), счет учета: 10.03, склад: Основной склад»
получилось доработать ?