<?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С Предприятие 8.3.11.30.34 Розница 2.2.9.19! Вопрос по помощнику корректировки ЕГАИС — данную обработку нужно дорабатывать или она уже готова — открываем и работаем)!? И меня интересует фраза «надо подкорректировать запрос касательно формирования остатков алкогольной продукции»…. Что это значит!? Спасибо!
Здравствуйте, Вера. Да, можно работать. Недоработку касательно дублирования исправил. Задавайте вопросы, если появятся. Постараюсь ответить здесь. Всем будет интересно.
Заметил особенность УТМ. Когда передавалось 2100 строк в Передачу рег. №2 УТМ вернул ошибку по размеру файла. Разбил документ на 4 части (примерно по 500-600 строк) — прошло успешно.
Здравствуйте! В описании указано «Выполните пересчет алкогольной продукции на складе (в торговом зале).»
Обработка данные берет из документа «Пересчет» или же берет остатки ТМЦ на дату корректировки?
Т.е., можем ли мы воспользоваться данной обработкой, если пересчет выполнили, предположим, неделю назад?
(4) Данные берутся из регистра накопления. Не из документа пересчет. Требуется выполнить списание, оприходование после завершения пересчета.
(4) Если остатки в Рознице реальны, можно выполнять корректировку в любой момент, не выполняя пересчета.
Упор на пересчет сделал из-за своей профдеформации (ко мне попадают, обычно, тяжелые случаи). )))
С чем связана эта ошибка!?
(7) Вы указали соответствующий документ с остатками по регистру 1 или 2?
У меня такая же ошибка, как и user856756. Инвентаризацию сделали. Привели в порядок складские остатки: оприходовали излишки и списали недостачи. С помощью вашей обработки перенес остатки регистра № 1 в регистр №2. Далее заново запросил остатки ЕГАИС, убедился, что в первом регистре пусто. В соответствующих ячейках выбрал необходимые актуальные документы по регистру 1 и регистру 2.
Релиз 2.2.9.20, Платформа 8.3.11.2899
(7)(9) Не удается получить аналогичную ошибку. Если есть возможность, готов подключиться, чтобы проверить.
Запустите через отладчик. В какой строке возникает ошибка?
(9) Не удается получить аналогичную ошибку. Если есть возможность, готов подключиться, чтобы проверить.
Запустите через отладчик. В какой строке возникает ошибка?
Внесены изменения:
1. Передача в регистр №2. Если размер превышает 500 строк, то создается несколько документов. Требуется провести и передать каждый.
2. Добавлен фильтр по магазину. Требуется для организаций, где несколько филиалов.
(7) Ошибка: Значение не является значением объектного типа (ОстатокЕГАИС) связана с не сопоставленной номенклатурой!
Перед использованием обработки убедитесь, что вся номенклатура сопоставлена.
НСИ — Сопоставление номенклатуры ЕГАИС. Фильтр «Не связанные»
Ошибка: Значение не является значением объектного типа (ОстатокЕГАИС) связана с не сопоставленной номенклатурой!
Перед использованием обработки убедитесь, что вся номенклатура сопоставлена.
НСИ — Сопоставление номенклатуры ЕГАИС. Фильтр «Не связанные»
Обновил обработку. Теперь формирует таблицу расхождений с пустыми полями, если номенклатура не связана с алкогольной продукцией. Скачавших обработку ранее прошу обратиться в ЛС с указанием e-mail.
Для самостоятельного исправления в модуле формы в процедуре: Процедура ЗаполнитьТаблицуНаСервере() Требуется внести изменения (строка 105-121):
Показать
Так же установите АвтоотметкаНезаполненного на колонки «Номенклатура» и «Алкогольная продукция» ТЧ «СравнениеОстатков»
ВНИМАНИЕ. На последнем этапе корректировки фильтр по магазину должен быть заполнен. В противном случае колонка с фактическими остатками в магазине не заполнится. Т.е. сформируется полное списание всей алкогольной продукции ЕГАИС!
все же не понял есть ли выбор даты и времени получения остатков из регистра для корректировки. Допустим остатки ЕГАИС были получены месяц назад и именно той датой я хочу сделать корректировку. Естественно проверить результат ЕГАИС задним числом уже не получится. Или у вас остатки всегда текущие?
(17) Верно. Считаю, что за длительное время остатки могли «поплыть». Однако, сам столкнулся при корректировке с такой ерундой. Пересчитали, начали продавать. Хорошо, что товаровед зацепилась за цифры в остатках.
Сегодня обязательно добавлю выбор даты-времени. Сделаю, также, обнуление столбца остатков для ИП, работающих по принципу «Что пришло — то ушло», хотя этого и не одобряю.
Обработку с изменениями вышлю по запросу всем скачавшим.
Обновил обработку со следующими изменениями:
1. Добавлена дата/время запроса остатков магазина. Теперь можно начинать торговлю сразу же после выполнения пересчета и запроса остатков в регистре №2.
2. Добавил кнопку «Обнулить остаток».
3. Пересчет в таблице в случае ручной корректировки.
Не загружается в
1С:Предприятие 8.3 (8.3.13.1513)
Розница, редакция 2.2 (2.2.9.20)
Невозможно подключить дополнительную обработку из файла.
Возможно, она не подходит для этой версии программы.
(20) Открывается через Главное меню-Файл-Открыть.
Добавил возможность подключения через стандартный функционал. Версия 1.2.2.
Прошу прислать Ваш e-mail.
Прошу добавить, если возможно, сортировку табличной части. Пересортица в таком виде на глаза не сразу попадает, а ее до применения обработки лучше устранить.
(22) Сделано! Сортировка по всем полям в «Еще». Итоги в подвале. Пришлите Вашу почту в ЛС.
Добрый день. Как с вами можно связаться?
(24) ЛС
Внимание! На все предложения прислать обработку «иными способами» отвечу отказом!
Добрый вечер, с учетом регистра 3 не делали доработку?
(27) Разбираюсь с 3м регистром. Когда будет готово, отпишусь.
ВНИМАНИЕ! Использование обработки в текущем виде для корректировки остатков при использовании регистра №3 для помарочного учета алкоголя в данный момент недопустимо! Обработку можно использовать только для корректировки немаркируемой АП.
В данный момент ведется работа по корректировке АП с учетом регистра №3.
Комментарий.
При приемке товара вся алкогольная продукция будет храниться на первом регистре, а информация по маркам, которые были отсканированы при приемке, будут храниться на Регистре № 3. То есть при приемке алкоголя с марками нового образца, уже не будет необходимости делать передачу на Регистр № 2.
Следует так же отметить, что прием алкоголя со старыми акцизными марками не потерпела изменений. Так же, как и раньше, после подтверждения необходимо передавать данные по алкогольной продукции в Регистр № 2.
Теперь нужно будет предусмотреть передачу в Регистр 2. В регистр 2 должны будут уходить только товары, не отраженные в регистре 3. Кроме того придется добавить списание с Регистра 1 и Регистра 3 пар АП, по которым выявлена недостача. Непонятно, что делать с пересортицей на Регистре 3.
По хорошему, жду обращения за помощью в пересчете, чтобы разобраться в хитросплетениях регистров на практике.
(30) сейчас Розница 2.2.11.24 как-то проверяет Справку 2 и ругается, что не может в регистр № 2 ее передать, может хотя бы доработать, чтобы можно было фильтровать номенклатуру с новыми марками по этому признаку? Актуально как раз всю прошлогоднюю номенклатуру из 1 во 2 регистр перекидывать, но отсечь с новыми марками. Могу помочь в доработке и тестировании на живом магазине)
Странно еще, что в Рознице 2.2.11.24 на основании Поступления товаров можно ввести только Передачу в регистр № 2, но никак не Акт постановки на баланс, в котором можно выбирать в какой регистр передавать. Ваша обработка решила бы эту проблему, то есть могла бы автоматически раскидать поступление по двум актам во 2-й и 3-й регистры.
Согласен. Жду задание на проведение корректировки регистров. Все расслабились. После НГ не хотят считать ))
Здравствуйте! Подскажите, пожалуйста, на каком этапе доработка? У нас много магазинов, планируем до конца 1 квартала откорректировать остатки
(31)
Новые марки (а также старые, но учтенные поштучно) не нужно ставить на 3 регистр после подтверждения ТТН: они автоматически отражаются на регистрах 1 и 3 после успешного подтверждения ТТН
(34) Если я правильно понимаю:
1. При приемке помарочно (не партионно) передавать в регистр 2 нельзя?
2. В этом случае продажа маркируемой продукции списывается непосредственно с регистра 1?
Если все верно, то решение есть.
1. При формировании таблицы расхождений добавлю еще 2 колонки:
кол-во маркированной продукции на складе — Остаток Рег.1 / Кол-во партионной продукции — Остаток Рег.2. (так выявим несоответствия по каждому из регистров)
2. При создании передачи в рег.1 — рег.2 будем передавать только продукцию принятую партионно.
3. Остатки по регистрам 1,2 придется запрашивать дважды в процессе корректировки. Сначала, чтобы увидеть что «лишнего» на регистре 1. Потом, после передачи «Лишней» продукции с регистра 1 на регистр 2, для формирования корректировочных актов принятия на баланс и списания.
Возникает вопрос. Как осуществляется движение помарочного алкоголя по регистрам 1 и 3?
Исправьте, где я не прав.
1. Подтверждение «Помарочной» ТТН. Остаток в регистре 1.
2. Продажа помарочного алкоголя. — остаток по регистру 1.
Где регистр 3? В какой момент по нему происходит движение?
(33) Сделаем!
(35) можно и партионную продукцию не передавать: в ходе приемки отсканировать все марки, а после подтверждения перейти в список актов постановки на баланс и на вкладке «К постановке регистр 3» оформить на партионную продукцию акт постановки на 3 регистр. Все равно когда-нибудь ФСРАР скажет всю продукцию с регистра 2 (кроме пива) перенести на регистры 1/3
(36) В 3 регистре хранится акцизная марка, по задумке заносится производителем. Но если получили партионный, а принять помарочно, то создаёте акт постановки в 3 регистр, т.к. добавить в 3-й может любой участник оборота. После добавления в 3-й дальнейшие движения только помарочно.
(36) а в 1 регистре хранится наименование и количество по каждому участнику оборота
Здравствуйте! Подскажите, пожалуйста, получилось сделать доработку для корректировки остатков при использовании регистра №3?
Доброе утро! Скажите как сделать пересчет алкогольной продукции с новыми марками в 1С далион.
(36) Подскажите альтернативные способы приобретения вашей обработки на tross@mail.ru
можешь кинуть Помощник корректировки остатков ЕГАИС в небольшом магазине. Розница 2.2 на valikvv@rambler.ru , спасибо
(44) Прошу прощения. Этому препятствуют правила размещения разработок.