<?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='\
41 счет подцепит?
Краткий ответ — да, 41-й счет подцепит.
Обработка не проверяет счета, указываемые в отборе, на логику. Поэтому при формальном совпадении видов субконто (1-е субконто — номенклатура, второе — склад) обработка будет работать на любых счетах. Т.е. корректными счетами, которые можно указать в поле отбора, и по которым могут быть выбраны остатки обработкой в стандартной конфигурации БП являются: 07, 08.04, группа 10-х (кроме 10.07 и 10.11), 21, группа 41-х, 43.
У тебя ошибка в запросе,»Склад» не «субконто2» а «субконто3″…
В каком счете какой конфигурации?
Бух 3.0 версия 236…не в счете,а при указании условия…субконто2 = &Склад
ой…точнее бух корп
В бухгалтерии предприятия редакции 3.0 (3.0.43.155) Корпоративной со стандартным планом счетов третьим субконто вида «Склады» имеют только два счета:
003.01 — забалансовый «Материалы на складе»
и 004.01 — забалансовый «Товары на складе».
Но там и номенклатура — второе субконто, так что запрос на этих счетах не будет работать. Но насколько я помню
1) я не приводил эти счета в качестве обрабатываемых обработкой.
2) заполнение Требования-Накладной остатками по этим счетам не выглядит логичным с точки зрения БУ.
Поэтому, я не совсем понимаю, о какой ошибке ты говоришь.
Ты точно план счетов конфигурации БП 3.0 Корп платформы 1с 8.3 описываешь?
И не перелопачен ли твой план счетов чьими-то игрывыми руками?
Добрый день!
Не загружает остатки по складу, ссылка на ошибку «не заполнено подразделение»…. Не понимаю где и для чего его запонять…Подскажите, пожалуйста.
платформа: 1С:Предприятие 8.3 (8.3.9.1850)
Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.44.199)
Вариант интерфейса: Такси
ВОТ ЧТО ВЫДАЕТ
Ошибки:
———————————————————————————
28.11.2016 18:20:58
Неизвестный идентификатор формы
———————————————————————————
28.11.2016 18:20:39
{ВнешняяОбработка.ЗаполнитьТНОстаткамиПоСкладуСОтборамиПоСчетамНоменклатурам.Форма.Форма.Форма(210)}: Поле объекта недоступно для записи (Окно)
Для каждого Окно из Окна Цикл
(9)
Прошу прощения, но таки — да. Обработка не всегда работает при запуске из открытой формы документа (теряет идентификатор формы). Код заполнения я взял из чьей-то обработки, не полностью удостоверившись в ее работоспособности.
Это моя вина, но на исправление сейчас нет времени и знаний, тем более, что при всех иных способах запуска — обработка работает корректно.
Обработка не работает при всех вариантах запуска. Пишет, что «Команда выполняется» и потом ничего. Просто голый документ. Жаль.
В вашем сообщении нет ни версии конфигурации, ни ее названия. Ничего, что могло поспособствовать разрешению проблемы. Жаль.
Подозреваю, что корень проблемы тот же, что и у автора (9):
В какой-то момент (уже после написания обработки) буквосочетание «Окно», использованное мной в качестве переменной, стало служебным словом. И, соответственно, код обработки перестал выполняться.
Я перезалил 20.04.17 обработку в этой публикации, с учетом этого обстоятельства. Пользуйтесь.
Здравтсвуйте. У меня обработка не работает.
ТЧ не заполняется остатками
1С:Предприятие 8.3 (8.3.10.2168)
Бухгалтерия предприятия, редакция 3.0 (3.0.49.17)
Та же проблема. Не заполняет табличную часть документа. БП 3.0.49.27
не заполняет
8.3.8.2137
бух 3.0.43.241
(16) Будучи сломленным авторитетом вашего рейтинга, под пристальным взором ясного взора с вашего аватара, а также обладая недостатком времени и знаний, я просто вставил ваш код в обработку и все заработало 🙂
Без шуток, я сейчас временно отошел от программирования в осьмерке и порядком уже подзабыл устройство БП, и счел наиболее рациональным воспользоваться вашим кодом в перевыложенной сегодня (17.05.2017) обработке.
Благодарю Вас за помощь и прошу совета, каким именно образом я мог бы быть вам полезен в ответ.
Прошу скачавших более ранние (и одновременно менее рабочие) версии в личку. Ответом я вышлю текущую версию.
(17) Спасибо за предложение. Вы мне и так помогли, написав данную обработку (а то что ее пришлось немного подправить, так это ерунда).
пишет «поле объекта недоступно для записи (Окно)». как можно исправить?
(20) Доброго Вам дня!
Вы уверены, что скачали эту обработку после 20 апреля 17-го года?
Если «Да», то это крайне мистическое событие, потому что начиная с 20.04 в коде обработки отсутствует слово «окно» и такая ошибка невозможна в принципе.
Если «нет» — то Вам следует или скачать обработку по приведенной в публикации ссылке, или обратиться ко мне в личную почту с указанием даты и времени предыдущего скачивания (данные находятся в разделе «транзакции» вашего кабинета), и я вам отправлю свежую версию.
Коллега, такая же ерунда, обработка выдает ошибку с окном, потратил 2 стартмани, обидно…
(22) Коллега, пожалуйста, ответе на два вопроса:
— Как у вас получилось потратить два стартмани на обработку, которая стоит 1$m?
— Каким образом исполнение обработки вызывает ошибку неправильного наименования переменной («Окно»), если текст обработки не содержит данной переменной?
(23)
1) В две Ваших темы провалился актуальную и не актуальную
2) Выходит что ошибку выдает.
Воспринимайте критику без сарказма.
А никакого сарказма и нет. Своим первым вопросом я пытался добиться от вас признания факта, что вы скачали, потратив свои $m, обработку, в описании которой красным цветом указано «неактуальная» и приведена ссылка на правильную.
А вот ваше утверждение под пунктом 2 меня реально смущает. Вы точно уверены, что запускаете обработку из этой публикации, в названии которой фигурирует «(v1.03)»? Если «нет» — то все таки следует запускать именно ее. Если «да» — то это чудо, потому что в коде нет слова «Окно». В этом случае сообщите мне в личную почту любой альтернативный канал связи, завтра попробуем разобраться, как же так выходит.
Вы опять можете посчитать мой вопрос сарказмом, но практика показывает, что после него ошибка с «Окном» у клиента все таки пропадает 🙂
(25)
С открытием разобрались, но есть еще один момент, открывается окно выбора настроек заполнения, выбираем счет и нажимаем заполнить, но ничего не происходит, докмуент предварительно необходимо записывать???
Нет, документ специально записывать не нужно. Если в этом будет необходимость, обработка сама предложит его записать. Обычно, если ТЧ документа после выполнения обработки остается пустым, то это обозначает, что на выбранных счетах отсутствуют номенклатуры в разрезе Организация/Подразделение/Склад. Обратите внимание — в данной обработке ведение учета по подразделениям — обязательно. Если в вашей организации не ведется такой учет, обратитесь ко мне в личку.
Расскажите, пожалуйста, как вы решили эту проблему, это может быть полезно для впоследствии скачающих.
Не заполняет((( ошибок не выводит, но ТЧ остается пустой. Остатки есть — проверили
(28)
Прошу обратить внимание на важность выбора необходимой обработки в зависимости от установок учета (о чем неоднократно упомянуто в этом обсуждении). Если у вас включен учет по подразделениям — используйте обработку «БП 3.0 (УФ) Заполнение требования-накладной остатками ТМЦ по складу с отборами по счетам и номенклатурам: (v1.03)». Если учет по подразделениям не ведется — используйте «БП 3.0 (УФ) Заполнение требования-накладной остатками ТМЦ по складу с отборами по счетам и номенклатурам (v1.03) (Учет по подразделениям не ведется)«.
В большинстве случаев выбор правильной обработки разрешает ситуацию с «Не заполняет(((«.
Если же даже после следования вышеуказанным рекомендациям у Вас ситуация не нормализуется, прошу Вас сообщить чуть больше информации (версия платформы, версия конфигурации, какие либо особенности учета и т.п.), для того, чтобы я мог не только посочувствовать вам, но и помочь.
(29) Да, наверное нужно было другую обработку))) Извините)))
(30)
Надеюсь, что под словом «другую» Вы имеете в виду вторую из этой публикации, а не «вообще другую, другого автора» 🙂
В любом случае, Ваши извинения излишни. Наоборот, я прошу прощения, что так и не смог внятно объяснить различие версий.
(31)
Ну да, именно это))
Добрый день!
Конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.53.38)
Та же проблема «не заполняет».
Версию обработки скачала верную.
Добрый день!
Прошу прощения за долгое время отклика и за возможные негативные ощущения от нижесказанного, но…
Вся предыдущая практика подсказывает, что Вы скачали неверную версию обработки.
Коллега разработчик не прав, в БУХ КОРП (!) не работает.
Пришлось немного допилить, убрать часть запроса по складам.
Добрый день!
В Бухгалтерия предприятия, редакция 3.0 (3.0.58.20) не работает
БП 3.0 (3.0.58.41)
Скачала обе обработки, не заполняет ни одна.
(34) Скачала обе, блин, прочитав Ваш коммент. Не решило. Пустая ТН
В данной обработке не корректно работает группировка!
Скачал, не заполняет.
БП 3.0 (УФ) Заполнение требования-накладной остатками ТМЦ по складу с отборами по счетам и номенклатурам (v1.03) (Учет по подразделениям не ведется)
Бухгалтерия 3.0.60.50
В БП Корп 3.0.67.54 не работает заполнение БЕЗ фильтра по счетам (СписокСчетов пуст в параметре запроса)
Если отбирать нужные счета руками, то заполняет.
В БП Бухгалтерия предприятия, редакция 3.0 (3.0.66.60) просто не заполняет без всяких комментариев. Учет по подразделения ведется.
Приведенные выше комментарии актуальны до выхода версии 2.0.
Прошу комментировавших обратиться в личку для урегулирования.