<?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='\
А можно скриншот покрупнее? Помню мне как-то доводилось делать аналогичную обраотку ещё под УП 10.2:)
выложил покрупнее
да проблема та же, я не формирую счета фактуры (у буха к этому свой подход), зато наглядно видно какую номенклатуру «перемещаем» и можно «убить» серии там, где они только мешают
если ИП торгует в розницу то эта операция оформляется же документами «Чек ККМ»? тогда почему список формируется на основании документов реализации?
Продажи оформлялись документами реализации, физлица заносились как контрагенты в базу, сохранялась вся история работы с физлицом (для предоставления скидок и т.д.)
Спасибо. а документами реализации можно оформлять розничные продажи? получается на каждую продажу счет фактуру чтоли делать? я уже переписал обработку теперь она формирует список из документов «отчет о розничных продажах».
(7) sdv88, а можешь выложить переделанною обработку или на почту отправить?
Частная задача.
Однако вариант с заполнением по Регистру ТоварыОрганизаций кажется значительно проще! Особенно выигрыш будет заметен при наличии нескольких Розничных точек и Присутствию операций по Возврату от покупателей.
Кроме того, регистр добавляет универсализм в плане множества организаций входящих в Компанию.
Лично для себя организовывал оба подрежима: По минусовым остаткам регистра и по продажам за период. А сейчас добавил третий — к каждому расходному документу формирую связанную цепочку перепродаж.
Вот только обработка рассчитана на мою переписанную УТ (соответственно нет смысла публиковать).
Кстати, просба уточнить виды и режимы формируемых документов. В частности оставляется ли флаг ОтражатьВУправленческомУчете (соответственно происходит создание новых партий)? Или всё на откуп оператору (он может сохранить документы в любом виде и в любом количестве)?
И уточните способ «убивать серии»… (Что, производится перезаполнение и перепроведение ранее созданных?)
Сейчас качать всё подряд совсем не хочется… поэтому хочется полного ознакомления с используемой методикой.
(11) Типовые документы «Реализация товаров и услуг» и «Поступление товаров и услуг». Флаг стоит. Естественно списываются старые партии и создаются новые. Серии «убиваются»/списываются при реализации (самому себе), поступление на ИП формируется уже без серий.
Переделка Партий хороша только для случая, когда Себестоимость передаётся в Бухгалтерский учёт. С точки зрения Оценки Эффективности продаж Группы Компаний — крайне неудобно! Левый вал продаж (объём «перемещений») не так просто фильтруется. К тому же, в объёме присутствуют «неэффективные продажи» собственной фирме с малой наценкой, и занижена наценка Конечному покупателю.
(13) Бизнес-процесс владельцы выстроили еще до автоматизации (УТ только инструмент:) … Фильтровать продажи самому себе — в общем то совсем не проблема, да и не нужно. Ну а про занижение наценки конечному пользователю — такого в принципе не может быть, менеджера тут же уволят.
И каким же отчетом смотрят результаы продаж с точки зрения Наценки?
Не просматривать же заказы поштучно?
Ограничения по минимальной цене включены в штатный механизм, но в большинстве контор применяют самые разнообразные скидки и конечный результат слишком непредсказуем. При отсутствии отчета по наценке — трудно максимизировать данный показатель.
(15) В моем случае результаты с т.з. наценки владельца не интересовали.
Документы перемещения формировала главбух в конце недели, у нее ограничений по минимальной цене нет.
Нужная обработка, у клиента как раз такая же ситуация. Оформление за период представляется менее удобным, чем по отрицательным остаткам.
(17) Karglak,
http://infostart.ru/public/79693/
Следующая обработка работает по остаткам Организации и заодно формируют сводную перепродажу за период.
см.
У меня подобная ситуация у клиента, только 3 организации — на одной учитывают НДС, на другой — не учитывают и 3- я розница. И нужно организовать перемещение из 2-х организаций в розницу и продать товар. Только не совсем понятно, разве перемещением можно утаить от налоговой итоговую выручку!? Чувствую, буду переделывать обработку под себя, но все равно, плюс однозначно!
(19) DoctorRoza,
В большинстве случаев играться можно только общей суммой НДС начисленной. В таком случае, достаточно при перепродажах между организациями (Орг с НДС -> Орг на вмененке) применять минимально допустимые цены, итого можно сократить сумму НДС начисленную.
P.S. Я создавал обработку перепродажи с заполнением Минусами остатков Организаций, а затем игрался с ценой и ассортиментом для оптимизации НДС начисленного.Моя Обработка «Очередная продажа собственной фирме» к сожалению не проверяет достаточность остатка Организации-Продавца для покрытия всего минуса Организации покупателя. Соответственно в случаях, когда Орг-Продавец не «поставляла» товар, то произойдёт перенос Минуса от Орг-Покупатель к Орг-Продавец. В моём случае, это была экзотика, соответственно подобную проверку не подключал.
Вот я сейчас сижу и колдую над этой ситуацией. В принципе, тут не сложно получать остатки и сравнивать с требуемым количеством. Жаль, что 10.3 не реализована передача между организациями! Может еще появится! ))
На сей момент единственную Конфу со штатной перепродажей знаю — «УТ 11». Но на этом и ещё на встроенном «Управляемом приложении» прелести для небольшой организации заканчиваются…
По слухам, 1С предпочитает свернуть развитие всех торговых программ.
как раз, то что искал, спасибо
(10) «Лично для себя организовывал оба подрежима: По минусовым остаткам регистра и по продажам за период.»
А как быть, если складов несколько? На одном продаем в минус, на втором этих продаж не видим. В результате — можем продать товара больше, чем его было на складе. И, соответственно, реализация не проведется.
(24) 4ish В случае УТ и УПП все зависит от метода учета остатков по Организациям: Если ведется учет остатков Организаций в разрезе Складов, то и формировать перепродажи надо по каждому из складов. А если собственность не распределяется по складам, то склад носит чисто номинальный характер (разумеется в варианте без Управленческого учета)…
такая же задача появилась.
только нужно, чтобы все автоматически делалось..
думаю, сделать подписку — при проведении реализации, и смотреть — если не хватает товаров у розничной организации, то делать реализациюпоступление с нужным количеством товаров.
Что скажете?
С подпиской несколько сложнее. Не всегда формируемый документ будет сделан с первой попытки ПРАВИЛЬНО. Он может неоднократно подвергаться исправлению, и соответственно многократно будет передалываться (или хуже того формироваться дополнительные) документы перепродажи.
Соответственно логичнее запускать пакет перепродажи оператором вручную.
У нас, модифицирована программа. Через реквизит «ДокументОснование» можно завязывать всю цепочку перепродаж (в структуре подчиненности), если соответствующие изменения внести и в «КритерииОтбора/СвязанныеДокументы».
А для формирования перепродажи запускается из документа обработка ПродажиСобственнойФирме.
Хотя для многих Компаний прокатит и постобработка (по итогам недели месяца, или дня) анализирующая Отрицательные остатки Организаций.
(26) revned, Кроме того, рекомендую сделать Функцию объекта или глобальную функцию. Ранее сформированные документы должны однозначно находиться и перезаполняться автоматически.
(26) revned, Еще на правах рекламы собственного варианта предлагаю ознакомиться сhttp://infostart.ru/public/79693/
(29) V.Nikonov, Спасибо за советы. Про изменение документа сразу и не учел.. Еще не взялся делать, возможно и не нужно будет, хватит и обработки, которую вручную запускать будут.
По мне вот это самая лучшая из того, что встречалhttp://infostart.ru/public/19419/