<?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='\
+ за идею
страшное дело!!! хочется плакать!!! 😥
когда же наш учет перестанет быть криворуким и наша бухгалтерия будет работать не только что бы жопу прикрыть в налоговой, но и давать отчетность для прочих заинтересованных лиц (руководители, менеджеры, инвесторы, банкиры) как во всех развитых страннах, а пока мы только занимаемся ананизмом… вот используя такие обработки и такие методики учета!
Не нужно брызгать слюнами. По поводу кто как работает. Эта задача ставиться не бухгалтером а именно хозяинов.
Объясняю для нервных.
Есть главная фирма которая закупает товары и продает по безналу. А есть СПД (собственные сотрудники) которые продают тотже товар с того же склада но за нал.
Отдельного склада у СПД нет товара нет. Как продать ?
Между прочим Торговля и Склад, Комплекснаяна 77 Управление торговым предприятием, торговля и УПП на 8 ке. Методически решают именно такую задачу.
Им только таких обработок и не хватает.
Я делал для 8.1. СПД продает товар отражая накладкую только по упр учету. Потом запускаеться обработка и она формирует расход с главной фирмы и приход на СПД с определенной наценкой (5% ну что бы не в 0 продавать). Потом расходные по СПД перепроводяться по всем видам учета.
Так что зачет 😉
Это нормальная постановка вопроса, жизнь требует иногда нестандартных решений. Сначала продать а потом оприходовать. Правда лучше было бы оприходовать перед продажей, с учетом недостатка товара.
Рад что эта обработка нашла столько откликов 🙂
День добрый. Не получается посмотреть обработку. Пишет «Поле объекта не обнаружено (Артикул). Хотя у Вас в скринах никакого артикула нет в табличной части. 🙁
У меня тоже самое! А хотелось бы попользоваться вашей обработкой…
Спасибо Очень нужная обработка Большой ПЛЮС
(6)Serg O. Может ответите бедным бухгалтерам 😥 . Хочется уже посмотреть в работе обработку…..
ВНИМАНИЕ!
извиняюсь за ошибку в работе моей обработки…
(«Не найдено поле — Артикул»)
теперь все работает правильно — можете скачивать измененную обработку
ВводПоступленийПоРеализациям2.epf
Спасибо за замечания от marina-daniel…
странно, что никто до этого не высказывал претензий
Мне такая обработка очень нужна. Пока соберем все дополнительные затраты, чтобы товар оприходовать, уже половина позиций продана и накладные реализации выписаны.
Только при попытке открыть обработку сообщение
{Форма.Форма(399,15)}: Переменная не определена (БухгалтерскийУчет)
СчетаУчета = <<?>>БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрДок.Номенклатура, Склад);
У меня версия правда старая. Может в этом дело 🙁
для — Topol
в принципе эти строки не так важны…
они сделаны для Проведения поступления сразу,
можете их закомментарить в Модуле Формы…
//СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрДок.Номенклатура, Склад);
//СтрДок.СчетУчетаБУ = СчетаУчета.СчетУчетаБУ;
//СтрДок.СчетУчетаНУ = СчетаУчета.СчетУчетаНУ;
Обработка нужная, спасибо Вам.
Единственно, что ставки НДС берутся не из справочника номенклатуры, а везде ставится 18%. Правда может я в настройках 8-ки галку где-то не там поставила. 😀
Serg O. — зачет Вам. Спасибки, что выручаете скромных бухгалтеров 😉
+++++
Данная обработка как и многие другие страдает типовой проблемой отсутствием контроля промежуточного минуса, ну и надо учитывать что списание товаров и т.п. происходит не только документом Реализация, а так оформлена неплохо и комменты кода то же норм
полезно! +
весьма нужная вещь
Для доработки: Если учет по складам на счетах 10, 41 не ведется — то обработка не заполняет табличку товаров.
Подскажите плиз, поставил обработку, товар находит, а при формировании поступления выдает ошибку: В поле объекта не найдено (НДСВключенВСтоимость)….. че делать? ❓
и у меня, к примеру, Расход(Товар1(05.05.2010))=-5, Приход(Товар1(05.05.2010))=3… то по логике обработка должна найти минусовый остаток, т.е. Товар1(05.05.2010)=-2…. галочка стоит «Анализ только отрицательных товаров», он в сообщении пишет, что найден 1 товар, а в таблице не появляется… что делать????
(23) обработка предназначена для создания поступлений при «+» расходе (реализациях)
и кстати в вашем приере если расход -5 а еще приход 3, то остаток +8
расход должен быть больше 0, иначе это возват от покупателя!
(22) изменен процесс заполнения реквизитов документа поступления…
обновленная версия v2.3 обработки корректно «ругается», но дает создать документ Поступления…
Есть парочка замечаний:
1) Хорошо бы сделать возможность выбора документа списания товара из списка, им может быть и ОтчетОРозничных продажах, и Требование-Накладная и т.д.
Или ручками придется менять в запросе вот тут:
Запрос1.Текст = «ВЫБРАТЬ РАЗЛИЧНЫЕ
| Номенклатура,
| СУММА(Количество) КАК КоличествоОборот,
// | СУММА(КоличествоМест) КАК КоличествоКонечныйОстаток,
| СУММА(Сумма) КАК СуммаОборот,
| СУММА(СуммаНДС) КАК СуммаОборотНДС
|ИЗ
| Документ.ОтчетОРозничныхПродажах.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач
| И РеализацияТоваровУслугТовары.Ссылка.Дата <= &ДатаКон
| И РеализацияТоваровУслугТовары.Ссылка.Проведен = Истина
| И РеализацияТоваровУслугТовары.СчетУчетаБУ В ИЕРАРХИИ (&Счет)
|»;
2) В приходную накладную попадают также услуги из реализации, надо поставить анализ на флажок услуги
(26) в ответ на 1-ое замечание — я дорабатывать в таком ключе обработку пока не планирую… Код обработки открыт, поэтому — сами поменяйте тип документа.
а на 2-ое замечание — в Док-те Реализация в таб.части Товары — услуг быть не может! это контролитуется типовой конфигурацией
Хорошая вещь, только ГТД не подтягиваются, да и цена мне нужна самая маленькая.
И почему то не хочет формировать таблицу с галкой «только отрицательные».
Полезнейшая вещь! Автор, еще бы и с/ф! Спасибо!
в описании указано что 1.6 под 8.1 обработка, а она под 8.2 и запустить под 8.1 нет возможности….
Лучше бы выложил под 8.1 а кому надо 8.2 сами конвертнули бы за 2 секунды
Полезнейшая вещь! Автор, еще бы и с/ф! Спасибо!
Хорошо бы данную обработку уже для Бухгалтерии 3.0.