Внимание! Будь осторожен — "макет" возможен.




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

98 Comments

  1. Tatitutu

    Это не программа — это статья. И она не для руководства к действию ,

    а как концетраптив

    (средство для предотвращения нежелательной головной боли).

    Как говорится — «Кто предупрежден — тот вооружен»

    Перейти к публикации

    Reply
  2. fishca

    Спасибо! В принципе все правильно, спасение утопающих, дело рук самих утопающих! Кто предупрежден, тот вооружен!

    Reply
  3. ll13

    Мощный код 🙂



    Если КаталогНаДиске.Существует() Тогда

    Возврат Истина;

    Иначе

    Возврат Ложь;

    КонецЕсли;



    Находка для говнокод.ру

    Reply
  4. Tatitutu

    (2) Спасибо большое , за зоркость и внимательность

    Сразу видно — человек читает что ему пишут и видел код

    а про что код мощный ( я сделал акцент в теме статьи)

    А теперь держись за свой животик. Готов ?

    Выдели в конфигураторе Существует и нажми F1

    знаешь, что откроется ? правильно синтакс-помощник по встроенному языку 1С 8.*

    цитирую дословно:

    Файл (File)

    Существует (Exist)

    Синтаксис:

    Существует()

    Возвращаемое значение:

    Тип: Булево. Истина — файл существует; Ложь — в противном случае.

    Описание:

    Определяет, существует ли файл, соответствующий данному объекту.

    Доступность:

    Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

    Примечание:

    Для работы метода на веб-клиенте, необходимо предварительно подключить расширение работы с файлами.

    Пример:

    Функция ПроверитьСуществованиеКаталога(ИмяКаталога) Экспорт

    КаталогНаДиске = Новый Файл(ИмяКаталога);

    Если КаталогНаДиске.Существует() Тогда

    Возврат Истина;

    Иначе

    Ответ = Вопрос(«Каталог не существует. Создать?»,

    РежимДиалогаВопрос.ОКОтмена);

    Если Ответ = КодВозвратаДиалога.ОК Тогда

    СоздатьКаталог(ИмяКаталога);

    Возврат Истина;

    Иначе

    Возврат Ложь;

    КонецЕсли;

    КонецЕсли;

    КонецФункции

    Показать

    так что ты понял кого послать на …. 😀 😀 😀

    Reply
  5. ll13

    (3) Ваш сарказм абсолютно не уместен.

    Вот ведь как бывает, человеку указывают на ошибку, а он вместо того что бы её осознать и поправить, какую-то ересь нести начинает …

    По существу:

    Приведенный пример из конфигуратора полностью корректен, чего не скажешь про Ваш кусок «кода».

    Конструкция вида:

    Если ЛогискоеВыражение Тогда

    Возврат Истина;

    Иначе

    Возврат Ложь;

    КонецЕсли;


    Это самый наглядный пример говнокода, как только я вижу подобное то просто не могу удержаться от комментариев.

    Правильно вместо этого писать так:

    Возврат ЛогискоеВыражение;

    В Вашем случае: Возврат КаталогНаДиске.Существует()

    Reply
  6. fishca

    (4)

    Вот ведь как бывает, человеку указывают на ошибку

    это не ошибка ;), а тест на внимательность. Такие есть при приеме на работу в некоторые конторы.

    Reply
  7. Tatitutu

    (4)Где ты видел сарказм ❓

    или статья называется «Как правильно и красиво писать код»

    или ты хочешь сказать , что я плохой писатель 😀 😀 😀

    я специально в шапке написал

    Код написан самый простой — только для примера.

    он от этого не перестал работать (не быстрее ни медленнее)

    но легче для восприятия тех кому и посвящена статья (кто только переходит с 7 на 8, чтобы не напоролись зря)

    такие как ты профессионалы — уже все и так знают. учить — только портить.

    Ставлю рубль за сто — что не служил и не женат.

    Reply
  8. ll13

    (6)

    Ставлю рубль за сто — что не служил и не женат.

    Не угадал, с тебя должок 😉

    Reply
  9. Tatitutu

    (7) Ну тогда я рад что ошибся, все решаемо 😉

    Reply
  10. Ish_2

    Могучая статья.

    Много слов :»троянский конь»,»яичница»,»покиньте статью», …

    Много цветов.

    Много ссылок.

    А суть простая. В макете можно сохранить что угодно. Вы ж там смотрите !

    Это все ?

    Reply
  11. cool.vlad4

    (9) аналогично Ватсон….пробегал мельком статью, и смысла честно не понял, в макете можно любые двоичные данные в том числе записывать…все сводится к тому, что надо опасатся троянов

    Reply
  12. fishca

    (10) а пацаны то не знают 😉

    Reply
  13. cool.vlad4

    (11) а про макросы пацаны знают? 😉

    Reply
  14. fishca

    (12) и про них тоже 😥

    Reply
  15. Tatitutu

    (9) Самое главное предупредить

    а как …уже второе дело.

    Потом когда у кого нибудь, что нибудь «не взлетит»

    можно всегда ссылку дать «Мол, извиняйте мы вас предупреждали»

    А еще , еще — есть такой психологический прием

    Показывает одно «плохое» громко орешь

    Много слов :»троянский конь»,»яичница»,»покиньте статью», …

    Много цветов.

    Много ссылок.

    короче отвлекаешь, от главного

    а вот что главное — это пока секретик фирмы 😉

    (12,13) в том то и дело , что не знают, а кто знал то забывает

    какая заметельная команда Kill

    Помню писал стелса, помню много чего писал

    интересный ход был «приходит» тебе документ , открываешь

    а там «Уважаемый, Ивонов»

    все хорошо, но ты то грамотный человек

    и заменяешь на Иванов, сохраняешь и все… 😎

    механизм включен.

    Reply
  16. Ish_2

    (14) Какой уж тут секретик ?

    Продавцу нужно больше мелькать всегда и везде :

    с поводом и без повода оставлять ссылки на свой платный продукт.

    Практика обычная.

    Понимаю и не осуждаю. Каждый толкается по жизни как может.

    Reply
  17. Tatitutu

    (15) не разочаровывай меня. Реклама МАГАЗьКА 😀 — это не секретик, это пример (Второй компонент «РАЗДРАЖИТЕЛЬ«)

    он тоже отвлекает от главного

    Reply
  18. Шёпот теней

    главный закон бизнеса — чтобы ТЫ не делал — привлекай внимание …

    Tatitutu — владеет этим закон бизнеса в совершенстве …

    главный закон действия — чтобы КТО не сделал — делай это себе в помощь …

    Tatitutu — владеет этим закон действия в совершенстве …

    … опять придётся у него учиться …

    … вотТАКtatitutuТАКвот …

    Reply
  19. Lara.Builova

    То ЧТО и КаК делает Tatitutu многим кодерам — «оптимизаторам» и не снилось.

    Reply
  20. fishca

    (18) может просвятишь 😉 ?

    Reply
  21. Lara.Builova

    (19) Все его разработки выложены, и здесь в том числе, все идеи ЕГО, «оптимизаторы» допиливают чужие.

    Reply
  22. Abadonna

    Блин, развели бодягу… Макросы-фуякосы…

    Куча народа юзает тот же Miracle, откуда вам знать, что я туда напихал? 😀

    Хрен там, а не макет.

    Reply
  23. anig99

    (21) декомпиляторы…декомпиляторы. Тем более, что написано на Дельфи

    Reply
  24. Tatitutu

    (22) А что ты туда напихал ?

    хочешь напишу троянчика, для твоего Miracle (чтобы он выглядил крайним)

    в VBA есть инетересная функция (можно дразнить антивирус со ссылкой на объект)

    то есть даешь команду «ФАС» на простой блокнот…

    и антивирь кричит ❗ ❗ ❗ ❗ ❗ Блокнот заражен и в карантин его

    Reply
  25. Abadonna

    (22) Давай ради интереса кину тебе особую версию, посмотрим, что надекомпилишь, особенно если я там в асме сделаю

    Reply
  26. cool.vlad4

    (22) 😮

    Reply
  27. cool.vlad4

    (22) на дельфах как раз с этим слава богу

    (23) Зачем?

    (21) потому я не юзаю

    Reply
  28. fishca

    (20) все идеи хороши, выбирай на вкус 😉

    Reply
  29. artbear

    (26) ОФФ. Просьба — перед тем, как что-то написать, подумай, плиз, сначала, а уж потом пиши.

    Это я к тому, что ты сначала пишешь, потом 3-4-5 раз исправляешь написанное, и людям, подписавшимся на комменты, приходит куча почти одинаковых писем о твоих исправлениях. В итоге твои исправления идут как спам.

    Реально напрягает 🙁

    Reply
  30. Lara.Builova

    (27) Ага, ты и выбираешь 🙂

    Reply
  31. fishca

    (29) я правда несколько из других соображений выбираю 😉

    Reply
  32. cool.vlad4

    (28) приму к сведению, но…во-первых я исправляю, когда отвечаю многим и дабы не плодить комменты(так, что в любом случае будут приходить по 3-4 раза), во-вторых такая возможность имеется и нигде не запрещена, так, что урегулируйте…

    Reply
  33. Lara.Builova

    (30) А недругие — это какие?

    Reply
  34. Abadonna

    (23)

    хочешь напишу троянчика, для твоего Miracle (чтобы он выглядил крайним)

    в VBA есть инетересная функция (можно дразнить антивирус со ссылкой на объект)

    Пионерская Зорька в одном месте еще не отыграла? 😀

    И это хорошо! 😉

    Reply
  35. fishca

    (32) не могу знать какие это недругие, у меня просто есть желание и время изучить что-то новое для себя, получить больше опыта в разработке на управляемом приложении. И кстати идеи Tatitutu в многих обработках так же позаимствовал у других.

    Reply
  36. Lara.Builova

    (34) Ну да, ну да, а пока как я вижу, что ты собираешь плюсы за переделку его работ (3 насчитала), и при этом рассуждаешь об неоригинальности идей 😀 😀 😀

    Reply
  37. Lara.Builova

    +(35) И вот ТУТ ты обещал не пи* брать и перелицовывать обработки у Tatitutu на новую платформу, но вот продолжаешь

    Reply
  38. Abadonna

    А позоруху-то убери все-таки с главной страницы 😉


    Если КаталогНаДиске.Существует() Тогда

    Возврат Истина;

    Иначе

    Возврат Ложь;

    КонецЕсли;

    оно ж получилось:

    Если Истина Тогда

    Возврат Истина;….

    😀

    Reply
  39. Altair777

    да, тем более что в (6) автор не прав

    Tatitutu пишет:

    он от этого не перестал работать (не быстрее ни медленнее)

    конечно, медленнее 😀

    Reply
  40. Abadonna

    А для семерочников спецом тогда тоже можно написать 😀 😀 😀

    Если ФС.СуществуетФайл()=1 Тогда

    Возврат 1;

    Иначе

    Воврат 0;

    КонецЕсли;

    Reply
  41. Арчибальд

    (39) Не был ты настоящим семерочником 🙁

    Если ФС.СуществуетФайл()=1 Тогда
    Возврат 1;

    Возврат 65535;

    Reply
  42. Abadonna

    (40)

    Возврат 65535;

    Настоящие семерочники про max integer знают? офуеть 😀

    Reply
  43. Altair777

    (39) почему так просто? 😀

    Если ФС.СуществуетФайл(ИмяФайла)=1 Тогда
    Возврат 1;
    ИначеЕсли ФС.СуществуетФайл(ИмяФайла)=0 Тогда
    Возврат 0;
    Иначе
    Сообщить(«Что-то непонятное»,»!»);
    Возврат -1;
    КонецЕсли;
    Reply
  44. cool.vlad4

    Все это напоминает

    Reply
  45. Арчибальд

    (41) Это Ложь существует повсеместно, а выяснение того, где в семерке Истина — уже нетривиально…

    Reply
  46. Altair777

    (45) для того чтобы Сообщить

    Reply
  47. artbear

    (45) Вот у тебя мешанина! 🙁

    1. Попробуй в табло напиши «Не Неопределено».

    2. Соответственно для Неопределено эта ветка «Если Не Файл.Существует() Тогда» никогда не сработает, а будет выдано исключение.

    3. После уяснения 1 и 2 изучаем (46)

    Reply
  48. Abadonna
    Если НЕ ВыбФайл.Существует() Тогда

    Сообщить(«Файл не существует!»);

    Возврат Ложь;

    КонецЕсли;

    Если хоть капельку быть не одноэснегом, то легко сообразить, что условие стоит для Сообщить (ну хочется им тут сообщить)

    А если теперь возвращать ВыбФайл.Существует(), то придется функцию второй раз вызывать, а это лишние милисекунды

    Reply
  49. cool.vlad4

    (48) мне многие прогеры доказывали, что одинесник не программист…теперь и я начал сомневатся 😀

    Reply
  50. Ish_2

    После (45)- опешил. Артур опередил в (47).

    Reply
  51. cool.vlad4

    (50) а я задумался после всех этих булевых извращений про конечные автоматы на 1С

    Reply
  52. welt_lss

    А я когда увидел анонс статьи, думал увидеть тут обсуждение, что это за зверь такой «концетраптив»? Человек слова новые придумывает, а вы к кодам придираетесь.

    А ведь <контрацептив> чем не угодил?

    Reply
  53. Abadonna

    (52) Господин налоговый мент развлекается… Ну и пусть, а мы ему немного сольцы 😀

    Reply
  54. Lara.Builova

    Ну вообще да, глупость сморозила, не сам файл выбирается, а реквизит с типом булево. У меня было так, что при определенных условиях этот реквизит возвращал неопределено, пришлось в код воткнуть такую дописку

    ЗагруженоИзЭкселя = СтрокаДвижений.Регистратор.ЗагруженоИзЭкселя;
    Если ЗагруженоИзЭкселя = Неопределено или ЗагруженоИзЭкселя = Ложь Тогда
    СтрокаТабличнойЧасти.ОтработаноДней = СтрокаДвижений.ОтработаноДней;
    СтрокаТабличнойЧасти.ОтработаноЧасов = СтрокаДвижений.ОтработаноЧасов;
    КонецЕсли;

    ЗагруженоИзЭкселя — флажок.

    Reply
  55. Lara.Builova

    + (54)

    Это ЗУП, в документе возможны два варианта — часы загруженные из екселевского файла или взять из строки движений, причем строки движений (промежуточные) могут возникнуть только после записи документа, то есть флаг уже прочитан, но хз что о

    Reply
  56. fishca
    +(35) И вот ТУТ ты обещал не пи* брать и перелицовывать обработки у Tatitutu на новую платформу, но вот продолжаешь ТУТ, а в этой ветке (о, боги) рассуждаешь о «позаимствовании» идей.

    P.S. И вообще счеты посвящены МНЕ, руки прочь от них! smile:)

    1. Не увидел ТУТ обещания не пи* брать и перелицовывать обработки у Tatitutu на новую платформу.

    2. В этой ветке не рассуждаю о заимствовании идей, а константирую 😉 факт.

    3. Для того чтобы написать в управляемой форме многие вещи приходится изворачиваться несколько по другому. Вот это может тоже доставлять удовольствие. А взять за основу разработку того же Tatitutu никому не запрещено.

    P.S. Извини, если чем-то задел твои чувства.

    Reply
  57. Lara.Builova

    (56) 1. Ну а как же 29 коммент

    «согласен в принципе со всеми, впредь обязуюсь выкладывать более полезные весчи»

    разве не это?

    2. Это констатация в свете сказанного — «от лукавого».

    3. Да нет, ничего не задел 🙂

    Reply
  58. fishca

    (57)

    «согласен в принципе со всеми, впредь обязуюсь выкладывать более полезные весчи»

    1. не вижу здесь обещания не пи* брать и перелицовывать обоработки.

    2. более полезные весчи выкладывал и продолжаю выкладывать.

    3. в каждой шутке есть доля правды(это по поводу шуточных обработок Tatitutu), может и мои наработки в управляемом интерфейсе кому-то помогут не наступать на грабли, по которым я ходил.

    Reply
  59. Lara.Builova

    (58) 1. Если смотреть буквально, то таких слов нет, но там тебя за что «гнобили»? Если коротко, то делай свое.

    2. Выкладывай, конечно, но со своими идеями.

    3. Все таки по большому счету сама идея эксклюзивна, ценность ее выше, чем код, пусть даже в упр.формах.

    Reply
  60. Abadonna

    (59)

    Все таки по большому счету сама идея эксклюзивна, ценность ее выше, чем код

    Фигня. На этом сайте, сейчас, выше всего ценность обработочки, которая у обычных юзверей, сисадминов снимает головняки.

    Став аутсорсером, очень частенько качаю, например, ВПФ, минимальная доточка и клиент счастлив уже через час!

    А идей и у самого хватает. Так что, народ, пишите правила переноса, внешние печатки и прочую шнягу — честное слово, пригодится 😉

    /и без иронии!/

    Reply
  61. Lara.Builova

    (60) «Став аутсорсером, очень частенько качаю, например, ВПФ, минимальная доточка и клиент счастлив уже через час!»

    «Так что, народ, пишите правила переноса, внешние печатки и прочую шнягу»

    Я это все сама делаю, мне неинтересны они, страна другая, была опция отключть ВПФ на сайте, была бы счастлива.

    Нет ничего более унылого для многих эти ВПФ. Когда появляются разработки автора данноой статьи — как луч в темном царстве.

    Reply
  62. Abadonna
    Когда появляются разработки автора данноой статьи — как луч в темном царстве.

    Ой-ой… У меня-то мозгов, слава Богу, хватает всякие прибамбасы делать, да к тому же не на (непечатные слова) 1С.

    А отсюда мне теперь надо одно — не заниматься рисованием табличек.

    А то, что мы делаем в 1С — настолько разнообразно и достаточно уникально, что один хрен никакой сайт не поможет.

    А балдеть над тем, какой умный Татитуту (действительно умный!) — это не для меня.

    P.S. Мне сегодня доказывали, что 8х нельзя одновременно выделить и редактируемую строку целиком и отдельно активную ячейку этой стоки в ТЧ документа.

    (разными цветами, разумеется)

    Не поверил… Через полчаса и они уже не верили. И таких примочек только за день рождается несколько штук. И что? Публиковать что ли?

    Кстати, забавно… Код, который на ура отработал в 8.2 вдруг забуксовал в 8.1, пока еще одну строчку не дописал

    Reply
  63. Lara.Builova

    (62) А кто предлагает тебе балдеть? Как ты сам когда то выразился — не нравится, проходи мимо, что я методично делаю со многими разработками. Есть люди которых радует, да и сам сайт от этого только выигрывает, все лучше, чем срачи мани и поручика читать. СВЕТЛЕЕ.

    Reply
  64. Ish_2

    (54) Лаконичнее и понятнее :

    ЗагруженоИзЭкселя = СтрокаДвижений.Регистратор.ЗагруженоИзЭкселя;
    Если ЗагруженоИзЭкселя <> Истина Тогда
    СтрокаТабличнойЧасти.ОтработаноДней = СтрокаДвижений.ОтработаноДней;
    СтрокаТабличнойЧасти.ОтработаноЧасов = СтрокаДвижений.ОтработаноЧасов;
    КонецЕсли;

    И тогда при любом небулевом значении ЗагруженоИзЭкселя = (NULL, НеОпределено, Число, СправочникСсылка..)

    корректно сработает наше условие.

    Reply
  65. Abadonna

    (63) А тебе не кажется странным, что твои плюсы появляются через 30 секунд после опубликования их Татитуту?

    Я в свое время Кушниру вставлял, чтобы не плюсовал мои сходу, даже не качавши и не читавши.

    Лора, ты кому угодно мозги парить можешь, но только не мне!

    Reply
  66. Abadonna

    +[65]

    AS108, Lara.Builova, Fr1eNd_Tver

    Тут тебя случайно как-то Fr1eNd_Tver обогнал 😮

    Reply
  67. Abadonna
    extrim-style alnazarov Lara.Builova

    progersan mamba30 Lara.Builova

    Ish_2 gutentag Lara.Builova

    Нравится тебе Татитуту, желаешь его вечно плюсовать — да на здоровье.

    Только базу теоретическую под это не подводи! Хотя бы при мне…

    Reply
  68. Lara.Builova

    (64) Ох какой докапистый 🙂

    Сейчас приведу целиком, как было:

    ЗагруженоИзЭкселя = СтрокаДвижений.Регистратор.ЗагруженоИзЭкселя;
    Если ИсходныеДанные.Регистратор.ЗагруженоИзЭкселя Тогда
    СтрокаТабличнойЧасти.ОтработаноДней = СтрокаТабличнойЧасти.ОтработаноДней;
    СтрокаТабличнойЧасти.ОтработаноЧасов = СтрокаТабличнойЧасти.ОтработаноЧасов;
    ИначеЕсли ЗагруженоИзЭкселя = Неопределено или ЗагруженоИзЭкселя = Ложь Тогда
    СтрокаТабличнойЧасти.ОтработаноДней = СтрокаДвижений.ОтработаноДней;
    СтрокаТабличнойЧасти.ОтработаноЧасов = СтрокаДвижений.ОтработаноЧасов;
    КонецЕсли;

    Где ИсходныеДанные — результат огромного запроса и оттуда через точку этот реквизит оно видело … у меня дома, а у них ложь не видело, пришлось сделать переменную (мне так короче через отладчик вытащить было, поэтому такое дурацкое условие), я не поняла почему, прописала вот так и плюнула. У меня дома ни разу не вернула неопределено.

    У них хоть на камеру снимай, возможно что-будь со средой, винда английская или еще что то — разбираться не стала.

    Reply
  69. Lara.Builova

    (65) да мне плевать кто что думает, плюсую и буду плюсовать, разработки у него классные. На мой вкус. Необычные и веселые — ШУТКИ. А простыни сложнейшего кода в УПП, УТП, ЗУПах всяких — это работа, мне отсюда кроме обработок по правам в RLS больше не особенно что то нужно. Татитуту — это отдых и отвлечение от работы, Подвигает думать искать что то новое, макросы ваши эти 🙂

    Reply
  70. fishca

    (69)

    Необычные и веселые — ШУТКИ…Татитуту — это отдых и отвлечение от работы

    Все правильно тебе нравятся шутки, другим само решение на 1С, еще кому-то хочется написать тоже самое но по другому, еще кому-то вообще перевернуть с ног на голову. Так что каждому свое. И самое главное не надо учить жить, сами мы с усами. Ценность выкладываемых здесь обработок как в идеях витающих в коллективном разуме, так и в самом коде обработок и программ, причем многие берут за основу чью либо обработку/идею и выводят ее на совершенно новый уровень и это правильно. У кого-то идей к примеру море, а реализовывать например нет никакого желания. А у кого-то и наоборот может быть.

    Reply
  71. fishca

    (59) Здесь, сам Татитуту:

    http://forum.infostart.ru/forum24/topic39679/

    «Ай молодца, опять вперед отца» (с) smile:D Как в старые добрые времена, эх…как всмомню

    Ну если Лучший подарок для бухгалтера — счёты 8.2 (со звуком)

    переведешь на управляемые формы. То потом от МАГАЗьКА уже не отвертишся (естественно все будет оценено по заслугам)

    Если заметила управляемая форма появилась после этого 😉

    Reply
  72. Lara.Builova

    (70) мне нравится эксклюзив 🙂

    (71) заметила, конечно, я внимательная иногда 😉

    Reply
  73. Lara.Builova

    (64) И, кстати в твоем варианте «Если ЗагруженоИзЭкселя <> Истина Тогда» я бы написала «Если Не ЗагруженоИзЭкселя Тогда»

    Reply
  74. Ish_2

    (73) Лариса , конфигуратор под Рукой ? Не спорьте , а проверьте.

    Ваш вариант при ЗагруженоИзЭкселя = НеОпределено вызовет ошибку :

    Если НЕ ЗагруженоИзЭкселя Тогда
    Сообщить(«Мы ничего не загрузили из Экселя»);
    КонецЕсли;

    Мой вариант при Любом типе значения (Например ЗагруженоИзЭкселя = 1) отработатет корректно ;

    Если  ЗагруженоИзЭкселя <> Истина Тогда
    Сообщить(«Мы ничего не загрузили из Экселя»);
    КонецЕсли;
    Reply
  75. Abadonna

    (74)Ish_2, ты серьезно? Обсуждать кусок за@@@ченного кода?

    Да, воистину одноэснеги… 😥

    Нормальный проггер даже искать бы не стал чего оно там может возвратить, а написал бы

    Загружено=@@йня;

    Вызвали что-то, потом проверяем:

    Если Загружено<>@@йня

    (Если Загружено НЕ @@йня)

    Reply
  76. Lara.Builova

    (74)(75)

    Ситуация нештатная, почему программа не увидела флажок, записанный уже в форме через ИсходныеДанные.Регистратор.ЗагруженоИзЭкселя — то ли запрос огромный, а тут еще и реквизит «через точку» запрашивается, и времени не хватило, то ли платформа так отработала, я не знаю.

    Обсуждать

    Если  ЗагруженоИзЭкселя <> Истина Тогда

    явно не вижу смысла.

    У себя дома все было сделано нормально и правильно, у клиентов вот выдало неопределено, что там поставить в таком случае неважно, красивости кода пусть волнуют «оптимизаторов», когда они ходят по решенным до них проблемам и хихикают, не зная и не понимая исходной ситуации.

    Поэтому всем ищущим «говнокод» и желающим поднять свою самооценку за счет этого хочется сказать — СМОТРИ В КОРЕНЬ, а не на красивости.

    Вот меня лично передергивает от такого кода:

     If ДатаНачалаДействияДоговора >= ДатаОкончанияДействияДоговора Then
    sMsg = «Дата начала периода больше или равна даты окончания! Введите правильные даты периода дейсвия договора.»;
    DoMessageBox(sMsg);
    Return;
    endIf;
    

    И это сущая мелочь, у автора есть функции, дублирующие стандартные методы, а также есть места, где вместо использования готовой экспортной функции из общего модуля пишется новая в каждом документе. Смотрится весьма комично. 😀

    Reply
  77. Abadonna
    у автора есть функции, дублирующие стандартные методы,

    Это у какого автора?

    Reply
  78. Ish_2

    (76) Лариса , я Вам пишу про ошибку в простейшем примере (74) — предлагаю проверку.

    А Вы пишете :

    а)про «огромный» запрос

    б)про то что у Вас дома(!) всё корректно работает

    в) «обсуждать нету смысла».

    Reply
  79. Lara.Builova

    (77) Автор дописок к конфе у моих клиентов, здесь не присутствет скорее всего.

    Reply
  80. Lara.Builova

    (78) Мне твои детские споры неинтересны, меня ты этим не зацепишь, давно тебя знаю. Ищи другую жертву попроверяться 😉

    Reply
  81. Ish_2

    (75) Пример у тебя неудачный.

    В постановке Ларисы задача выглядит следующим образом :

    В переменную ЗагруженоИзЭкселя возвращется результат некоторой функции.

    Тип переменнной ЗагруженоИзЭкселя может быть любого типа,

    но нам для дальнейшей обработки важны два события :

    1. ЗагруженоИзЭкселя = Истина — (загрузка состоялась)

    2. ЗагруженоИзЭкселя = {НеОпределено,Число,Ложь и др.} — (загрузка не состоялась).

    Отсюда совершенно логично вытекает код

    ЗагруженоИзЭкселя = КакаятоФункция();

    Если ЗагруженоИзЭкселя<> Истина Тогда

    Сообщить(«Загрузка не состоялась!»)

    Иначе

    Сообщить(«Загрузка состоялась!»)

    КонецЕсли;

    Теперь что ты пишешь ?

    Нормальный проггер даже искать бы не стал чего оно там может возвратить, а написал бы

    Загружено=@@йня;

    Вызвали что-то, потом проверяем:

    Если Загружено<>@@йня

    (Если Загружено НЕ @@йня)

    Ты придумал какую-то свою постановку задачи ( ..»для нормального прогера»)?

    Зачем в этой задаче нам предварительно присваивать ЗагруженоИзЭкселя = =@@йня ?

    Reply
  82. Abadonna

    (81) Игорь, блин, достал! Предмет для обсуждения отсутствует

    Reply
  83. Ish_2

    (80),(82) Понятно. Ок.

    Reply
  84. Lara.Builova

    (81) «Тип переменнной ЗагруженоИзЭкселя может быть любого типа»

    Ты ничего не понял. Тип у переменной должен быть Булево. И никакой другой, однако вернул неопределено, хотя не должен был. Речь именно об этом в данном обсуждении.

    но нам для дальнейшей обработки важны два события :
    1. ЗагруженоИзЭкселя = Истина — (загрузка состоялась)
    2. ЗагруженоИзЭкселя = {НеОпределено,Число,Ложь и др.} — (загрузка не состоялась).

    Нам совершенно не важны эти события, нам важно состояние самого флага — Истина или Ложь, лежащего на форме документа, вытащенные из Регистратора, который в свою очередь получен из

    результата запроса
    , собирающего данные из большого количества таблиц как виртуальных, так и физических.

    Сразу скажу — база файловая.

    И вообще, как сказал Арчибальд в (44)

    а выяснение того, где в семерке Истина — уже нетривиально…

    Я с ним согласна.

    Reply
  85. Ish_2

    (84) Без комментариев.

    Reply
  86. fishca

    (84)

    Тип у переменной должен быть Булево. И никакой другой, однако вернул неопределено, хотя не должен был.

    А бывает и так как на рисунке, флажок имеет три состояния на форме 😉 :

    Reply
  87. Abadonna

    (86) 😀 😀 😀 😀

    Reply
  88. vip

    (86) Срезал 🙂

    Reply
  89. fishca

    (87) про это (три состояния в 1С) иногда забываешь при написании кода 🙂

    Reply
  90. Lara.Builova

    (86)У искомого флажка тип Булево.

    Reply
  91. Lara.Builova

    (89) А вот запрос

    Возврат Запрос.Выполнить();

    возвращающий в функцию выборку

    ИсходныеДанные = ПроведениеРасчетовПолныеПрава.ПолучитьДанныеДляРасчета(ИмяРегистра, ВыборкаКатегорий.КатегорияРасчета, НеобходимыеДанные, Регистратор, ГоловнаяОрганизация, ОбособленноеПодразделение, УчетнаяПолитикаПоПерсоналу, ПериодРегистрации, , , Налогоплательщик, КомментироватьРасчет).Выбрать()

    выгруженный в ТЗ в отладчике.

    Напомню, в конструкции в (68) он возвращал ЗагруженоИзЭкселя неопеределено в условия использования только у клиентов.

    Reply
  92. Abadonna

    уй.. достали… отпишусь от комментов

    Reply
  93. Lara.Builova

    (92) Текст запроса приложить?

    Reply
  94. fishca

    (91) каких только глюков не увидишь 🙂

    Reply
  95. fishca

    (93) приготовил попкорн 🙂 😀

    Reply
  96. Lara.Builova

    (89) Я ждала, что разговор перейдет в русло разименования полей, и даже наводила «Сразу скажу — база файловая» но это уже будет слишком долго и нудно.

    Закончим на этом. 🙂

    Reply
  97. Lara.Builova

    (95) У кого есть ЗУП, может и так посмотреть, в (91) во втором коде лежит путь.

    Reply
  98. fishca

    (96) аминь.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *