[RWidjets] Динамические панели, меню программы v.1.4.0




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

87 Comments

  1. support

    Судя по описанию круто! Давно такого ждали! А vtools в этой части очень глючил.

    Reply
  2. wolfsoft

    В тестовой обработке надо заменить

    глМеню.Обновить();

    мнМеню.Обновить();

    Интересная штука, вот только надо подумать, куда ее можно применить?…

    Reply
  3. wolfsoft

    В тестовой обработке надо заменить

    глМеню.Обновить();

    НА

    мнМеню.Обновить();

    🙂

    Reply
  4. Robert

    Заменил.

    Применить можно для организации переключения интерфейсов для пользователя.

    Или, как в моем случае, для совмещения интерфейсов. В стандартной конфигурации предусмотрена связь пользователь-интерфейс один к одному. Я же делаю связь роль-интерфейс. Каждый пользователь в один момент может выполнять несколько ролей. Интерфейсы нескольких ролей совмещаются. Получается связь один ко многим.

    Reply
  5. Kapitan911

    При повторном открытии:

    мнВсе=мнМеню.ДобавитьМеню(«Все», «&ВСЕ»);

    {C:МЕНЮ ТЕСТ.ERT(5)}: Элемент с идентификатором Все уже существует на этом уровне меню.

    Reply
  6. Robert

    Если вы хотите добавить в меню второй пункт ВСЕ, то используйте другой идентификатор.

    мнВсе=мнМеню.ДобавитьМеню(«Все2», «&ВСЕ»);

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

    мнМеню.УдалитьВсе();

    Reply
  7. Супер, видел как один чел написал «такооое» чтобы реализовать вот это для управления пунктами меню для пользователей, а сдесь все просто, автору респект огромный.

    Reply
  8. Robert

    В качестве респекта нажмите ссылочку Спасибо автору! (+1 рейтинг) выше.

    Reply
  9. JohnyDeath

    И респект и плюсик!

    Reply
  10. vasilykushnir

    +1

    Reply
  11. wolfsoft

    + 1 🙂

    2 robert: Убедил, полезная вешь! Особенно понравилась возможность из статьи http://infostart.ru/articles/?i

    Reply
  12. Robert

    Все просто. Вставь в глобальный модуль такой код.

    Код
    Процедура ПриПолученииКоманды(пКоманда, пЗаблокироватьКоманду)
       Сообщить("Идентификатор команды: "+пКоманда);
    КонецПроцедуры

    Показать полностью

    Запускай 1С. При выборе пункта меню, нажатии на кнопку панели инструментов, нажатии горячей клавиши получишь код команды. Этот код потом можно использовать как написано в статье или так:

    Код
    мнМеню=СоздатьОбъект("Меню");
    мнМеню.ПослатьКоманду("32854");

    Показать полностью

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

    Reply
  13. wolfsoft

    2 robert: Это в режиме «Предприятие» сработает, а вот откуда ты узнал код для команды из режима «Конфигуратор»? 😉

    Reply
  14. Robert

    Maniac

    Посмотри FormEx. Там есть процедуры перехвата движений мышью и нажатия клавиш. И работа с открытыми окнами кажется тоже.

    Фишка моей разработки не в перехвате нажатия клавиши как такового, а перехвата команды, которая передается Предприятию при нажатии клавиш. Например, при нажатии Ctrl+N, выборе в меню Файл — Новый, нажатии на панели кнопочки с листочком передается одна и таже команда. Ее можно перехватить и предпринять свои действия и отменить.

    wolfsoft

    Программа то одна, только работает она в разных режимах. И одна и таже команда в разных режимах имеет один код. Например, Файл-Новый имеет один CommandID в любом режиме. И даже в любой программе, написанной на MFC. А то, что команда открытия окна Пользователи срабатывает в режиме Предприятие, я наткнулся случайно. 😉

    Reply
  15. wolfsoft

    2 robert:

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

    Понятно. (мечтательно) Вот бы «наткнуться случайно» еще на какие-нибудь команды из Конфигуратора… 🙂

    Reply
  16. logarifm

    Чего-то я не догнал ,а хде же открытие списка создания пользователей!!! Где оно!!!

    Reply
  17. logarifm

    Сорри разобрался спс) Суперная фича! Я просто не спал блин!

    Reply
  18. Strange Device

    Класс (+1)!!! А не собираешься ли реализовать возможность построения панелей инструменов?

    Reply
  19. Robert

    Собираюсь в следующей версии.

    Reply
  20. Robert

    Maniac

    Не совсем так. RWidjets не предоставляет готовое решение для такой задачи. RWidjets это средство, инструмент решения подобной задачи.

    На данный момент, возможно сделать загрузку интерфейсов как в восьмерке, но только в части меню. Панели инструментов остаются как есть. Поэтому я не считаю пока такую задачу решаемой на 100%. Сделаю загрузку панелей, тогда напишу как и что делать для этого.

    Reply
  21. pr_kristar

    +1

    Reply
  22. YouRock

    А свои панели на форму, напр. для стандартизации управления списками, таблицами, открытия меню подчиненных и связанных справочников. Типа 8-ки. Ответный удар по 8-ке.

    +1

    Reply
  23. Robert

    YouRock

    В планах

    1. панели главного окна, замена стандартным

    2. панели на форме, замена стандартным

    3. панели в любое место формы для контекстной привязки к элементам формы

    Сначала п.1, потом остальное.

    Reply
  24. AlexT

    У меня вылетает при запуске 1С в терминале при количестве пользователей больше 1 с ошибкой «Память не может быть Read». Причем может и запуститься , но у 3-4 пользователей максимум. При одном пользователе работает нормально. У кого-нибудь подобное наблюдалось?

    Reply
  25. albiel

    Есть конфликтики с 1С++ (v. 2.0.2.2) и vtools (v. 1.0.0.1) . Обязательно нужно загружать компонету после 1С++, но до vtools. Так, вроде, работает, но длительно ещё не тестировал. Вещь нужная, если стабильно фунциклировать будет.

    Reply
  26. Chieftain

    У меня пункты меню в v.1.3.2 почему-то обрезаются по ширине. Мож че не догоняю?

    Reply
  27. Классная вещь, только у меня работает с ошибкой вот такой:

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

    Reply
  28. Да, если это важно — установлена бухгалтерия 7.70.473 под SQL, релиз 025.

    Reply
  29. Еще одна проблема. Если запустить 1С, и, пока она еще не загрузилась, переключиться на другое окно, к примеру браузер, загрузка 1С также вываливается с сообщением «программа 1cv7s вызвала ошибку RWIDJETS.DLL…», как и в предыдущей ошибке, описанной мной. От того, в формате DBF или SQL установка, это не зависит…

    Reply
  30. Chieftain

    Когда ждать новую версию?

    Reply
  31. Robert

    Всем спасибо за сообщения об ошибках. Новая версия будет в январе.

    У меня пункты меню в v.1.3.2 почему-то обрезаются по ширине.

    Если используете 1С++, то сначала загружайте 1cpp.dll, потом RWidjets.dll

    1С++ блокирует обработку некоторых событий. Скорей всего дело в этом.

    Reply
  32. Robert

    v.1.3.3

    Исправил ошибки. Персональная просьба к Serg11 проверить у себя.

    Reply
  33. bsa1968

    У меня была ошибка, подобная Serg11 — вылет 1С при обновлении меню (у меня также всем проставлена галочка «Отключить меню Операции», правда работаю на DBF-версии, релиз. 25). В новой версии этого не наблюдается, спасибо автору!

    Reply
  34. andrewalexk

    🙂

    согласен с большинством — это прорыв в менюпостроении , ждем обновлений

    Reply
  35. Проверил сейчас на тестовой базе. Действительно, ошибок, отмеченных мной раньше, не возникает. Так что включу в рабочую и буду проверять на ней. Большое спасибо.

    Reply
  36. VV

    В FormEx не умеет делать то же самое? Я еще не смотрел, правда, чем отличается?

    Reply
  37. vasilykushnir

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

    А вот это пожалуй, главная изюминка.!

    Reply
  38. vasilykushnir

    >Я же делаю связь роль-интерфейс. Каждый пользователь в один момент может выполнять несколько ролей. Интерфейсы нескольких ролей совмещаются. Получается связь один ко многим.

    А подробнее можно? Лучше, пожалуй, по мылу Vasily_Cherkassy@mail.ru (так наверное будет оперативнее). Меня это очень заитерисовало вот в каком плане: было два юзера (разные интерфейсы и разные наборы прав). Одного сократили, а второго подгрузили его обязанностями. Два раза входить юзеру в 1С напряг, а мне напряг выискивать блох, т.е. чем наборы и интерфейсы отличаются и объединять всю эту муру. Мне показалось, что твой подход сможет помочь мне.

    Reply
  39. RinGo

    >Запускай 1С. При выборе пункта меню, нажатии на кнопку панели инструментов, нажатии горячей клавиши получишь код команды.

    >А можно в цикле отправлять все команды подряд и смотреть что будет.

    А есть ли возможность узнать внутренний код команды (например: #53359) в момент создания пункта динамического меню командами мнМен.Добавить(пТип, пИднт, пЗаголовок, пСкрипт) или мнМеню.ДобавитьКоманду(пИднт, пЗаголовок, пСкрипт)? Или это принципиально невозможно? Мне бы хотелось не выбирая пункты динамического меню «ручками» программно установить соответствие

    пИднт <—> пКоманда…

    Reply
  40. Mulder_1

    Обработка супер !

    вот тока у меня проблемка возникла …

    не перехватывает нажатие на INS в журнале документов … т.е. не перехватывает «горячую клавишу » в журнале документов

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

    Reply
  41. ted

    Большое спасибо автору за труды!

    + поставил 😉

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

    с ключом пЗаблокироватьКоманду=1;

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

    Соглашусь с предыдущим собеседником неплохо было бы сделать перехват команды с клавиатуры,

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

    Reply
  42. artbear

    http://www.1cpp.ru/forum/YaBB.pl?num=1162249850/70#70

    Есть один баг —

    При загруженном Rwidjets падает 1с при использовании БыстрыйПоискВСписке

    (есть на инфостарте или с помощью моего класса)

    Я смотрел код RWidjets по представленным исходникам, в момент вызова svcsvc.dll, когда открыто окно этой компоненты, работает RWidjets и вылетает на методе MenuHook из-за того, что метод ::GetMainFrame() возвращает NULL и дальше идет обращение к этому NULL, что ведет к исключению.

    Но, я все-таки нашел временный выход 🙂

    Нужно в MenuHook сделать небольшую вставку

    LRESULT CALLBACK MenuHook(int code, WPARAM wp, LPARAM lp)

    {

    // artur

    if (!GetMainFrame())

    return ::CallNextHookEx(hMenuHook, code, wp, lp);

    // end

    и быстрый поиск начинает работать, т.е. RWidjets перестает конфликтовать с svcsvc.dll

    Роберт, сможешь поправить свою ВК ?

    ЗЫ или выложи, плиз, исходники

    ЗЫ Роберт, а можно получить последние исходники ВК?

    хотел поотлаживать версию 1.33, но в ней некоторых методов, внесенных позже, нету

    Reply
  43. Robert

    v.1.3.5

    Просьба потестировать, кому интересно.

    Новые возможности нашли отражение в тестовой обработке.

    Reply
  44. lustin

    еще вопрос:

    «Будут ли обрабатываться события глобального модуля в классе Перехватчик ( artbear )? «

    Reply
  45. artbear

    Да, события RWidjets без проблем перехватываются Перехватчиком.

    Я специально проверял.

    Reply
  46. andrewalexk

    🙂

    а у меня глюк

    если при открытии отключаю 4 системных меню

    то при закрытии ПОСЛЕ выхода из программы пишет ошибку:



    Подпись ошибки

    AppName: 1cv7s.exe AppVer: 7.70.0.25 ModName: unknown

    ModVer: 0.0.0.0 Offset: 1000a800



    з.ы.

    даже если при закрытии обнулять объект «Меню»..

    з.з.ы

    1c v7.7, r.25, sql

    Reply
  47. Valet

    Вопрос не совсем связанный с компонентой, но навеян именно ею.

    Как добавить полный журнал, если он не определен в конфигурации.

    Точнее как программно открыть полный журнал документов.

    Пардон если оффтоп.

    PS. А компонента супер.

    Reply
  48. AnyBody

    RWidjets v.1.3.5 на втором уровне вложенного меню, при показе меню обрезается по ширмне. То же эффект и в демонстрационной обработке из всей длины названия справочника показывется 4 буквы. Что делать?

    Reply
  49. AnyBody

    ОШИБКА: RWidjets v.1.3.5 «дурит ширина» при отображении.

    Способ воспроизведения: В гл.модуле в процедуре ПриНачалеРаботыСистемы» сначала пишем

    ОткрытьФорму(«Отчет»,,КаталогИБ()+»ExtFormsTest.ert»);// любая внешняя обработка

    затем

    ЗагрузитьВнешнююКомпоненту(«RWidjets.dll»);

    глЯЯМеню=СоздатьОбъект(«Меню»);

    и тд.

    Все меню начинем «дурить».

    Если сначала «строим меню», а потом ОткрытьФорму …, то все работает.

    Reply
  50. Chieftain

    ОШИБКА: RWidjets v.1.3.5 «дурит ширина» при отображении.

    Может это то же самое, что и у меня было?

    У меня пункты меню в v.1.3.2 почему-то обрезаются по ширине.

    Если используете 1С++, то сначала загружайте 1cpp.dll, потом RWidjets.dll

    1С++ блокирует обработку некоторых событий. Скорей всего дело в этом.

    Reply
  51. vladnet

    Компонента отличная! Но нашел 2 глюка.

    Команда ЗагрузитьИнтерфейс на моей конфе завешивает 1с ку, пробовал по разному, формировал меню заново с помощью мастера 1с. Код следующий:

    лМеню=СоздатьОбъект(«Меню»);

    лМеню.ЗагрузитьИнтерфейс(«Администратор»);

    Так же не работает RMsgWindow, при выводе сообщения мелькает экран и компонента сразу закрывается.

    Reply
  52. adept2007

    Компонента очень нужная.

    Но у меня почему-то не работает метод УдалитьВсе()

    1С 25 версия

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

    А добавление в меню команды Пользователи работает. Прикольно! 🙂

    Автору респект

    Reply
  53. Abadonna

    Заюзал — классно.

    Reply
  54. lero@riz

    Я же делаю связь роль-интерфейс. Каждый пользователь в один момент может выполнять несколько ролей. Интерфейсы нескольких ролей совмещаются. Получается связь один ко многим.

    А подробнее можно? Лучше, пожалуй, по мылу Vasily_Cherkassy@mail.ru (так наверное будет оперативнее). Меня это очень заитерисовало вот в каком плане: было два юзера (разные интерфейсы и разные наборы прав). Одного сократили, а второго подгрузили его обязанностями. Два раза входить юзеру в 1С напряг, а мне напряг выискивать блох, т.е. чем наборы и интерфейсы отличаются и объединять всю эту муру. Мне показалось, что твой подход сможет помочь мне.

    хм зачем на мыло?!!! лучше всем рассказать

    зы мне тоже интересно

    Reply
  55. andrey995

    Спасибо за компоненту !

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

    Reply
  56. Robert

    Есть такие планы. Вернусь из отпуска, продолжу работу над компонентой.

    Reply
  57. AklexK

    Классная библиотека

    Свой набор бы картинок для toolbar подключать!

    Reply
  58. Robert

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

    Reply
  59. AklexK

    ОК попробую. Спасибо

    Еще есть оно, при наведении на кнопку тоолбара хотелось бы tooltiptext, т.е. всплывающую подсказку

    Reply
  60. quick

    Может избавлюсь наконец таки от кучи интерфейсов.

    Reply
  61. mikukrnet

    А в обычное подменю можно вставлять свои элементы, или только в системные?

    Reply
  62. dimm73

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

    http://www.1cpp.ru/forum/YaBB.pl?num=1207652965/0#10

    если можно пример применительно к моему случаю

    Reply
  63. dimm73

    пробовал

    ПриПолученииКоманды()

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

    Что интересно, если открыть меню на элементе справочника в в списке правой клавишей, (там теже пункты меню что и в шапке формы списка ) то перехват работает. Значит просто недоделано.

    Reply
  64. cabat

    Автору респект! Полностью перешел на использование динамических меню + панели инструментов!

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

    Reply
  65. pvv1979

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

    Reply
  66. pvv1979

    Вопрос снимается как глупый. Перечитывал еще раз помощь. Как говорится, много думал. До этого не обращал внимания что метод Показать() для тулбара опциональный. Так что,эта хотелка вполне решаема. Еще раз автору огромное спасибо.

    Reply
  67. aou1c

    Не перехватывает нажатия пиктограмм не в главном окне, например в журнале

    из конт. меню перехватывает, а пиктограммы вверху окна — нет

    Reply
  68. dnp

    Хочу добавить пунктов в Меню-Отчеты (он не динамический и не системный…), это возможно?

    Reply
  69. IsiKosta

    Процедура ПриПолученииКоманды(пКоманда, пЗаблокироватьКоманду)

    Открыта форма журнала документов.

    Если кнопками управлять (например нажать Del), событие отлавливается.

    Если мышкой нажать на кнопку панели инструментов окна для удаления, не отлавливается!

    Спасибо, нужная вещь. Ждем новую версию 🙂

    Reply
  70. buzzzard

    Глюк с шириной пункта меню так и присутствует.

    Возможно ли от него как-то избавится?

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

    Но как-то это не комильфо…..

    Reply
  71. MrDen

    Беспорно автору +

    Reply
  72. MrDen

    Опробовал замечательно, грузить можно и в обработках, но если идет обработка с загрузкой ВК запускается первой то как следствие первого запуска обработки, причем любой, переключение фокуса главного окна и кривое отображение меню по ширине и событий нет но результат зарузки соответственно 1 лечится только после выгрузки dll решено 2 мя способами 1 стартануть любую другую обработку и после запустить эту или 2 не паримся загружаем и создаем объекты после загрузки FormEx в процедуре ПослеОткрытия()

    2 момент на тулбаре отчетливо видна черта над кнопками знакомый прикол MFC порядок расположения кнопок не по центру окно класса ToolbarWindow32 убирается сдвигом на вышесказанного окна 1 пиксел вверх, но при отцеплении от родителького окна тут же появляется

    Прицепил отцепленный тулбар с измененными стилями окна на форму с включенным режимом сохранения настройки получается прикольно но тулбар onTop в комплекте с формексом можно добиться результата например вычитывания картинки области скрытие тулбара наложения при деактивации окна но мне кажется не всем такие методы понравятся 😉 хотя прикольно

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

    1с 7.7.0.27

    Reply
  73. buzzzard

    Видимо лечится, но не всегда. Я так и не победил.

    Reply
  74. simply1

    Устанавливаю картинку пункту меню из набора иконок. Вместо иконки — черный квадрат. Так должно быть? ❓

    Reply
  75. zorg65

    Спасибо!

    Reply
  76. Cy6er

    Идея весьма хороша. Жаль, что без исходников.

    Reply
  77. varelchik

    Взываю к автору компоненты!

    Роберт а нельзя ли вернуть назад в ПриПолученииКоманды() перехват нажатия кнопок на Панели Инструментов Форм Списков Справочников Журнало и Документов.

    Reply
  78. zsi_uk

    Присоединяюсь к мольбе, верните перехват нажатия кнопок на Панели Инструментов Форм Списков Справочников Журналов и Документов. Без этого мало смысла в компоненте.

    Reply
  79. navi

    А можно ли убрать полноостью все менюшки? нужно для терминала сбора данных, у него слишком маленькое окно (240*320) поэтому любая понедь крадет место

    Reply
  80. sournk

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

    Reply
  81. Ёпрст

    (83) можно, но только в старых версиях вк.

    Reply
  82. sournk

    (84) Где можно скачать такую версию и описание не подскажешь?

    Reply
  83. mashinist

    в системное меню типа Файл можно добавить пункты

    А вот в обычное (которое в конфигураторе) не получается

    мнСправочник = мнМеню.Получить(«Справочники»);

    {D:МЕНЮ ТЕСТ.ERT(45)}: Нет элемента меню с идентификатором Справочники на этом уровне меню.

    Или я что-то не так понимаю?

    Reply
  84. cargobird

    Добрый день! Подскажите пожалуйста, для 8.2 есть что-то подобное, очень надо заменить реакцию на кнопку «Временная блокировка»…

    Reply
  85. baydal

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

    Reply
  86. VRP

    Автору респект. Жаль что проект «задвинули».

    Нашел пренепреятнейшую вещь.

    ЭлементМеню->УстановитьКартинку Параметр пКартинка — Тип: Число или Стандартный для 1С объект Картинка;

    Так вот, Стандартный для 1С объект Картинка при чтении файлов коверкает картинки (режет палитру и прочая фигня). И по факту загрузить красивую 32-битную иконку или картинку не получиться. А в самой 1С все картинку 16 бит.

    Полазил по исходникам RMenuItem.cpp на github и увидел проверку на AGREGATE_TYPE_1C

    А можно как-то добавить проверку хотябы на IPicture? или WIA ImageFile?

    тогда можно было бы не стандартной Картинкой загружать? а то инструмент классный есть но толку — 0.

    И сорри, но самому подправить и скомпилить не судьба. delphi мое все.

    Reply
  87. DasIsFantastich

    Добавление кнопок к стандартным панелям инструментов не реализовано?

    Reply

Leave a Comment

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