Проверка данных




Принцип обмена данными из 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='\

99 Comments

  1. makas

    Вопрос: обработка в УТ 10.3 будет работать?

    Reply
  2. 1c-intelligence

    (1) makas, да, будет — вопрос только в платформе. Работает на любой платформе выше 8.2.16.

    Reply
  3. TrinitronOTV

    «инструмент для онлайн-проверки данных» — это как понять? нужен выход в интернет и куда тогда инфа отсылается?

    Reply
  4. 1c-intelligence

    (3) TrinitronOTV, речь, конечно, идет не об интернете. Онлайн — значит проверка в реальном времени, т.е. при записи справочника/документа. Есть и офлайн, когда проверка идет не в момент записи, а к большому массиву документов.

    Применено вот это значение слова «онлайн»:

    Онла́йн (англ. online, от англ. on line — «на линии», «на связи», «в сети») — «находящийся в состоянии подключения».

    Reply
  5. TrinitronOTV

    (4) спасибо за разъяснение

    Reply
  6. ShantinTD

    Ничуть не умаляя достоинств Вашей разработки, скажу, что в приложении, в котором проверки реализованы лишь для того, «чтобы не падало», и проверок на правильность (адекватность) вводимых данных не проводится — в нем не проработана (или не доработана) бизнес-логика. К сожалению, многие недалекие пользователи именно за это и любят недоработанные системы: система позволяет делать что угодно. Пример тому — пресловутая бухгалтерия от 1С. Все кричали «верните нам семёрку» потому что в восьмёрку их абы как забитые документы не переносятся, нужно заполнять нормально (по крайней мере — хоть какая-то проверка). Теперь кричат то же самое относительно бухгалтерии 3.0. По той же самой причине — то, что бухгалтерия 2.0 пропускала — тройка перестала пропускать.

    Живой пример из недавнего: «у нас документы по кассе проводок не делают. Раньше (в 2.0) мы ставили галочку ‘ручная корректировка’ и все работало». Вместо того, чтобы выяснить (или хотя бы спросить) почему не работает три бухгалтера три года вносили документы ежедневно по десяти кассам, и в каждом делали проводки вручную!

    Тем не менее, надеюсь, что не все пользователи такие, и Ваш продукт не останется без внимания.

    Reply
  7. МимохожийОднако

    ОФФ: Жалко, что не нахаляву. ))

    Reply
  8. 1c-intelligence

    (6) ShantinTD, вы правильно подметили — есть программы с прошитой бизнес-логикой, есть с широкой свободой выбора. «Проверка данных» ориентирована на вторые.

    Не берусь судить, правильно ли прошивать все проверки в коробочном продукте. Наверное, тут нет универсального рецепта — все зависит от конкретного предприятия, от его внутренних требований к качеству учета. Кому-то проще и лучше, чтобы все решили за них разработчики 1С, кому-то нравится решать самому.

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

    Reply
  9. 1c-intelligence

    (7) МимохожийОднако, если вы — представитель партнера 1С, то можно обсудить предоставление NFR-версии. Несколько таких версий было предоставлено партнерам до публикации продукта, на время тестирования, и они сильно помогли сделать продукт лучше.

    А для клиента, кажется, цена не слишком высока. К тому же, стоит гарантия возврата денег.

    Reply
  10. Evgen.Ponomarenko

    А в каком виде пользователь получает сообщение об ошибке при сохранении документа? Попадает ли курсор в ошибочное поле?

    Reply
  11. asved.ru

    Идея хорошая.

    А сколько времени в рабочей среде занимает проверка, к примеру, одного поступления с сотней строк в табличной части по десятку правил, применимых в т.ч. и к табличной части?

    И еще вопрос по производительности: чтение правил проверки для объекта производится в транзакции записи объекта или предварительно?

    Reply
  12. Evgen.Ponomarenko

    Часто встречаешься с ситуацией, когда правила должны применяться с определенной даты или по более сложному условию. Есть такая функция?

    Reply
  13. RayCon

    (9) очень нужна такая софтина для постановки учета клиентам, т.е. меня интересует перепродажа. Давно сам думал на эту тему, но, как обычно, руки не доходили.

    Есть вопрос: существует ли переносимость единожды выполненных настроек?

    P.S. Могу помочь с доводкой продукта и с продвижением.

    Reply
  14. 1c-intelligence

    (10) Evgen.Ponomarenko, пользователь получает сообщение, как правило, в том виде, в котором его написал создатель проверки.

    Исключение составляют проверки табличных частей — там автоматически выводится название ТЧ и номер строки.

    Reply
  15. 1c-intelligence

    (11) asved.ru, хорошо что вы спросили — появился повод обновить описание и раскрыть тему производительности. Прошу вас почитать, что я там написал (раздел Производительность).

    Исходя из того, что при записи одного объекта выполняется, как правило, один запрос, количество проверок роли не играет.

    Обычно речь идет о единицах, иногда — о десятых долях процента.

    Разумеется, когда речь идет об объекте, который сам по себе очень быстро записывается, процент может вырасти. Например, справочник Валюты.

    Reply
  16. 1c-intelligence

    (12) Evgen.Ponomarenko, такое сделать, разумеется, можно — проверку любой сложности, с которой справится СКД.

    Самый просто и распространенный вариант — сделать ограничение по дате в отборе проверки. Для примера приложил скриншот — проверка выполняется для заказов поставщику, дата которых — 2014 г. и далее. Для более ранних заказов проверка не вызовет ошибки.

    Конечно, бывают варианты, когда надо ограничить не по дате документа, а по дате исполнения проверки — очень редко, правда. В этом случае в вашем распоряжении вся мощь СКД. Можно включить в нее параметр, вычисляемый выражением ТекущаяДата(), и опираться на него в отборах. Но, повторю, на практике это бывает очень редко.

    Reply
  17. 1c-intelligence

    (11) asved.ru, забыл ответить про чтение правил проверки. Да, правила читаются в транзакции записи, и проверка выполняется там же. Конкретно речь идет о событии ПриЗаписи.

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

    В итоге чтение правил занимает 1-2 мс. При проведении документа 1-2 мс — это десятые доли процента времени проведения.

    Reply
  18. Igorro82IT

    1c-intelligence, действительно хорошая идея.

    Протестировав продукт, хочу сказать следующее:

    1)За период тестирования непредвиденных ошибок не было (важно квалиифицированно использовать СКД),

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

    3)Предусмотреть видео-инструкцию с примерами реализаций сложных проверок (опционально), т.к. нельзя исключать вариант примением функционала не разработчиками 1С, а Гл.бухами.

    4)решение безусловно важное и оправдывает свою стоимость для желающих навести порядок в учете.

    Reply
  19. 1c-intelligence

    (18) IgorroPadavan, спасибо что заглянул.

    Для коллег поясню — Игорь как раз с того предприятия, на примере которого инструмент разрабатывался и обкатывался в течение нескольких месяцев.

    Насчет разделения подумаю.

    Reply
  20. comol

    Коллеги, так делать НЕЛЬЗЯ!!!!

    Проверки реквизитов должны быть только в «Обработке проверки заполнения», иначе это порушит половину системных механизмов

    Проверки движений должны выполняться в транзакции проведения. С расстановкой необходимых управляемых и не управляемых блокировок, с контролем последовательности чтения и записи. Ну и уж конечно БЕЗ СХЕМ СКД В ТРАНЗАКЦИИ!

    У нас была такая штука в своё время разработанная «умельцами» из какого-то франчайзи… Столько оно проблем несёт при многопользовательской работе…

    Reply
  21. 1c-intelligence

    (20) comol, расскажите, пожалуйста, поподробнее, какие системные механизмы порушатся, если выполнить запрос при записи справочника или документа?

    Reply
  22. trand

    На предприятии, на котором тестировался продукт, кто настраивал права? Пользователь, руководитель, программист?

    Если программист, то почему нельзя было сделать это в конфигураторе.

    Если руководитель, то руководитель чего? Откуда ему известно, что нужно заполнять, а что нет для функциональности системы?

    Reply
  23. asved.ru

    (20) comol, Вы не могли бы пояснить, чем Вам так не нравится использование функционала СКД по генерации запроса на основании пользовательских настроек в транзакции в режиме управляемых блокировок, или, тем паче, на read_committed_snapshot? А то сдается мне, звон Вы слышали, а где он — не знаете.

    Reply
  24. asved.ru

    (20) comol, о, и как Вы поставите «необходимую неуправляемую блокировку», тоже расскажите. Очень интересно.

    Reply
  25. 1c-intelligence

    (22) trand, о правах речи не идет — их проверка данных не касается. Настройка проверок доступна только с полными правами.

    Технически настройка велась и ведется программистом/администратором системы — как единственным человеком с полными правами. Но придумывали проверки несколько человек, которых можно назвать самыми толковыми. Обычно это делается не разово, а при обнаружении какой-то систематической ошибки.

    Например, при закрытии обнаруживается, что иногда передают вспомогательные материалы по статье ОПР на счет 25 — не по злому умыслу, а по невнимательности, «хотя и было говорено так не делать». Делаем проверку — и все, забываем навсегда об этой проблеме.

    Reply
  26. ShantinTD

    1c-intelligence, а никакого триального периода (3-5 дней) не предвидится? А то выглядит заманчиво, да может статься, что кто-то ну вообще не извлечет из этого для себя ничего полезного.

    Reply
  27. 1c-intelligence

    (26) ShantinTD, я подумаю насчет триального периода, спасибо.

    Reply
  28. zqzq

    (20) comol,

    Согласен, рекомендуется проверки реквизитов делать в обработке проверки заполнения объекта — он вызывается при интерактивной записи (проведении) из формы вне транзакции. И заодно не будет проблем при групповом перепроведении документов (зато могут быть проблемы при групповой обработке, если не вызывается программно ПроверитьЗаполнение()).

    Reply
  29. 1c-intelligence

    (28) zqzq, обработку проверки заполнения я пытался использовать. Все прекрасно, кроме одного — проверка запросом не будет работать, т.к. на момент проверки заполнения изменения в базу не записаны.

    Есть обходной вариант — передавать реквизиты в СКД через таблицу значений, и работать с ним. Но этот вариант значительно снижает быстродействие.

    Reply
  30. 1c-intelligence

    (28) zqzq, а для группового изменения/проведения добавлена возможность отключения проверок для конкретного пользователя.

    Также, как есть возможность массового выполнения проверок для документов и справочников.

    Reply
  31. 1c-intelligence

    Продолжаем развитие инструмента. Тут обсуждали использование события ОбработкаПроверкиЗаполнения — решил дать возможность его опционального использования.

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

    Ну и в некоторых случаях может снижаться производительность, т.к. требуется передача объекта в запрос в виде таблицы значений.

    Но опционально будет.

    Reply
  32. 1c-intelligence

    Один из партнеров, тестирующих NFR-версию, предложил несколько доработок, которые войдут в следующий релиз:

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

    Пример:

    «Проведение документа: Передача оборудования в монтаж РР000032 от 03.06.2014 9:00:00

    В строке номер «3» табличной части «Оборудование»: Не заполнено значение реквизита «Документ оприходования»! »

    2. Причесать оформление страницы с настройками, сделать его интуитивно понятным. Сейчас понятно только после чтения справки;

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

    Reply
  33. 1c-intelligence

    (26) ShantinTD и все коллеги — опубликована триальная версия, со сроком действия до 31.07.2014 г.

    Reply
  34. 1c-intelligence

    Обновлена триальная версия, теперь со сроком действия до 31.08.2014 г.

    Reply
  35. 1c-intelligence

    Добавлено видео по созданию «сложных» проверок с ручным редактированием запроса — см. в конце статьи.

    Reply
  36. 1c-intelligence

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

    Пока будет идти отдельно, т.к. конструкции языка, применяемые для немодальной работы, недоступны в более старых версиях платформы — в той же 8.2.

    Reply
  37. 1c-intelligence

    Обновил файл с триальной версией, ограничение по сроку теперь до 30.09.2014 г.

    Также, в предыдущей триальной версии (которая до 31.08.2014 г.) была допущена ошибка — не обновил дату ограничения, в результате чего проверки не выполнялись. Приношу извинения тем, кто скачал триальную версию в августе и при необходимости готов выслать обновленный триал, чтобы не тратить sm — пишите мне в комментариях или в личку.

    Reply
  38. 1c-intelligence

    Выложил обновленную версию:

    1. Исправлены некоторые скрытые недочеты;

    2. Появилась возможность делать проверки, которые будут действовать только для новых объектов, которые записываются впервые.

    Благодарю пользователей, купивших и внедривших у себя проверку данных за качественную обратную связь. Сейчас продано более 10 копий, по разным каналам.

    Конфигурации, в которых работает проверка данных: УПП 1.3, БП 2.0, УНФ 1.4, есть самописанные конфигурации.

    Reply
  39. 1c-intelligence

    Посмотрел топ продаж — оказывается, «Проверка данных» на первом месте по продажам за полгода. За год входит в топ-10. За весь период продаж — пока на 31 месте. Что ж, есть пока куда стремиться.

    Reply
  40. AlexanderKai

    (6) ShantinTD,

    Можно было запретить ручную корректировку на уровне прав.

    Reply
  41. FFelix

    С доп.реквизитами эта штука работает? Реальную пользу вижу только если пользователь сам добавил доп.реквизит и сам же добавил контроль на его заполнение.

    Уточню — полезно будет, если эта штука будет работать с доп.реквизитами на базе БСП. Тогда она будет неоценима для всех новых решений 1С.

    Reply
  42. 1c-intelligence

    (41) FFelix, доп.реквизиты — это нетиповые реквизиты, добавленные в объект через конфигуратор?

    Или какой-то прикладной механизм, типа свойств?

    Reply
  43. FFelix

    Уточню: полезно будет, если эта штука будет работать с доп.реквизитами на базе БСП. Тогда она будет неоценима для всех новых решений 1С, включая УТ11, ERP и т.д.

    Я бы купил её, для своего прошлого проекта по УТ))

    Reply
  44. 1c-intelligence

    (43) FFelix, теперь понятно. Механизм доп. реквизитов аналогичен механизму свойств, который в УТ 10.3 и УПП 1.3.

    Определенные проверки по этим механизмам «Проверка данных» позволяет делать уже сейчас, но есть одно ограничение, связанное со спецификой механизма: невозможно сделать проверку доп. свойств (или реквизитов), пока объект-носитель не записан. А когда объект записан, проверять уже поздно, т.к. пользователь просто закроет форму, и проверка не инициируется.

    В УПП 1.3 еще как-то выкрутиться можно, т.к. там на прикладном уровне реализована «одновременная» (с т.зр. пользователя) запись и нового объекта, и его свойств.

    Но, я думаю, решение будет найдено.

    На своих внедрениях я для таких задач использую механизм «Автозадачи», коробочная версия которого сейчас проходит бета-тестирование. Там нет привязки к записи объекта. Правда, и запретов нет.

    Reply
  45. FFelix

    (44) не уверен, но в БСП (УТ, ERP) кажется запись доп.реквизитов тоже происходит одновременно с объектом.

    Всё-таки, их подключение в ваш механизм сделает его на порядок полезнее, имхо

    Reply
  46. 1c-intelligence

    (45) FFelix, я специально проверил на УТ 11 — не дает редактировать доп.реквизиты до записи объекта. Проверял на демобазе, в справочнике номенклатуры.

    Варианты решения есть, должно получиться. Это будут либо встраиваемые в «Проверку данных» шаблоны для типовых конфигураций, либо срединное решение — некоторый шаг в сторону от полной отчуждаемости конфигурации.

    В любом случае, спасибо за направление развития инструмента.

    Reply
  47. YanTsys

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

    Reply
  48. 1c-intelligence

    (47) YanTsys, спасибо за замечание. Внес изменения в описание.

    Reply
  49. 1c-intelligence

    Выложена обновленная версия, доработанная по запросу одного из клиентов.

    Расширены возможности отключения проверок.

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

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

    Теперь такая возможность есть.

    Reply
  50. Atrika-96

    Весьма интересная разработка, спасибо.

    Мы только что встроили в ЗУП 2.5 и сразу возник вопрос: а существует ли возможность установить проверку на регистры сведений (с независимым режимом записи), план счетов, план видов расчетов, план видов характеристик?

    Reply
  51. 1c-intelligence

    (50) Tany_SH, такой возможности сейчас нет — просто не было таких задач. Если вам нужно проверять такие объекты, я добавлю возможность.

    Reply
  52. Atrika-96

    (51) такая возможность очень нужна, буду весьма признательна за добавление!

    Спасибо за разработку! Очень удобно «на лету» менять права доступа к объектам и проверять правильность заполнения.

    Впервые применили эту настройку в базе данных, которая получилась в результате слияния 7 баз различных юридических лиц. С помощью проверки данных решили 2 основные проблемы, которые возникли при начале работы в программах: корректность заполнения полей в документах/справочниках и разрешение на изменение или добавление данных только ответственными лицами. Только благодаря проверке данных удалось остановить бесконтрольное разрастание дублей и привести к стандарту ввод первичных данных.

    Простая настройка проверки очень простая и интуитивно понятна, поэтому главный бухгалтер или руководитель отдела легко справляются с ней самостоятельно — и очень довольны, что никого просить не нужно.

    Сейчас проверка встроена во все наши базы, не представляю как мы без нее обходились раньше))

    Спасибо огромное!

    Reply
  53. Aletar

    Скажите, а работает только проверка данных или есть возможность установки нужных реквизитов объетков?

    Reply
  54. 1c-intelligence

    (53) Aletar, конкретно в этом решении возможности установки реквизитов нет.

    Оно есть в решении Автоопределитель, я о нем рассказывал на конференции IE 2015. Оно пока не опубликовано.

    Reply
  55. Aletar

    Скажите, а решение «Автоопределитель» можно как-то приобрести?

    Reply
  56. 1c-intelligence

    (55) Aletar, вы прям приобрести хотите? Или вам рассказать суть и вы сами воспроизведете?

    Оно просто не готово к продаже, т.к. создавалось под внутренние требования.

    Reply
  57. Aletar

    (56) расскажите суть, я думаю это не только мне будет интересно.

    Reply
  58. 1c-intelligence

    (57) Aletar, вот суть

    Идея информатора развилась в новую тему — автоматическое заполнение реквизитов объектов. Рабочее название — автоопределитель.

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

    Как настраивается автоопределитель:

    1. Выбирается объект (например, табличная часть «Товары» документа «Реализация товаров и услуг»);

    2. Описываются условия для автозаполнения (например, Номенклатура в папке Продукция);

    3. Указываются реквизиты, которые надо заполнить, и их значения (например, счет учета БУ = 43 и счет учета НУ = 43).

    Главная фишка в том, что п.2 и п.3 описываются в виде таблицы, что позволяет делать последовательный перебор условий. Значения реквизитов при этом ставятся в соответствии с тем условием, которое выполнилось. Отбор, разумеется, СКДшный, что позволяет сравнивать реквизиты объекта как с абсолютными значениями, так и друг с другом (или, например, с реквизитами документа-основания).

    Больше всего это похоже на настройку условного оформления отчетов. Там тоже можно сделать несколько оформлений одного элемента, в зависимости от разных условий. Например, если сумма <100, то цвет красный, если от 100 до 1000, то желтый, если больше 1000, то зеленый.

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

    Третья фишка — заполнение реквизитов значениями других реквизитов. При заполнении реквизита в качестве значения можно выбрать не только абсолютное значение, но и сослаться на другой реквизит. Например, заполнить ставку НДС основной ставкой из номенклатуры.

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

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

    1. Перед записью объекта — это железобетонные автоопределители, которые должны обязательно выполняться;

    2. Интерактивно в форме объекта, по кнопке. На форму выводится подменю со всеми доступными автоопределителями, у которых настроен доступ через интерфейс. Это примерно как подключаемые обработки табличных частей.

    Reply
  59. 1c-intelligence

    Если наберется достаточно желающих — выделю автоопределитель в отдельную конфигурацию и сделаю публикацию.

    Reply
  60. МирославаЯсная

    Подскажите, пожалуйста, в Вашем примере — проверка на заполнение ответственного (ответственный не заполнено), какое надо ввести условие, чтобы эта проверка действовала только по некоторым организациям? Организация в списке? И все это одной строкой? Спасибо!

    Reply
  61. 1c-intelligence

    (60) МирославаЯсная, вы все правильно пишете — надо делать одну строку в таблице Проверки, и в отборе указать «Ответственный не заполнено И Организация В Списке <список организаций>». На всякий случай прикладываю скриншот.

    Reply
  62. МирославаЯсная

    (61) спасибо! За продукт и за ответ 🙂

    Reply
  63. МирославаЯсная

    (30) искала где отключать проверки. Нашла 🙂 Спасибо еще раз!

    Reply
  64. BSV

    Доброго времени суток, есть вопрос. Мне надо проверить заполнение контактных данных элемента справочника «Контрагенты», к примеру «Юр.адрес контрагента», добавил в набор данных это поле из регистра сведений «Контактная информация» через СКД,, прописал проверку на заполнение, но проверка осуществляется не правильно, я так понимаю, из-за того, что на момент проверки, данные еще не записаны в регистр сведений из табличного поля на форме элемента. В этом случае, что-то можно сделать? или я что-то неправильно делаю в настройках проверки?

    Reply
  65. 1c-intelligence

    (63) МирославаЯсная, на всякий случай добавлю, что там есть справка, я постарался сделать ее максимально понятной.

    Reply
  66. 1c-intelligence

    (64) BSV, увы, такую проверку в общем случае не сделать, т.к. контактная информация хранится в отдельном регистре сведений и при первой записи контрагента ее там просто не может быть. Если запись не первая, то уже зависит от логики конкретно справочника контрагенты. Если, например, при записи контрагента идет полная перезапись набора регистра сведений, то проверка тоже не поможет.

    Та же проблема, например, со свойствами и категориями.

    Reply
  67. BSV

    1c-intelligence, спасибо за ответ, я в общем так и думал — но втайне надеялся, что не прав 🙂

    Reply
  68. 1c-intelligence

    Вышла обновленная версия.

    Добавлен учет срабатывания проверок. Когда срабатывает какая-либо проверка, то информация об этом записывается в регистр сведений.

    Сохраняется дата срабатывания, имя пользователя и текст сообщения.

    Для анализа срабатывания проверок за период добавлен отчет «Эффективность проверок». Отчет показывает, какие проверки, у каких пользователей срабатывали в течение периода.

    В отчете два предопределенных варианта — «По проверкам» и «По объектам».

    Отчет может использоваться для разных целей.

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

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

    Reply
  69. dj_serega

    Вопросы по

    Можно на время отключить проверки для определенных пользователей. Например, для группового перепроведения документов;

    1. А можно ли настроить проверки для списка пользователей?

    Пользователь1 — 4 проверки

    Пользователь2 — 2 проверки

    Пользователь5 — нет проверок.

    2. А можно ли настроить проверки по ролям?

    Если такого нет, то доработать самому получится? (не сильно ломая механизм).

    Reply
  70. 1c-intelligence

    (69) dj_serega, сейчас настроить проверки по ролям можно только косвенными методами — сделать проверку сложной, и в схеме компоновки вычислять текущего пользователя. Это делается несложно, через параметры и использование функции глЗначениеПеременной(«глТекущийПользователь»). Но этот метод косвенный, не очень удобный.

    Мне нравится идея задавать конкретный список пользователей или ролей, я добавлю это в конфигурацию. Спасибо.

    Reply
  71. МирославаЯсная

    (35) не нашла, видео. «Ткните носом», пожалуйста) Спасибо!

    Reply
  72. 1c-intelligence

    (71) МирославаЯсная, ага, куда-то пропало видео.

    Вот ссылка: http://www.youtube.com/watch?v=_RFhQDnsDBw

    Reply
  73. Synoecium

    Используем эту разработку в рабочей базе уже пару месяцев, очень удобно настраивать, просто внедрять. Автору плюс.

    Reply
  74. МирославаЯсная

    (72) спасибо!

    Reply
  75. TapeFiver

    А в данной проверке реально сделать при каком-то условии запрет на изменение реквизита не нового элемента справочника?

    Reply
  76. 1c-intelligence

    (75) TapeFiver, запрет действует на весь объект целиком при определенных условиях, которые задаются отбором.

    Кажется, вы имеете в виду, можно ли сравнивать старое и новое значение реквизита?

    Reply
  77. TapeFiver

    (76) да именно это имею в виду. Посмотрел видео из (72) и почему-то подумал что «ОбъектПроверки» и элемент справочника в запросе будут как «ЭтотОбъект» и «Ссылка» в процедуре ПередЗаписью.

    Reply
  78. 1c-intelligence

    (77) TapeFiver, сейчас такой возможности нет. У меня есть адаптированная под одно предприятие версия, там такое есть — можно использовать реквизиты объекта до записи.

    Добавлю в текущую версию и выложу, спасибо за предложение.

    Reply
  79. TapeFiver

    (78) А есть пример проверки на заполненность свойства номенклатуры или контрагента? Пробовал и так и эдак, не смог победить. Прочитав (44) понял что вы пишете что как-то выкрутиться можно, но я реально в тупике.

    УТ 10.3

    Reply
  80. МирославаЯсная

    (59) очень бы хотелось посмотреть «автоопределитель». Заранее благодарна.

    Reply
  81. 1c-intelligence

    (79) TapeFiver, выкрутиться лучше всего доработкой конфигурации, т.к. заполненность свойств, например, номенклатуры, выполняется через вывод табличной части подчиненной обработки на форму номенклатуры. Запись свойств выполняется при записи номенклатуры в форме.

    Соответственно, перед вами и таблица свойств и их значений (ТЧ обработки), и контекст записи номенклатуры, а значит — и возможность в этом контексте остановить запись при незаполненных свойствах.

    Могу помочь, если надо.

    Reply
  82. 1c-intelligence

    (80) МирославаЯсная, он в очереди стоит. Сейчас я дорабатываю проверку данных.

    Reply
  83. МирославаЯсная

    (82) спасибо! будем ждать)

    Reply
  84. МирославаЯсная

    (82) подскажите, пожалуйста, настроена проверка, затем вносятся изменения в структуру справочника (например, удаляется реквизит) и при попытке открытия проверки из справочника «Проверяемые объекты» 1с вылетает с ошибкой — «Ошибка получения информации набора данных по причине: Ошибка в запросе набора данных по причине: Поле не найдено». Возможны ли какие-то варианты решения? Спасибо!

    Reply
  85. 1c-intelligence

    (84) МирославаЯсная, такое бывает, увы. Посмотрю, что можно сделать.

    Reply
  86. МирославаЯсная

    (85) спасибо!

    Reply
  87. МирославаЯсная

    (85) у меня еще вопрос 🙂 как в сложной проверке по ВТ срез последних установить период равным дате проверяемого документа? Спасибо!

    Reply
  88. ponaroshku

    Добрый день!

    Можно ли вашей обработкой делать сравнение не на конкретное значение, а на реквизит этого же документа?

    Ну например Организация = ПодразделениеОрганизации.Владелец?

    Или это лучше сделать через СКД?

    С чем связана рекомендация

    Запрос, написанный в схеме компоновки, должен возвращать данные для проверки, а не результат проверки. Проверки в любом варианте настраиваются на закладке «Проверки», с указанием текста сообщений.
    Reply
  89. 1c-intelligence

    (88) ponaroshku,

    Можно ли вашей обработкой делать сравнение не на конкретное значение, а на реквизит этого же документа?

    можно, это стандартная функция СКДшного отбора. Надо в правом значении отбора нажать крестик, снова открыть выбор, в списке выбрать «Поле компоновки данных», и вам будут доступны все реквизиты проверяемого объекта.

    С чем связана рекомендация

    Это рекомендация о том, как избежать стандартной ошибки — писать проверку в запросе таким образом, что он возвращает только правильный объект. В этом случае любая новая проверка, добавленная снаружи — через табличку в форме — не будет работать. Банальный пример — если вы в запросе проверяете пометку удаления и возвращаете только помеченные на удаление, а в таблице сделаете проверку вроде «Проведен = Истина И ОтражатьВБУ = Ложь», то вторая проверка никогда не сработает, а неправильные документы (проведенные без галки БУ) у вас в системе появятся.

    Запрос должен всегда возвращать объект, на этом строится «многоздачность», или «многопоточность» проверки — запрос один, выполняется один раз, а проверок делается несколько.

    Но, в принципе, никто не мешает делать по-своему, просто надо учитывать описанную выше особенность.

    Reply
  90. ponaroshku

    (90)

    можно, это стандартная функция СКДшного отбора. Надо в правом значении отбора нажать крестик, снова открыть выбор, в списке выбрать «Поле компоновки данных», и вам будут доступны все реквизиты проверяемого объекта.



    я думала, что это работает так, как вы описали — про отбор

    но крестика нет

    https://yadi.sk/i/TPBRr77WsGs6y

    А при не заполненном левом значении в списке выбора отсутствует тип «Поле компановки данных», только примитивные типа строка, число и т д

    Поставила «Использовать в качестве значения поле» и конечно все заработало)

    Про рекомендацию я вас поняла, спасибо

    P.S. при пометке на удаление элемента справочника «Проверяемые объекты» проверка по условию все равно выполняется

    Внимательно смотрю вашу разработку

    сейчас при проверке документа нет возможности задать текст с использованием реквизитов проверяемого объекта, т.е. написать «Неверно указана организация» можно, а «Неверно указана организация ИП Иванов» нельзя

    Планируется ли расширить текст ошибок?

    Reply
  91. 1c-intelligence

    (91) ponaroshku,

    Планируется ли расширить текст ошибок?

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

    Вообще, сделать можно, внесу в список доработок.

    Reply
  92. ponaroshku

    (92) спасибо, буду ждать нового «релиза»

    Очень полезная разработка

    Reply
  93. ponaroshku

    Добрый день!

    Подскажите, возможно ли сравнить текущий объект с ранее сохраненными данными?

    Например, справочник организация — смотрим, если изменили наименование (сравнив его с ссылка.наименование?) выдать отказ?

    Если да, то как это сделать, подскажите пожалуйста

    Reply
  94. 1c-intelligence

    (94) ponaroshku, сейчас такой возможности нет. Планируется в новой версии.

    Reply
  95. dj_serega

    (70)А добрый день 🙂 Еще не пришло время новой версии конфигурации? :-))

    Reply
  96. 1c-intelligence

    (100) конечно пришло, и прошло уже давно 🙂

    Может в новогодние каникулы получится.

    Reply
  97. dj_serega

    (102) Просто в публикации нет инфы о моем предложении. Вот и спросил.

    Вот-вот будем скачивать себе и адаптировать. О результатах доработок опишусь 😉

    Спасибо за хороший и интересный продукт.

    Reply
  98. TapeFiver

    Иван, если я не пропустил релиз, то хотелось бы фичу из (78)

    Reply
  99. 1c-intelligence

    (118) спасибо, и это сделаю.

    Reply

Leave a Comment

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