<?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='\
Множественное сопоставление это не ошибка, это вариант решения, когда мы продаем 1 вид номенклатуры, а в ЕГАИС продается несколько
(1) Андрей, спасибо за Ваш комментарий. В таком случае, сколько акцизных марок для одной позиций номенклатуры у Вас запрашивает 1С Розница в режиме РМК? Насколько мне известно, РМК для одной позиции номенклатуры запрашивает одну акцизную марку, неважно сколько позиций алкогольной продукции ЕГАИС к ней сопоставлено. И списывается после продажи, соответственно, тоже одна, которая была «расшифрована» из считанной марки. Поправьте, меня, пожалуйста, если ошибаюсь.
(2) столько, сколько указано количество этой номенклатуры, по сути рознице не важно, какую акцизку мы сканируем, только когда она попадает на сервер ЕГАИС она превращается в тот алкоголь, который имеет этот акциз, таким образом мы можем завести хоть одну позицию «Коньяк», и сопоставить ее с коньяками в ЕГАИС и бить на кассе, просто каждый раз считывать акциз разного коньяка.
(2) Обратите внимание, что в документе ЧекККМ нет Реквизитов с типом «НоменклатураЕГАИС», а хранятся только акцизки и наша номенклатура, таким образом в момент продажи она не сопоставляется с Номенклатурой ЕГАИС, а просто передаются данные о том, что был продан какой-то товар, имеющий такой-то акциз
(4) Андрей, Вы правильно мыслите. Но есть большое «НО»:
Потребует столько акцизок, сколько позиций номенклатуры. Например, номенклатура «Коньяк Арарат» сопоставлена к пяти позициям этого же «арарата» в ЕГАИСЕ, пробиваем 1 позицию номенклатуры, запросится одна акцизная марка. На сервере спишется именно та акцизка, которая расшифрована. То есть в итоге, получаем, что для розничных магазинов именно для продажи не принципиально, как сопоставлено, спишется все равно по акцизной марке.
А что для документов корректировки? Акт списания, акт постановки на баланс? Там указывается номенклатура и связь к ней, причём берётся, по-моему, тупо первая. Для них в таком случае сопоставление 1к1 критично.
А как быть предприятиям, осуществляющим услуги общественного питания? Они ежедневно делают акт списания, в котором указывают номенклатуру, и автоматически подставляется алкогольная продукция ЕГАИС. Для них сопоставление ещё более критично.
(5) это уже будет пересортица, вы наверное заметили, что есть такая причина списания и причина постановки на баланс «Пересортица», в рамках одно нашей номенклатуру может быть «Пересорт» нескольких позиций ЕГАИС, не знаю как в рознице, но для Управление торговлей 10.3 я сделал обработкуИнвентаризация по акцизной марке ЕГАИСКорректировка остатков ЕГАИС (Управление торговлей 10.3) , которая учитывает этот «Пересорт» и автоматически корректирует остатки по данной причиние
(5) вообще пересортица актуальна в основном для пива, так как оно не регистрируется в ЕГАИС при продаже, а вот по поводу маркируемой продукции подскажите, когда вам нужно делать Акт списания и акт постановки на Баланс?
(6) Андрей, эта обработка есть только у Вас, она платная. Насчёт пересортицы тоже правы, только Вы же понимаете, что через пересортицу для пользователя сложнее. В типовом функционале нет инструмента, который позволяет нормально учесть пересортицу, каждый раз когда мы выбираем номенклатуру, подставляется первая связь ЕГАИС, когда пытаемся поменять выбранную связь, открывается попросту весь классификатор, даже без отбора по сопоставленной номенклатуре.
(7) А корректировка остатков по пиву, как и поддержка в актуальном состоянии носит лишь «рекомендательный характер», насколько мне известно.
(8) по-моему для пользователей как раз сложнее плодить миллион одинаковых номенклатур, да еще у которых одинаковый штрихкод, какую номенклатуру вы выберите при продаже, если у вас 3 позиции с одинаковым штрихкодом, а в егаис это 3 разных производителя? И куда вы выбираете номенклатура, когда проставляется первая связь с ЕГАИС? Кстати если вы 2 раза щелкните мышкой при сопоставлении на номенклатуру курсор спозиционируется на сопоставленные
(9) но продажи то нужно регистрировать на сколько я знаю и нужно делать самостоятельно акт списания
(11) Выберем ту, которая описана в названии, если это пиво и неважно, что выберем, если это маркируемое.
Несколько позиций номенклатуры будет, да, с пояснением в названии. Штрихкод рекомендуется печатать свой на принтере этикеток и лепить самостоятельно.
Либо один и тот же к нескольким позициям номенклатуры, но кассир тогда будет выбирать номенклатуру при продаже. А что он выберет, как известно, не важно, если это маркируемое, ведь спишется по акцизной марке.
Зато, важно для пива, спишется та позиция, которую он выберет, после закрытия кассовой смены, путём автоматического формирования документа «Акт списания егаис», куда попадут именно первые связи по немаркируемым позициям номенклатуры.
Что значит рекомендуется делать свои? У вас на предприятия делают свои штрихкоды?
, как это не важно?, а как вы потом будете выравнивать остатки с егаис? у вас продан товар x, который сопоставлен номенклатурой егаис Y, а продается на самом деле номенклатура ЕГАИС Z.
А какую номенклатуру вы хотите списывать, если их сопоставлено несколько? вполне естественно, что для списания выбирается любая, так как однозначно не идентифицирована, что это за позиция, так для пива и не важно, что именно мы продаем, главное количество проданного.
(13) Неважно в рамках ЕГАИС.
Вот поэтому и нужно иметь:
товар А сопоставленный к ЕГАИС А
товар Б сопоставленный к ЕГАИС Б
При том что товар А и Б, по-сути одинаковые, но сделаны на разных заводах одного производителя.
Штрихкод дело десятое, можно лепить свои, можно отключить контроль уникальности, чтобы кассир выбирал после считывания, что конкретно имеется ввиду, какая позиция, можно ставить на бутылки опознавательные знаки в таком случае, но это некрасиво, поэтому генерировать свой штрихкод — оптимальнее.
Если для Вас важна именно Ваша схема, можете моей не пользоваться, либо не отмечать ни один оригинал, тогда позиции, где оригинал не отмечен — отвязываться не будут.
(14) ох, по-моему вы только все усложняете, ну дело ваше, рознице нужно свести действия до минимума, а вы предлагаете лепить целую гору новой номенклатуру, да еще и на каждую клеить свои штрихкоды. Пусть каждый для себя решит сам, что для него удобней и проще.
(15) Согласен, давайте на этом и остановимся. Но , всё-таки, насчёт «простоты». В рознице есть такая кнопочка, на которую никто не обращает внимания «Печать справок 2».
По-хорошему, каждый раз, когда мы формируем документ передачи в торговый зал, мы должны клеить эти справки. Сталкивался с таким, клиент всё перемещал, а потом решил вернуть всё поставщику. Нужно делать возврат из торгового зала, а там нужно указать справку, и вот тут то и засада, ведь все бутылки перемешаны.
(15) мы тоже раньше работали как вы предлагаете «для удобства розницы» и сдача отчетов в РАР для бухгалтерии была адом, ладно пиво там можно не отражать реальные продажи а рассчитывать по поступлениям но вот с крепким алкоголем такой фокус череват серьезными последствиями, теперь на каждую позицию ЕГАИС своя позиция номенклатуры (благо прошел тот период когда поставщики плодили номенклатуру как горячие пирожки) алкогольный код в артикул и оклейка внутренними штрих кодами (там же справка Б), полгода полет нормальный
ЗЫ сеть не большая, дюжина магазинов
(17) А можно поподробнее в чем же «ад» состоял, так как журнал учета розничной продажи должен формироваться из личного кабинета ЕГАИС, какую отчетность вам необходимо сдавать из учетной программы?
(17) судя по вашему комментарию, вы уже полгода используете функционал, когда одной номенклатуре соответствует 1 позиция ЕГАИС, ну за полгода довольно много, что добавили, возможность получения остатков из ЕГАИС, возможость передачи с одного регистра на другой, а также обработку для корректировки остатков, поэтому не знаю, как у вас до этого велся учет, но сейчас ведение егаис из программы гораздо упростилось.
декларация же, приложения 11, 12 да и с оптовиками работал там вообще полный набор
(20) в программе Розница эта декларация есть?
(19) согласен, но и недооценивать факт перехода на учет 1 в 1 и оклейку не могу
(20) и причем здесь оптовики, если мы рассматриваем только розничную торговлю, для оптовиков есть специализированные решения, например Управление Торговлей: Алкогольная продукция, со всей необходимой отчетностью, там функционал по учету алкоголя итак встроен, без какого либо ЕГАИС.
(22) я его не недооцениваю, потому что это как раз самый простой вариант сказать: «Чтобы у вас шли остатки, заведите свои штрихкоды, и обклейте ими все бутылки», по моему это огромные трудозатраты, которые можно избежать, используя мой вариант.
(21) используем обработкуhttp://infostart.ru/public/157454/
(23) при том что у них точно так же встает вопрос сопоставления номенклатуры
(25) все же предлагаю вам обдумать сдачу отчетности в РАР при моем и вашем способе розничной торговли алкогольной продукцией
(24) Что данная решение не работает так как вы ожидаете, то нужно разбираться в чем причина конкретно с заполнением данной декларации: какие ошибки были при заполнении, что не так указывалось.
(26) какой вопрос? пришел товар с тем же штрихкодом, что и был, в ЕГАИС это другой код, мы его пикаем сканером, у нас находится уже существующая номенклатура, мы его сопоставляем с нашей.
(27) пока по сдаче отчетности ко мне не обращались, поэтому не могу точно сказать, что конкретно необходимо для сдачи декларации, но если там нужно отразить данные о продажах, то не думаю, что эти данные нельзя получить из программы при моем варианте решения проблемы.
(28) еще раз «по честному» заполнить декларацию при вашем методе учета вы не сможете, если опираться на свой справочник Номенклатура вам придется сдавать в РАР данные которые вам предоставит поставщик, если совсем не опираться на вашу номенклатуру а опираться только на номенклатуру ЕГАИС у вас неверно будут заполнены продажи, еще раз повторюсь сначала обдумайте этот вопрос потом пишите
(29) вопрос дальнейшего предоставления отчетности в контралирующие органы
(31) посмотрел приложение 11 декларации алкогольной продукции, действительно, если сопоставлять с несколькими, то не получится однозначно указать, что товар пришел именно от этого Производителя, из-за этого нельзя получить остатки на начало периода, продажи и т.д, хотя все эти данные хранятся в егаис из розницы мы не сможем их получить
А у нас умудрились несколько раз привязать одну и ту-же номенклатуру к одной и той-же номенклатуре ЕГАИС. В этом случае ваша обработка поможет?
(34) Несколько раз одну номенклатуру к одной и той же невозможно, а если и нажали, то не страшно, одинаковая связь два раза подряд не создается
(35)это пользователи не могут, а программисты что хочешь могут 🙂 Был перенос из одной базы в другую и вот результат. Проверено, это одна и та-же номенклатура и номенклатура ЕГАИС то-же одинаковая. Нужно чтобы одна запись оставалась.
(36) На скрине открыт регистр сведений «Соответствие номенклатуры ЕГАИС», выделите ненужную строчку и нажмите клавишу «Delete» на клавиатуре, это удалит выделенную связь.
Как я понимаю эта обработка решит проблему которая представлена на картинке, правильно ?
А еще такой вопрос а может быть что 1 Алкогольная продукция ЕГАИС связана с более чем одной номенклатурой? например 2 номенклатурами или 3 и т д ?
В последнем обновлении сопоставление одной позиции номенклатуры и нескольких позиций алкопродукции отменили. Теперь имеем одну номенклатуру Пиво балтика7 ж/б 0.9 у нас и кучу алкопрдукции разных поставщиков, кто производит это пиво….тула, питер, клин и тд… Не понимаю зачем это сделано? Это очень неудобно и при поступлении продукции и при списании((
Для рознице 2.2.7 нечто подобное возможно реализовать? В ней убрали из регистра соответствия индентификатор упаковки, а у нас на нём построено всё сопоставление
Здравствуйте.
Скачал данную обработку:
Проверяю на Рознице 2.2.
Платформа 8.3.10.2667 (Конфигурация Розница, редакция 2.2 (2.2.7.37))
и
8.3.10.2772 Конфигурация (Розница (базовая), редакция 2.2 (2.2.7.42))
Список выходит, но при нажатии на ШАГ 1 — Выходит ошибка: Поле объекта не обнаружено алкогольная продукция и «задвоенные» связи не отменяются. Проваливаюсь в карточку товара, там физически убираю второе сопоставление — так работает.
Подскажите в чем суть и второе
Есть подозрение что список задвоенных выходит не весь.
Заранее спасибо.