<?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='\
(0) уважаемый а можно сжать в файл? а то у меня походу не все выводит.
На «Как отобразить на географической схеме выбранный город?» обрезает и дальше «молоко».
Так это же «А.П. Габец, Д.И. Гончаров
http://ifolder.ru/7909799
1С:Предприятие 8.0 Простые примеры разработки»
там многое из др. источников.
Вот блин у меня тоже не все выводит. Поддерживаю просьбу NoMax о создании файла. А то, что в начале — это простые примеры разработки
Да, да — я тоже за файл. Мелкий текст получатся — глазки начинают болеть быстро(((
Автору надо все это «добро» сложить в откомпилированный chm или html и тогда будет однозначно большой ПЛЮС
Согласен с предыдущими комментариями!
тутhttp://infostart.ru/public/60366/ этот хелп в формате файла шаблонов.
Спасибо, на всякий случай полезно
Спасибо, пригодится
Посмотрел листинг и мне показался смутно знакомым, и нашел аналогичное 1:1 в книге «Ганчаров Грабеч. 1С Предприятие 8.1 Простые примеры разработки». Такого явного плагиата я не встречал очень давно.
(11) см. (2) и (3)
(11) из 8.1 ничего не нашел, спецом искал темы про временные таблицы — глухо, по ходу это из 8.0.
(12) других источников что-то тоже увы в упор не вижу в этой огромной свалке от Габеца для 8.0.
(11) согласен это ПОЛЕЗНЫЙ МАТЕРИАЛ, но …из хорошей книги.
Плюс ставлю — рекомендую всем этот объективно полезный материал.
Автору рекомендую в самом начале написать благодарности Габцу и Гончарову.
Название скромное больно. Это скорее «Пособие юного програмиста».
Спасибо! Буду осваивать)
Как создать новый документ?
НовыйДокумент = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
ФормаНовогоПКО = Документы.ПриходныйКассовыйОрдер.ПолучитьФормуНовогоДокумента();
ФормаНовогоПКО.Открыть();
Пропарился часа два пока понял в чем фишка. Косяк предложенного механизма в том, что реально создаются 2 новых документа.
СоздатьДокумент() создает документ, в который записывается НовыйДокумент.Дата = ТекущаяДата();
ПолучитьФормуНовогоДокумента() тоже создает документ, очень неудачно подобран пример с датой, дата нового документа всегда ТекущаяДата().
Если будет заполнение другого реквизита, например,
НовыйДокумент.СтатьДвижения = Командировочные;
То в открываемом документе ФормаНовогоПКО.Открыть(); СтатьДвижения заполнена не будет.
Правильно делать так:
НовыйДокумент = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
ФормаНовогоПКО = НовыйДокумент.ПолучитьФорму();
ФормаНовогоПКО.Открыть();
И если это плагиат, то качество источника оставляет желать лучшего.
Очень полезные «полезности»! хоть и столь знакомые по книжке.
хорошая подборка, спасибо
(5) Смотри версию для печати — там всё хорошо читается.
Спасибо большое, уже полгода не могу нормально с 1с разобраться, то времени нет то меня… теперь немного проще с этим!!!
Отличная подборка, спасибо большое!
Материал, несомненно, очень полезный.
Спасибо, материал полезный, иногда приходится пользоваться подобными разработками, только пока приходилось их самому придумывать и воплощать, а теперь можно уже разработанное взять и не терять время на реализацию своего. Автору огромное спасибо!
Спасибо, плюс
Классно, очень хорошо помогает для начинающих программистов, программирую уже 7 мес, все это время только сюда заходил:))
Спасибо за подборку =)
Плагиат!!!
Автору «-«, но не могу пока к сожалению.
прикольная штукенция, спасибо 🙂
(0)Как привести строку типа «20.10.2012 12:03:40» к дате 1С
Судя из справки — надо вычленить отдельный составляющие и получить строку типа:
«20121020120940» и потом сделать Дата(«20121020120940»).
но можно и просто Дата(«20.10.2012 12:03:40»).
Я так понимаю тут зависит от региональных настроек и т.д. Но главное — что оно работает (на 8.2.16)
Я не знал, может кому поможет.
(29) u_n_k_n_o_w_n,
В коей степени с вами согласна, но…Но не у всех есть возможность заказать большую книгу почти за 3000 по розничной цене))))
(32) Bukaska, давайте уточним цену: 350 руб.
Плю ко всему Вы получаете диск с данными где все это есть в электронном виде.
(33) u_n_k_n_o_w_n,
http://v8.1c.ru/metod/books/book.jsp?id=401
Я про эту книгу поняла из темы)))
Это уже набор «всю включено». Обязательно приобрету.
(0), (35) народ, «всё включено» на сайте help1c.com, а это плагиат какой-то.. минус не ставлю только потому, что автор потратил своё время на копи паст.. даже не позаботясь об оформлении статьи..
все, кто хочет изучить 1С — найдите книжки «Профессиональная разработка в 1С:Предприятии» первой и второй редакции и по ним учитесь.
Спасибо!
неплохая статья, правда их уже немеренно на сайте однотипных!
Спасибо. В данной теме нашла то, что искала.
В функции проверки массивов на идентичность:
Мне думается, что правильнее
В вашей статье нашла ответ на свой вопрос. Спасибо.
нехватает очень следующего (авторство не мое)
Можно ли в запросе , в качестве источника данных, использовать таблицу значений ?
Да. Это можно сделать с помощью временных таблиц:
// Сначала помещаем ТЗ во временную таблицу
Запрос = Новый Запрос ;
Запрос .МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос .Текст = «ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ»;
Запрос .УстановитьПараметр(«ТЗ», ТЗ);
Запрос .Выполнить();
// Теперь ТЗ можно использовать в запросе :
Запрос .Текст = »
|ВЫБРАТЬ
| ТЗ.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| ТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыНаСкладах.Остатки() КАК Остатки
| ПО
| ТЗ.Номенклатура=Остатки.Номенклатура»;
Выборка = Запрос .Выполнить().Выбрать();
—————————-еще момент !!!!—————————————
Если ошибка: «Тип не может быть выбран в запросе» в 1С 8
При использовании в запросе таблицы значений, возникает ошибка: «Тип не может быть выбран в запросе». Почему?
Дело в том, что колонки таблицы значений, передаваемой в запрос в качестве источника данных, должны быть явно ТИПИЗИРОВАНЫ. Т.е. если мы используем таблицу значений, так же в свою очередь выгруженную из результата запроса или из табличной части документа например — то такой проблемы не возникает, т.к. в таком случае колонки будут типизированными. А если мы сами создаем таблицу значений, то нужно явно указать тип для каждой колонки:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));
Пользуюсь темой — как справочником — но еще одной полезной конструкции тут нет:
«Как открыть форму ссылки под курсором в форме списка» (регистр значений например)
Форма = этаформа.ТекущийЭлемент.ТекущиеДанные[этаформа.ТекущийЭлемент.ТекущаяКолонка.Имя].ПолучитьФорму();
Форма.Открыть();
Добавьте пожалуйста!
PS сегодня 1,5 часа искал — как это сделать 🙂
Спасибо помогло !
искал преобразование даты в строку — так и не нашел 🙁
(45) grand.pers, вот по этой ссылкеhttp://www.forum.mista.ru/topic.php?id=388253 в комментарии 23 есть решение
Спасибо, есть много полезных вещей
В связи с отказом от модальности, функция Предупреждение нежелательна
48 А ЧТО надо использовать?
Полезная информация!
Как таблицу значений «ТаблицаПолучатель» заполнить данными таблицы значений «ИсходнаяТаблица»?
Этот код не совсем верный
ТаблицаПолучатель = ТаблицаИсходная.Скопировать();
Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл НоваяСтрока = ТаблицаПолучатель.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсходнойТаблицы); КонецЦикла;
Здесь нужно использовать просто
ТаблицаИсходная.Скопировать();
ИЛИ метод СкопироватьКолонки();
ТаблицаПолучатель = ТаблицаИсходная.СкопироватьКолонки();
Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл НоваяСтрока = ТаблицаПолучатель.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсходнойТаблицы); КонецЦикла;
в функции СформироватьЗапроспоТабличнойЧасти — ошибка :
так у вас: (ЗначениеНеЗаполнено(Реквизит.Ключ)
правильно:(Не ЗначениеЗаполнено(Реквизит.Ключ)…
p.s. спасибо за статью.
Красиво
(52), Вадим в старой версии платформы была функция ЗначениеНеЗаполнено, наверное вы не сталкивались
(0)
???
Вообще-то это Системные перечисления/Разные/ЧастиДаты/ДатаВремя
(0)
а почему не?
Особенно, для полей составного типа
(0)
А тяжело посчитать на калькуляторе и просто написать 86400 ?
Кстати, а если 2 ння?
я себе давно делал тоже обработку с примерными модулями )