<?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='\
Отчет в момент формирования сводной таблицы выдает ошибку: «Не достаточно памяти».
Какой объем Вашей базы и за какой период делаете отчет? У меня на файловой в 4,5 Гб отчет работает.
Файловая 3,8 Гига, Комп i5 4 Гб оперативки Win 8.1 x 64. Изменение числа группировок дает туже проблему
Период месяц
Какая конфигурация? Файл качали из этого поста или предыдущего?
УТ 10.3. Файл из этого поста
Буду разбираться.
Здравствуйте. Скачал файл для УТП. Подскажите пожалуйста при построении отчета:
Иванов
ТоварХ Количество ед. хранения 1 Стоимость 378,37
ТоварХ Количество ед. хранения 0,34 Стоимость 127,57
Откуда берутся нецелые цифры единиц товара? Такое впечатление, что как будто клиент оплатил «кусочек» товара — 0,34. Мелькают цифры и в большую сторону например:
ТоварХ Количество ед. хранения 1,34 Стоимость 507,05
Смотрю реализацию, оплату, отгрузку, все ок. Была продана 1 позиция товара, отгрузка и оплата есть с сохранением оси времени. Почему в отчете 0,34 не могу понять?
Расчитывается коэф. оплаты. Без данных сказать очень трудно но принцип следующий:
Если одну расходную, в которой была одна строка в табл. «товары» на колич. 1 и сумму 378,37, погашали 3 платежа равными частями, тогда каждый платеж погасил 0,333333333333 количества товара и 378,73 / 3 = сумма.
Добаввьте последнюю группировку «Дата закрытия» и увидите даты оплат, когда погашалась данная расходная.
Но вообще то сумма продажи должна быть равна сумме расх. накл. Может быть вы установили какието отборы, которые приводят к ошибочному результату, который я не учел — это может быть.
Перекачайте файлы. Я только что обнаружил что на инфостарте лежат не самые свежие.
Скачал файлы обновленные, все стало на свои места, пока очень нравится отчет. Особенно то, что после первого построения я вдруг вспоминаю, что мне нужна еще какая-то группировка в отчете или данные, повторный просчет делается налету. В отличии от громоздкого стандартного отчета.
Есть управленческий учет в рублях, ходим видеть отчет в USD.
Какой курс пересчета себестоимости партии: на момент поступления или реализации?
И вообще, корректно вести учет в рублях, а прибыль считать в USD?
(13) ogre2007,
1. На дату партии
2. Для отчета это не важно.
Читайте комменты и описанияе там все есть.
Все хорошо, но формируется он ну оооочень долго. Тот который для УТП.
И при изменении валюты не формирует по новому, только при первом формировании.
А есть ли аналоги этого отчета для управляемого приложения. Нужно для 1С:Предприятие 8,3 Конфигурации УТ для Украины 3,0
(16) Deroswent,
Поищите здесь на сайте «Продажи по оплате» для УТ 11. Украинская УТ 3.0 является локализированным аналогом российской УТ 11 и по этому отчеты для УТ 11 должны работать и на УТ 3.0
Попробовали отчёт на «Управление торговым предприятием для Украины» (1.2.35.1) и так и не выводятся в отчёт продажи, например, оформленные в декабре, оплаченные в январе и при этом, если период отчёта выставлен — январь. Кажется по описанию, отчёт должен был отобразить продажу декабря. Или я ошибаюсь?
И ещё момент, если сформировать отчёт в валюте USD, а потом выбрать, например, валюту EUR и снова сформировать отчёт, то данные так и остаются в USD. Только если выйти из отчёта, снова запустить, выбрать валюту EUR, сформировать — в таком случае дынные оказываются сформированы в EUR.
Добрый день. Скачал отчет запускаю за месяц через 3 часа ожидания темпдб достиг 50гб место на винте кончилось база сломалась. Делал в УПП
На больших базах есть проблема. Запрос распределения оплаты на продажи не оптимальный.
У моих клиентов проблем с ним нет — там файловые базы 6-7 ГБ.
А переделывать сейчас нет времени.
(18) Helper,
Попробовали отчёт на «Управление торговым предприятием для Украины» (1.2.35.1) и так и не выводятся в отчёт продажи, например, оформленные в декабре, оплаченные в январе и при этом, если период отчёта выставлен — январь. Кажется по описанию, отчёт должен был отобразить продажу декабря. Или я ошибаюсь?
Именно так и должен работать.
И ещё момент, если сформировать отчёт в валюте USD, а потом выбрать, например, валюту EUR и снова сформировать отчёт, то данные так и остаются в USD. Только если выйти из отчёта, снова запустить, выбрать валюту EUR, сформировать — в таком случае дынные оказываются сформированы в EUR.
Это я проверю.
(20) Отчет не то что не оптимальный это мало сказано. в запросах по регистрам нет дат начала запроса. Один и тот же запрос выполняется миллион раз, хотя вроде запрос мог получить всю информацию сразу. В общем извините, но отчет туфта полная, не советую не кому его качать.
(22) YurokB,
«Один и тот же запрос выполняется миллион раз»
Это Вы, как говорится гоните. В отчете нет выполнения запросов в циклах, с этим все нормально.
«в запросах по регистрам нет дат начала запроса»
А вот то, что есть обращение запросом к регистру «взаиморасчеты с контрагентами» без ограничения по периоду — это да — есть.
В этом и есть вся проблема.
Нужно это переделать но пока не знаю как.
Не понятно, как ограничить период. Если по периоду отчета, то мы не получим реальных оплаченных продаж.
Иными словами, получим продажи по которым были оплаты в указанный период.
Такой отчет в программе уже есть — это продажи по оплате.
В общем если реально решать такую задачу, то получения данных об оплатах решается не просто.
Может кто подскажет решение — буду благодарен.
«В общем извините, но отчет туфта полная, не советую не кому его качать.»
Ну это ваше мнение и оно не есть истиной. У меня этим отчетом пользуются клиенты с файловыми базами 6-7 ГБ.
На скулях -это были бы базы в десятки гигобайт. У моих клиентов, этот отчет на таких базах, и при нормальном железе формируется 2-3 мин.
Ну а если в целом, то этот момент обязательно нужно оптимизировать — но пока не знаю как.
Добрый день, все все прочитал, что смог понял. Однако требует уточнения следующий вопрос по работе отчета: Попадут ли в отчет те оплаты по заказам, реализация которых прошла в другом периоде, раньше? Пример:
30.12.2015 — Продажа 1 (реализация товаров и услуг)
01.01.2016 — Оплата 1
Если период — январь 2016
Скачал файл, попробовал запустить с параметрами по умолчанию и периодом за 2 недели. Выдает ошибку. Пробовал запускать несколько раз.
Текст ошибки: {ВнешнийОтчет.script_ВаловаяПрибыльПоОплате.МодульОбъекта(584)}: Ошибка при вызове метода контекста (Выполнить)
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпановкиДанных, Настройки,,,Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»));
по причине:
Ошибка компоновки макета
по причине:
Ошибка генерации макета
по причине:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(65, 31)}: Поле не найдено «ПродажиСебестоимость.НДС»
ИНАЧЕ ПродажиСебестоимость.<<?>>НДС * (КурсыВалютУпр.Курс * КурсыВалютОтчета.Кратность) / (КурсыВалютОтчета.Курс * КурсыВалютУпр.Кратность)
1С:Предприятие 8.2 (8.2.19.130)
Конфигурация: «Управление торговлей», редакция 10.3 (10.3.23.3)
(24) user605403_thetimour,
Да попадут. именно для это отчет и делался.
По поводу ошибки проверю
Вот уже несколько дней прошло как я сижу с неработающей обработкой (текст ошибки выслал выше).
Сколько еще дней необходимо ждать?
Короче, спустил деньги впустую. Высланная обработка не работает. Разработчик написал «посмотрю». Представитель support’a запросил выслать информацию, после чего вообще не реагирует. Развод чистой воды, рекомендую всем ничего здесь не брать.
Обновил файл Валовая прибыль по оплате для УТ 10, УПП.
Исправил ошибку:
Проверял на УТ 10.3.16
Обновил файл Валовая прибыль по оплате для УТ 10, УПП.
Исправлены обнаруженные ошибки.
Проверка работоспоособности проводилась на релизе УТ 10.3.37.3
(21)
Но не работало.
(29)
Для УТП файл не обновляли случайно?
29.09.2016 — Обновлен файл для УТ 10.
1. Исправлена ошибка расчета суммы продажи с НДС.
Ошибка приводила к тому, что программа, к сумме продажи с НДС еще раз добавляла НДС, а колонка «сумма продажи без ндс» выводила сумму с ндс.
2. Теперь, при нажатии на кнопку сформировать, отчет всегда обращается к базе и не использует собственный буфер.
(31) Helper,
Все работает именно так. У Вас, скорее всего, в договоре выставлено: «Вести взаиморасчеты» = «По договору в целом». Поставьте «по заказам»
Увидел две проблемы (отчет для УТП):
1. Не учитывает начальный остаток долга по в/р — база не с нуля, а внесены остатки на начало года. В итоге показывает оплаченную продажу за первый месяц, хотя это всего лишь закрытие «начального» долга, а продажа будет оплачена позже.
2. Судя по тексту, отчет должен показывать частично оплаченные продажи, но он этого не делает (даже в тексте есть расчёт коэффициента оплаты, но условием <> 1 отсекаются документы, не оплаченные полностью).
Это то, что увидел за вечер. Не было времени досконально копаться в исходном коде и что-то править, так как не уловил логику в полной мере. Прошу автора, если не затруднит, прояснить эту ситуацию.
Задача именно так и ставилась. Только полностью оплаченные продажи.
Вот это не понял.
(29) В отчете для УТП такие же ошибка, на сегодня. Прошу тоже сделать корректировку
спасибо за такой глобальный отчет! сам делал, но никак не получалось отловить все платежи за отгрузки прошлых периодов. ваш проверяю — пока нареканий нет
Здравствуйте! Спасибо за отчет! В целом всё ок, но есть проблемка )
В столбцах Себестоимость без НДС и Себестоимость с НДС — одинаковые значения. Столбец Себестоимость НДС — пустой.
Проверила, ндс по себестоимости товаров есть.
Кто сталкивался? как исправили?