Баги 1С 7.7 - добро или зло: непосредственный ввод "а ля 1С 8.х" без использования ВК

25.06.12

Разработка - Инструментарий разработчика

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

Скачать файлы

Наименование Файл Версия Размер
1C 7.7 Ввод в поле "а ля 1С 8"
.zip 25,86Kb
36
.zip 25,86Kb 36 Скачать

В основе возможности реализовать непосредственный ввод «сложных» значений по введенному тексту (а ля 1С 8.х) в форме 1С 7.7 лежит баг, при котором, если в уже открытой форме выполнить метод «Форма.ТолькоПросмотр(0)», то все поля ввода (исключением являются поля ввода таблицы)  становятся доступными для ввода произвольного текста.

К сожалению, 1С 7.7 не «позволяет» получить введенный текст, поэтому нам придется обратиться к некоторым хитростям.

Вооружившись славной dll «dynwrap.dll» (предварительно зарегистрировав ее «regsrv32 dynwrap.dll»), мы проделаем следующее:

  1. Определим «формулу» в элементе диалога «ВыбратьПоТексту()»
  2. В процедуре ВыбратьПоТексту()
    1. Получим хэндл активного окна
    2. Прочтем текст из него
    3. Обработаем текст

Собственно, это - краткие теоретические выкладки.

А вот и сам код:

//НАЧАЛО КОДА

Перем РежимРедактированияВключен;

Процедура ВыбратьПоТексту()

                scrptCtrl=createobject("MSScriptControl.ScriptControl");

                scrptCtrl.language="vbscript";

                scrptCtrl.addcode("

                |Function GetText()  

                |Text                                    = Space(128)

    |Set Wrapper               = CreateObject(""DynamicWrapper"")

                |Wrapper.Register ""USER32.DLL"", ""SendMessage"",              ""I=lllr"", ""f=s"", ""r=l""

                |Wrapper.Register ""USER32.DLL"", ""GetFocus"",        ""f=s"",                ""r=l""

                |ActiveControl                 = Wrapper.GetFocus 'элемент окна с фокусом ввода                  

                |tcnt                                     = Wrapper.SendMessage (ActiveControl, &HD ,128, Text) 'WM_GETTEXT

                |GetText                            = Text

                |End Function");

                Текст                    = scrptCtrl.run("GetText");

    

                //простой пример обработки полученного текста

                Сотрудники      = СоздатьОбъект("Справочник.Сотрудники"); 

                Сотрудники.НайтиПоНаименованию(Текст,0,0);

                Сотр                     = Сотрудники.ТекущийЭлемент();

КонецПроцедуры                       

 

Функция ВключитьРежимРедактированияПолей()

                Если РежимРедактированияВключен = 0 Тогда

                               Форма.ТолькоПросмотр(0);

                               РежимРедактированияВключен = 1;

                КонецЕсли;

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

РежимРедактированияВключен = 0;

//КОНЕЦ КОДА

пример более качественной обработки результата для 1С++, позволяющий видеть в выпадающем списке возможные варианты значений, если их несколько:

ТЗ = СоздатьОбъект("ТаблицаЗначений");
RS = СоздатьОбъект("ODBCRecordSet");
RS.ВыполнитьИнструкцию("
|select
| Сотрудники.ID [Сотрудник $Справочник.Сотрудники]
|from
| $Справочник.Сотрудники as Сотрудники
|where
| Сотрудники.DESCR like '%"+Текст+"%'",ТЗ);

СписокСотр = СоздатьОбъект("СписокЗначений");

ТЗ.Выгрузить(СписокСотр,,,"Сотрудник");
Если СписокСотр.РазмерСписка() = 1 Тогда
Сотр = СписокСотр.ПолучитьЗначение(1);
Иначе
зн = 0;
Если СписокСотр.ВыбратьЗначение(зн,,,,2) = 1 Тогда
Сотр = зн;
КонецЕсли;
КонецЕсли;

 

PS: Данный баг и текущий способ ввода были мною проработаны около 4-х лет назад. Я определил процеуру в глобальном модуле и в ней, используя 1С++ как источник данных, формировал выпадающий список с возможными вариантами значений по like. 


См. также

Консоль запросов

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    21558    54    Gvozdod    8    

14

StartManager 1.4 - Развитие альтернативного стартера

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

23.04.2014    165691    1864    Alexoniq    1596    

496

Tray Informer

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    32877    61    O-Planet    78    

49

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    21197    Reptile    5    

35

v7.7 1CDialogControls: Инструмент в помощь разработчику на 7.7.

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    18029    35    MarSeN    14    

16

[Разработчику] Любая таблица значений в OLAP

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    36103    51    venger    7    

23

Библиотека кода 1С 7.7 (накопленная за 8 лет)

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Весь код на 1С 7.7, собранный для повторного использования за 8 лет работы.

10 стартмани

25.11.2012    34956    248    adhocprog    51    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. MarSeN 984 24.06.12 15:30 Сейчас в теме
Баг 1С 7.7 открывает нам возможность реализовать без использования ВК непостредственный ввод таких значений, как справочники, перечисления, документы по введенному тексту в поле ввода (а ля 1С 8.х)

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

1. pupkinSana 108 25.06.12 12:50 Сейчас в теме
не пойму, какой баг, для чего ертешка...
2. MarSeN 984 25.06.12 14:26 Сейчас в теме
баг в том, что 1С не обрабатывает нормально метод формы "ТолькоПросмотр", если в него передать параметр "0".

ert-шка - это демонстрация данного бага и пример его использования. Советую скачать и посмотреть.
3. w-divin 25.06.12 14:33 Сейчас в теме
сразу насторожило несоответствие заявленного в заголовке:
без использования ВК
и описанного в статье:
Вооружившись славной dll «dynwrap.dll» (предварительно зарегистрировав ее «regsrv32 dynwrap.dll»)
wolfsoft; xzorkiix; +2 Ответить
4. Ёпрст 1063 25.06.12 14:44 Сейчас в теме
Дунаврап и без ВК ?
:))))))))))

можно было и формексом поймать значение.
5. Ёпрст 1063 25.06.12 14:54 Сейчас в теме
6. MarSeN 984 25.06.12 15:22 Сейчас в теме
ну про ВК - я наверное некорректно погорячился.
Имел ввиду под ВК стандартное понимание - ЗагрузитьВнешнююКомпоненту()
7. Ёпрст 1063 25.06.12 15:47 Сейчас в теме
svcsvc можно еще прикрутить, если в поиске список значений большой...и , если размер списка = 1, то сразу значение присваивать.
8. MarSeN 984 25.06.12 19:10 Сейчас в теме
to: Ёпрст

в случае если количество вхождений больше одного можно использовать стандартный список значений с выпадающим списком. Такой пример в самом низу с испольщованием 1C++ для получения данных по входению. Там же реализовано если значение только одно то сразу они и берется без выпадающено списка.

Вообще это просто демонстрация возможности использования данного бага.
Далее использование ограничивается только полетом вашего воображения )
9. Ёпрст 1063 26.06.12 10:01 Сейчас в теме
(8) это понятно, просто штатный выпадающий список не всегда удобен, ди и ..попривык я к списку с фильтрацией от
svcsvc
10. Ёпрст 1063 26.06.12 10:11 Сейчас в теме
Скачал образец на посмотреть.
Замечания:

1.текст на форме с функцией лучше убрать, заместо этого использовать ПослеОткрытия/ПослеСозданияФормы, если есть ВК формекс/1cpp или Форма.ОбработкаОжидания, если её нет..
2.в данный момент нельзя выбрать непосредственно значение в реквизит справочника - "работает формула", которая "забивает" выбранное значение (а в случае со списком - еще и его покажет при выборе) - нужно всего лишь "взвести" флаг в ПриНачалеВыбораЗначения и проверять его /сбрасывать в формуле реквизита...

Это так, чтоб примерчик был более презентабельнее.
11. SergDi 26.06.12 13:14 Сейчас в теме
12. SergDi 26.06.12 13:15 Сейчас в теме
хотя довольно интересно, правда под 7.7 давно не пишу
13. Ёпрст 1063 26.06.12 15:57 Сейчас в теме
По-быстрому накидал мини-класс, воткнул в рабочую конфу.. опробуем на живых пользователях.
Вроде как использование в отчетах даже поудобнее - можно копи-пасте делать в реквизит.
14. Ёпрст 1063 26.06.12 20:27 Сейчас в теме
15. shatt 38 28.06.12 23:01 Сейчас в теме
Жива еще старушечка 77, и кажется скачивают не только для того чтобы посмотреть, но использовать на полях. Каюсь.. тоже в рядах :) Спасибо!
16. пользователь 29.06.12 07:24
Сообщение было скрыто модератором.
...
17. MarSeN 984 29.06.12 23:45 Сейчас в теме
Я рад что моя публикация вызвала такой интерес и уж тем более применяется в реалии.
Сам я плотно 7.7 перестал заниматься более 3-х лет назад, но память о прошлом дает о себе знать...
Сейчас занимаюсь 8.2. На подходе новая публикация, посвященная работе с актив икс на тонкой форме 8.2 с передачей событий в форму (на примере экселевского листа)
Спасибо за отзывы и плюсы.
18. yuraos 991 31.01.13 09:39 Сейчас в теме
гм...без внешних компонент говоришь?
ну тогды нужно убрать весь код из статьи,
использующий объекты 1cpp.dll и formex.dll и прочих dll.
:)
но все равно плюс автору, за креативность
19. yuraos 991 31.01.13 09:48 Сейчас в теме
(18)
PS
с моей точки зрения,
те кто используют объекты Windows Script Host
и говорят, что "без внешних компонент" - малость лукавят.
:)
есть тут одна большая внешняя компонента mswindows.dll
(хоть конешно и есть разница с ВК - ее грузить в 1С не надо)
20. onikts 05.01.15 10:54 Сейчас в теме
Круто, мне понравилось!
Оставьте свое сообщение