<?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) Старался поменьше изменять конфигурацию КД (т.к. выложить уже объединенную конфигурацию я не смогу) и в то же время дать гибкость при хранении метаданных. Поэтому пришлось уйти от стандартных справочников КД. Жду новой версии КД — там поглядим…
смесь ужа и ежа , то там контекстная подсказка не изменялась и работает как обычно для метаданных КД, а не той конфигурации, которая нужна. Поэтому и не упомянул.
ЗЫ Если про это
(4) Все, КД на 8.1 кончилась 🙂
Смотрел новую версию, только для 8.2 ?
(5) Да, но управляемыми формами пока не пахнет. А имеющиеся изменения нетрудно самому в 8.1 внести. Т.ч. пока пациент скорее жив, чем мертв 😀 А жаль.
Обновил для ИР 2.03
(7) Я сделал обновление сабжа на платформе 8.2 для последней КД 2.1.3.1 и ИР 2.06.
Также есть дополнения по GComp для конфигураций 77.
Если будет нужно, могу выложить файл конфигурации моей КД 🙂
(8) Я не против. Могу и сам сделать, но времени и потребности пока нет, а сильных изменений для подсказки в КД там не было. По дополнению с GComp для конфигураций 77 думаю ту тему переименовать, т.к. отладка обработчиков уже не так актуальна. Если хочешь, можешь там выложить. Или все в одной конфе.
ЗЫ Только насчет полной конфигурации КД — я тут узнавал, нельзя :).
По отладке 77 и ЖКомп я лично фразу не понял.Пояснишь?
Пытаюсь работать с конфигурацией «Конвертация данных», очень востребован ее функционал. Но не могу похвастать, что удается так сразу в ней разобраться как следует, а очень хочется. Поэтому очень приветствую разработку, усиливающую ее возможности. Спасибо!
очень полезно, спасибо
Объединил с КД 2.1.7.1 по инструкции — всё нормольно, одно но: в правилах ПКО и ПКС изменение размера поля не работает из-за добавленного поля «имя обработчика». Для исправления нужно заменить одну строчку в модуле кдРаботаСДиалогами в процедуре ИнициализироватьКонтекстнуюПодсказкуНаФорме
на строчку
upd: всё равно иногда слетают привязки. Остановился на варианте вообще скрыть панель, вся функциональность через контекстное меню доступна:
+закомментировать код по установке привязок и положения ТекКоманднаяПанель
Начал изучать правила обмена, КД и иже с ними… Взял конфу КД версии 2.1.8.1 с диска ИТС за октябрь, прикрутил к ней эту доработку вообще без проблем…
Помимо описанного в инструкции, пришлось еще повозиться с формами, куда собственно панельки и встраиваются, а именно с привязками. Проблема видимо та-же, что и в (13). Я во всех формах принудительно привязал текстовое поле растягиваться по ширине и высоте и дополнительные поля также в зависимости от расположения жестко привязал к границам панели — это помогло.
Мне в принципе КД нравится. Но визуального доступа к данным нет. Отладка слабенькая, ИМХО… Наверное не мешало бы видеть выгружаемые данные перед загрузкой и подробное описание всех действий при загрузке.
Вопросы/предложения:
1. А подсказка по функциям общих модулей доступна? И как список процедур подгрузить?
2. Для общих модулей, да и для стандартных процедур надо бы еще подсказку по параметрам, чтобы в код не лезть постоянно. Этого не нашел даже в ИР (пробовал мобильные ИР, и там есть справка с выделением текущего параметра жирным шрифтом).
Понятно, что тема старая… Автору, если забросил — подскажи в какую сторону смотреть — что перспективнее?
(14) Проблема с привязками старая и тянется в формах КД уже давно. Единственный способ — или подправить привязки руками (чтобы не вылезали за обычные границы) или отключать панель совсем.
Чтобы загрузить список модулей нужно сначала его выгрузить. Сейчас такого функционала у меня нет.
ЗЫ Вообще текущий вариант я развивать не буду. Есть пока не доделанная версия в которой используется немного упрощенный список метаданных из типовых справочников КД (что бы упростить использование и не возиться с полными дублями метаданных и не раздувать базу) и частичными дополнениями в отдельном справочнике некоторых метаданных. Т.к. как показала практика с опытом нужно в основном подсказки по небольшому списку метаданных и именам общих модулей.
Альтернативы пока не встречал, т.ч. и посоветовать нечего.
(15)
Это можно сделать из конфигуратора (см. рисунок).
Можно также использовать V8Unpack для сохраненной конфигурации.
А ещё, можно подсмотреть, как это реализовано в подсистеме ИР — там подсказки по методам модулей есть.
Могу сделать справочник типа «Функции и процедуры», куда размещать их описания (место определения, название, параметры) и загрузчик информации туда.
А как сделать, чтобы в контекстной подсказке это учитывалось?
(16) Собственно как это сделать я знаю 🙂 Я еще в первых версиях подобное делал через V8Unpack, а тем более сейчас когда такой функционал есть в ИР. Только заниматся этим пока некогда.
(17) Давайте вмести уже довертим функционал? Я напишу загрузку в процедур, функций и переменных в справочник и скину результат Вам. Сделаете, чтобы функции и процедуры появлялись во всплывающей подсказке?
(18) Напомни в пятницу вечером. Если не буду на выходные занят и найду архив в котором делал, то можно попробовать доделать для текущей версии.
(14) Контекстная справка в ИР работает естественно только для предопределенных методов, т.к. для них есть описание в синтакс-помощнике. Для остальных не предусмотрено.
(20) Но Вам же удается получить список процедур общих модулей. Почему не сделать к ним список параметров этих процедур? Без параметров — это только половина дела…
(21) Удается получить через экспортную функцию из dll платформы. Этот код я заимствовал из Информатора, написанного chessman’омhttp://www.1cpp.ru/forum/YaBB.pl?num=1313560540/90 . Там «рядом» можно получить только количество обязательных параметров, но их имена, типы и передачи по Ссылке/Значению, значения по умолчанию недоступны.
(22) ну для начала хотя бы количество) а вот для КД можно бы анализировать тексты модулей… пока что руки не доходят сделать их анализ — но думаю, там дел на один вечер…
Люди, на каком уровне живет эта разработка. Может кто выложит готовый cf для последней конвертации?
(24) Тут я выложить не могу готовый cf (правила запрещают), но если не получилось обновить на последний релиз КД, то могу в личку ссылку кинуть. ИР будет старая 2.03.
(25) написал Вам в личку
(25) Что такое ИР?
(27) Это сокращение отПодсистема Инструменты разработчика
— Обновил до ИР 3.04 и КД 2.1.8.1
— добавил загрузку через COM-соединение общих модулей (кроме глобальных) и экспортных процедур/функций общих модулей и объектов. Теперь подсказка в коде работает и по ним. Отключить загрузку процедур/функций можн
(29) Вам спасибо. Был готов сам это с нуля делать!
(30) Хорошо, что удалось предотвратить это =)
(29) Огромное спасибо!
Жаль, нельзя больше 1 плюса поставить) отрываю с руками. Нечеловеческое Спасибо!
UPD:
Обработка выгрузки правил КД 2.1.8.1 с поддержкой GCOMP
Сам GCOMP v.2.2.15
Для кого актуальны базы-источники и/или приемники на платформе 7.7:
Замените имеющуюся в конфигурации обработку на приложенную — получите все то же самое, но с поддержкой GCOMP. Все изменения помечены комментом //dem
Ввиду того, что удалось сделать перегрузку процедур/функций для общих модулей и объектов через COM-соединение и подсказка по ним работает, то текущей реализацией стало действительно удобно пользоваться (во всяком случае мне :)). Даже с учетом того, что подгружается копия метаданных. Сейчас есть следующие варианты развития:
1) Сделать единую обработку загрузки через СОМ-содинение, чтобы не нужно было запускать две обработки. При этом будет два варианта загрузки:
а) нажатием одной кнопки (или программно, по регл. заданию) — по последним настройкам списка метаданных, если загрузка уже производилась;
б) загрузка с открытием текущего диалога настроек.
2) Попробовать подключить подсказку к запросам в КД
3) Сделать единую обработку перегрузки метаданных через файл. тогда добавится перегрузка глобальных процедур/функций и можно будет использовать для баз к которым нет доступа по сети.
Что интересующиеся предпочтут?
(34) все три пункта очень нужны и важны, но мне актуальнее всего 1 а)
Отмечусь, отличная вещь, нужно ознакомиться! 🙂
авансом плюсую
(35) Значит её и сделаем первой
По какой то непонятной мне причине не работает подсказка имен методов общих модулей.
Все делаю по инструкции, при загрузке через COM-соединение галка «Экспортные процедурыфункции» установлена. Сами имена общих модулей подсказываются нормально, а вот их методы — нет. И то же самое с элементами перечислений. Я пишу, допустим
, появляется список методов перечисления (Индекс(), Количество(), Получить() и т.д.), а значений перечисения в списке нет…
То же самое у меня было еще на КД 2.1.5.1 с добавленным функционалом подсказки, тогда я думал, что как то неправильно произвел объединение… Вобщем, не понятно. Кто нибудь сталкивался? Или у всех все работает?
Могу выложить свой cf, объясните, что я делаю не так.
Большое спасибо.
UPD Такое наблюдается, если ИБ-источник на платформе 8.1. У меня под рукой конвертация 8.1 — 8.2, на стороне источника методы общих модулей не подсказываются, на стороне приемника методы общих модулей подсказываются нормально, но значения перечислений не подсказываются нигде.
(39) Под 8.1 не проверял, т.к. уже давно забыл про неё. Проверю, но не думаю что твой cf-ник нужен будет.
(39) По поводу загрузки методов из 8.1 через COM-соединение — не работает. Во всяком случае возвращается пустая таблица. Работоспособность просто контекстной подсказки по методам в 8.1 проверить нельзя, т.к. в последней версии для 8.1 еще не использовалась эта возможность подсказки.
По поводу перечислений — действительно ошибка. Исправлю в следующий версии. Сейчас можно исправить так:
в модуле обработки «ирПлатформа» в строке 1540 заменить строку
(41) Огромное спасибо.
реально ли сделать подсказку по параметрам методов общих модулей? Раньше в конфигуратор лазили, чтобы посмотреть методы общих модулей, теперь лазим только за параметрами.
Если не реально — ок, и так уже очень даже хорошо. Просто спрашиваю.
(43) Сейчас нельзя. Подробнее в (22).
Обновил до КД 2.1.8.2 и ИР 3.07
Временное исправление (до появления новой версии ИР) ошибки загрузки методов в 8.3/8.2.
На текущий момент не работает загрузка методов при разных версиях платформы (ИБ 8.2 -> КД 8.3, ИБ 8.3 -> КД 8.2). Нормально работает при аналогичной версии платформы (ИБ 8.2 -> КД 8.2, ИБ 8.3 -> КД 8.3).
Граждане, прошу прощения, что оффтопик, но кто такие «Правила Корреспондента», добавленные в 2.1.8.2 — в хелпе ничего не вижу, в инернетах, навскидку-тоже. Какая польза от оных?
(46) так и не смог добиться контекстной подсказки. Все ВК зарегистрированы, xp sp3, КД 2.1.8.2, выставил свойство у конфигураций 8.2. Только через com не пробовал, сейчас буду пытаться.
—
Блин) Нужно было просто право дать пользователю. Вы бы в статье указали этот момент.
Подскажите пожалуйста: открываю настройки в модуле ПКС, там есть возможность указать файл шаблонов текста. Указал свои шаблоны, которыми пользуюсь постоянно, но ни автоматически ни по ctrl+пробел не срабатывает, что нужно сделать?
_
Нашел shift + space
При открытии конвертации сообщение: «Не удалось зарегистрировать DynamicWrapperX. Возможно требуется запуск от имени администратора.»
Сеанс перезапускается и все заново.
Что я делаю не так?
(50) Попробуй запустить 1С от имени администратора.
(51) Разобрался. Версия платформы x64 8.3.10. Запустил под другой версией платформы.
Сделал всё в точности по инструкции, но в ПКО никакой контекстной подсказки не появилось ни по сочетанию crrl-space, ни через ПКМ.
(53) Где скриншот редактора ПКО?
(54)
(55) Если есть пользователи в КД, то нужно им назначить права с ИР и КД в конце названий.
должна быть панелька в ПКО:
(56) Пользователей не было (да и зачем они в КД?). Добавил одного, назначив все возможные роли — то же самое, в ПКО контекстной подсказки нет и панельки нет.
(57) Скинул в личку ссылку на уже объединенную версию
(52) Добрый день. Подскажите пожалуйста, а под какой версией платформы запускаете? А то у меня тоже проблема с «Не удалось зарегистрировать DynamicWrapperX. Возможно требуется запуск от имени администратора.» Уже и вручную в Windows регистрировал компоненты, ничего не помогает.
(59) Как вариант, используй 32-разрядный клиент.
(60) Использую 32-разрядный клиент 8.3.11.3034 — та же фигня..
(61) Покажи скрин с окном «Административная регистрация COM компонент» в ИР. Ты же через него регистрировал эту компоненту?
(59) Я вообще под 8.2 запустил
(61) Вообще под всеми версии 32 разрядных клиентов работало. Сейчас проверил на файловой базе 8.3.12.1412 Win x64. Главное запустить сначала 1С под именем администратора. Можешь отдельно портативные ИР запустить — там как раз удобно регистрировать компоненты.
(62)
Не нахожу в ИР объект «Административная регистрация COM компонент». Регистрацию вручную я проводил средствами Windows через команду regsrv32. Запускал 1С под администратором — все равно пишет «Не удалось зарегистрировать DynamicWrapperX. Возможно требуется запуск от имени администратора.» и уходит в перезагрузку базы и по новой.
Разобрался. Открыл в чистой базе на платформе 8.3.11.3034 x32 ИР и там нашел обработку «Административная регистрация COM компонент». Зарегистрировал недостающий DynamicWrapperX. Спасибо за помощь!
Неожиданно перестало все это работать у меня.. что-то с регистрацией dll — при этом оригинальные Инструменты Разработчика работали (требующие те же dll).. долго пытался что-то сделать с dll-ками, но что-то никак не срасталось..
В результате пришел к тому, чтоб обновить древние Инструменты разработчика на последнюю версию и немного «подшаманить» в связи с изменениями в сигнатурах поменявшихся функций.. в моем случае оказалось что такой путь проще.