<?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='\
Все таки для обработки строк ТЧ в большинстве случаев нужен другой подход (какой реализован в современных типовых). А предложенный здесь требуется довольно редко.
(1) Да? Что не так? Эта фича не главная, потребовалась обработка дополнительных объектов, не предусмотренных в исходных программах, остальное от нефиг делать.
Немного пофиксил формирование отбора для поиска объектов и добавил использование настроек в доступные обработки.
Добавлен поиск и отбор объектов по количеству строк в табличных частях.
Отличное развитие обработки. Память о Душелове останется надолго.
спасибо за обработку!
Кто скачал, возьмите пофиксенную обрабтку. В обработке для обычного приложения обнаружена ошибка, вернее там был черновой вариант.
(12) Скорее всего перенумерация сделана так, как это было нужно автору оригинала. В этом деле на всех не угодишь и цели такой нет.
Небольшие исправления в обработке для обычного приложения.
Добавлена обработка планов обмена. Обработку теперь можно назвать по-настоящему универсальной.
Несколько небольших фиксов в управляемой и обычной форме.
Небольшой рефокторинг кода в управляемой форме.
Так, моё мнение: с (14) по (17) лучше было бы не в комментариях написать, а в описание обработки добавить (и нагляднее было бы, и изучать все комментарии для ознакомления с модификациями не требовалось бы, хотя, и это бывает подчас полезно).
«Форма выбора объекта метаданных импортирована из конфигурации Управление торговлей 11 с небольшими исправлениями для этой обработки.» — это для большего удобства, что ли? На работе, скажем, в ЗУП, это никак не скажется? Всё сработает ОК?
(18) В ЗуП откроется вариант для обычного приложения или почти типовая обработка.
Исправлена ошибка в перетаскивании доступных обработок.
и ошибка в сохранении списка обработок
Спасибо за обработку. Отличная. Очень удобная, в отличие от стандартной «Групповой обработки справочников и документов». Только при добавлении обработки в базу 1С в «Дополнительные внешние обработки» — НЕ СРАБАТЫВАЕТ ПРИ ЗАПУСКЕ, хотя старые обработки запускаются нормально. Замечено на УТ 10.3.
(22) Она создана в основном для управляемого приложения. Вариант для обычного или толстого клиента добавлен для универсальности.
Еще один недостаток: обработка не сохраняет настройки изменения реквизитов табличной части документов. При открытии сохраненной настройки поле с табличными частями пустое. Проверено на УТ 10.3. Проверить в управляемом приложении нет возможности (может в тонком клиенте и работает).
(24) Предыдущий пост внимательно читайте. Вариант для обычного приложения меня не интересует.
Добавлено автоматическое добавление реквизитов объекта для отбора при открытии настройки отбора.
Хорошая вещь, нужно по-тестить!
Свойства и категории есть возможность менять?
скачал обработку, при открытии она выдала вот такие ошибки:
|
{Форма.ПодборИОбработка.Форма(313,29)}: Процедура или функция с указанным именем не определена (ПолучитьПолноеИмяФормы)
Обработка = ПолучитьФорму(<<?>>ПолучитьПолноеИмяФормы(ИмяФормыОбработки), СтруктураПараметров, ЭтаФорма);
{Форма.ПодборИОбработка.Форма(427,30)}: Процедура или функция с указанным именем не определена (ПолучитьПолноеИмяФормы)
ФормаОтбора = ПолучитьФорму(<<?>>ПолучитьПолноеИмяФормы(«ФормаОтбора»), СтруктураПараметров, ЭтаФорма);
{Форма.ПодборИОбработка.Форма(491,29)}: Процедура или функция с указанным именем не определена (ПолучитьПолноеИмяФормы)
Обработка = ПолучитьФорму(<<?>>ПолучитьПолноеИмяФормы(ТекущаяСтрока.ИмяФормы), СтруктураПараметров, ЭтаФорма);
{Форма.ПодборИОбработка.Форма(502,29)}: Процедура или функция с указанным именем не определена (ПолучитьПолноеИмяФормы)
Обработка = ПолучитьФорму(<<?>>ПолучитьПолноеИмяФормы(Родитель.ИмяФормы), СтруктураПараметров, ЭтаФорма);
{Форма.ПодборИОбработка.Форма(539,29)}: Процедура или функция с указанным именем не определена (ПолучитьПолноеИмяФормы)
Отказ = НЕ ПолучитьФорму(<<?>>ПолучитьПолноеИмяФормы(Элемент.ТекущиеДанные.ИмяФормы)).мИспользоватьНастройки;
{Форма.ПодборИОбработка.Форма(554,23)}: Процедура или функция с указанным именем не определена (ПолучитьПолноеИмяФормы)
Если ПолучитьФорму(<<?>>ПолучитьПолноеИмяФормы(Элемент.ТекущиеДанные.ПолучитьРодителя().ИмяФормы)).мИспользоватьНастройки Тогда
{Форма.ПодборИОбработка.Форма(702,46)}: Процедура или функция с указанным именем не определена (ПолучитьПолноеИмяФормы)
ТипыОбрабатываемыхОбъектов = ПолучитьФорму(<<?>>ПолучитьПолноеИмяФормы(ИмяОбработки)).мТипыОбрабатываемыхОбъектов;
{Форма.ПодборИОбработка.Форма(504,2)}: Процедура или функция с указанным именем не определена (ИзменитьПризнакОтключенияКонтроляНастроек)
<<?>>ИзменитьПризнакОтключенияКонтроляНастроек(объект.РежимКорректировки);
{Форма.ПодборИОбработка.Форма(506,2)}: Процедура или функция с указанным именем не определена (ИзменитьПризнакОтключенияКонтроляНастроек)
<<?>>ИзменитьПризнакОтключенияКонтроляНастроек(ложь);
{Форма.ПодборИОбработка.Форма(746,2)}: Процедура или функция с указанным именем не определена (ИзменитьПризнакОтключенияКонтроляНастроек)
<<?>>ИзменитьПризнакОтключенияКонтроляНастроек(ложь);
{Форма.ПодборИОбработка.Форма(679,2)}: Процедура или функция с указанным именем не определена (ВыбратьОбработки)
<<?>>ВыбратьОбработки(Истина);
{Форма.ПодборИОбработка.Форма(684,2)}: Процедура или функция с указанным именем не определена (ВыбратьОбработки)
<<?>>ВыбратьОбработки(Ложь);
|
1с SQL Server 2008 1С:Предприятие 8.2 (8.2.15.301)
(29) Понятия не имею, как у вас умудрилось глюкануть. Это особенно удивило
Такой строки в моём вариант близко нет.
(28) Меняйте, кто запрещает. Этот механизм конфигурационно-зависимый, в разных конфах реализован по разному.
сейчас скачаешь попробуем, а то уже надоело обрабатывать всё в неуправляемом приложении
Не ищет документы по номеру
(33) Не свисти, ищет.
всё вроде в норме
спасибо за обработку! очень удобная
Отличная обработка! Если добавить галку с возможностью записи «ОбменДанными.Загрузка» (где-то была на Инфостарте), то вообще будет песня. И печати не хватает всегда. Можно отсюда тоже плюшки перетаскать:http://infostart.ru/public/18576/
(37) Лень посмотреть, что находится в «Настройках»? Печать появится, когда мне самому потребуется.
Отличная обработка. Спасибо!
Очень пригодилась. Полезная вещь, плюсую
(38) Глаза разул. А про такие же настройки в обычной форме и печать забудь, уже сделал.
Обновление
Добавлено сохранение настроек реквизитов табличной части в форме Установка реквизитов, пофиксены некоторые мелкие глюки.
Спасибо за хорошую обработку.
(47) Правда, что-ль? А ты файл скачал?
Обновление
Добавлена выборка и сортировка объектов с помощью схемы компоновки данных, позволяющая производить отбор по дополнительным характеристикам объектов.
Немного подумал и решил добавить функционала.
[+] Выбор отображаемых полей при поиске объектов.
[+] Открытие формы списка текущего объекта поиска.
[+] Сохранение/восстановление настроек обработок.
(54) спасибо огромное! полезные добавления. Вопрос такое есть, извините, мало опыта с обработкой табличных частей:
Нужно разбить операцию (бухгалтерская- ручные проводки) по признакам КФО=1 или 2 (это у бюджетников).
Т.е. скопировать операцию дважды и в одной остваить по 1, а в другой по 2. Можно так обработать?
(55) Произвольный алгоритм вам поможет. Пишите код так, как будто работаете в конфигураторе.
Добавлено сохранение настроек изменения реквизитов табличной части и открытия формы списка объекта поиска в варианте для обычного приложения.
Интересно интересно как появятся деньги обязательно скачаю как раз то что я ищу.Автору огромное спасибо
(58) Стартмани? А вотhttp://forum.infostart.ru/forum1/topic52290/?PAGEN_1=3
Пофиксено.
Не выбирался тип значения для реквизитов, содержащих несколько типов данных.
Добавлено
Поиск и отбор объектов возможен по значениям агрегатных функций для числовых реквизитов табличных частей: сумма, максимум, минимум, среднее.
…
(62) Не свисти, работает.
>>> СМ улетают за скачивание «обновлённой» — это у
дятловнедостаточно сообразительных юзеров. Умный воспользовался бы гуглем и нашёл бы по названию эту и другие мои программы на моём сайте.Просто небольшой рефакторинг кода.
Обновление
Для варианта управляемого приложения добавлено сохранение и восстановление истории выбора объектов и настроек отбора.
Для варианта обычного приложения добавлена возможность отбора по значениям агрегатных функций для числовых реквизитов табличных частей: сумма, максимум, минимум, среднее.
При Выборе справочника номенклатуры выкидывает ошибку {Форма.ПодборИОбработка.Форма(776)}: Значение не является значением объектного типа (ПолноеИмя)
Если ПолноеИмяОбъекта = ОбъектПоиска.ПолноеИмя Тогда
(70) Косяк, наверное. Приеду с отпуска на югах, исправлю.
(70) Исправил. Заодно пофиксил другую, незамеченную никем ошибку, связанную с иерархическими справочниками.
Как наберу рейтинг, скачаю по тестирую!!!
(73) Мани, что-ли? Могу продать. 4 рубля штука.
Могу купить, но лучшее на Мыло сбросить.
(75) На мыло сбросить будет стоить 200 рублей, если ума не хватает найти в гугле.
Будем искать.
Добавлено сохранение истории выбора строки поиска.
(79) В описалово вкурись. Если бы была, то написал. Воспользуйся другой обработкой, которая входит в состав многих конфигураций. Так и называется: Групповая обработка справочников и документов.
(80) сообщения автору публикации приходят автоматом. Повторять не требуется.
Обработка обновлена
Добавлена возможность группового снятия пометки на удаление объектов.
Спасибо большущее за обработку
Небольшой фикс, не влияющий на функциональность.
(85) Включи в настройках обрабатывать в транзакции и будет счастье и обработка на сервере. Индикатор останется, это Душелов ещё делал.
Спасибо авторам! Сэкономил массу времени!
(86) Решил воспользоваться Вашей обработкой, УТ 11.0.7.21, управляемое приложение. Хочу отобрать документы РТУ по дате документа за период. В Настройке отбора, Вид сравнения не нашел метода «Между» или «Интервал», в поле Значение есть только «начало след./пред.» и т.п. Произвольный запрос — это решение, но нужно юзерам что по — проще. Может что не так делаю или как отобрать доки за период?
(86) и еще .. получаю документы в списке, как они упорядочиваются? У меня список начинается доками с 15.08, вроде идет упорядочивание по дате, но в конце появляются доки с 1.08 и опять все по дате. Спасибо!
(88)(89) А я что поделаю, это СКД. Пользуйся настройкой порядка и прочими мощностями инструмента.
(90) и вот еще, Вы можете доработать установку/снятие флажка объектов для обработки, при групповом выделении строк списке? Мыслю, это даст больше места для маневра! 🙂
(91) Если устроит установка/снятие флажков в выделенных строках при нажатии кнопки, то не вопрос. Кидаете деньги мне на телефон или яндекс кошелёк и сегодня сделаю.
(91) За деньги уже не надо, так нормально?
(91) Ну так надо доработать или нет?
Добавлен функционал.
Для табличной части предусмотрены режимы обработки:
Замена значений — заменяются значения отмеченных реквизитов в существующих строках.
Добавление строки — поиск строк по значениям отмеченных реквизитов и добавление новой строки в случае отсутствия строк по заданному отбору.
Удаление строк по выбранным полям — поиск и удаление строк по заданному отбору.
Спасибо!
(96) Плюс лень было поставить?
Всегда пожалуйста!
(97)
завтра зайду еще разок. В гости:)
Будет ли работать на Ут 11 для Беларуси?
(100) У вас глаза косые или читать не умеем? Описание перечитайте, только вдумчиво.
Скачал, выбрал кадровое перемещение, при замене реквизита выдало. Поле объекта не обнаружено. В файле есть рисунок скрина. Очень нужна эта обработка. Если быстро разберетесь с проблемой , заплачу.
(102) Ставьте плюс, сейчас залью
Добавлена возможность указать количество объектов при обработке в транзакции .
Выяснилось, что обработка большого количества объектов (over 2000) валит процесс наповал.
Немного подумал и решил добавить возможность выбора режима записи документа при установке реквизитов или в произвольном алгоритме.
Давно хотел добавить вызов доступных обработок в контекстное меню таблицы найденных объектов. Сегодня эту мечту осуществил. Так что
жрите, бесплатнопользуйтесь на здоровье.Спасибо что не оставляете обработку 🙂 Оченно полезная вещь
Не очень получилось пользоваться этой обрабоктой. Как-то тяжковата она
(108) Да, не для средних умов, особенно если учесть, что фактически она представляет собой типовую, портированную на управляемые формы.
(109)
аа.. зачем? вроде уже от 1С есть?
(110) Вообще я на твои вопросы не отвечаю, но на этот раз, так уж и быть, окажу честь. Обработка от 1С имеет урезанный функционал, сравни матчасть.
(111)
спасибо, что оказал честь 🙂
(111) Сергей, почему Вы внесли меня в черный список? Как мне кажется, я повода не давал.
{Форма.УстановкаРеквизитов.Форма(53)}: Поле объекта не обнаружено (Материалы)
СтрокаТаблицы[ЭлементыФормы.СписокТабличнаяЧасть.Значение] = Реквизит.Значение;
попробовал «Установка реквизита» — табличная часть — такая ошибка ………….
(201) Бухгалтерия предприятия 2.0? Угадал.
Исправил.
Хм… отличная обработка, но вот почему то не хочет делать то что нужно мне.
Сделал запрос, нашел объекты, на странице Обработки открываю Установка (замена) реквизитов, устанавливаю реквизит который надо поменять и получаю ошибку Значение не является значением объектного типа.
{ВнешняяОбработка.УниверсальныеПодборИОбработкаОбъектовУФ.Форма.УстановкаРеквизитов.Форма(90)}: Значение не является значением объектного типа (ПолучитьОбъект)
Объект = Ссылка.ПолучитьОбъект();
Если я правильно понял, из списка где я запросом отобрал документы ни чего не выбирается и объект не получается.
Подскажите куда покопать?
ЗЫ обработку сегодня скачал
И в списке отобранных объектов пустая колонка Объект.
о, и этот улетел
(607) Если отобрали запросом, в запросе должна быть колонка с именем Объект и тип ссылка на ваш объект.
(609)Понял, меня терзали смутные сомнения на этот счет…. 😉 Спасибо. Завтра попробую..