<?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='\
Судя по описания, шутка нужная. Посмотрим, ка можно будет вкрутить в свою конфу.
Похоже, полезная вещь. Жаль, платформа не указана…
(3)
А из скриншотов не видно что 1Cv77
Да, желательно конечно бы конечно указать платформу 😉
>>>»Главный минус обработки — введенный на основании документ при открытии формы уже записан в базу и этот «минус» никак не побороть используя внешнюю обработку.»
1 строчка кода, если позволяет религия и записывать не обязательно.
6 просвяти пожалуйста, просто на форуме т1с тема: «как работать с табличной частью через контекст?» возникает постоянно и всегда один ответ — «НИКАК»
(7) «Никак» ? Вас жестоко обманывают. Есть как «штатные» способы, так и «нештатные».. самый простой — написать 1 строчку в обработке:
ЗагрузитьВнешнююКомпоненту(«FormEx.dll»);
и привет — всё будет работать через контекст открытой формы.
Ну с формЭкс может быть, но я не любитель внешних компонент, я фри по 1С, права на компах часто ограничены я не имею к ним никакого доступа (к настройкам прав) и поэтому заморачиваться с внешними длл не люблю… если есть штатные без использования ВК я с удовольствием воспользуюсь…
(9) формекс давно не требует регистрации в реестре, и на права и про «нелюбовь»
можно тут не писать..
Про штатные методы лень писать.. одно и тоже по 100 раз.
10 можно и не писать, но я их не пользую и в своих поделках чужие поделки не использую…
их имеется ввиду ВК… если хотите религия у меня такая…
Штатно — если только передавать параметром, либо модальность, либо эмуляцией F9 в журнале + прибитие доков… но это всё извраты.. в разы проще перейти в новую веру и не мучаться.
13 ну это все известно, только для этой идеи не подходит, мож как-нить перейду в новую веру…
(14) переходи ..многие вещи в разы быстрее и проще делать будуться..
а почему номенклатуру не заполняет?
16, не знаю, а по-подробней можно? где не заполняет? Какую номенклатуру?
Есть не большой косячок,
В процедуру приоткрытии добавьте в самое начало строчку
ФС.УстТекКаталог(гПуть);
хрошо
даже в УСН идет
молодец
19 обработка полностью оправдывает название «Универсальный помощник…» т.е. подходит для ЛЮБОЙ (и даже самописной) конфигурации и помогает организовать Ввод на основании без конфигуратора…
Все хорошо, только не запоминает путь к файлам настройки, всякий раз после очередного запуска 1С приходится искать файл обработки через Файл-Открыть, после чего все работает как обещано, может я чего-то недопонял?
было бы неплохо например при инициализации значения некоего реквизита возмоэжность выполнять формулу.. например: при вводе на основании меняется дата документа и должна быть пересчитана датаоплаты…
21 см 18, в следующей версии будет исправлено, но следующая версия будет после отпуска
22 чёт не понял, объясни на пальцах, для каких документов тебе нужна какая формула?
22 насколько я понял в версии v7.7.004 реализованно именно то, о чем вы писали…
Ура! заработало! после выполнения (18)
Я делал такую доработку в конфигураторе. Курочить конфигуратор — и хорошо, и плохо. Если работаешь на окладе, — лучше внешняя. Если платят за вызов, то лучше курочить, привязывая таким образом клиентов к себе по обновлениям. А за созданную обработку — большое спасибо. Вещь нужная.
дааа, походу я накосячил и в архив положил не ту обработку zapusk.ert — вечером исправлю…
Все оченьхорошо, поставила плюс, но нельзя-ли сделать групповой ввод на основании, очень бы облегчили жисть бухгалтера.
Спасибо, за обработку, мне как единственному бухгалтеру в строительной фирме очень помогает данная обработка. Спасибо.
ая вобще скачать не могу(((( завтра надо сумму налога а уменя завал((( столько поступлений надо ввести…капец…
так скачала спасибо, но пытаюсь ввести поступление на основе авансового, номенклатура пусто(((( что посоветуете?
программа запуск ert вообще не запускается.это для чего она?
32 из описания:
В архив добавлен загрузчик обработки: Если у вас несколько одинаковых баз что бы не настраивать одно и тоже на все базы
добавлен файл zapusk.ert, теперь достаточни его поместить в PrnForms, а обработку vvodosn.ert в любое доступное место,
в регистрации печатных форм регистрируете zapusk.ert. При первой попытки ввода на основании откроется диалог в котором необходимо
указать путь к обработке vvodosn.ert, и в дальнейшем загрузчик будет перенаправлять данные в эту обработку… т.о. из разных баз можно попасть в одну обработку с одинаковыми настройками…
офигеть, щас глянул на свой последний пост, я этой обработкой не занимался уже больше двух лет…
31. врятли я щас вспомню че там и как работает, если уж сильно нужно высылайте файл настроек (он где то должен лежать рядом с файлом обработки) гляну че там у вас, может вспомню че нить…
Отличная обработка.Работает на УРУ
Спасибо автору большое. Почти мгновенно настроил формирование в бухгалтерии 77 расходной накладной из прихода. Легкие деньги 🙂
А она будет работать в не стандартных конфигурациях? В 1с:Школьное питание например?
(37) antares_of, будет, к конфигурациям привязки никакой нет…
Отлично работала в 1с:ШП. Ввел расходники на основании приходников, быстро и удобно, спасибо
Добрый день!
Уточните, пожалуйста, эта обработка позволяет формировать документ «Отгрузка товаров, продукции» на основании документа «Поступление товаров» И актуальна ли она для действующей на настоящий момент платформы 1С 7.7. (релиз 7.70.547)?
Как скачать программу?
40 если настроете, то будет… настраивать конечно лучше программисту…
41 ну как обычно
(18) «Есть не большой косячок,
В процедуру приоткрытии добавьте в самое начало строчку
ФС.УстТекКаталог(гПуть); »
Подскажите, пожалуйста, (гПуть) — так и писать или прописывать что-то типа «Номенклатура»?…..
ФС.УстТекКаталог(гПуть<<?>>);
{,,,,,,,,,,,,,,,,,,,}: Переменная не определена (гПуть)
Добрый день! Подскажите пожалуйста, возникла необходимость загружать данные из excel в документ Бухгалтерская справка, вернее ввести на основании отгрузки материалов, — поступление на Д-т сч 003 (в 7.7 это можно ввести только документом Бухгалтреская справка), Но так как в Бухгалтерской справке субконто тип значения имеет «неопределенный», не получается ввести в Бух справку. и счет 003 (ли любой другой из плана счетов) не вводится ( и к нему Субконто, не ищет материалы в справочнике,т.к тип значения «неопределенный»). Как можно решить, подскажите?
(44)насколько я помню в 7.7 это решается через выгрузку Табличной части в Таблицу значений, в ней заполняются колонки неопределенного типа автоматически происходит приведение к нужному типу, а затем загружается ТЗ обратно в ТЧ. Найдите в этой обработке место где заполняется табличная часть и вставьте ТЧ.ВыгрузитьТабличнуюЧасть() и потом ЗагрузитьТабличнуюЧасть(), ну а между ними соответственно заполняйте полученную ТЗ.
(45) Ничего не поняла из написанного, это нужно найти где то в модуле? Пользуюсь вашей обработкой давно, как бухгалтер, а вот то, что написано выше непонятно, для меня как бухгалтера, ), но спасибо за ответ!