<?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='\
Склонение ФИО в виде небольшой процедуры. Писалось студентом-программистом и студентом-лингвистом.
Перейти к публикации
Наш ответ чемберлену…
Гораздо лаконичнее код..и написан задолго до 2003 года…
Лаконичнее. И сумбурнее.
Кому что нравится.
Не вижу там никакого сумбура. Код гораздо приятнее. Даже у Рупора проще.
+ должности отрабатывает
+ специфические фамилии
+ каменты
+ примеры использования
(1,2) Слабенький ответик-то получился 😉
Сообщить(ПадежС(«Кучер»,3,1,1) ); // дательный, мужик, склонять фамилию
Возвращет: Кучер
А вот фигушки! КучерУ, ЛебедЮ, Кушниру, КоганУ если речь идет о мужике. А вот для женщины подобные не склоняются.
А вот у автора вернула в дательном:
Кучеру Аркадию Арнольдовичу — я
Кучер Антонине Алексеевне — моя мама
т.е. абсолютно правильно
(5) Спасибо, хотела сама потестировать предложенное, теперь тратить время не буду.
(6) Да просто уже забодали любители «простых» решений 😉
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=111&lid=254
А уж если меряться, у кого раньше, то вот:
Написана КучерОМ Аркадием Арнольдовием в 2000 году. Чуток коряво, ибо это было первое, что я написал на 1С ваще. Однако КацА МойшУ АбрамовичА склоняла вполне корректно ;)))
(7) Ну, если уж говорить про Мойш, то правильно — МойшЕ. Или уж Моисей. Уменьшительно-ласкательные склонять задачи не ставилось, всё-таки официальные документы, ага )
(7) Здрасте! Склоняла КОГО? Мойше??? Я не про дательный, а про винительный в данном случае говорил. Что касается какие еврейские уменьшительные, а какие полные — то тут, сорри, я не спец :)))
Хотел посмотреть, ан рейтингом не вышел. 🙁 Жаль.
(10) Ну держи один плюсик 😉 Щас гляну еще где твои комменты
(10) «Рейтингом не вышел» — это зачОООт! ))))))
Доступ C рейтингом не меньше 3 — FAIL.
(5) Не вопрос. Там есть второй вариант, от Рупора.. там правильнее. 🙂
(5) И Самое Главное, ВАША неправда:
Сообщить(Падеж(«Кучер» ,3,1,»1″ )) = «Кучеру»
Так что, решение правильное, хотя и простое, и не писано «на основании серьёзного лингвистического исследования»
🙂
(9) МойшА — это некорректно. Это уменьшительное, да к тому же и, скажем так, русифицированное.
(13) Доступ открыт. Промахнулась с переключателем.
(17) И всё же потести предложенное, оно рабочее.
Честно признаюсь, что всегда думал что «Мойша» нормальное еврейское имя :))) Без уменьшительного, русифицированного и т.д.
(15) И самое главное, что я тестил Сообщить(ПадежС(«Кучер»,3,1,1) );
Падеж и еще буковка «С», а не просто Падеж. Когда мне их там сортировать было 😉
(20) Там же примеры есть в каментах! 🙂
2Ёпрст. Ты завязывай фладить, а давай начинай писать про Dialog Stream и Moxel :))))
(18) Потестила. Хорошооо… Спасибо.
О!
Меч в творительном — мечЕм, ага ) Нашли-таки мы не ловящееся )
(24) А вот и фигушки 🙂
Падеж(«Меч»,5,1,»1″) = «Мечем»
(25) А правильно-то — мечОм!
(26) Угу, тепереча тестим ваше творение — МечЕм …
+27 так что ничья… 🙂
(28) Дык я и не спорю 😉 Но предлагали потестить — я и потестила )
Хотя…
Мечем Иваным Ивановичем альтернатива
Мечем Иваном Ивановичем ваш метод
тоже глюкаво… В общем, есть куда расти.
Даешь правильные алгоритмы!
(30) Слуушайте… Так это он Ивана неправильно склоняет? Тц-тц-тц… А я-то уж губы раскатала, что хоть кто-то эту титаническую задачу решил на 99%…
Будем дорабатывать.
(31) Ну да…:)
Хотя, кому нужен творительный падеж в 1с-ине ? 🙂
(32) «Договор заключён с Мечом Иваном Ивановичем», например )
(32) Пофиксено: имена, оканчивающиеся на «ан», склоняет неправильно для творительного. Буду разбираться в этой перловке )))
(34) …Эээ.. в какой обработке пофиксено ? В вашей ? Так там и так было правильно …
(35) Да нет, в предложенной как раз. Но так как собираюсь и её использовать, собираюсь и доводить её до полного блеска.
(36) Не забудьте выложить потом для тестинга.
Слово «паяц» альтернатива склоняет совсем неправильно. В общем, есть куды ростить.
Как почему-то и думал, так и оказалось 😉
Сообщить(ПадежФИО(«Черных Петр Петрович»,2));
Сообщить(ПадежФИО(«Берия Лаврентий Павлович»,2));
Черныха Петра Петровича
// как раз случай, когда склонять не надо! А таких фамилий море — сибирские фамилии
Берия Лаврентия Павловича // а туточки надо БериЮ
Не надейся на универсальный алгоритм для фамилий, его нет!
А вот как сделано у меня:
Показать полностью
+(39) Так что лингвист — действительно студент :)))))
зря потратили время, в документах достаточно именительного падежа
(42)>зря потратили время, в документах достаточно именительного падежа
Ну ежели тебе нравится «Доверенность выдана: Иванов Иван Иванович» — тогда достаточно
А мне нравится, когда «Доверенность выдана: ИвановУ ИванУ ИвановичУ» 😉
ЗагрузитьВнешнююКомпоненту(«NameDecl.dll»);
КомпонентаСклоненияФамилий = СоздатьОбъект(«AddIn.NameDeclension»);
Слово = «Гадя Петрович Хренова»
НомерПадежа = 2; //Родительный
Сообщить(КомпонентаСклоненияФамилий.Просклонять(Слово,НомерПадежа));
//получаем ГадИ Петрович Хреновой
Компонента есть на диске ИТС, расчитана под восьмёрку, но и в 7.7 нормально работает
(44) Пропустил точку с запятой, простите 🙂
У метода «просклонять» есть еще и 30-ий параметр — пол
(40) Мде… Про иначеесли в 2000-м ты похоже не знал 😉 Оно ж даже если нашло ДвеПоследних=»УА», то все остальные тоже станет проверять…
(46) Планет слышал звон, да не знает, где он.
Не обратил внимание на строку, которую я в одном месте не удалил, а она стоит во ВСЕХ блоках:
Перейти ~выход;
И как раз спецом было сделано, чтобы эти блоки тупо копировать, вставлять и изменять, не добавляя ИначеЕсли.
Лично мне так больше нравится
Процедура очень интересная, только скачать не могу — рейтинга маловато… плюсик поставил)
Для имени «Ольга» в родительном падеже получаем «Ольгы»
а чем Падеж «Крохотулька» с проклаба не нравится?
(50) Приведите ФИО полностью. На «Иванова Ольга Юрьевна» склоняет нормально.
(51) Дело не в том, что нравится или не нравится. Эта процедура была написана совершенно отдельно.
(52) ПадежФИО(«Иванова Ольга Юрьевна», 2) = «Ивановой Ольгы Юрьевны»
Может я чего-то не понимаю, но откуда взяться другому результату?
«…
ИначеЕсли Пол=»Ж» Тогда
строток=ток.Добавить(); // ирина
строток.старок=»*а»;
строток.р=»ы»;
…»
(51) Этой процедуре уж лет 8, не меньше…
Насчёт ОльгЫ посмотрим.
(53) Проверяла специально — получается «Ивановой Ольги Юрьевны». Чесслово. Если вводить без отчества — возможно.
Поправила, теперь Ольга, Инга и т.д. склоняются нормально.
спасибо автору. мне очень помогла обработочка!
осталось решить вопрос со склонением профессий и цехов! ::)
(56) Пользуйтесь процедурами Jurer’а. Они это вроде бы умеют.
Авторам спасибо! Все реальные случаи функция отработала прекрасно. Добавил только точки к инициалам.
Спасибо, молодцы!
Раскрасить бы статью.
Спасибо за алгоритм!
(61) Я передам мужу 🙂
Спасибо, небольшой тюнинг, если фамилия и.о. определение Ж рода по «а» и «я» в фамилии. Доработал и в работу.
Еще раз спасибо!
p.s. А косячки они у всех есть, как можно жить без косячков 😉
Сейчас вроде нормально все работает. Спасибо за обработку. пользуюсь.
Спасибо за текст обработки, все нормально работает…
Спасибо, вставил в конфу, все работает
(0) А теперь проверьте ее моей тестилкой:http://infostart.ru/public/115909/ , поищите ошибки.
А вообще нужно конечно писать склонение на технологии регистров правил, пусть и виртуальных, а не хранящихся в базе. Это будет прорыв. Но за попытку плюсую.
еще такой вариант попался:http://ask.8c1.ru/questions/141/%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-%D1%81%D0%BA%D0%BB%D0%BE%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D0%B9-%D0%B2-1%D1%81?page=1&focusedAnswerId=147#147
Прокопчук Сергей Сергеевич — в родительном падеже получается Прокопчка Сергея Сергеевича
по идее должно быть Прокопчука Сергея Сергеевича!
Удалено
Спасибо, огромное)
Спасибо, классная штука! 🙂
Больно уж громоздкий алгоритм. Склоняет всё без ошибок?
Огромное спасибо за обработку — это было просто спасением для меня!
не работает функция в данной статье — происходит зацикливание при попытке удалить множественные пробелы.
Автор тестировал собственное творение то?
Исправил в начале функции так:
// уберем множественные пробелы
Пока 1=1 Цикл
ФИО=СокрЛП(СтрЗаменить(ФИО,» «,» «));
Если Найти(ФИО,» «)=0 Тогда Прервать КонецЕсли;
КонецЦикла;
После этого все стало работать. Спасибо!
При напечатке сообщения в инфостарт два пробела заменяются на один.
В итоге функция, скопированная из текста статьи, не работает!
Так что в предыдущем моем комментарии СтрЗаменить(ФИО,» «,» «). В первом » » следует видеть ДВА пробела!
(78) pvlunegov, сами всё поняли 🙂 потому отдельно и прикреплены были файлы.
В начале сразу не понравилось:
Заменить на:
А чем типовой вызов склонения из общего модуля не устраивает? 🙂
(80) ИНТЕГРА, да, такой вариант даже был где-то реализован… Писалась эта штука тогда, когда никакого «типового» варианта ещё в помине не было, ну и почитайте комменты выше.
Функция не умеет склонять существительные с суффиксом ец. Совсем не умеет, ни после закрытого слога, ни после открытого, впрочем как и типовая компонента (похоже что типовая компонента использует тот же алгоритм). Студентам надо было лучше учиться, а то недоучились, а всё туда же — в 1С кодить =)
(82) Плюс по сравнению с компонентой — довольно просто допилить 🙂
Если когда-нибудь дойдут руки до такого, то не стал бы допиливать, а переписал на иных принципах. А сейчас проще компоненту доработать. Уже реализован механизм переопределения результатов компоненты склонения. Всех физлиц до которых смог дотянуться уже проверил — склоняет верно.
В этом месте бесконечный цикл, программа зависает намертво.
(85) Приведите, пожалуйста, пример, когда у вас сработал бесконечный цикл? Не совсем понимаю, почему у вас зависло.
(78) уже написал — при публикации сообщения на форуме infostart два пробела заменяются на один, в этом вся причина.
На самом деле в коде ошибка… В первом цикле избавляемся от множественных пробелов, заменяем их на одинарные, а по факту уходим в бесконечный цикл. Цикл надо подправить…
Пока 1=1 Цикл
ФИО=СокрЛП(СтрЗаменить(ФИО,» «,» «));
Если Найти(ФИО,» «)=0 Тогда Прервать КонецЕсли;
КонецЦикла;
в строке ФИО=СокрЛП(СтрЗаменить(ФИО,» «,» «));
в первой паре кавычек надо прописать два пробела (редактор съедает двойной пробел при помещении текста на сайт)
и в строке Если Найти(ФИО,» «)=0 Тогда Прервать КонецЕсли;
тоже надо два пробела написать в кавычках.
(88) так это именно редактор сайта и съел. Было нормально )