<?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='\
В УТ11 при использовании более 10 организаций обработка настройки схемы интрекомпани работает неверно для того, чтобы это исправить нужно в Обработки.НастройкаПередачиТоваровМеждуОрганизациями.Формы.Форма.МодульФормы в процедуре ТаблицаНастройкиВыбор заменить строку
ИндексКолонки = Прав(Поле.Имя, 1);
на
ИндексКолонки = СтрЗаменить(Поле.Имя,»ТаблицаНастройкиСпособПередачи»,»»); // чтобы правильно отрабатывалить колонки с номером более 9
почему-то очень «напрягает» этот момент…
(1) ander_, если речь идет о нежелании включать изменения в конфигурации, то можно просто сохранить соответствующую обработку как внешнюю, исправить, ну, и производить настройку используя эту внешнюю обработку…
Есть еще один вариант — обратится в 1С… чесно говоря, не помню прибегал ли к нему или нет. Много было косяков в УТ11, теперь их ЗНАЧИТЕЛЬНО меньше ))) что не может не радовать.
думал самому писать, а тут уже есть. спасибо
Очень интересное решение.
Огорчает только факт того, что данные заполняются за месяц. Но в целом это возможно поправить. А так думаю предложить данное решение бухгалтерии.
По непонятной причине запрос Запрос = Новый Запрос(ВернутьЗапросДляВычисленияСебестоимости()) возвращает номенклатуру с пустой себестоимостью.
Сейчас буду дописывать заполнение по цене Себестоимость.
(5) _Ramzes, Это запрос возвращает себестоимость посчитанную документом «Расчет себестоимости»,
Можно использовать результат отчета АнализСебестоимости (Стандартный из УТ11)
(4) _Ramzes, оперативное создание и заполнение документов Передачи УТ11 умеет делать сама, проблема только в выбранном типе цен и в правках «задним числом».
Спасибо за статью, как раз в процессе изучения 🙂
(7) Stepan_1c, (4) _Ramzes, (3) serezhick, вся методика от начала до конца:http://infostart.ru/public/166451/
(8) спасибо, заценю.)
УТ11 имеет широкий функционал для описания перепродажи товаров между собственными организациями, под называнием «интеркомпани». Он имеет гибкие настройки, но создан .. т.д.
Вот уж не соглашусь! И где же там широкий функционал для настройки передачи товаров между организациями? 🙂 Ветхая обработка, в которой указывается Продажа/Не передается и т.п.!? ИМХО, это заблуждение. А вот Ваша обработка очень даже может пригодится. Только возникает вопрос, как передается товар с организации где цена с НДС/без НДС в организацию, в которой цена товара без НДС/с НДС? Если я не ошибаюсь, штатный механизм не перемещает товар, где есть несовпадение по НДС, хотя, возможно, и ошибаюсь! Как у Вас реализовано?
(10) DoctorRoza, обработка всего лишь агрегатирует стандартный механизм, которой есть в УТ11. Единственное преимущество — в УТ приходится все делать вручную, по каждой паре организаций (при условии, что передачи не формируются автоматически), а обработка все это делает как-бы в пакетном режиме.
По НДС — как при продаже НДС в любом случае должен быть указан, тут, по видимому, придется для одной из организаций прикручивать печатную форму без указания НДС.
(7) Stepan_1c, если еще интересно есть отличное описание как расчитывается себестоимость в УТ
http://www.1c-pro.ru/topic41156.html
(12) Flyerink, спасибо уже разобрался по себестоимости. только остался один момент непонятный — после перемещения между складами реализация не списывает товар в типовых отчетах. в Анализе себестоимости видно что всё списалось, а в отчетах по складу висит остаток по собственному товару…
(13) Stepan_1c, Возможно дело в статусе документа перемещения.
(14) можете поподробнее?
(15) Stepan_1c, Перемещение товаров (между складами) может быть проведено в трех статусах
К отгрузке — что-то типа резервирования товара для предполагаемого перемещения
Отгружено — товар отгружен, т.е. взят со склада источника но на склад приёмник еще не доставлен (типа товар в пути)
Принято — собственно товар перемещен с одного склада на другой. (в этом статусе значения всех регистров должны принимать финальное значение, в том числе и регистр свободные остатки)
(1) ander_, в 11.0.9.15 — исправили ошибку эту )
(16) видимо я не совсем понятно выразился.. Перемещение товаров корректно списывает с первого склада и оприходует на второй склад. а вот когда делается реализация этого товара со второго склада, то он зависает на втором складе по отчетам.(в анализе себестоимости всё норм) при этом если сделать еще одну реализацию этого же товара, то выдается предупреждение, что не хватает остатка на втором складе.
(17) После закрытия месяца этой обработкой, запускаем штатную процедуру закрытия и она снова показывает, что обнаружены отрицательные остатки на конец месяца. Как это объяснить?
(19) capone, укажите плиз версию УТ и режим расчета себестоимости. Обработка работает в версии до 11.0.9.15 включительно. Для более поздних пока не адаптировал.
(20) Запускал на УТ 11.1.1.11 по среднему. В общем передача по ТоварамОрганизации формируется правильно, следом идет заполнение по регистру Себестоимость и тут минусовые остатки в ТоварыОрганизаций возвращаются опять. Какой-то ребус. А обработка нужная, не забрасывайте ее.
(20) не совсем понятно, для чего создаются передачи по регистру себестоимости? Первый проход по регистру товаров исправляет минуса по организациям, затем второй проход по регистру себестоимости возвращает эти минуса назад. ???
(22) capone, для 11.0 это было актуально как и оптимизация (обе вещи опциональны). Для 11.1 — это не нужно, но видимо, нужно будет строить передачи не в конце месяца, а на каждый день.
Ссылка на версию для 11.1 нерабочая, можете скинуть на мою почту?
Поддерживаю, обновите пожалуйста ссылку если есть рабочая версия для последней УТ 11.1
Так куда же делась версия для 11.1?
(26) ЗС1, извиняйте господа, для последних версии УТ 11.1 рабочей обработки не существует.
(27) Переделал эту обработку под актуальный релиз УТ (частично):http://infostart.ru/public/402503/
Как обычно отражают возврат товара проданного в прошлом периоде?