Универсальные механизмы для платформы 8.1




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

    Было бы интересней реквизиты размещать на основной форме

    Reply
  2. tsd

    около года назад делали подобную штуку. Необходимо было в УПП в десяток документов добавить ряд реквизитов и обрабатывать их при проведении. В принципе все работает нормально. Безусловным плюсом применения данной методики является легкое обновление, из минусов могу привести следующие: пользователи постоянно жалуются, что визуально не видят заполнены или нет доп.реквизиты, часто забывают откуда производится вызов формы заполнения доп.реквизитов. Если у документа много связанных регистров сведений, то их список получается большим и нуна напрячь зрение чтобы нужную строку увидеть 🙂 (это тоже по жалобам).

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

    Reply
  3. wildhog

    Не пойму в чем выгода по сравнению с использованием для этих целей ПВХ (не пластика 🙂 )?

    Reply
  4. WiseSnake

    (1) Это противоречит анонсу топика! Но на самом деле информацию о доп.реквизитах можно выводить на основную форму и открывать более простым способом. Пожалуй этот механизм я выложу вторым

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

    В моем примере это не так… Так как наименование регистра начинается с «1. Зап…» то эта строчка всегда первая в списке регистров.

    Reply
  5. WiseSnake

    (3) Первый раз слышу такую аббревиатуру, потрудитесь расшифровать, пожалуйста.

    Reply
  6. WiseSnake

    +4 и 1 Выводить информацию так же можно не изменяя типовую конфигурацию.

    Reply
  7. wildhog

    Имел ввиду ПВХ — план видов характеристик.

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

    Reply
  8. WiseSnake

    (7) О точно я же забыл написать еще и этот плюс данного метода!! Спасибо, что напомнили )))).

    Читайте в 5 плюсе преимущество.

    Reply
  9. WiseSnake

    Я в 6 посте обманул, чисто типовым способом доп.реквизиты выводить на основную форму не получится. Придется вставить 1 строчку кода в общий модуль.

    Вопрос: Можно ли считать это так же универсальным механизмом??? То бишь прикладывать его сюда?

    Reply
  10. Ish_2

    (9) Ну , слава Богу. Я тут сижу ломаю голову про типовой способ вывода на основную форму.

    Reply
  11. WiseSnake

    Извиняюсь… Просто поспешил… Надеюсь 1снеги добавят побольше подписок на события, тогда он будет без изменений типовой ;).

    Reply
  12. artbear

    (9) Ну и сразу бы описал эту «1 строчку кода в общий модуль» !

    Reply
  13. wildhog

    (8) Извиняюсь не сразу понял суть 🙂 Шапка поста ввела в заблуждение.

    Согласен , как механизм быстрого доступа к редактированию добавленных реквизитов объектов — очень удобно. Но, для допустим 2х реквизитов создавать доп формы + РС + приучить пользователей к такому способу — имхо не стоит свеч.

    Reply
  14. wildhog

    (12) вот например можно так — http://infostart.ru/blogs/900/ или еще способы там же в каментах.

    Reply
  15. WiseSnake

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

    1. Да пользователям всегда напряжно привыкать к новому. Но когда все можно найти в одном месте в любом объекте это упрощает написание того же руководства для пользователя, которое можно положить у него под носом. Или повесить на стену :). Да и пользователям проще привыкнуть.

    2. Для программиста же это мега-удобно! Потому что начинается все в 1-2 доп.реквизитов, а теперь у меня в той же номенклатуре их десятки! И как показала практика от использования свойств и категорий получаешь только головную боль! А добавить реквизит на доп форму это секундное дело…

    Reply
  16. WiseSnake

    (15) Вот блин 🙂 Именно его я и хотел добавить вторым, теперь подумаю… Только я использую УстановитьКнопкуПечати(), так как она выполняется позже в процедуре при открытии, это для меня было критично.

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

    Reply
  17. WiseSnake

    +16 Я использую его для вывода кнопки на нижней панели на этой кнопке выводу информацию о доп реквизитах(самых важных) и к ней же привязываю обработчик для открытия доп.формы. Получается тоже очень удобно.

    Reply
  18. wildhog

    (16) Ну рисование на форме программно не так уж и трудно, со временем появляются шаблоны и рисование на форме сводится к копипасту 🙂 В результате как всегда — есть свои плюсы, ну и без минусов никуда.

    В общем — в мемориз 🙂

    Reply
  19. Totoro

    Сам подобный вариант использую в БП. Гораздо удобнее для пользователей чем ПВХ при нынешнем уровне типовых отчетов. Хотя, если в 8.2 сделают нормальную работу в СКД с ПВХ …

    Reply
  20. WiseSnake

    (18)> рисование на форме сводится к копипасту

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

    Давно витает мысль написать приблуду, которая формирует код по программному рисованию реквизитов, но как обычно не хватает времени. Может, кто и реализует идею ;)…

    Reply
  21. Душелов
  22. Totoro

    (20) Как пример http://infostart.ru/projects/895

    Reply
  23. WiseSnake

    (21) Читал этот пост,пробовал , не айс, слишком долго (часто не с первого раза получается нужного результата), отложил в мемори, спасибо что напомнили, вернусь и еще раз подумаю… Как бы метод описанный тут для программиста намного удобней, а для пользователя чуть хуже.. По этому я пока выбираю его… )))

    (22) Ну это совсем не то что я имел ввиду.

    Reply
  24. artbear

    (23) На партнерском форуме кто-то выкладывал утилиту для форм.

    Нужно поискать ветку, что-то связанное с обновлением конфигурации — большушая такая ветка.

    Reply
  25. WiseSnake

    (24) Если не трудно, а то я ничего так и не нарыл по этому поводу в свое время

    Reply
  26. maxp77

    (24) интересно было бы посмотреть что за утилита такая

    Reply
  27. tsd

    (19) ты в БП что используешь? Я через процедуры советов залезаю, изменения типовой свелись к изменению в 2 процедурах общего модуля (пару строк добавлено).

    Reply
  28. Rusk51

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

    Твоя обработка при открытии в программе (без изменения в конфигураторе) выдает ошибку:Значение не является значением объектного типа (Ссылка)

    СсылкаНаОбъект = ВладелецФормы.Ссылка;

    Ладно,завтра трезвый попробую.

    Но подскажи,чтобы не парится, пункт 1 в описании это для конфигуратора ?:

    1й шаг: Для того чтобы его задействовать, необходимо в обновленной конфигурации найдите регистр ………

    Reply
  29. WiseSnake

    (28) > Но подскажи,чтобы не парится, пункт 1 в описании это для конфигуратора ?

    Да ))))))))

    Reply
  30. Totoro

    (27) У меня на каждой форме документа находится кнопка (перед советами), открывающая форму связанного регистра сведений (с нужно формой).

    Reply
  31. tsd

    (30) А кнопку с обработчиком ты вручнуюю добавляешь? Если да, то не очень здорово, ибо каждый док. становится измененным.

    У меня тоже через доп.кнопку вызов форм идет. Кнопка добавляется программно при открытии документа.

    Reply
  32. WiseSnake

    (31) В 14 и 16 постах этот вариант описан.

    (30) Кнопку вручную добавлять не стоит, чтобы не париться с обновлениями.

    Reply
  33. Totoro

    (31) Кнопку программно добавить не проблема. Только новое событие должно быть в тексте модуля (а если переопределеять какую нибудь типовую процедуру, то должна быть 100% гарантия, что 1С потом её не изменит). И соотв. нужно что бы в этом событии использоватся текущий объект. Вот на этом у меня затык. Проще скопировать кнопку при обновлении ~ 15 минут (в крайнем случае пользователь предупредит о пропаже кнопки :), но ошибок не будет). А ты как вызываешь форму текущего объекта?

    Reply
  34. Totoro

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

    Reply
  35. WiseSnake

    (34) почитай статью по ссылке в (14). Лично я использую процедуру УстановитьКнопкуПечати() там нужно вставить 1 строчку кода для того чтобы организовать программное добавление кнопки. Обновление занимает ~30 сек на все. 100% гарантия не нужна ее никогда и не будет, любой отчет обработка перестанет работать если 1С что то глобально изменят. Плюс к этому если они поменяют наименование процедуры используемой практически везде тогда они будут полными идиотами!!!!

    Reply
  36. Totoro

    (35) Так они уже недавно поменяли кучу процедур … Замучился свои документы и отчеты переделывать. Т.ч. пусть лучше будет кнопка — надежнее.

    Reply
  37. WiseSnake

    Ну и что, изменение процедур на работу механизма никак не повлияет, повлияет если они вообще ее уберут из процедуры «ПриОткрытии». Поверьте, никаких проблем связанных с этим нет. А вот копировать каждый раз кнопки это полный пиндык, у меня больше 10 объектов только в 1й базе с подобными доработками и представьте каждый открывать и вставлять кнопку… А таких баз несколько, не уследишь…

    Reply
  38. Totoro

    (37) Ну, как говорится, на любителя 🙂 Форма тоже не часто бывает изменена и требует обновления у всех объектов.

    Кстати, ты не заморачивался программным добавлением стандартных действий на форму (типа добавить и т.д), имеется ввиду — значения «Действие». Например кнопки добавить и т.д.

    Reply
  39. Totoro

    38+ судя по всему действия стандартных кнопок не привязаны к конфе и соотв. могут быть спокойно добавлены программно как копирование из других форм, так и через ЗначениеИзСтрокиВнутр.

    Reply
  40. tsd

    (32) «УстановитьДоступностьПоляВводаНомера» сейчас уже не помню почему не стал использовать, в общем, выбрал Советы (типа механизм справочный, законченный и отточенный и менять его 1С вряд ли станет 🙂 ), кстати от использования процедуры УстановитьКнопкуПечати() отказался в силу того, что она не во всех документах присутствует.

    (33) в модуль формы документа процедуру обработчик кнопки прописывать как-то не очень. Мне нужно было таким образом 67 документов изменить, при обновлении достаточно геморно лезть в каждый док выяснять то ли отличия только по моей вставке, то ли 1С что-то поменяло. А так только 2 процедуры общего модуля РаботаСДиалогами изменены.

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

    Reply
  41. tsd

    (37) о блин, на третьи сутки зоркий глаз заметил :)))

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

    Reply
  42. wildhog

    (40) И точно, смотрел на эту процедуру смотрел 🙂 и просмотрел что форму в ней легко получить. А также одна и та же процедура обработчик 🙂

    Добавлю ка я в свою статью этот способ. Естественно со ссылкой на тебя. Думаю будешь не против?

    Reply
  43. WiseSnake

    (42) Конечно нет, добавляй пожалуйста. А я примерчик наваяю универсальный (типа для примера), занесу в механизмы и ссылочку на твою статью пожалу

    Reply
  44. WiseSnake

    й просто вставлю. Проще будет понять как это делается. Ты не против?

    Reply
  45. wildhog

    (43, 44) 🙂 Спрашивал у TSD — т.к идею услышал от него, а копирайт хочется соблюсти. В сети вроде ходит негласное правило — где-то что-то скопипастил — оставь ссылку на автора. Себе же спокойнее :))

    Reply
  46. tsd

    (42) нет не против, добавляй.

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

    Можно вообще перекрестными ссылками все такие статьи объединить ибо материал полезный

    Reply
  47. Totoro

    (0) Можно еще использовать для получения владелца в форми списка регистра сведений реквизит-структуру ПараметрОтборПоИзмерению

    (41) Т.е. у тебя форма отдельная и никак с основным объектом не связана?

    Я это спрашиваю потому, что через советы я не могу получить ссылку или сам объект в отличии от (0)

    ЗЫ Кстати в БП получилось добавить действие «связанные регистры сведений» на командную панель через обработчик советов.

    Reply
  48. wildhog

    собственно результат http://infostart.ru/blogs/900/

    (46) Статья была об общем механизме — поэтому привязку к текущему сабжу не делал. Перекрестные ссылки поддерживаю и в своей статье реализовал.

    Reply
  49. WiseSnake

    (45) Извиняюсь, просмотрел. Тем более что «советы» насколько я помню реализованы только в бухгалтерии. В УТ их точно нет, остальные лень проверять.

    Reply
  50. tsd

    (47) расписал в http://infostart.ru/blogs/1098

    (49) да механизм советов к сожалению присутствует только в БП. В УТ как обработчик действия кнопки документа можно использовать процедуру ОбновитьФормуПодбора, правда она используется в 46 доках из 133, но зато каких 🙂 облом с банком, кассой и документами ввода начальных остатков (остальные не существенны). Наверное для них еще что-то можно высмотреть.

    Reply
  51. WiseSnake

    (50) Я не знаю как в БП но в УТ насколько я смотрел процедура УстановитьКнопкуПечати() практически во всех документах и во всех основных справочниках. Лично у меня только с ней проблем не возникло.

    Reply
  52. tsd

    (51) процедуру УстановитьКнопкуПечати() используем как обработчик открытия формы напр. для программного добавления кнопки, а указанную в (50) ОбновитьФормуПодбора вешаем как действие кнопки, чтобы модуль формы документа не вообще затрагивать.

    Reply
  53. igor_gk

    «…2й шаг: В любом из выбранных объектов вы можете добавить свои реквизиты и добавить их на ОБЯЗАТЕЛЬНУЮ форму «ДополнительныеРеквизиты» (для группы эта форма должна называться «ДополнительныеРеквизитыГруппы»)…»

    Т.е. нужно в объекте (напр.спр-к Контрагенты) добавить неск-ко реквизитов и форму?

    Если так, то налицо брутальная переделка объектов оригинальной конфигурации… 🙁

    Надо бы их (реквизиты и формы) делать где-то в сторонке, не прикасаясь вообще к оригинальным объектам. А уже в каком-то регистре сведений прописать связь…

    Reply
  54. WiseSnake

    (53) Именно то что вы написали и сделано 🙂

    К сведению: ДОБАВЛЕНИЕ реквизитов и форм на платформе 8.х не «цепляет» основную конфигурацию. Все «сбоку» и нигде не мешается. я же вроде это все написал, надо еще раз перечитать.

    Reply
  55. inse0f

    (20) я кое чего писал

    но не дописал :(( времени все нету

    идей кстати много есть

    я эту тему хотел покопать

    Reply
  56. pm74

    неплохо бы Форму «ДополнительныеРеквизиты» сделать общей

    Reply
  57. WiseSnake

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

    Reply
  58. pm74

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

    Reply
  59. pm74

    я кстати использую нечто подобное

    только у меня это называется ДополнительныеПоляДокументов — периодический

    регистр сведений подчиненный регистратору

    Reply
  60. Ish_2

    (57) Чуть в сторону. Управляемая форма 8.2 содержит структуру хранящую реквизиты формы и их расположение.

    Можно ли рассматривать это как шаг в сторону облегчения добавления реквизитов на форму и как следствие последующее безболезненное обновление ?

    Reply
  61. WiseSnake

    (59) Это все хорошо когда допформ немного, когда, ну например штук 50, что очень реально, то это геморой. Искать среди закладок нужную… неее…

    (60) Рассматривать именно так и можно, но, если честно, я 8.2 посмотрел только краем глаза и не представляю как это будет работать на практике, ну во всяком случае шаг в верном направлении. ИМХО.

    Reply
  62. pm74

    (61) ?? насчет поиска не понял , ну да ладно это в принципе все неважно, имхо вариант с ковырянием в объектах далеко не идеален

    напр. в моем конкретном случае приведет к огромному геморрою с обновлением еще 8 конф. в представительствах причем в авральном режиме

    но вариант подключения формы с помощью связанного регистра мне показался интересным за это и плюсанул в принципе

    Reply
  63. WiseSnake

    (62) > в моем конкретном случае приведет к огромному геморрою с обновлением

    В смысле? Какой геморой может быть?

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

    Reply
  64. pm74

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

    Я уже молчу про качество связи и проч. перекачивать им по 70 Мб конфу. и удаленно обновлять когда с другой стороны чуть ди не диалап — это жесть поверьте на слово.

    Reply
  65. WiseSnake

    Ну у меня у самого 3 филиала и нормально все…

    А распределенка не катит у Вас?

    База то все равно должна быть одинаковая, просто сделали бы распределенку только с нудными данными(ну там общие справочники всякие), там совсем немного инфы будет ходить, и все сразу будет подливаться в филиалы… +можно в 8.1 можно настроить автоматическое сохранение конфигурации при обновлении, насколько я помню…

    Reply
  66. pm74

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

    Reply
  67. WiseSnake

    (67) Ага, внутре объектов.

    (66) То что не распределенка я уже понял, по этому и спросил, почему не стоит распределенка. Можно ведь сделать 1 конфигурацию, которая будет удавлетворять всех и спокойно ее поддерживать…

    Reply
  68. pm74

    (68) было написано уже до меня

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

    Reply
  69. igor_gk

    (70) Ага, внутре объектов….

    Так отож… Лучче б они (формы с реквизитами) где-нить вообще отдельно были (напр. в подчиненных спр-ках? или прописать связи в регистре?…), а объекты оставались абсолютно «идентичные натуральным» т.е. без дополнительних форм и, тем более, реквизитов….

    Тогда и в (относительно) разные базы изменения вносить было б легко…

    Reply
  70. Totoro

    (70) Так не кто не запрещает так сделать … Вытащи механизм свойств/категорий из УТ/УПП, а кнопки их вызова помещай на форму по вышеуказанной методике. Только весь смысл добавления реквизитов в объекты — это удобное использование типовых отчетов/обработок сделанных на построителе … А если уж добавил реквизиты, то и формы проще в каждый документ добавить — все равно будут отображаться изменения при сравнении. ИМХО.

    В принципе можно самому перейти добавлять — если на форме его нет. Или сразу кнопку открытия регистра.

    Reply
  71. igor_gk

    (71)»…Только весь смысл добавления реквизитов в объекты — это удобное использование типовых отчетов/обработок…»

    А вот тут мне уже крыть не чем, сдаюсь 🙂

    Reply
  72. WiseSnake

    (69) > менеджеры не видят контрагентов и документов из других филиалов

    У меня тоже не видят, ограничение на уровне записей… Но доки ИМХО должны быть все, это часто облегчает когда надо понять откуда ноги растут в филиале…

    > урезанные базы кое где докручен функционал импорт из других баз и проч.

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

    Так что Вы подумайте ;). Вам же намного легче будет вести.

    Reply
  73. Aloger

    Добавляются реквизиты объекта или реквизиты формы?

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

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

    С уважением, Анатолий.

    Reply
  74. tsd

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

    Reply
  75. lion11

    Я правильно понимаю? : в типовой БП 1.6 данный механизм будет работать только для справочников. В документах нет кнопки Перейти (как было в редакции 1.5), и следовательно, надо придумывать что-то вроде Варианта доработки Бухгалтерии предприятия http://infostart.ru/blogs/1098/ . А если сделано по этой методике, то Вашу можно переделать, не используя доп. регистр сведений, а открывая прямо в процедуре ОткрытьФормуВыбораОбъектаУпрУчета() ?

    Reply
  76. WiseSnake

    (76) Совершенно верно. Как раз это блог и можно использовать.

    Можно процедуру открытия вынести в свой общий модуль. + можно использовать процедуру при открытии формы регистр, принцип тот же.

    Reply
  77. lion11

    (77) Большое спасибо и за идею Жирный большой плюс!

    Reply
  78. lion11

    (77) Еще возник вопрос: Если использовать Ваш вариант — то работает как надо, а именно перед открытием Доп.формы идет проверка на модифицированность и запись объекта при необходимости. А если брать идею tsd, то не получается поймать основную форму объекта, которая открыта в данный момент. tsd молчит, может Вы подскажете, как это можно сделать?

    Reply
  79. WiseSnake

    (79) Насколько я знаю в процедуру которую использует tsd передается форма документа.

    Reply
  80. lion11

    (80) Нет, там документ ищется через Строку пояснения, в которую шифруется док (свойство Кнопка.Пояснение). Переданной Формы я там не заметил 🙁

    Reply
  81. WiseSnake

    (81) ну во всяком случае если вы открываете форму то у вас есть объект (ЭтотОбъект), а у объекта есть метод Модифицированность(). Кажется так..

    Reply
  82. lion11

    (82) Да, объект есть, но признак Модифицированность() все время возвращает Ложь. Если вдруг посетит озарение, отпишитесь плиз.

    Reply
  83. Totoro

    (81) Можно использовать другой обработчик, в который будет передаваться форма. Тут в комента была ссылка на статью.

    Я, например, скомбинировал идею WiseSnake и tsd. В процедуре советов на форму добавляется кнопка перехода к подчиненному регистру. А в форме регистра уже через ВладелецФормы.ЭтотОбъект.Модифицированность() делается проверка на изменение формы.

    Reply
  84. WiseSnake

    (84) Слушай, интересная идея 🙂

    Reply
  85. lion11

    (84) Точно, хорошая идея! Надо попробовать

    Reply
  86. Totoro

    (85), (86) Получилось с кнопкой? А то могу свой вариант вечерком скинуть?

    Reply
  87. lion11

    (87) Очень интересно посмотреть на этот вариант, буду благодарен… А я пока не пытался, боролся с новой формой сч-фактуры и с бухами по этому поводу.

    Reply
  88. lion11

    (87) С кнопкой получилось. Там tsd пример выложил, вот на основе этого примера и получилось.

    Reply
  89. Totoro

    (89) Ну, я немного другое имел ввиду: http://narod.ru/disk/10006596000/UniExtForms.zip.html

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

    Поскольку учусь, воспользуюсь :))

    Reply
  91. WiseSnake

    (91) Вот и правильно 😉 Это уже обкатанная технология, правда обновить файлик надо… А то я открытие усовершенствовал, но пока не выкладывал…

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

    (92) Да, черт бы его драл, информации много. Усваивать без практики тяжело…

    Reply
  93. WiseSnake

    (93) Да практических заданий то уйма 😉

    Reply
  94. pma

    1С:Предприятие 8.2 (8.2.10.82)

    Пришлось править в регистре сведений процедуру приОткрытии

    (ТипЗнч для документа возвращает просто Счет на оплату, судя по тексту раньше возвращал — Документ ссылка: Счет на оплату)

    строка 39 было

    ТипЗначенияОбъекта = ТипЗнч(СсылкаНаОбъект);

    Если Найти(ТипЗначенияОбъекта, «Документ ссылка:») Тогда

    СсылкаНаОбъект.ПолучитьФорму(«ДополнительныеРеквизиты», ВладелецФормы).ОткрытьМодально();

    Иначе // справочник

    стало

    ТипЗначенияОбъекта = ТипЗнч(СсылкаНаОбъект);

    ЭтоДокумент = Метаданные.Документы.Содержит(СсылкаНаОбъект.Метаданные());

    ЭтоСправочник = Метаданные.Справочники.Содержит(СсылкаНаОбъект.Метаданные());

    Если (Найти(ТипЗначенияОбъекта, «Документ ссылка:») ИЛИ ЭтоДокумент) Тогда

    СсылкаНаОбъект.ПолучитьФорму(«ДополнительныеРеквизиты», ВладелецФормы).ОткрытьМодально();

    ИначеЕсли ЭтоСправочник Тогда // справочник

    Reply
  95. WiseSnake

    В шапке написано, что это для 8.1.

    В 8.2 изменилась работа с типами данных отсюда ошибки.

    Reply
  96. Shum23str

    (0) Планируется ли перевод описанного механизма на 8.2?

    Reply
  97. WiseSnake

    (97) НУ у меня давно работает на 8.2. Но так как интерес к данной теме небольшой, то не хочется тратить время. Извините.

    P.S. Не вижу никаких трудностей в переводе на 8.2 из того что выложено. Идея описана и 95% реализации уже есть.

    Reply
  98. Shum23str

    При открытиие РегистраСведений «аЗаполнениеДополнительныхРеквизитов» в режиме 1С:Предприятие выдается ошибка:

    {РегистрСведений.аЗаполнениеДополнительныхРеквизитов.Форма.ФормаСписка(9)}: Значение не является значением объектного типа (Ссылка)

    СсылкаНаОбъект = ВладелецФормы.Ссылка;

    Reply

Leave a Comment

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