<?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) можно 😉 если нужно, могу переделать
только вопрос один: если продажных цен в справочниках типы цен много, какую брать для заполнения (ту которая в документе реализация?)
а я вообще сделал может и не очень красиво, но проще…
я вставил в модули проведения документов заполнение справочника цен
при проведении поступления заполняется справочник цен «закупочная» на дату документа, причем если документ снять с проведения — заполнение аннулируется 😉 так в некоторых смыслах удобнее
хотя если потом обновлять то ведь данный кусок нужно будет переносить ))) так что поэтому и не очень красиво вышло )))
если нужна помощь — пишите, решим все проблемы
(2) Нет, не тупо. При приходе ТипЦен берется из документа. А при реализации такого реквизита нет, поэтому проставляется выбранный на форме. Кстати, если на форме тип не выбирать, обрабатывается только поступление.
Всё подарочки даришь ? Ну-ну.
… истинно женское отношение к подаркам … ВОТ …
… любимая женская месть — перевЁртышь …
… наслаждайся, Арчибальд …
… ВОТухВОТ …
(5) Их есть у меня…
(6) 😳
(4) Т. е. документ реализация в вашей обработке совсем не рассматривается как вариант для заполнения цен? При реализации в документе «Отгрузка товаров, продукции» тип цен присутствует, если значение константы «Использовать типы цен номенклатуры» — «Да» (у меня как раз этот случай).
Наверное надо так: заполнять цены реализации по проставленным в текущем документе, и по типу, указанному в документе. Может быть в обработке сделать выбор конкретного документа, из которого брать цены?
…я ведь не прграммист — не судите строго…
Вообще-то в Бухгалтерии 7.7 есть какая-то непонятная обработка «Установка цен» в справочнике «Номенклатура». Но вот как она работает, я — хоть убей — не могу понять. То ли я туплю, то ли лыжи не едут… Может к ней как привязаться?
(6) Вы немного неадекватно ситуацию воспринимаете… Никакая это не месть, просто конструктивный разговор по существу проблемы…
(3) Спасибо за предложение помощи. Судя по всему, в наше время не все на такое способны… Особенно безвозмездно — еще и поёрничают… 🙁
(8) Сейчас выложил второй вариант — где при реализации ТицЦен тоже берется из документа… 💡
А где эта обработка? Я что-то не видел такой. Мы не торгуем 😐
А, нашел. Сейчас гляну.
(8) Нашел эту обработку — она делает отбор по видам/группам номенклатуры и типу цен. Сами цены должны проставляться вручную. Вряд ли это то, что требуется…
(10)
«Судя по всему, в наше время не все на такое способны… Особенно безвозмездно — еще и поёрничают… »
Ага. Ерничаем.
Способность к безвозмездности кроме зависти и неприязни ничего не вызывет. Это нормально.
ну, любит чел программировать, чего уж тут
(13) Не нервничай. Балет создан для того, чтобы было чем занять глаза при прослушивании музыки. Микроотчетики появляются, когда я о чем-то думаю, и надо руки занять. Не грызть же ногти 😳
(15) Я тебя вижу насквозь.
Так вот : микроотчетики пишутся ,чтобы не думать ни о чём грустном.
Продолжение разговора…
Очередное тестирование показало, что в обработке при выборе периода (например, месяц) и типа цены «Закупочная» в карточку «Номенклатуры» заносится реквизит (или как это у вас там называется) «Закупочная цена», а значение ее берется из последнего документа за этот период, где идет ссылка на данную номенклатурную позицию.
Причем получается, что не важно — поступление это или реализация — в первом случае в качестве закупочной берется цена поступления, а во втором в качестве той же закупочной — цена реализации.
Такая же картина, если выбирается в обработке тип цены «Отпускная цена» — значением ее становится любая цена из самого последнего документа по этой позиции номенклатуры (по фиг, что это приход или продажа).
Не учтено то, что за выбранный период по данной номенклатурной позиции может быть несколько приходов (с разными ценами поступления) и несколько реализаций тоже по разным ценам… И из каждого прихода на каждую дату поступления товара должна быть занесена в справочник цена поступления, а из каждой реализации на каждую дату — цена реализации (если конечно они отличаются от предыдущего значения того же типа цены). Причем ЦЕНА ПОСТУПЛЕНИЯ и ЦЕНА РЕАЛИЗАЦИИ — это разные типы цен для одной и той же номенклатурной позиции.
А у тебя по ходу все в одну пишутся — в ту, что выбрана в обработке, или, если ничего не выбрано — в цену поступления.
Фууууух… Тяжко объясняться бухам с программерами… На разных языках разговариваем видно…
Вот такая задачка вобщем… 😳
(17) Наталья, долбежку поддерживаю. Так держать !
… И еще… а создать в номенклатуре новый тип цен, если там, например, не занесены типы цен на момент заполнения нельзя? Из поступления — закупочную, а из реализации -отпускную… А то ругается: Не заполнен тип цен в Отгрузка товаров, продукции 911/252 (02.11.09). Но в самом документе тип цен выбран, видимо в справочнике номенклатуры — нет… 🙂
(18) Да не долбежка это… 😐 Тебе надо угол зрения сменить…
Просто есть разный тип людей — «одни сидят на трубах, а другим нужны деньги» (- вспомнишь откуда цитата — плюсану 😉 ).
Арчибальд любит программировать, а я люблю бухгалтерией заниматься, причем продуктивно, а не биться головой об стену, выполняя тупую нудную работу. Но при этом я же не брошу (из-за необходимости заполнять эти долбаные справочники вручную) сведение баланса на середине… А если есть человек, который решил помочь, и я чувствую, что ему интересно добить идею (ведь иначе он бы не предложил), так я ему даю все карты в руки…
Поразмысли над следующим:
… Много ли бухгалтеров посещает этот сайт и в состоянии самостоятельно подключить даже элементарную .ERT-шную обработку в программу?
(может когда ответишь на этот вопрос, сможешь и поступки Арчибальда понять?)
(20) В гугле нашел название фильма. Не смотрел, слава Богу.
Всё остальное в Вашем ответе радует !
(20)
Есть тут одна мадам, чистый бухгалтер, но она еще и программит сама для себя в 8.1 😉
(17)(19) Претензии приняты. Мой косяк — сам забыл вытащить/посмотреть ТипЦен из расходной накладной, и сам ругаюсь. Уже исправился — второй файл правильный теперь.
Итак, если тип цен в документе не указан, документ пропускается. Если у номенклатурной позиции цена с типом цен, указанным в документе, отсутствует, то в справочнике цен создается новый элемент с нужным типом. Цена — периодический реквизит — пишется столько раз, сколько было документов с этим типом цен с датой документа. Естественно, если было несколько документов с одной датой, актуальным будет только последний по времени.
(18)(20) Предвзятое отношение Ish_2 к моим собеседницам вполне предсказуемо, хотя и не имеет четкого объяснения 😀
😥
Блин! Ну не пишется она столько раз сколько было документов! Либо я чего-то не понимаю…
Пишется одна цена на каждую номенклатурную позицию — по последнему за период документу и с последней датой документа: если это был приход, то только закупочная, если это была реализация, то только отпускная. Или надо такую обработку запускать за каждый день?
…Ну потому, что не получается за месяц много цен с разными типами в истории…
Предчувствую реакцию — «ВСЮ ПЛЕШЬ ПРОЕЛА — ЗАЧЕМ ТОЛЬКО СВЯЗАЛСЯ» … если надоело — пойму… 🙁
(25)
Да всё нормально, Наталья.
Другая бы плюнула давно и затихла.
Неудобно ведь — конь-то дарёный… А мне такой подход нравится — трезвый и деловой.
Посмотрел я чужому «даренному коню » …. а конь то — того )))
Поправленный файл прикрепляю — так взлетит )))
Свои вставки закомментил
Но замечание такое — если по товару несколько приходов за день- то и останется в истории одна цена !!! Потому что не документом установлена !!!!
Если нужно вести истории изменений в день — то верно в (3)
по расходу таже картина // Но в (25) справедливые возмущения — первоначальная обработка и 2-я версия неправильные ….
(25) Позор на мою седую бороду 🙁
Правильно в (27) ❗
Поменял…
(4) Запамятовал 🙂 у меня немного переделанная бухгалтерия, для жены писал, добавил тип цен в реализации, перемещения (потому как в перемещении еще и наценка производится)
и еще несколько документов, потому и не так написал 🙂 а вообще бухгалтеру трудно без программиста жить… хоть на меня любимая частенько ругается, но ведь всё равно без перекройки стандартной конфигурации уже не может, одни только автоматические заполнения облегчают работу в разы…
Так что мы Вас, дорогие Бухгалтера, любим и ценим 🙂
(8) точно, не добавлял я её ))) просто используются несколько типов цен, а не просто закупочные и отпускные )))
(8) а по данной обработке, жене ужасно не понравилось то, что это не документ )))) поэтому вставил в конфигурацию документ — установка цен
он создает движения по заполнению справочника, а при отмене проведения записи исчезают ))) вроде пользуются с удовольствием
(31) Этот подход правилен. В документе перед проведением можно еще и подкорректировать при желании табличную часть + привязать периодическое значение к строке документа для последующих разборок.
Заодно можно еще и запретить ручную установку цен, либо фиксировать это в логе.
(25) Все нормально! Взялся за гуж — полезай в кузов 😉
(32) ну вторым шагом после ввода доп. документов было введение автора в документы 🙂 чтобы знать кому по шапке давать если что 😀 причем не влезая в журнал регистрации, ибо не всегда удобно ))))
(34) Хотелось бы не только наказывать, кого надо, но и исправлять последствия. Тут уж журналить надо как-то
(33) 🙂 УРА! Заработало! Пока больше косяков не нашла… Поживем увидим 😉
Ой, мальчишки, какие же вы все-таки молодцы!!!! :{}
Бухгалтер счастлив — программисты удовлетворены…
Всем участвующим огромнейшее спасибо! 😀 (26)…даже скептикам…
(31) Да, так было бы удобнее, но на данный момент меня и эта обработка очень порадовала — столько тупой работы ушло! Ведь, в конце концов, для того и созданы компьютеры и программисты, чтобы освобождать нас от рутины. А что касается усовершенствований, так это бесконечная песня… 🙂 Сколько волка не корми… 😉
Всем: если какие вопросы по бухгалтерии возникнут ( я сам предмет имею ввиду) — обращайтесь — с удовольствием помогу, чем смогу… Долг платежом красен ❗
(38) Как принимавший посильное участие в обсуждении и настройке продукта с удовольствием буду считать Вас задолжавшей.
А что касается Арчибальда , то : «Его пример другим наука».
(39)
Что касается Арчибальда, то он яркое подтверждение гениального тезиса: «Ни одно доброе дело не останется базнаказанным!» 😀
(39) (40) Что касается Арчибальда, то чисто по человеческим качествам вам до него далеко… (без обид) 🙂 Злые вы…
(41) Не возражаю.
(41) Не, они не злые. Они оба задушевные, и даже где-то сентиментальные, но по молодости лет скрывают это 😎
(38) Хочу профессиональный комментарий кhttp://infostart.ru/public/61847/
🙂
🙁 К сожалению, я не сильный профессионал в управленческом учете… как, впрочем и любой бухгалтер. И производство у меня очень специфичное и, пожалуй самое простое: производство бетона (простое потому, что без незавершенки). И работаю бухом на производстве только год как… Но может поконкретнее вопрос можно сформулировать… Вообще-то у нас начинающее малое предприятие, ни вспомогательного, ни обслуживающего производств нет пока — не доросли… 🙂 А вот в торговле опыт достаточный…
(45) Ага, сначала пальцы гнем, потом на попятный 😎
А вопрос такой: имеет ли бухгалтерское содержание (то есть: какая осуществляется хозяйственная операция) при «подгонке» себестоимости. Или иначе: соответствует ли математическая модель (решаемая система уравнений) бухгалтерской модели.
(46) Как я поняла, задача прежде всего призвана обеспечить оперативность оценки реальной себестоимости, максимально приближенной к полной. Но на основании бухгалтерского учета вряд ли получится в режиме реального времени расчитывать себестоимость производства, пусть даже и вспомогательного. Общеизвестен факт: бухгалтерский учет — это посмертный учет. Проводки делаются на основании первичных документов, которые порой приходят зачастую с большим опозданием. Кроме того, в расчете себестоимости участвует и зарплата персонала обслуживающих производств, а ее (вместе с налогами) тоже расчитывают только по окончании месяца, а не каждый день. А смысл расчета себестоимости состоит в закрытии счетов, на которых предварительно полностью собраны все затраты, относящиеся к данному конкретному виду вспомогательного производства. Кроме того, есть полная и сокращенная себестоимость, и каждое предприятие само решает, как им удобнее ее учитывать.
А по поводу математической модели — это перебор… Нелегко найти бухгалтера, который оперирует еще и такими понятиями… Да и я, хоть и училась когда-то на физмате, но уже ужасно далека от всех этих систем уравнений и т. п. … не обессудьте. 🙁
P.S. Да… 😀 и пальцы мы еще не гнули… если че…
Очень понравилось, спасибо! А вы можете сделать установку цен по выбору? Например, по клиентам? Чтоб в диалоге выбиралась отгрузка по выборочным контрагентам и по этим документам устанавливать выбираемую в диалоге цену?
(48) Чуть попозже посмотрю. Проблем особых не вижу.
Не ожидала, что вы так быстро мне ответите. Спасибо, буду теперь ждать.
(50) Получай!
Как мне это было нужно!!! Жалко, что плюсики можно ставить только один раз. Теперь у меня самый красивый справочник цен в мире) Очень сильно вам благодарна.
Арчи, столько лет прожил, а одну истину не уяснил:
, но есть и приятные исключения. «Хорошими делами прославиться нельзя!» — старуха Шапокляк была неправа!