1с установить курсор в поле ввода
Есть проблема с установкой курсора на нужную строку в таблице управляемой формы (ТаблицаФормы - данные находятся в реквизите формы типа ТаблицаЗначений), проблема в том что для изменения некоторых полей(колонок) таблицы в коде прописано :
СтрИсх= ТаблицаФормы.ТекущаяСтрока;
ТаблицаЗначений=ДанныеФормыКоллекция.Выгрузить();
манипуляции с полученной ТаблицейЗначений
ДанныеФормыКоллекция.Загрузить(ТаблицаЗначений);
ТаблицаФормы.ТекущаяСтрока= СтрИсх ;
и курсор естественно перескакивает на 1 запись. (без манипуляций с ТаблицаФормы.ТекущаяСтрока), но к примеру он стоял на 2-й, тогда все не очень хорошо получается . Манипуляции со свойством ТаблицаФормы.ТекущаяСтрока=СтрИсх ни к чему не приводят, в этом случае курсора строки просто нет.
вот фрагмент кода на сервере:
НашаТаблицаЗначений = ГлавнаяТаблицаЗначений [ Элементы . ГлавнаяТаблицаЗначений . ТекущаяСтрока ] . НашаТаблицаЗначений . Выгрузить ( ) ;
СтрокаВсеОрганизации = НашаТаблицаЗначений . Найти ( ПоВсемПредставление ( ) , "Организация" ) ;
Если СтрокаВсеОрганизации < >Неопределено Тогда
Для каждого Колонка Из НашаТаблицаЗначений . Колонки Цикл
Если ТипЗнч ( СтрокаВсеОрганизации [ Колонка . Имя ] ) = Тип ( "Булево" ) и СтрокаВсеОрганизации [ Колонка . Имя ] Тогда
НашаТаблицаЗначений . ЗаполнитьЗначения ( Ложь , Колонка . Имя ) ;
СтрокаВсеОрганизации [ Колонка . Имя ] = Истина ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
поз = Элементы . НашаТаблицаЗначений . ТекущаяСтрока ;
ГлавнаяТаблицаЗначений [ Элементы . ГлавнаяТаблицаЗначений . ТекущаяСтрока ] . НашаТаблицаЗначений . Загрузить ( НашаТаблицаЗначений ) ;
Элементы . НашаТаблицаЗначений . ТекущаяСтрока = поз ;
Дело в том, что таблица, которая в форме, элемент формы, и таблица, которая в реквизите (ДанныеФормыКоллекция) - это разные таблицы. Это две разные коллекции.
Они, конечно, однозначно связаны между собой. То есть зная строку одной таблицы можно получить соответствующую ей строку другой таблицы.
Но эта связь не такая, как вы ее себе представляете:
ТекущаяСтрока у таблицы в форме это не индекс таблицы в реквизите.
Эти две таблицы связаны через Идентификатор.
У таблицы в форме идентификатор можно получить как раз через текущую строку:
У таблицы в реквизите (ДанныеФормыКоллекция) есть метод НайтиПоИдентификатору(Идентификатор), который вернет вам строку, соответствующую текущей строке в таблице формы.
В обратную сторону аналогично. Если вы знаете строку у таблицы в реквизите, вы можете найти (или установить курсор на) строку, соответствующую ей в таблице в форме.
У строки таблицы в реквизите (ДанныеФормыЭлементКоллекции) есть метод ПолучитьИдентификатор():
А у таблицы в форме - известное уже свойство ТекущаяСтрока:
Таким образом перед выполнением манипуляций вам нужно узнать, какая строка в таблице реквизита соответствует текущей строке в таблице формы. Каким-то образом запомнить, что это за строка.
После выполнения манипуляций в таблице реквизита вам нужно найти эту запомненную строку, получить ее идентификатор и таблице в форме сказать, что ее текущая строка должна быть равна этому идентификатору.
Выгрузка из 1С на SFTP 4
Думаю, что все знают, как работает 1с с FTP сервером, но вот как работать с sFTP или FTPs сервером? Первое что Вам нужно сделать - это установить бесплатную программу WinSCP, скачать ее Вы сможете здесь, также там есть вся необходимая литература п Импорт в 1С из текстовых файлов (TXT, CSV) 7
Не редко возникает необходимость загрузить в справочники или документы 1С данные из текстового файла. Приведенный пример внешней обработки позволит преобразовать текстовый файл с известным разделителем данных в поле табличного документа для последующ Использование регулярных выражений (RegExp) в 1С 1
Регулярные выражения (Regular Expressions) являются известным и мощным средством для поиска, тестирования и замены подстрок. Эта технология доступна и в 1С - через объект VBScript.RegExp. Нужный объект уже встроен в современные версии Windows (начин Как поменять период у записей периодического независимого регистра, соответствующих ряду условий? 0
В периодическом независимом регистре сведений ОтветственныеЛицаОрганизации все записи, касающиеся организации с наименованием Групп-трейдинг, период которых меньше 01 января 2005 года, необходимо перенести на 01 января 2004 года. Но записи с указани Копирование данных из одного созданного экселя в другой и открытие excel (с сохранением форматов) 2
Копирование данных из одного созданного экселя в другой и открытие excel (с сохранением шрифта, рамки положения текста) и с созданием закладки на которую как раз копируются данные: // Данный код создает эксель, с одним листом и открывает в нем файл Посмотреть все результаты поиска похожих
Еще в этой же категории
Как в форме списка реализовать сортировку по своему реквизиту? 12
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Сортировка списка по произвольной колонке? 7
В процедуру ПриОткрытии или в конец модуля добавить: ЭлементыФормы.РегистрСведенийСписок.НастройкаПорядка.НомерСоглашения.Доступность=Истина; Где НомерСоглашения - Колонка в списке регистра сведений по которой нужно сортировать! Далее щелкнув Оформление строки в ПриПолученииДанных или ПриВыводеСтроки 7
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Табличное поле ~ Как получить строки табличного поля, отобранные отбором? 4
ОтборСтрок = ТабличнаяЧастьИсточник.ОтборСтрок ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отбор Отбор по списку значений 3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Посмотреть все в категории Список Справочника, Документов, Регистров
Конструктор запроса легко вызывается для строки, содержащей готовый текст запроса. Так работают все консоли запросов. Но задача становится нетривиальной, если у нас есть код не на языке запросов, а на встроенном языке 1С:Предприятия. В нём запрос является лишь частью текста и он представлен не в чистом виде, а в виде строковой константы с переносами строк, двойными кавычками и прочими "неудобствами".
Необходимость задавать исполняемый код в пользовательском режиме появляется не так уж и редко. Для этого создано множество инструментов - универсальные регламентные задания, консоли кода, динамические подписки на события и т.д. С помощью этих инструментов можно создавать код, содержащий запросы, и хорошо бы иметь возможность вызывать для этих запросов конструктор. Более того, во всем известных "Инструментах разработчика" уже есть решение этой задачи для обычных форм с применением библиотеки регулярных выражений (внешней библиотеки, подключаемой как COM-объект).
Мы же рассмотрим решение исключительно средствами 1С, которое вы сможете легко встраивать в свои формы, и которое будет подходить как для обычной, так и для управляемой формы (в толстом клиенте). Следующая иллюстрация показывает, чего мы хотим добиться от нашего алгоритма:
То есть нам необходимо получить возможность работать с запросами в коде аналогичную той, что дает Конфигуратор - открывать существующий запрос, изменять его, и затем возвращать измененный запрос в код на языке 1С с форматированием и сохранением позиции курсора. Эта задача сложна лишь потому, что у поля тестового документа 1С мало методов для работы с текстом и их придется "изобретать" самостоятельно.
Сначала опишем алгоритм на человеческом языке, а затем перейдем к реализации алгоритма на языке платформы.
Нам нужно:
1) Определить позицию курсора в поле текстового документа на форме.
2) Извлечь текст до курсора и после курсора.
3) В тексте, расположенном до курсора, найти открывающую запрос кавычку. В тексте расположенном после курсора найти первую несдвоенную кавычку от начала строки, это будет закрывающая кавычка.
4) Отделить текст запроса, расположенный между открывающей и закрывающей кавычками. А также выделить код, расположенный до начала запроса и после него.
5) Преобразовать код запроса таким образом, чтобы он нормально воспринимался конструктором запроса. Вместо двойных кавычек подставить одинарные, убрать символы вертикальной черты. После чего передать полученный текст в конструктор.
6) После закрытия конструктора сделать обратное преобразование полученного из него кода запроса. Добавить отступы и привести его к виду, который будет нормально воспринят интерпретатором языка 1С.
7) Соединить новый код запроса с текстом, который раньше располагался до и после текста запроса. Загрузить полученный код в поле формы и восстановить позицию курсора.
Теперь перейдем к поэтапной реализации этого алгоритма на языке 1С. Для демонстрации выберем обычную форму. Для управляемой формы код будет отличаться всего несколькими строками, и он также есть в прикрепленном к этой публикации файле. Пусть поле текстового документа на нашей форме имеет имя "Поле".
1) Упростим процесс кодирования введением дополнительных переменных и определим текущую позицию курсора. Позицию курсора запишем в переменные НачалоСтроки и НачалоКолонки. Значение переменной НачалоСтроки в ходе алгорима менять не будем. Оно понадобится в конце для восстановления позиции курсора:
//БЛОК №1 - ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ
ЭлементПоля = ЭлементыФормы . Поле ;
Кавычка = """" ;
ДвойнаяКавычка = """""" ;
ЗаменаДляДвойнойКавычки = Строка (Новый УникальныйИдентификатор );
КоличествоСтрок = ЭлементПоля . КоличествоСтрок ();
НачалоСтроки = 0 ;
НачалоКолонки = 0 ;
КонецСтроки = 0 ;
КонецКолонки = 0 ;
ЭлементПоля . ПолучитьГраницыВыделения ( НачалоСтроки , НачалоКолонки , КонецСтроки , КонецКолонки );
ЭлементПоля . УстановитьГраницыВыделения ( НачалоСтроки , НачалоКолонки , Началостроки , НачалоКолонки );
2) Определим текст, расположенный до курсора и после него. Для этого поле текстового документа дает нам только одну возможность - устанавливать границы выделения и получать выделенный текст. Далее нам придется искать открывающую и закрывающую запрос кавычку. Сильной помехой в этом могут оказаться двойные кавычки. Чтобы избежать лишнего кода по обработке двойных кавычек используем следующий прием. Временно заменим все двойные кавычки на уникальную строку. Обратную замену будем проводить в конце алгоритма, при получении нового кода:
//БЛОК №2 - ОПРЕДЕЛЕНИЕ ТЕКСТА ДО КУРСОРА И ПОСЛЕ КУРСОРА
ЭлементПоля . УстановитьГраницыВыделения ( 1 , 1 , Началостроки , НачалоКолонки );
ТекстДоКурсора = ЭлементПоля . ВыделенныйТекст ;
ЭлементПоля . УстановитьГраницыВыделения ( НачалоСтроки , НачалоКолонки , КоличествоСтрок + 1 , 1 );
ТекстПослеКурсора = ЭлементПоля . ВыделенныйТекст ;
ЭлементПоля . УстановитьГраницыВыделения ( НачалоСтроки , НачалоКолонки , Началостроки , НачалоКолонки );
//гарантируем отсутствие в тексте двойных кавычек
ТекстДоКурсора = СтрЗаменить ( ТекстДоКурсора , ДвойнаяКавычка , ЗаменаДляДвойнойКавычки );
//в тексте после курсора необходимо оставить первую кавычку, если сразу после нее идет двойная
//случай подряд идущих кавычек в количестве более 5-ти штук обрабатывать не будем
ТекстПослеКурсора = СтрЗаменить ( Лев ( ТекстПослеКурсора , 1 ) +
СтрЗаменить ( Сред ( ТекстПослеКурсора , 2 ), ДвойнаяКавычка , ЗаменаДляДвойнойКавычки ), ДвойнаяКавычка , ЗаменаДляДвойнойКавычки ) ;
3) Двигаясь по строке кода, расположенного до курсора, находим открывающую запрос кавычку. Поскольку мы избавились от двойных кавычек, то найти ее несложно. Нужно просто найти кавычку, которая не была закрыта следующей за ней. Правда, нужно учитывать, что кавычки в комментариях надо пропустить, перемещаясь сразу к концу строки, а также то, что курсор сам мог находиться внутри двойной кавычки в строке запроса:
//БЛОК №3 - ИЩЕМ ПОЗИЦИЮ ОТКРВАЮЩЕЙ И ЗАКРЫВАЮЩЕЙ КАВЫЧКИ ДЛЯ СТРОКИ ЗАПРОСА
ПозицияОткрывающейКавычки = 0 ;
ПозицияЗакрывающейКавычки = 0 ;
ВСтроке = Ложь;
КавычкиЕсть = Ложь;
ПозицияПредыдущейКавычки = 0 ;
ПоизцияПоследнейКавычки = 0 ;
Позиция = 1 ;
ДлинаТекстаДоКурсора = СтрДлина ( ТекстДоКурсора );
//ИЩЕМ ОТКРЫВАЮЩУЮ КАВЫЧКУ
Пока Позиция < = ДлинаТекстаДоКурсора Цикл
ТекущийСимвол = Сред ( ТекстДоКурсора , Позиция , 1 );
ПредыдущийСимвол = " " ;
Если Позиция > 1 Тогда
ПредыдущийСимвол = Сред ( ТекстДоКурсора , Позиция - 1 , 1 );
КонецЕсли;
Если ТекущийСимвол = Кавычка Тогда
ВСтроке = НЕ ВСтроке ;
ПозицияПредыдущейКавычки = ПоизцияПоследнейКавычки ;
ПоизцияПоследнейКавычки = Позиция ;
КавычкиЕсть = Истина;
КонецЕсли;
//Обработка комментария - начало
Если НЕ ВСтроке И ПредыдущийСимвол = "/" И ТекущийСимвол = "/" Тогда
//это комментарий, пропускаем символы до конца строки
Пока ТекущийСимвол <> Символы . LF И ТекущийСимвол <> Символы . CR Цикл
Позиция = Позиция + 1 ;
Если Позиция > ДлинаТекстаДоКурсора Тогда
Прервать;
КонецЕсли;
ТекущийСимвол = Сред ( ТекстДоКурсора , Позиция , 1 );
КонецЦикла;
Продолжить;
КонецЕсли;
//Обработка комментария - конец
Позиция = Позиция + 1 ;
КонецЦикла;
//ОСОБЫМ ОБРАЗОМ ОБРАБОТАЕМ СЛУЧАЙ НАХОЖДЕНИЯ КУРСОРА В
//ДВОЙНОЙ КАВЫЧКЕ ВНУТРИ СТРОКИ ЗАПРОСА
Если НЕ ВСтроке И КавычкиЕсть И СтрДлина ( ТекстПослеКурсора ) > 0 Тогда
Если Сред ( ТекстДоКурсора , ДлинаТекстаДоКурсора , 1 ) = Кавычка И Лев ( ТекстПослеКурсора , 1 ) = Кавычка Тогда
ВСтроке = Истина;
ПоизцияПоследнейКавычки = ПозицияПредыдущейКавычки ;
ТекстДоКурсора = Лев ( ТекстДоКурсора , ДлинаТекстаДоКурсора - 1 );
ТекстПослеКурсора = ЗаменаДляДвойнойКавычки + Сред ( ТекстПослеКурсора , 2 );
КонецЕсли;
КонецЕсли;
//ЕСЛИ НАШИЛИ ОТКРЫВАЮЩУЮ КАВЫЧКУ, ТО ИЩЕМ ЗАКРЫВАЮЩУЮ
Если ВСтроке Тогда
ПозицияОткрывающейКавычки = ПоизцияПоследнейКавычки ;
ПозицияЗакрывающейКавычки = Найти ( ТекстПослеКурсора , Кавычка );
КонецЕсли;
4) Теперь можно выделить код между кавычками (запрос) и код расположенный до и после запроса. Чтобы текст запроса был воспринят конструктором его необходимо преобразовать, убрав из начала каждой его строки вертикальную черту:
//БЛОК №4 - ОПРЕДЕЛЯЕМ ТЕКСТ ДО ЗАПРОСА, ТЕКСТ ЗАПРОСА И ТЕКСТ ПОСЛЕ ЗАПРОСА
//ПОСЛЕ ЧЕГО ВОЗРАЩАЕМ ДВОЙНЫЕ КАВЫЧКИ В КОД, НЕ ЯВЛЯЮЩИЙСЯ ЧАСТЬЮ ЗАПРОСА
Конструктор = Новый( "КонструкторЗапроса" );
ГраницыЗапросаНайдены = ПозицияОткрывающейКавычки <> 0 И ПозицияЗакрывающейКавычки <> 0 ;
ТекстДоНачалаЗапроса = Лев ( ТекстДоКурсора , ПозицияОткрывающейКавычки );
ТекстПослеКонцаЗапроса = Сред ( ТекстПослеКурсора , ПозицияЗакрывающейКавычки );
ТекстЗапросаССимвовамиВертикальнойЧерты = Сред ( ТекстДоКурсора , ПозицияОткрывающейКавычки + 1 )
+ Лев ( ТекстПослеКурсора , ПозицияЗакрывающейКавычки - 1 );
//для конструктора запроса вместо двойной кавычки будем подставлять одинарную
ТекстЗапросаССимвовамиВертикальнойЧерты =
СтрЗаменить ( ТекстЗапросаССимвовамиВертикальнойЧерты , ЗаменаДляДвойнойКавычки , Кавычка );
КоличествоСтрокВТексте = СтрЧислоСтрок ( ТекстЗапросаССимвовамиВертикальнойЧерты );
ТекстЗапроса = "" ;
Для К = 1 To КоличествоСтрокВТексте Цикл
СтрокаИзТекстаЗапроса = СокрЛП ( СтрПолучитьСтроку ( ТекстЗапросаССимвовамиВертикальнойЧерты , К ));
Если Лев ( СтрокаИзТекстаЗапроса , 1 ) = "|" Тогда
//для конструктора запроса убираем вертикальную черту в начале строки
СтрокаИзТекстаЗапроса = Сред ( СтрокаИзТекстаЗапроса , 2 );
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + СтрокаИзТекстаЗапроса + Символы . LF ;
КонецЦикла;
Конструктор . Текст = ТекстЗапроса ;
КонецЕсли;
//возвращаем двойные кавычки
ТекстДоНачалаЗапроса = СтрЗаменить ( ТекстДоНачалаЗапроса , ЗаменаДляДвойнойКавычки , ДвойнаяКавычка );
ТекстПослеКонцаЗапроса = СтрЗаменить ( ТекстПослеКонцаЗапроса , ЗаменаДляДвойнойКавычки , ДвойнаяКавычка );
5) Передаем текст запроса в конструктор и, если конструктор отработал успешно, вычисляем отступ, который будем добавлять к строкам запроса. Отступ необходимо добавлять, чтобы код запроса вставился на форму красиво, а не безусловно лепился к левому краю текстового поля:
//БЛОК №5 - ОТКРЫВАЕМ КОНСТРУКТОР ЗАПРОСА С ПОЛУЧЕННОЙ СТРОКОЙ ЗАПРОСА И В СЛУЧАЕ УСПЕШНОГО
//РЕЗУЛЬТАТА ВЫЧИСЛЯЕМ ОТСТУП, КОТОРЫЙ БУДЕМ ДОБАВЛЯТЬ К КАЖДОЙ СТРОКЕ ЗАПРОСА
Если НЕ Конструктор . ОткрытьМодально () Тогда
Возврат;
КонецЕсли;
ТекстЗапроса = Конструктор . Текст ;
Если ПустаяСтрока ( ТекстЗапроса ) Тогда
Возврат;
КонецЕсли;
ДлинаТекстаДоНачалаЗапроса = СтрДлина ( ТекстДоНачалаЗапроса );
Позиция = ДлинаТекстаДоНачалаЗапроса - 1 ;
Пока Позиция >= 1 Цикл
Если Сред ( ТекстДоНачалаЗапроса , Позиция , 1 ) = Символы . LF Тогда
Прервать;
КонецЕсли;
Позиция = Позиция - 1 ;
КонецЦикла;
СтрокаОтступа = Сред ( ТекстДоНачалаЗапроса , Позиция + 1 , ДлинаТекстаДоНачалаЗапроса - Позиция - 1 );
ДлинаСтрокиОтступа = СтрДлина ( СтрокаОтступа );
СтрокаОтступаИзПробеловИТабуляций = "" ;
Для К = 1 To ДлинаСтрокиОтступа Цикл
Если Сред ( СтрокаОтступа , К , 1 ) = Символы . Tab Тогда
СтрокаОтступаИзПробеловИТабуляций = СтрокаОтступаИзПробеловИТабуляций + Символы . Tab ;
Иначе
СтрокаОтступаИзПробеловИТабуляций = СтрокаОтступаИзПробеловИТабуляций + " " ;
КонецЕсли;
КонецЦикла;
6) Теперь у нас есть текст запроса на языке запросов. Нужно преобразовать его в строку на встроенном языке 1С. Добавляем символы вертикальной черты и отступы, преобразуем одинарные кавычки в двойные:
//БЛОК №6 - ОБРАБАТЫВАЕМ РЕЗУЛЬТАТ, ЗАМЕНЯЕМ ОДИНАРНЫЕ КАВЫЧКИ НА ДВОЙНЫЕ,
//ДОБАВЛЯЕМ ОТСТУП И ВЕРТИКАЛЬНУЮ ЧЕРТУ СТРОКАМ ЗАПРОСА НАЧИНАЯ СО ВТОРОЙ
ТекстЗапроса = СтрЗаменить ( ТекстЗапроса , Кавычка , ДвойнаяКавычка );
КоличествоСтрокВТексте = СтрЧислоСтрок ( ТекстЗапроса );
ТекстЗапросаССимвовамиВертикальнойЧерты = СтрПолучитьСтроку ( ТекстЗапроса , 1 );
Для К = 2 To КоличествоСтрокВТексте Цикл
ТекстЗапросаССимвовамиВертикальнойЧерты = ТекстЗапросаССимвовамиВертикальнойЧерты +
Символы . LF + СтрокаОтступаИзПробеловИТабуляций + "|" + СтрПолучитьСтроку ( ТекстЗапроса , К );
КонецЦикла;
7) Задача фактически решена. Склеиваем код, располагавшийся до запроса, новую строку запроса и код, располагавшийся после запроса. Загружаем получившуюся строку в поле формы и восстанавливаем позицию курсора:
//ЗАГРУЖАЕМ НОВЫЙ КОД В ТЕКСТОВОЕ ПОЛЕ И УСТАНАВЛИВАЕМ КУРСОР НА ПРЕЖНЮЮ ПОЗИЦИЮ
ИтоговыйКод = ТекстДоНачалаЗапроса + ТекстЗапросаССимвовамиВертикальнойЧерты + ТекстПослеКонцаЗапроса ;
ЭлементПоля . УстановитьТекст ( ИтоговыйКод );
НоваяКолонка = СтрДлина ( СтрокаОтступаИзПробеловИТабуляций )+ 2 ;
ЭлементПоля . УстановитьГраницыВыделения ( НачалоСтроки , НоваяКолонка , НачалоСтроки , НоваяКолонка );
ЭтаФорма . ТекущийЭлемент = ЭлементПоля ;
Для применения этого метода в своих разработках вам достаточно заменить в коде имя одного элемента формы - поля текстового документа.
К публикации прилагается обработка с реализацией этого алгоритма, в которой есть обычная и управляемая форма. Обработка предназначена для работы в толстом клиенте управляемого или обычного приложения. При работе с управляемой формой есть незначительные отличия в коде. Например, восстанавливать положение курсора приходится через отложенный вызов процедуры, через обработчик ожидания.
Алгоритм был создан с целью применения в новой версии универсальной подсистемы Динамические подписки на события v.3 . Не проходите мимо этой разработки, она может облегчить поддержку ваших баз:
Компонента позволяет выводить процент выполнения обработки данных из 1С,
заменяя стандартный 1С-овский курсор. Загружает обычные курсоры из файлов (*.cur)
и анимированные (*.ani), а так же системные курсоры.
Есть возможность установки курсора на нужное окно (форму) 1С.
ПОДКЛЮЧЕНИЕ КОМПОНЕНТЫ В 1С 8.x:
*** Свойства:
- Процент //число
- ЦветПроцента //объект типа "Цвет"
- ШрифтПроцента //объект типа "Шрифт"
- РазмерПроцента //число
- Мышь //объект типа "Мышь"
*** Методы:
- УстановитьКурсорПоУмолчанию();
- ПолучитьШрифт(Название, Размер, Стиль); //создает объект типа "Шрифт".
//Название - имя шрифта, размер - число, стиль - строка с описанием шрифта, разделенные "|" (bold, italic, strikeout, underline)
- ПолучитьЦвет(r, g, b); //создает объект типа "Цвет".
//r, g, b - числа
- Закрыть(); //очистка памяти
- ОКомпоненте(); //информацию о компоненте
- ЗагрузитьКурсор(ПутьКФайлу); //создает объект типа "Курсор"
- УстановитьКурсор(Курсор) //`установка курсора на все окна 1С
- УстановитьКурсор(Курсор, ИдентификаторОкна); //устанавливает курсор на нужное окно
- ПолучитьИдентификаторОкна(ЗаголовокОкна); //получает идентификатор окна по его заголовку
- СистемныйКурсор(ИмяКурсора); //создает объект типа "Курсор"
- НажатьКлавишу(Клавиша); //клавиша - строка, пример = ""
*** "Мышь":
- Нажать(x, y); //нажимает ("кликает") курсором по координатам экрана
- НажатьИПеретащить(x1, y1, x2, y2); //нажимает и перетаскивает курсором из точки x1, y1 в точку x2, y2
- НажатьКнопку(КнопкаМыши); //нажимает кнопку мыши, (КнопкаМыши - "left", "right", "middle")
- ОтпуститьКнопку(КнопкаМыши); //отпускает кнопку мыши, (КнопкаМыши - "left", "right", "middle")
- ПолучитьПозициюX(); //получает координату курсора
- ПолучитьПозициюY(); //получает координату курсора
- Двинуть(x, y); //двигает курсор на заданную координату
*** Имена системных курсоров:
- AppStarting
- Arrow
- Cross
- Hand
- Help
- HSplit
- IBeam
- No
- NoMove2D
- NoMoveHoriz
- NoMoveVert
- PanEast
- PanNE
- PanNorth
- PanNW
- PanSE
- PanSouth
- PanSW
- PanWest
- SizeAll
- SizeNESW
- SizeNS
- SizeNWSE
- SizeWE
- UpArrow
- VSplit
- WaitCursor
В этой статье начнем разбирать основные элементы управляемой формы 1С 8.3. Управление формой осуществляется посредством различных элементов формы, которые расположены иерархически на закладке Элементы конструктора формы. Самым главным элементом является сама форма, которая расположена вверху иерархии элементов, а остальные элементы ей подчинены.
Все элементы формы можно разделить на пять групп: поля, элементы группировки, кнопки, декорации и таблицы. В своих статьях я разберу каждую из групп. В этой статье мы начнем изучать один из видов элемента поле — поле ввода, но перед этим научимся добавлять элемент на форму.
Добавление элементов на форму
Делается это достаточно просто: необходимо выделить элемент Форма в окне Элементы конструктора формы и нажать на кнопку «Добавить». После этого откроется окно, в котором необходимо выбрать нужный тип элемента
После выбора, элемент нужного появится в окне Элементы.
Элемент управляемой формы Поле
Разберем элемент управляемой формы Поле. Этот элемент нужен для ввода информации на форме. А также для отображения какой-либо информации. После того, как Вы добавите этот элемент на форму, справа откроется палитра свойств элемента формы. Пока Вас должны интересовать два свойства – ПутьКДанным и Вид.
В свойстве ПутьКДанным разработчик может связать элемент формы с нужным реквизитом формы. Обратите внимание, что после того, как был добавлен элемент Поле ввода на форму он не отобразился на самой форме. Это произошло потому, что наш новый элемент не связан с реквизитом формы. Для примера я создал на форме обработки несколько реквизитов с разными примитивными типами и один реквизит с ссылочным типом.
Здесь и далее используется конфигурация, созданная в книге «Программировать в 1С за 11 шагов»
Теперь свяжем наш недавно добавленный элемент формы с одним из реквизитов, для этого выберем нужный реквизит с свойстве элемента ПутьКДанным.
После этого заполнятся свойства ПутьКДанным и Вид, а сам элемент отобразится в представлении формы.
Обратите внимание на свойство элемента Вид. При помощи этого свойства определяется функциональность поля ввода. Можно выбрать различные значения этого свойства.
В зависимости от выбранного значения будет определятся функционал. На рисунках выше выбрано значение – поле ввода, т.е. мы можем вводить какие-либо значения в это поле ввода, а если выбрать значение поле надписи, то ни чего вводить мы не сможем.
Этот значение свойств Вид поля ввода удобно выбирать, когда нужно просто показать справочную информацию пользователю.
Теперь добавим новый элемент формы с типом Поле ввода и свяжем его с реквизитом РеквзитДата посредством уже знакомого нам свойства ПутьКДанным
Как Вы видите вид поля ввода поменялся, а так же поменяется возможный выбор значений свойства Вид.
Таким образом, делаем вывод – функциональность поля ввода зависит от типа реквизита.
Для реквизита с типом Булево будут доступны следующие значения свойства Вид.
А для реквизита с ссылочным типом будут доступны иные значения свойства Вид.
Более подробно работа с элементами формы на практичных примерах дается в книге «Основы разработки в 1С:Такси. Разработка управляемого приложения за 12 шагов».
Иногда кажется, что изучить язык программирование в 1С сложно и трудно. В действительности программировать в 1С — легко. Помогут Вам легко и быстро освоить программирование в 1С мои книги: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»
Изучите программирование в 1С с помощью моей книги «Программировать в 1С за 11 шагов»
- Без сложных технических терминов.
- Более 700 страниц практического материала.
- Каждое задание сопровождается рисунком (скриншот).
- Сборник задач для домашней проработки.
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
Эта книга подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С
- Без сложных технических терминов;
- Более 600 страниц практического материала;
- Каждый пример сопровождается рисунком (скриншот);
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
One thought on “ Элементы управляемой формы 1С 8.3. Поле ввода ”
Огромное спасибо, за отличную публикацию! побольше бы таких сайтов как у Вас!
Читайте также: