Недавно один товарищ обратился за помощью при приеме на работу. Ему дали тестовое задание следующего содержания:
На рисунке приведены все события управляемой формы. Среди них нет события «ПередОткрытием». Вопросы:
1. (Простой) Как, для данной формы, эмулировать событие «ПередОткрытием», если данная конфигурация находится на поддержке и изменения не разрешены?
2. (Средний) Как транслировать вовне созданное событие «ПередОткрытием»? То есть, как сообщить какому-либо исполняющемуся в данный момент процессу о том, что предполагается открытие данной формы?
3. (Сложный) Как сделать так, чтобы внешний, по отношению к процессу 1С, процесс получил сообщение о готовящемся событии и принял некоторые меры для того, чтобы воспрепятствовать этому?
Меня зацепило. Потратил всё воскресенье на поиски, но ничего интересного не обнаружил. Помимо вознаграждения местными деньгами, готов предложить реальное вознагражение.
Сидел и задумался)))
Если в этой конфе ничё делать нельзя - тогда, тогда наверное только, по Олешке)
Ещё вот это
УправляемаяФорма (ManagedForm)
ВнешнееСобытие (ExternalEvent)
Синтаксис:
ВнешнееСобытие(<Источник>, <Событие>, <Данные>)
Параметры:
<Источник>
Тип: Строка.
Источник внешнего события.
<Событие>
Тип: Строка.
Наименование события.
<Данные>
Тип: Строка.
Данные для события.
Описание:
Обработка события от внешней компоненты. Примечание:
Обработка следующего события возможна только после завершения обработки текущего события.
Вы не путайте режим поддержки и режим запрета изменений.
Если вы в типовую конфигурацию, на поддержке, добавляете свои модули или объекты, то в конфигурации включается разрешение изменения конфигурации, но с поддержки конфигурация и её объекты не снимаются...
И даже более того, я обычно включаю разрешение изменения конфигурации, а для всех объектов конфигурации стараюсь сохранить режим запрета изменений.
При таком подходе вы можете смело наращивать функционал конфигурации, менять логику алгоритмов и не иметь особых проблем с "обновляемостью" конфигурации. Главное, после обновлений не забывать прогонять тесты по измененным алгоритмам/ объектам.
П.С.: Для конфигурации с включенным режимом запрета редактирования, штатными средствами, данные задачи не решаются.
13.
jobkostya1c_ERP
10028.01.15 22:03 Сейчас в теме
(1) kuza_87, допусловие конфигурацию изменять НЕЛЬЗЯ!
Это из серии гм. ввести в ступор квалифицированного программиста 1С.
Тоже самое как заставить все ядра процессора работать с 1С 8? И после никак (не кучей фоновых) про какое-то стороннее ПО и жаль ты его не знаешь.
А по этому вопросу?! Внешние языки, шаманство с виндой, события Оповестить?
(1) kuza_87, средствами 1С это не решается, средствами WinAPI пожалста, как верно было подмечено в (15) kostyaomsk нужно сделать hook на событие открытия, но скорее всего нужно будет написать небольшую dll которая будет инжектится в рабочий процесс 1С в процедуру создания формы, там уже делай что хочешь ) тут 2 существенные проблемы:
1. легальный способ инжекта надо будет поискать, ибо антивирусным обеспечением подобные вещи распознаются как изменение памяти стороннего процесса или находят вирусную сигнатуру в вашей dll
2. для того чтобы написать такую dll вам придется выудить хоть небольшое описание функции в которую надо будет инжектить.. то есть наименование функции, типы данных используемые в параметрах и сами параметры
Если кто знает как сделать это все средствами 1С, то будет очень интересно )
ПС: kuza_87, а ваш этот знакомый 1с-ником ходил устраиваться ?)
ПС2: можно конечно и без инжекта, просто мониторить дочерние окна у главного окна 1С предприятия, но опять же это не будет ПередОткрытием, а уже после )
ПС3: возможно этот вопрос на "посмотреть что человек интересуется новыми трэндами в 1С" вот например
http://v8.1c.ru/o7/201410ext/index.htm с помощью расширений такое сделать можно легко и средствами 1С
(17) AllexSoft,
По поводу ПС3 - это планируется в версии 8.3.6 (дата выхода 26.02.2015 возможно).
Жаль, что сам автор поста молчит.
Есть еще вот такой метод для форм:
УстановитьДействие(<ИмяСобытия>, <Действие>) доступен на сервере, Устанавливает обработчик события
Но это тоже вряд ли поможет - каждый клиент создает свой экземпляр формы на сервере.
(1) kuza_87, Вопросы интересные...
Парень то устроился?
Если да, то, наверно, ему опять придется работу искать. Жаль пацана.
Собственно, к делу.
Если нельзя идти простым путем, значит конторка имеет явные проблемы с архитектурой всех решений.
На все эти вопросы есть простые ответы (иначе бы их не стали предлагать в рамках короткой беседы).
1. (Простой) Как, для данной формы, эмулировать событие «ПередОткрытием», если данная конфигурация находится на поддержке и изменения не разрешены?
[Перехват открытия окна в OS. На дельфи. И шлем внешнее событие. Тока нафиг все, ведь форма на поддержке?]
2. (Средний) Как транслировать вовне созданное событие «ПередОткрытием»? То есть, как сообщить какому-либо исполняющемуся в данный момент процессу о том, что предполагается открытие данной формы?
[Перехват открытия окна в OS. На дельфи.]
3. (Сложный) Как сделать так, чтобы внешний, по отношению к процессу 1С, процесс получил сообщение о готовящемся событии и принял некоторые меры для того, чтобы воспрепятствовать этому?
[Перехват открытия окна в OS. На дельфи.]
Вопросы по своему содержанию смахивают на вопросы больного сбшника.
если данная конфигурация находится на поддержке и изменения не разрешены?
Насколько я представляю:
1) Находится на поддержке НЕ ЗНАЧИТ что её нельзя редактировать...
2) Если объекты поставщика "НЕ РЕДАКТИРУЮТСЯ", но при этом никто не запрещает создавать свои общие модули и подписки на события...
(35) AnryMc, мм.. по моему все восприняли запрет изменений, как запрет в том числя и снятия с поддержки для разрешения изменений.
Что-то я не пойму, как не сняв/поставив поддержку получится своих модулей напихать?
Вот кусочек понятого ТЗ:
- Конфа на поддержке, пусть так и будет мы не хотим видеть окно сравнения конфигураций при обновлении.
Другой вопрос, что при ответе можно это предложить, а так-же предложить альтернативный вариант с прослушкой API фуннкциями. Два предложения, две цены. Две цены - обе твои, удобно продавить клиента в любом случае на твою цену.
(36) fzt,
Разрешение изменений не означает снятие с поддержки. Для каждого объекта поставщика остается запрет редактирования, но можно добавлять новое...
В окне сравнения есть фильтры, например по подсистемам, сделайте свои "доработки" новой подсистемой и всё.
ЗЫ в посте (1) kuza_87, не указано кем устраивался претендент, но я предполагаю что что-то по 1С и соответственно он не обязан знать другие языки программирования. Значит ответ должен быть дан в области ТОЛЬКО 1С.
предполагаю что что-то по 1С и соответственно он не обязан знать другие языки программирования. Значит ответ должен быть дан в области ТОЛЬКО 1С.
тоже было дело топ-менеджер, которого сманили из другой крупной фармацевтической компании, где склад очень круто автоматизирован насмотрелся на решения их ИТ-отдела (где полный зоопарк включая интеграцию 1С-решений с зарубежным специализированным ПО) и задал другой вопрос "а Вы другие языки программирования знаете?". А дальше еще интереснее там парсинг интернет-сайтов конкурентов и прочего: по его словам это же так просто и в том же духе.
По наболевшему )) Когда заказчик, не имеющий навыков в конфигурировании 1С начинает спорить: "Да что там делать 4 часа! Скопировал вон тот документ табличку добавил и все. Я в 7.7 сам когда нужно было в печатных формах что-то добавлял. Здесь тоже должно быть ничего сложного. Там делов на 1 час максимум" ))
Всегда возникает желание ответить: "Ну так сделай сам за 1 час" ))
Это как если бы пациент хирургу: "Так чего там удалять... разрезал, вырезал, зашил. чего сложного?"
как можно эмулировать то, чего нет.
"Ведь его ж на свете нету, сколько землю не копыть (С)".
Тем более на поддержке.
Хотя, наверное те, кто это сочинял, какой то ответ подразумевают, и что-то конкретное имеют ввиду. А может и вообще вопрос провокационный, типа на
сообразительность.
По мне, так в задницу таких работодателей с такими вопросами. Я вообще многие методы и функции даже и не запоминаю, зачем засорять мозг. Хоть и делал уже всякого, наверное немало. Есть СП, есть отладчик, общее понимание работы системы и логика. А все эти заумные вопросы, только отталкивают, а не уровень показывают.
Чож все так бояться перевести конфу в "Редактируется с сохранением поддержки"? Нужно сделать что то крайне необычное и нетривиальное, но конфа пусть остается девственной, мы же не можем тратить по 10 минут в месяц на обновления.
Собственно по вопросам у меня куча вопросов:
Зачем эмулировать ПередОткрытием? Чем не нравятся другие события: ПриЧтении, ПриСоздании, ПриОтрытии? Почему так критично сделать все без изменений конфы? В новых типовых сейчас даже спец. модуль есть для безболезненных доработок: МодификацияКонфигурацииПереопределяемый
Что за процесс, который должен воспрепятствовать открытию какой то типовой формы? Не дешевле ли будет перенести логику проверки на конфу? Это может быть и надежнее и проще в разработке. Есть подозрение, что таким образом хотят сделать ограничение прав на просмотр, а для этого лучше все же использовать механизм ролей и РЛС. А может правильнее использовать внешние источники данных?
Сама затея взаимодействия с внешними процессами интересна, но в реальной разработке следует отбросить желание не изменять конфу.
давайте по пунктам
1. конфигурацию менять нельзя
2. нужно отловить событие в 1С... причем, вспоминаем п.1
3. ответ (трудный) - а какой стороной тут 1С, исходя из п.1 и п.2?
Правильно заданный вопрос - 99.9% правильного ответа
писать "перехват" работы 1С на уровне Windows и будет вам счастье
намёк - солюшен7 под семерку
15.
jobkostya1c_ERP
10029.01.15 12:02 Сейчас в теме
(14) Frogger1971, если товарищ знает как помимо 1С еще и перехваты событий делать в винде и прочие межпрограммные трюки то такие по собеседованиям не ходят. Их как хакеров отлавливают :)
то такие по собеседованиям не ходят. Их как хакеров отлавливают :)
Эпизодически хожу по собеседованиям. Не ради устройства на работу. Вроде бесплатного тестирования меня. Нередко дают решить экзаминационный тест 1С. Вообще я так клиентов ищу, если попадается контора без собственного отдела 1С, или они решили что-то внедрить. На самом деле таким специалист нужен временно, договариваемся.
Зачастую достаточно фразы -"ххх за проект, а лицом торговать каждодневно в офисе, можете специалиста попроще найти".
Более того коллегии. Если предлагается вакансия с завышенным содержанием денежным - нередко вас наберут на проект, в параллель к существующему персоналу, а потом сократят. Нужно такие моменты унюхивать.
(38) kostyaomsk, это всегда положительный опыт. Из первых рук удается узнать, что нужно клиенту и как они себе это представляют.
(40) Разумеется не падают. Видимо ты просто не сталкивался с организациями, которые запланировали взять дополнительно 1Сников на время. По принципу -"внедрим, а потом уволим". Вот с такими вполне можно договорится.
Видимо ты просто не сталкивался с организациями, которые запланировали взять дополнительно 1Сников на время.
Я сталкивался с такими организациями, только, почему-то, ни одна не "призналась", что планируют "взять на время". Все в один голос - что "полно работы" (это прям как у вас), и только штатник, на долгие годы.
А на самом деле - небольшой проектик и дальше сплошной туман в стратегии развития/сопровождения базы 1С.
Я сталкивался с такими организациями, только, почему-то, ни одна не "призналась", что планируют "взять на время".
Да, есть такое. Как понапишут в объявлениях: супер компания с супер коллективом ищет в штат специалиста... и обещает супер соц. пакет, и з/п большая и вся прям белая-пребелая... а начинаешь общаться и выясняется, что "их программисту" в отпуск надо...
Или вот, моя любимая цитата из объявления: График работы: свободный график, можно удаленно, пн-пт с 9:00 до 18:00 без опозданий! ...
(50) AlexO, там где хотел, не смог договориться на сегодняшний день с 3 организациями. Разумеется есть такие, которых я (ну или они меня) отфильтровываю на этапе телефонного звонка, или почты, или "пробития" по сарафану. Отфильтровываю примерно 19 из 20.
Может резюме не цепляет? Отмахиваюсь от найма франчей, когда размещаю. Не писать же "франчайзи тут рыбы нет".
Вид непредставительский? Манера ведения беседы? Мне с людьми договориться почти всегда легко.
География? В Красноярске, например, невероятно распространено кумовство. По словам строителей IT-аутсорсинга в этом городе.
Собственно (51) h00k,
а начинаешь общаться и выясняется, что "их программисту" в отпуск надо...
Вот и понятно, о чем говорить. Осталось начать говорить с тем, кто принимает решения по денежным потокам. Обычно это генеральный. С кадровиком это обсуждать бесперспективно, он этих решений не принимает. Нужно сформулировать ему предложение, когда он не будет казаться идиотом перед своим генеральным, чтобы он его донес. Не всегда это получается. Нужна связь напрямую с генеральным.
Генеральный его просил "1С-ника" найти в штат, на время. Т.е. по факту - кинуть, что для бизнеса норма. 1С-ник что-то не находится, или нашелся но "нихрена неработает этот хитрый план". Тогда и нужно появится, всем в белом, с планом захвата Парижа и разумеется наличием подобного опыта.
Ну и ценник имеет значение. У кого какой множитель? Уверены, что не жадничаете? Забирал клиентов на 1.4М, после озвучивания им 2М от топовых франчей (после таких цен и появляются идеи 1Сников в штат поиметь).
В частном случае отпуска, нужен вообще созвон с "отпускным" и договоренность о "менеджерском бонусе", пока он в отпуске. Но чаще всего окажется, что вы знакомы через 2-3 "руки" и все будут довольны тем, что работа будет выполнена как следует. 1Сников по РФ всего-то тысяч 300.
Соглашусь с остальными участниками: либо постановка вопросов "провокационная" и на сообразительность, либо это в принципе неграмотно поставленные вопросы, на которые ответить не представляется возможным.
Но всё-таки попробую.
Начнем с того, что у управляемой формы ВООБЩЕ нет такого предопределенного события ПередОткрытием.
Есть событие ПриОткрытии(Отказ), которое как раз:
Описание: Возникает на клиенте при открытии формы, до показа окна пользователю. Далее, в вопросе не было ничего по поводу того, что нужно перехватить событие. Не меняя конфигурации 1С, этого сделать невозможно.
А эмулировать. Хм...
Может автор вопроса имел ввиду это?:
Создаем внешнюю обработку или отчет, в котором будет код открытия формы списка справочника контрагентов (с картинки)
ФормаСписка = Справочники.Контрагенты.ПолучитьФормуСписка();
Попытка
ФормаСписка.Открыть(); // собственно эмулируется событие ПриОткрытии
Исключение
КонецПопытки
По пунктам 2 и 3 я не силен.
Но. По написанному выше:
УправляемаяФорма (ManagedForm)
ВнешнееСобытие (ExternalEvent) Это событие отрабатывается уже в открытой форме.
Можно для пунктов 2 и 3 проверить, открыта ли форма, и что-то передать внешнему процессу.
Например так:
Если ФормаСписка.Открыта() Тогда
ПодключитьВнешнююКомпоненту(<Местоположение>, <Имя>, <Тип>);
// что-то делаем
// и можем закрыть форму, если необходимо
ФормаСписка.Закрыть();
КонецЕсли;
Вот как-то так.
Еще раз повторюсь. Отловить само событие открытия формы списка справочника, не меняя для этого саму конфигурацию 1С, НЕВОЗМОЖНО.
Это событие возникает на клиенте. На сервере возникает событие ПриСозданииНаСервере, которое кстати тоже возникает ДО открытия самой формы.
Хотя в условиях задачи нет задания отловить само событие.
Успехов.
Коллеги, а может, влезть в процесс чтения данных управляемой формой можно как-то через дополнительный командный интерфейс? В современных конфах на УФ, дополнительные отчёты и обработки могут добавлять произвольные команды в открываемую форму. Отрисовка соответствующих кнопок происходит как раз на этапе открытия. Следовательно, "завалить" открытие формы - уже можно. Например, записать какую-нибудь хрень в ТЧ элемента справочника "Внешние обработки", в обход стандартной формы справочника. Хотя это и не внешний процесс, как требовалось по условиям задачи.
Но у дополнительных обработок есть ещё ТЧ "разрешения"... вот в какой момент они рассчитываются? Можно ли в расчёт разрешений внедрить свой код?
(18) uncle_Vasya, нельзя. создание дополнительных кнопок\меню в панели происходит простой выборкой из справочника доп обработок (общих модулях БСП в подсистеме внешних доп обработок и отчетов) .. сами обработки при открытии не выполняются.. они вызываются только при нажатии кнопки или меню которые "привязаны" на их вызов
А вообще интересно конечно, почему автор сего опуса (списка вопросов) считает пункт первый простым?
Прямо "пляски с бубном". Только вот бубен нужного цвета никак не находится :)
AutoWin v 1.2.
Небольшой дополнительный функционал по работе с окнами, в виде внешней обработки 1С. Не требует регистрации никаких dll.
Доступные функции:
WinActivate(Заголовок);
WinClose(Заголовок);
WinExists(Заголовок);
WinFlash(Заголовок,КолВо);
WinGetProcess(Заголовок);
WinKill(Заголовок);
WinMinimizeAll();
WinSetState(Заголовок,РежимОтображения);
WinSetTitle(Заголовок,НовыйЗаголовок);
WinSetTrans(Заголовок,Прозрачность);
Sleep(ВремяВМилисекундах,Режим);
ОбработкаПрерыванияЦикла().
Описание процедур/функций находится в модуле обработки. Примеры использования прилагаются.
26.
jobkostya1c_ERP
10004.02.15 16:53 Сейчас в теме
(24) kuza_87, разговор вот про что шел из п. темы (1) как можно реализовать вот это:
На рисунке приведены все события управляемой формы. Среди них нет события «ПередОткрытием». Вопросы:
1. (Простой) Как, для данной формы, эмулировать событие «ПередОткрытием», если данная конфигурация находится на поддержке и изменения не разрешены?
2. (Средний) Как транслировать вовне созданное событие «ПередОткрытием»? То есть, как сообщить какому-либо исполняющемуся в данный момент процессу о том, что предполагается открытие данной формы?
3. (Сложный) Как сделать так, чтобы внешний, по отношению к процессу 1С, процесс получил сообщение о готовящемся событии и принял некоторые меры для того, чтобы воспрепятствовать этому?
Писали что средствами других языков (системных) можно ВСЕ. Даже создание объектов метаданных. Задача была из вопроса на собеседовании на должность, наверное, системного интегратора. Или обычного программиста прощупать как абируриента МГУ: если выполнит хоть треть работы то зачисляют на бюджетное.
На такие вопросы только долго искать на специализированных форумах или точно искать кому поручить разработку.
Даже был пример интеграции - покупали компоненту "Hook1C.dll" - ловила фокус ввода в окне для быстрого поиска. Подключалась тремя строчками в 1С 8. Можно было и на стандартный режим по константе переключить. Причем не зря была встроена, раз ее покупали. Откуда, что конкретно делала я не выяснял.
(24) kuza_87,
Подозреваю, что никакой это не товарищ за помощью обратился, раз уж и реальное вознаграждение готов предложить...
Ну да не важно. Хотя и интересно, при приеме на какую работу такие тесты дают...
Для п.1. Есть у управляемых форм еще и вот такой метод:
УправляемаяФорма (ManagedForm)
УстановитьДействие (SetAction)
Синтаксис:
УстановитьДействие(<ИмяСобытия>, <Действие>)
Параметры:
<ИмяСобытия> (обязательный)
Тип: Строка.
Имя события.
<Действие> (обязательный)
Тип: Строка.
Имя процедуры обработчика.
Описание:
Устанавливает обработчик события.
Доступность:
Сервер, мобильное приложение(сервер).
Думаю, что пункт 1 средствами 1С без внесения изменений в конфигурацию всё-таки невозможен.
Метод
УстановитьДействие
из предыдущего поста тоже не поможет.
Это метод управляемой формы и он доступен только на сервере. А все методы
...ПолучитьФорму...
доступны только на клиенте.
И сама управляемая форма не сериализуется. То есть, если я создам её (форму) на клиенте, то передать её на сервер, чтобы задействовать метод "УстановитьДействие", невозможно.
Вообще было 3 теста. Это первый, второй теоретические вопросы по программированию.
1. CLR – что это такое?
2. Чем известен Рихтер? Говорят он писатель? И, кажется, зовут его Джеф?
3. Как соотносятся делегат и событие?
4. Если выстраивать логическую цепочку типа – «яйцо – курица», «пожар – дым», «удар – звук» … То как нужно расположить понятия «объект» и «класс»?
5. Чем отличаются (англ.) «OOD» и «DDD», если речь идет о парадигмах программной инженерии?
И 3 - ий дописать код на C++. Код простенький, почитать C++ и можно дописать.
Написал в ответ, что не вижу связи с 1С и таких требований в описании вакансий не было.
Может это проверка на целеустремленность и широту развития.
Решать не стал, каждый должен заниматься своим делом. Если нужны знания С++ и Net, так и пишите в вакансии.
Вопросы смахивают на проверку сообразительности из оперы "Сколько яиц можно съесть на голодный желудок". Или стандартный пул вопросов, составленный не руководителем отдела програмистов 1С, а кадровой службой.
Потому что за 12 лет работы в 1С с подобными задачами не сталкивался. Точнее были эпизоды, но как уже говорили выше, там были проблемы с архитектурой решения и правильностью использования 1С как инструмента (ИМХО)
Я видел вакансию этого работодателя. Там описаны необходимые навыки именно в области 1С и не более. Умение общаться с Заказчиками, составлять ТЗ, программировать на 8.2/8.3, знание типовых конфиг (УТ, КА, УПП и т.п.). В общем все как обычно.
и ради интереса откликнулся. Получил такие же вопросы. Ответил, что знал. Но большинство не ответил. Указал лишь, что я мол 1С-ник, если вам нужен специалист, владеющий С++ и другими средствами разработки, то это не я.
Получил ответ от них - что тестирование я не прошел ).
Так что у меня до сих пор остался спортивный интерес - зачем такие требования к потенциальному 1С-нику предъявляются? Чем они там занимаются? И почему явно в вакансии не описать необходимые требования
(39) avryanovalexey, Эти деятели предлагают "удаленную работу по 1С". Т.е., вот такая у них "удаленка на 1С".
Это к вопросу "удаленной работы полно", "везде предлагают удаленную работу на 1С", "удаленку легко найти" и про тех, у кого "полно удаленной работы", а ж за ушами трещит.
(38) kostyaomsk, я ему тоже не верю. Приходит на собеседование на штатника, а потом - ""ххх за проект, а лицом торговать каждодневно в офисе, можете специалиста попроще найти".
И все, работодатели в восторге, падают к его ногам, выкидывают все свои вакансии "только в штат", и, счастливые, начинают его забрасывать удаленными заданиями.
43.
jobkostya1c_ERP
10007.06.15 09:28 Сейчас в теме
(39) avryanovalexey, возможно формируют кадровый резерв, может сама фирма 1С проводит социологические исследования или ищут специалистов готовых переучиться. Главное кто и как тратит время.
Давно как-то ходил на собеседование в один крупный франч: анкета на 5 листов, потом на собеседование к зам. директора с уже готовой конфигурацией придти (вроде мини-библиотеку создать с нуля).
Думаю так: если время на оценку уровня знаний тратит квалифицированный специалист, то какой-то смысл есть, а иначе это минимум кадровые службы сами себе работу придумывают.
Или еще версия. Если денег точно нет, а работы много и условия плохие (госпредприятие, невыполнимый проект, работают одни родственники учредителя...) то если соискатель прошел все этапы "мытарств" значит ему очень нужна работа.
Если кто еще какую версию предложит будем только рады.
самое веселое, если потом после отличных демонстраций таких навыков придется, согласно описанию вакансии, заниматься банальной 1С-вской работой: обновлять типовые базы, дорабатывать печатные формы, консультировать пользователей почему документ не проводится и т.п.
Вообще это конечно же дело работодателя. Если он считает, что его сотрудники должны уметь и то и это. Пусть ищет таких сотрудников. Только увеличивая количество входных фильтров при отборе, можно очень долго искать сотрудников или это будет стоить дороже.