<?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='\
Прошу писать свои отзывы и предложения.
народ, не вижу отзывов >:o
В качестве отзыва: внятное описание, информативные скриншоты, наличие хелпа — просто душа отдыхает после предыдущего потока мусора. +2
(3)описание существовало и раньше, только в содержание забыл включить
вопрос всем:
Так всеже комунибудь такая подсистема нужна?
(4) Нужна. Гуд.
К стати процедура кнопки справочника сотрудников у меня вынесена во внешнюю печатную форму так что можно обойтись без изменения типового справочника.
К стати ктонибудь тестировал на версиях офиса отличных от 2003?
напишите отзывы
Спасибо
Есть вопрос. Допустим у меня будет задан параметр <ТекстПисьма> . Данные возьмуться из заполненного реквизита и сформируется в вордовском документе. А смогу ли я сохранить изменения сделанные в ворде опять в реквизите 1С?
в моем примере в скриншоте » результат работы» не задан параметр :
<Должность.Наименование должности> он так и выйдет в заполненом шаблоне.
>> А смогу ли я сохранить изменения сделанные в ворде опять в реквизите 1С?
пока нет, если честно, я даже не представляю как это реализовать в подобном решении.
тут испольшуется замена строк в тексте, а не использование параметров Word-а.
хотя все возможно, если кто имеет идеи по этому вопросу прошу сообщить
(11) У меня типо твоей штуки тоже реализовано. Этот вопрос довольно интересный и покамест я тоже способов не вижу. Только юзать 8.2 🙂
Еще один нюанс:
в конфигурацию заложена возможность использования листов excel-я как шаблона.
вот оттуда вполне можно вносить данные в 1С при изменении значений параметров.
(4)Мне нужна но для формирования договоров контрагентов которые арендуют места на рынке… юристы часто перебивают текст договоров
(14) ну так вперед
делаешь или справочники, или докумены, и включаешь в них мою табличную часть (с процедурами) и наслаждаешься работой своих юзеров в новой подсистеме и все довольны.
Более того у меня нет привязки к каким либо объектам поэтому подсистему можно использовать в любом виде.
если что пиши на аську.
в продолжение (15) у меня эта подсистема какраз используется договорным отделом именно по причине в (14)
Не думал добавить функционал по хранению «готовых» файлов не в БД, а просто в файловой системе, типа «C:ВсеВнешниеФайлы[ГИД_Сотрудника]файлы.*
А то база может вспухнуть+возможно, в случае файлов, доступ будет быстрее…
Отличная обработка. +1
Классная штука, пригодится +1
(17)
во-первых — при сохранении в базу файлы архивируются, так что база конечно пухнуть будет но понемногу.
во-вторых — ИМХО поиск и разархивирование в файловой системе компа займет большее время чем распаковка 1С-кой хотя я не проверял
А с 2007-м работает?
не проверял.
там используется «Execute» (замена) если 2007 это поддерживает, то должно сработать.
(15)
Спасибо )
Скачал, обязательно попробую, на следующей неделе, а то ща времени нетути… ((
(21) Работает 🙂
Как обстоят дела с таблицами?
(25)
Если Вы про wordовые таблицы то без проблемм.
для excel есть отдельные процедуры в глобальном модуле.
Вопрос-предложение: а нельзя ли сделать данную подсистему внешней обработкой? Например будет открывать что-то вроде «Рабочее место менеджера» в УТ? Спасибо!
(27) В принципе, у меня процедура указанная в справочнике Сотрудники организаций помещена в внешнюю печатную форму (чтоб не портить стандартный код), так что прикрепить можно куда угодно.
НО при помещении процедур заполнения шаблонов в другие модули (тоесть не в модуль приложения) у меня почемуто не срабатывали некоторые функции. С чем это связано, я не знаю, разбираться времени да и желания не было, так что что есть то есть.
но ничего невозможного нет, если голова из положенного места растет, то можно и внешней обработкой сделать.
Правда есть еще одно НО: вся концепция заключалась в возможности сохранения заполненых шаблонов и пр. файлов в базе данных. поэтому всеравно должен быть какойто объект метаданных, где эта информация должна сохраняться. (у меня эта информация хранится в справочнике Внешние кадровые документы.)
если необходимо к чему либо другому привязать то ничего сложного я не вижу.
в справке Конфигурации подробно описан способ прикрепления подсистемы к любому объекту метаданных.
вещь очень хорошая.
а такая-же замечательная штука только для OpenOffice есть?
(30) ну если ваш опенофис поддерживает программне обращение к своим функциям, то переделок максимум на день, вся проблема в том что опенофисов развелось немерено, и для каждого писать программу не вижу смысла.
Кроме того тут описан принцип как можно получать параметры (или любые другие данные) в процессе работы 1С предприятия, а заполнение шаблонов это побочный эфект для наглядности.
ДУМАТЬ НАДО ШИРШЕ А ПОНИМАТЬ ГЛУБЖЕ 😉
А есть возможность вывести таблицу графика платежей, в которой количество платежей динамическое?
(32) в араметр возвращается только одно значение. и заменяется на подстроку в тексте.
Если настроить передачу параметров word -а то нет ничего невозможного, просто в word будет передаваться таблица значений а word будет строить по нему все что он может.
Понятно. Значит не может… У меня есть решение такой проблемы, но оно очень корявое. Но рабочее. Но такое корявое, что сам им пользоваться не хочу, поэтому жду, может кто чего придумает…
Помогите разобраться в следующей проблеме:
установленная конфигурация создает шаблон в word. При создании регистрируется на событие Документ.close.
При закрытии документа в 1с события не возникает.) На события Application.* регистрируется и работает все нормально. Но это не позволяет конфигурации работать нормально.
Проверял на следующих компьютерах:
Оболочка 1с 8.1.8.76 на всех компьютерах.
— win XP home + office 2000
— win XP home + office 2003
— vista home + office 2007
С чем это может быть связано? Стара версия версия 1С, или что-то другое?
Спасибо.
(35) этот вариант не рассматривался. действительно при закрытии документа в 1с не происходит ни каких действий.
в будущей редакции я поставлю просто отключение обработчика, так как закрытие word -а, я лично, считаю некорректным.
(36) Наверное не правильно сформировал вопрос.
Опишу ситуацию:
1.Открываем форму «внешние кадровые документы».
2.Нажимаем клавишу «+шаблон». Открывается word со сформированным документов.
3. Редактируем документ и закрываем его (не закрывая word).
После этого, по моим соображения в табличной части спарвочника «внешние кадровые документы» должна появиться строка хранящая в себе этот документ.
Я так решил, прочитав строку
ДобавитьОбработчик WordДокумент.close, ЗакрытиеДокументаWord;
Так вот после закрытия документа в 1с события не генерируются.
Сначало я подумал, что такого события в мое версии worda(2000) нет. Заменил строку на ДобавитьОбработчик MSWord.OnDocumentChange(уже точно не помню), ЗакрытиеДокументаWord; И программа рабоает, события в 1с генерируються).
Затем я подумал, что такого close-события у документа нет. Тогда я его заменил на случайное, и такое событие регестрировать 1с отказался.
В результате программа у меня генерирует всего один шаблон. Второй шаблон программа не составляет, так как не происходит очищение переменных, описанное в процедуре ЗакрытиеДокументаWord.
(37) на сколько я знаю сначала формируется документ а затем распечатывается его печатная форма (или я не прав?) так почему же Вы создаете печатную форму, затем меняете документ, и закрываете его? (или я в чем то туплю сутра?)
как я должен отследить что Вы закончили редактирование word -а (ИМХО только при закрытии документа word ведь компьютер, и даже я не телепат) вот при закрытии и происходит:
1) временное сохранение двоичных данных word
2) копирование этих данных в базу,
3) удаление временного файла с винта
4) обнуление внутренних переменных
Если есть другой вариант с радостью рассмотрю его
если имеется ввиду закрытие документа word без закрытия самой программы word то тогда возникают сложности при определении какой из документов именно закрылся, не создаем ли мы копию уже открытого документа, и т.д.
для уменьшения ошибок при работе подсистемы было принято решение привязаться именно к закрытию программы word? а не к закрытию отдельного листа
(39) Вот как раз при закрытии приложения никаких действий и не происходит(
Насколько я понимаю, за отслеживание этого события отвечает строка:
ДобавитьОбработчик WordДокумент.close, ЗакрытиеДокументаWord;? Если это так то по каким-то причинам событие WordДокумент.close не отслеживается.
Возможно ли в формируемый файл Word вставлять нужную мне картинку, как параметры текста?
(41) в текущей редакции нет.
(42) да это понятно что у тебя нет. Возможно ли вообще такое?!
(43) Из файла точно возможно, посмотри макросы в ворде, там и узнаешь ответ…
а как внедрить 1cv8.efd и куда если можно подробнее скажите пожалуиста avda@yandex.ru
Хорошая вещь. Вот тольо при создании шаблонов иногда говорит что конвертер mswrd632.wpc не удалось запустить, с чем это может быть связано? 😮
(43) возможно добавить картинку, но при условии что она естьб на диске, тоесть надо сначала ее получить, сохранить в нужном месте, и вставить как картинку из файла.
Очень крутая обработка. Спасибо!
Простите пожалуйста. А как устанавливать эту обработку? напишите подробнее…
и можно ли ее использовать на 8.2?
— Попытался объединить конфигурации, похоже, что неправильно, т.к. эта конфигурация полностью заменила мою — Бухгалтерия 1.6.
— Возможно ли объединить конфигурации (эту и Бухгалтерия 1.6 Упрощенка? или эта конфигурация только отдельно работает?
Интересная обработка!!!
При переносе ее в Зарплата и Управление Персоналом, редакция 2.5 (2.5.26.3) заметил следующую вещь:
В справочнике «Шаблоны договоров» добавляю шаблон «Прием на работу в организацию» со сылкой на объект «Прием на работу в организацию», в нем создаю строку с существующим файлом «Образец.doc», тем самым создается строка «Образец» и ставлю галочку «Используется как печатная форма», но в документе «Прием на работу в организацию» кроме стандартных «Форма Т-1» и «Форма Т-1а» форма с именем «Образец» не цепляется… в чем причина? Может что не так сделал или не так понял? И каково назначение галочки «Используется как печатная форма»
Офис стоит 2003….
либо я не совсем понял фразу:
«…а также в реквизит формы элемента «ДокументПроверки» Справочника «ОДР_Шаблоны_Параметры»»
из справки в разделе «Конфигурация»
Здравствуйте! Пытаюсь открыть файл шаблоны.cf — получаю сообщение:
Ошибка при выполнении файловой операции ‘E:Word!шаблоны.cf’
по причине:
Неверный формат хранилища данных ‘file://E:/Word/!/шаблоны.cf’
Подскажите пожалуйста, в чем может быть причина и как разрешить данную ситуацию?
Спасибо!
Разобрался, извините за беспокойство!
(51) галочка «Используется как печатная форма» используется как указатель подсистеме о том что выведенный шаблон НЕ предназначен для сохранения в базе данных, а используется только для создания и печати шаблона.
Этот признак был создан еще до широкого использования внешних печатных форм а после их появления я как то на эту тему и не задумывался.
(51) >>либо я не совсем понял фразу:
«…а также в реквизит формы элемента «ДокументПроверки» Справочника «ОДР_Шаблоны_Параметры»»
в справке написано:
«Для добавления других объектов в работу с шаблонами необходимо добавить тип объекта в план видов характеристик «ОДР_ВидыДокументовДляШаблонов», а также в реквизит формы элемента «ДокументПроверки» Справочника «ОДР_Шаблоны_Параметры» после чего добавленный объект может работать с шаблонами »
тоесть для того чтобы, например, добавить возможность работать с подсистемой Объекту конфигурации «Справочники.КонтактныеЛицаКонтрагентов» нужно в 2 местах указать этот объект:
1. в возможных типах плана видов характеристик «ОДР_ВидыДокументовДляШаблонов»
2. в возможных типах реквизита формы элемента «ДокументПроверки» Справочника «ОДР_Шаблоны_Параметры» (на закладке «реквизиты» формы элемента справочника)
(50) объединять можно с любой имеющейся конфигурацией с приоритетом вашей конфигурации.
на 8.2 переводить пока не пробовал, может у когото есть подобный опыт, то напишите.
>> эта конфигурация только отдельно работает?
Нет она специально создавалась для работы с другими конфигурациями, и без них она вообще бессмыслена.
(53) а как разобрался?
Для Nestern
Файл был без расширения, поставил .cf, должно быть — .dt
Далее разворачивается информационная база.
Пользуясь случаем, спасибо автору!
(57) на сколько я помню выкладывалось с расширением .dt
на всякий случай еще поясню:
выкладывается архив информационной базы, для того чтобы можно было наглядно посмотреть работу подсистемы. иначе, только с конфигурацией, разобраться в работе будет практически не возможно.
после распаковки базы рекомендуется прочитать встроенную справку.
пользуйтесь на здоровье
Автору большое спасибо, разбираюсь, вроде получается….
Файлик точно без расширения, но ручное переименование в .dt решает эту проблему.
На 8.2 запустилась без проблем, сконвертировалась самостоятельно и подцепилась к конфигурации версии 8.2.
Очень удобная вещь спасибо автору
гениальная вещь!!
Очень классно реализована обработка. Пригодилась.
хорошая обработка. пригодилось, но пришлось «допиливать» т.к. клиент хотел еще вставку произвольных картинок в любом месте шаблона, а также вставку табличных частей в шаблон
простыми макетами такого не сделаешь
(65) jirafff, почему же не сделаешь.. работает ведь ))
скачал файл, какой то очень странный размером 1 кб.
Создал новую пустую базу, загрузил и ничего.
Может что не так делаю ?
Большое спасибо, очень нужно было создание таблиц, а ваш пример как раз то что нужно!
Загрузил .dt и база не запускается… пишет несовместимая версия пробовал 8,3 и 8,2
вопрос снят конвертировать надо только из под 8.2