Команды в 1с программировании
ОбщегоНазначенияКлиентСервер . УдалитьЗначениеИзМассива ( ВидыВремениВЗачетНормыСуммированногоУчета , ОбщегоНазначенияКлиентСервер . ПредопределенныйЭлемент ( "Справочник.ВидыИспользованияРабочегоВремени.НеявкиПоНевыясненнымПричинам" ));
5. Удаляет повторяющиеся элементы массива
Взаимодействия . УдалитьПовторяющиесяЭлементыМассива ( МассивСпособовОтражений );
6. Формирует временную таблицу периодов с заданной периодичностью, формируемой, с помощью, запроса, возвращаемого методом ЗапросВТПериоды. Создает в МенеджерВременныхТаблиц временную таблицу с именем и периодичностью за интервал с по .
ЗарплатаКадрыОбщиеНаборыДанных . СоздатьВТПериоды ( Запрос . МенеджерВременныхТаблиц , НачалоПериода , ОкончаниеПериода );
ЗарплатаКадрыОбщиеНаборыДанных . СоздатьВТПериоды ( МенеджерВременныхТаблиц , НачалоИнтервала , ОкончаниеИнтервала , Периодичность = "МЕСЯЦ" , ИмяПоляПериод = "Период" , ИмяВТ = "ВТПериоды" , ИспользоватьКонецПериода = Ложь) Экспорт
6.1. Временная таблица периодического регистра с периодами
ОписаниеФильтраПолученияГрафиков = ЗарплатаКадрыПериодическиеРегистры . ОписаниеФильтраДляСоздатьВТИмяРегистра ( "ВТПериодыЗапросаКадровойИстории" , "ФизическоеЛицо" , "ФизическоеЛицо" );
ЗарплатаКадрыПериодическиеРегистры . СоздатьВТИмяРегистраПериоды ( "КадроваяИсторияСотрудников" , МенеджерВременныхТаблиц , Ложь, ОписаниеФильтраПолученияГрафиков );
7. Создать временную таблицу из таблицы значений
ЗарплатаКадры . СоздатьВТПоТаблицеЗначений ( Запрос . МенеджерВременныхТаблиц , ТаблицаСКД , "ВТСКД " , Истина);
8. Предупреждение на сервере
ТекстПредупреждения = СтроковыеФункцииКлиентСервер . ПодставитьПараметрыВСтроку (
ОбщегоНазначенияКлиентСервер . СообщитьПользователю ( ТекстПредупреждения );
9. Создать ВТ по имени регистра СрезПоследних
ОписаниеФильтра = ЗарплатаКадрыОбщиеНаборыДанных . ОписаниеФильтраДляСоздатьВТИмяРегистра ( "ВТСотрудникиПериоды" , "Сотрудник" );
ОписаниеФильтра . СоответствиеИзмеренийРегистраИзмерениямФильтра . Вставить ( "Период" , "Период" );
ОписаниеФильтра . СоответствиеИзмеренийРегистраИзмерениямФильтра . Вставить ( "Сотрудник" , "Сотрудник" );
ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры . ОписаниеФильтраДляСоздатьВТИмяРегистра ( "ВТФильтрПозиции" , "Позиция" );
ПараметрыПостроения = ЗарплатаКадрыПериодическиеРегистры . ПараметрыПостроенияДляСоздатьВТИмяРегистраСрез ();
ЗарплатаКадрыОбщиеНаборыДанных . ДобавитьВКоллекциюОтбор ( ПараметрыПостроения . Отборы , "Позиция" , "<>" , Справочники . ШтатноеРасписание . ПустаяСсылка ());
мТиповыеПоказатели = Новый Массив ;
мТиповыеПоказатели . Добавить ( Справочники . ПоказателиРасчетаЗарплаты . НайтиПоРеквизиту ( "Идентификатор" , "ПроцентПпремииПроизводственной" ));
ПоказателиПремий . Добавить ( Справочники . ПоказателиРасчетаЗарплаты . НайтиПоРеквизиту ( "Идентификатор" , "ПроцентГодовойПремии" ));
ЗарплатаКадрыОбщиеНаборыДанных . ДобавитьВКоллекциюОтбор ( ПараметрыПостроения . Отборы , "Показатель" , "В" , ПоказателиПремий );
ЗарплатаКадрыПериодическиеРегистры . СоздатьВТИмяРегистраСрезПоследних ( "ЗначенияПлановыхПоказателейРасчетаЗП" , МенеджерВТ , Истина, ОписаниеФильтра , ПараметрыПостроения , "ВТЗначенияПлановыхПоказателейРасчетаЗП" );
10. Открытие формы с последующим вызовом формы завершения
ОткрытьФорму ( "Справочник.Сотрудники.Форма.ФормаЭлемента" ,, ЭтотОбъект . Новый ОписаниеОповещения ( "ЗагрузитьИзExcelЗавершение" , ЭтотОбъект ), РежимОткрытияОкнаФормы . БлокироватьОкноВладельца );
НСтр ( "ru = 'Код введен в неверном формате. Проведено преобразование из %1 в %2'" ),
13. Получение данных из регистра сведений не запросом
ДанныеОРаботнике = РегистрыСведений . РаботникиОрганизаций . СрезПоследних ( ТекущаяДата (),Новый Структура ( "Сотрудник" , Сотрудник ));
14. Значения реквизитов:
14.1 Возврат значения реквизита объекта через точку
ОбщегоНазначения . ЗначениеРеквизитаОбъекта ( Объект . ФизическоеЛицо , "Наименование" );
14.2 Значения реквизитов, прочитанные из информационной базы для нескольких объектов
ВидыРасчета = Новый Массив ;
Для Каждого СтрокаИсточника Из ТаблицаВычислений Цикл
ВидыРасчета . Добавить ( СтрокаИсточника . ВидНачисления );
ВидыРасчетаИнфо = ОбщегоНазначения . ЗначенияРеквизитовОбъектов ( ВидыРасчета , "УчетВремениВЧасах,КатегорияНачисленияИлиНеоплаченногоВремени,ТребуетсяРасчетБазы" );
15. Открытие дополнительной формы
СотрудникиКлиентСервер . ОписаниеДополнительнойФормы ( "Справочник.МедицинскиеСтраховыеПолисы.Форма.ФормаПолисыПоСотруднику" ), ЭтотОбъект );
16. Значение в массиве
ФизЛица = ОбщегоНазначенияКлиентСервер . ЗначениеВМассиве ( ФизЛицо );
17. Создание временной таблицы "КадровыеДанныеСотрудников"
ОписательВТ = КадровыйУчет . ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников ( Запрос . МенеджерВременныхТаблиц , "ВТСотрудникиПериоды" );
КадровыйУчет . СоздатьВТКадровыеДанныеСотрудников ( ОписательВТ , Ложь, "ТекущаяДолжность, ДатаПриема, ДатаУвольнения" );
18. Проверка даты запрета изменения данных.
ДатыЗапретаИзменения . ПроверитьДатыЗапретаИзмененияДанных ( Источник , Отказ , ИсточникРегистр = Ложь, Замещение = Истина, Удаление = Ложь)
19. Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули.
ТабельныйНомер = ПрефиксацияОбъектовКлиентСервер . НомерНаПечать ( Сотрудник . Код , Истина, Истина);
20. Возвращает полное имя объекта метаданных по переданному значению ссылки.
ИмяТаблицы = ОбщегоНазначения . ИмяТаблицыПоСсылке ( Ссылка );
21. Получить значение реквизита объектов (&НаСервере). Значения реквизита, прочитанного из информационной базы для нескольких объектов.
ФизическиеЛицаПодобранныхСотрудников = ОбщегоНазначения . ЗначениеРеквизитаОбъектов ( МассивСотрудников , "ФизическоеЛицо" );
22. Запуск длительной процедуры в фоне
НаименованиеЗадания = НСтр ( "ru = 'Заполнение документа ""Начисление зарплаты""'" );
Результат = ДлительныеОперации . ЗапуститьВыполнениеВФоне (
23. Создает временную таблицу по набору записей
ЗарплатаКадры . СоздатьВТПоНаборуЗаписей ( Запрос . МенеджерВременныхТаблиц , Движения . СведенияОДоходахНДФЛ , Истина, "ВТПеренесенныеДоходы" );
24. Создание и инициализация менеджера расчета зарплаты. Возвращаемое значение - обработка менеджера расчета.
МенеджерРасчета = РасчетЗарплатыРасширенный . СоздатьМенеджерРасчета ( МесяцНачисления , Организация );
25. Проверка реквизита, элемента формы на существование. Получает значение элемента по указанному имени, а также проверяет, имеется ли указанное свойство.
СтруктураПараметров . Свойство ( "ЗначенияРазовыхПоказателей" , ЗначенияРазовыхПоказателей )
Элементы . Найти ( "ИсполнителиРабот" )
26. Ищет по имени временную таблицу в менеджере
ЗарплатаКадры . ВТСуществует ( МенеджерВременныхТаблиц , "ВТПоказателиРасчета" )
27. Устанавливает текст заголовка, отображаемого, когда группа свернута.
ЗарплатаКадры . НастроитьОтображениеГруппыПодписей ( Элементы . ПодписиГруппа , "Объект.Руководитель" , "Объект.ГлавныйБухгалтер" );
28. Очищает записи наборов из коллекции Движения и проставляет флаг Записывать наборам, по которым документ уже имеет движения.
ПроведениеСервер . ПодготовитьНаборыЗаписейКРегистрацииДвижений ( ЭтотОбъект );
29. Возвращает виды времени сплошной регистрации в массиве
30. Подставляет параметры в строку. Максимально возможное число параметров - 9. Возвращаемое значение - текстовая строка с подставленными параметрами.
ТекстОшибки = СтроковыеФункцииКлиентСервер . ПодставитьПараметрыВСтроку ( ТекстОшибкиШаблон , Выборка . СотрудникНаименование , Формат ( Выборка . Дата , "ДФ='dd.MM.yyyy ""г.""'" ), Выборка . ВидВремениНаименование );
31. Получает ссылку предопределенного элемента по его полному имени.
ОбщегоНазначенияКлиентСервер . ПредопределенныйЭлемент ( "Справочник.ВидыИспользованияРабочегоВремени.РаботаНочныеЧасы" );
ОбщегоНазначения . ПредопределенныйЭлемент ( "Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя" );
ЗарплатаКадры . ПроверитьКорректностьДаты ( Ссылка , ДатаНачала , "Объект.ДатаНачала" , Отказ , НСтр ( "ru='Новая дата начала'" ), , , Ложь);
33. Получает значение реквизита формы.
Таблица = ОбщегоНазначенияКлиентСервер . ПолучитьРеквизитФормыПоПути ( ЭтотОбъект , ИмяТаблицы );
34. Возвращает ссылку на общий модуль по имени.
Модуль = ОбщегоНазначения . ОбщийМодуль ( "УправленческаяЗарплата" );
35. Начисления
СотрудникиДаты = тзТаблица . Скопировать (, "Объект, Период" );
СотрудникиДаты . Колонки . Объект . Имя = "Сотрудник" ;
ТекущиеДанныеОплатыТруда = ПлановыеНачисленияСотрудников . ТекущиеДанныеОплатыТрудаСотрудников ( Параметры . Объект . Ссылка , СотрудникиДаты );
ДанныеНачислений = ЗарплатаКадрыРасширенный . ДействующиеНачисленияСотрудников ( СотрудникиДаты , Параметры . Объект . Ссылка );
36. Возвращает соответствие имен предопределенных значений по ссылкам на них.
ПредопределенныеЗначения = СтандартныеПодсистемыПовтИсп . СсылкиПоИменамПредопределенных ( СПРАВОЧНИК . ВИДЫИСПОЛЬЗОВАНИЯРАБОЧЕГОВРЕМЕНИ );
37. Массив видов рабочего времени, отражающих отработанное время (ОтработанноеВремя).
38. Массив видов рабочего времени, отражающих норму времени для суммированного учета рабочего времени.
Это рабочее время + выходные + время , когда сотрудник отсутствовал по своей вине .
39. Кадровые данные физических лиц
40. Проверка заполнения на клиенте
Если НЕ ПроверитьЗаполнение () Тогда
41. Полный путь до предопределенного значения, включая имя самого значения.
ТекущиеДанные . СпособКомпенсацииПереработки = ПредопределенноеЗначение ( "Перечисление.СпособыКомпенсацииПереработки.ПовышеннаяОплата" )
42. Возвращает сумму значений в поле [ИмяПоля] всех элементов коллекции.
УчетСреднегоЗаработкаКлиентСервер . ИтогиПоПолю ( Коллекция , ИмяПоля )
43. Подключение внешней обработки/отчета, пример оформления модуля объекта.
Функция СведенияОВнешнейОбработке () Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки . СведенияОВнешнейОбработке ( "2.4.4.106" );
ПараметрыРегистрации . Вид = ДополнительныеОтчетыИОбработкиКлиентСервер . ВидОбработкиДополнительнаяОбработка ();
ПараметрыРегистрации . Версия = "1.0" ;
ПараметрыРегистрации . БезопасныйРежим = Истина;
ПараметрыРегистрации . Наименование = НСтр ( "ru = 'Добавляемая обработка'" );
НоваяКоманда = ПараметрыРегистрации . Команды . Добавить ();
НоваяКоманда . Представление = НСтр ( "ru = 'Имя команды обработки'" );
НоваяКоманда . Идентификатор = "ИдентификаторКоманды" ;
НоваяКоманда . Использование = ДополнительныеОтчетыИОбработкиКлиентСервер . ТипКомандыОткрытиеФормы ();
НоваяКоманда . ПоказыватьОповещение = Истина;
44. Узнать версию библиотеки стандартных подсистем - БСП
ОбновлениеИнформационнойБазыБСП . ПриДобавленииПодсистемы ( Описание )
Процедура ПриДобавленииПодсистемы ( Описание ) Экспорт
Описание . Имя = "СтандартныеПодсистемы" ;
Описание . Версия = "3.0.3.43" ;
Описание . ИдентификаторИнтернетПоддержки = "SSL" ;
Описание . РежимВыполненияОтложенныхОбработчиков = "Параллельно" ;
Описание . ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0" ;
45. Узнать СпособОтраженияЗарплатыВБухучете у сотрудника
ОтражениеЗарплатыВБухучетеРасширенный . СоздатьВТСведенияОБухучетеЗарплатыСотрудников ( Запрос . МенеджерВременныхТаблиц , "ВТСотрудники" , "Сотрудник,Период" , Организация );
46. Выполнить процедуру под полными правами
ОписательВТ = КадровыйУчетРасширенный . ОписательВременнойТаблицыОтборовДляВТСтажиФизическихЛиц ( "ВТИсходныеДанные" );
ОписательВТ . ИмяПоляВидСтажа = "ВидСтажа" ;
КадровыйУчетРасширенный . СоздатьВТСтажиФизическихЛиц ( Запрос . МенеджерВременныхТаблиц , Ложь, ОписательВТ , "ВТСтажиФизическихЛиц" );
47. Преобразовать строку таблицы значений в структуру
ПараметрыСтроки = ОбщегоНазначения . СтрокаТаблицыЗначенийВСтруктуру ( ТаблицаПоказателей [ 0 ]);
48. Создать временную таблицу, с данными учета времени и состояний сотрудников
ПараметрыЗаполнения = УчетРабочегоВремениРасширенный . ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников ();
ПараметрыЗаполнения . ИмяВТСотрудники = "ВТСотрудникиПериоды" ;
ПараметрыЗаполнения . ИмяВТРезультат = "ВТУчетРабочегоВремениПолный" ;
ПараметрыЗаполнения . РассчитыватьПлановоеВремя = Истина;
ПараметрыЗаполнения . ДатаАктуальности = ПериодПланирования ;
ПараметрыЗаполнения . ДатаНачала = АнализируемыйГод ;
ПараметрыЗаполнения . ДатаОкончания = КонецГода ( АнализируемыйГод );
ПараметрыЗаполнения . МесяцДатаНачала = АнализируемыйГод ;
ПараметрыЗаполнения . МесяцДатаОкончания = КонецГода ( АнализируемыйГод );
ПараметрыЗаполнения . ВыделятьВыходныеВПериодыОтклонений = Ложь;
УчетРабочегоВремениРасширенный . СоздатьВТДанныеУчетаВремениИСостоянийСотрудников ( Запрос . МенеджерВременныхТаблиц , Истина, ПараметрыЗаполнения );
49. Создать временную таблицу "Штатное расписание"
ПараметрыТаблицы = КадровыйУчет . ПараметрыПолученияВсехСотрудниковОрганизацийПоСпискуФизическихЛиц ();
ПараметрыТаблицы . Организация = СтруктураПараметров . Организация ;
ПараметрыТаблицы . НачалоПериода = СтруктураПараметров . Дата ;
ПараметрыТаблицы . ОкончаниеПериода = СтруктураПараметров . Дата ;
КадровыйУчет . СоздатьВТСотрудникиОрганизации ( МенеджерВТ , Истина, ПараметрыТаблицы , "ВТСотрудникиПредварительно" );
| ВТСотрудникиПредварительно КАК ВТСотрудникиПредварительно
ПараметрыТаблицы = УправлениеШтатнымРасписанием . ПараметрыПостроенияВТШтатноеРасписание ( СтруктураПараметров . Дата , СтруктураПараметров . Организация );
ПараметрыТаблицы . ДополнитьОписаниемНачислений = Истина;
ПараметрыТаблицы . ПолноеОписаниеНачислений = Истина;
ПараметрыТаблицы . Вставить ( "ПоказыватьПлановыеПозиции" );
УправлениеШтатнымРасписанием . СоздатьВТШтатноеРасписание ( МенеджерВТ , Истина, ПараметрыТаблицы , , "ВТВыбраныПозицииШР" );
50. Динамическое добавление реквизита на форму из общего модуля
ЗарплатаКадрыРасширенный . МногофункциональныеДокументыДобавитьЭлементыФормы ( Форма , НСтр ( "ru='Новый'" ), "ГруппаНовых" , "Новый" );
Элементы . Новый . ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы . Лево ;
Элементы . Новый . Доступность = Пользователи . РолиДоступны ( "ДобавлениеНовых" );
51. Программное добавление возможности отбора в динамический список формы
Если Не Пользователи . РолиДоступны ( "ИспользованиеДополнителныхРеквизитов" ) Тогда
Форма . Список . ТекстЗапроса = Форма . Список . ТекстЗапроса + "
52. Обновить список документов - аналог кнопки F5
ОповеститьОбИзменении ( Тип ( "ДокументСсылка.РаботаВВыходныеИПраздничныеДни" ));
53. Создать объект ОписаниеТипов
НоваяКолонка = ТЗ . Колонки . Добавить ( "КолонкаДата" , ОбщегоНазначения . ОписаниеТипаДата ( ЧастиДаты . Дата ));
НоваяКолонка = ТЗ . Колонки . Добавить ( "КолонкаЧисло" , ОбщегоНазначения . ОписаниеТипаЧисло ( 12 ));
НоваяКолонка = ТЗ . Колонки . Добавить ( "КолонкаСтрока" , ОбщегоНазначения . ОписаниеТипаСтрока ( 100 ));
НоваяКолонка = ТЗ . Колонки . Добавить ( "КолонкаСсылка" , ОбщегоНазначения . ОписаниеТипаВсеСсылки ());
54. Преобразовать таблицу значений в массив
мсДанных = Новый Массив ;
Для Каждого СтрокаТЗ Из тзДанных Цикл
стСтрокаТаблицы = Новый Структура ;
Для Каждого ИмяКолонки Из тзДанных . Колонки Цикл
стСтрокаТаблицы . Вставить ( ИмяКолонки . Имя , СтрокаТЗ [ ИмяКолонки . Имя ]);
мсДанных . Добавить ( стСтрокаТаблицы );
55. Преобразовать адрес формата XML контактной информации в структуру старого формата
СтруктураАдреса = ЗарплатаКадры . СтруктураАдресаИзXML ( Адрес ,
Адрес = СтруктураАдреса . Представление ;
56. Дополнить массив МассивПриемник значениями из массива МассивИсточник
ОбщегоНазначенияКлиентСервер . ДополнитьМассив ( МассивПриемник , МассивИсточник , Истина);
57. Дополнить таблицу значений - приемника данными из таблицы значений - источника
ОбщегоНазначенияКлиентСервер . ДополнитьТаблицу ( ТаблицаИсточник , ТаблицаПриемник );
58. Вернуть значения реквизитов объекта
ЗначенияРеквизитов = ОбщегоНазначения . ЗначенияРеквизитовОбъекта ( Данные . ФизическоеЛицо , "ФИО,Фамилия,Имя,Отчество,УточнениеНаименования" );
ФИО = Новый Структура ( "Фамилия,Имя,Отчество" );
ЗаполнитьЗначенияСвойств ( ФИО , ЗначенияРеквизитов );
59. Вернуть текущего пользователя
60. Выполнить копирование документа
ИсправлениеДокументовЗарплатаКадры.СкопироватьДокумент ( Приемник, Источник, ИсключаемыеСвойства = "", ИсключаемыеТабличныеЧасти = "", ДанныеЗаполнения = Неопределено) Экспорт;
61. Подставить свой макет в СКД
СхемаКомпоновкиДанных = ПолучитьМакет ( "МакетСКД" );
АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище ( СхемаКомпоновкиДанных , Новый УникальныйИдентификатор );
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных ( АдресСхемыКомпоновкиДанных );
КомпоновщикНастроек . Инициализировать ( ИсточникДоступныхНастроек );
КомпоновщикНастроек . ЗагрузитьНастройки ( СхемаКомпоновкиДанных . НастройкиПоУмолчанию );
62. Отладить внешнюю обработку
Общий модуль ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку
Функция ПодключитьВнешнююОбработку ( Ссылка ) Экспорт
СтроковыеФункцииКлиентСервер . ПодставитьПараметрыВСтроку ( НСтр ( "ru = 'Подключение, БезопасныйРежим = ""%1"".'" ), БезопасныйРежим ));
//ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим,
ИмяОбработки = Менеджер . Создать ( "C:\1C\МояОбработка.epf" , Ложь);
63. Схема запроса
СхемаЗапроса = Новый СхемаЗапроса ;
СхемаЗапроса = УстановитьТекстЗапроса ( ТекстЗапроса ) ;
64. Преобразовать строковое представление УИД в ссылку на объект текущей информационной базы
ПолученныеДанные . ОсновнойДоговор = ОбменДаннымиXDTOСервер . СсылкаОбъектаПоУИДОбъектаXDTO ( ДанныеXDTO . AdditionalInfo , Тип ( "СправочникСсылка.ДоговорыКонтрагентов" ), КомпонентыОбмена );
65. Выполнить поиск правила конвертации объекта по имени
ПКОСвойство = ОбменДаннымиXDTOСервер . ПКОПоИмени ( КомпонентыОбмена , "Справочник_ДополнительныеРеквизиты_Получение" );
66. Вернуть объект информационной базы, соответствующий полученным данным XDTO
ТекСвойство = ОбменДаннымиXDTOСервер . СтруктураОбъекта XDTO ВДанныеИБ ( КомпонентыОбмена , СтрТабДопСвойств . Свойство , ПКОСвойство , "КонвертироватьИЗаписать" );
Встроенный язык является важной частью технологической платформы «1С:Предприятия 8», поскольку позволяет разработчику описывать собственные алгоритмы функционирования прикладного решения.
Встроенный язык имеет много общих черт с другими языками, такими как Pascal, Java Script, Basic, что облегчает его освоение начинающими разработчиками. Однако он не является прямым аналогом какого-либо из перечисленных языков.
- предварительная компиляция — перед исполнением модули, содержащие текст на встроенном языке, преобразуются во внутренний код;
- кэширование скомпилированных модулей в памяти;
- мягкая типизация — тип переменной определяется типом значения, которое она содержит, и может изменяться в процессе работы;
- отсутствие программного описания объектов конфигурации — разработчик может использовать либо встроенные в платформу объекты, либо объекты, созданные системой в результате визуального конструирования прикладного решения.
Событийная ориентированность встроенного языка
Назначение встроенного языка в системе 1С:Предприятие определяется идеологией создания прикладных решений. Прикладные решения в 1С:Предприятии 8 не кодируются целиком. Большая часть прикладного решения создается разработчиком путем визуального конструирования — создания новых объектов конфигурации, задания их свойств, форм представления, взаимосвязей и пр. Встроенный язык используется лишь для того, чтобы определить поведение объектов прикладного решения, отличное от типового, и создать собственные алгоритмы обработки данных.
По этой причине модули, содержащие текст на встроенном языке, используются системой в конкретных, заранее известных ситуациях, которые могут возникнуть в процессе работы прикладного решения. Такие ситуации называются событиями. События могут быть связаны с функционированием объектов прикладного решения или с самим прикладным решением, как таковым.
Например, с функционированием объекта прикладного решения Справочник связан ряд событий, среди которых есть событие ПередЗаписью:
Это событие возникает непосредственно перед тем, как данные элемента справочника должны быть записаны в базу данных. Разработчик, используя встроенный язык, может описать алгоритм, который, например, будет проверять корректность данных, введенных пользователем. Разместив этот алгоритм в соответствующем модуле, разработчик обеспечит то, что каждый раз, как пользователь будет выполнять запись элемента справочника, система будет выполнять созданный разработчиком алгоритм и проверять, не забыл ли пользователь заполнить обязательные реквизиты справочника.
Таким образом можно сказать, что встроенный язык является скриптовым языком для программирования бизнес-логики, а использование модулей на встроенном языке является событийно-зависимым, т. е. выполнение модулей происходит при возникновении определенных событий в процессе функционирования прикладного решения.
Универсальные коллекции значений
Встроенный язык поддерживает работу с большим количеством разнообразных объектов. Безусловно, основную группу объектов составляют прикладные объекты, позволяющие описывать алгоритмы функционирования бизнес-логики.
Однако не менее важной группой являются объекты, предназначенные для хранения временных наборов данных в течение сеанса работы пользователя. Как правило, они служат для вспомогательного сбора, группировки, анализа и обработки информации:
Перечислим кратко их возможности:
Массив
Представляет собой пронумерованную коллекцию значений произвольного типа. К элементу массива можно обращаться по его индексу. В качестве элементов массива могут выступать, в частности, другие массивы. Это позволяет создавать многомерные массивы.
Структура
Представляет собой поименованную коллекцию, состоящую из пар ключ — значение. Ключ может быть только строковым, значение — произвольного типа. К элементу структуры можно обращаться по значению его ключа, т. е. по имени. Обычно используется для хранения небольшого количества значений, каждое из которых имеет некоторое уникальное имя.
Соответствие
Также как и структура, представляет собой коллекцию пар ключ — значение. Однако, в отличие от структуры, ключ может быть практически любого типа.
Список значений
Используется, как правило, для решения интерфейсных задач. Позволяет строить динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может содержать значения любого типа, кроме того, в одном списке типы хранимых значений могут быть разными.
Например, список значений может использоваться для выбора конкретного документа из списка возможных документов, сформированного по сложному алгоритму.
Таблица значений
Таблица значений позволяет строить динамические наборы значений и манипулировать ими. Она может быть наполнена значениями любого типа, и в одной таблице типы хранимых значений могут быть разными.
Одним из примеров использования таблицы значений может служить организация представления в форме списка элементов справочника, отобранных по сложному алгоритму.
Дерево значений
Дерево значений представляет собой динамически формируемый набор значений любого типа, похожий на таблицу значений. В отличие от таблицы значений, строки дерева значений могут образовывать иерархические структуры: каждая строка дерева может иметь набор подчиненных строк, каждая из подчиненных строк, в свою очередь, также может иметь набор подчиненных строк и так далее. При этом поиск значений, сортировка, получение итогов могут осуществляться либо по текущему уровню иерархии, либо включая все подчиненные.
COMSafeArray
Представляет собой объектную оболочку над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.
Фиксированный массив
Неизменяемый массив. Массив заполняется системой при инициализации объектов данного типа или разработчиком, с помощью конструктора.
Редактор текстов и модулей
Для создания и изменения текстов на встроенном языке разработчик может использовать редактор текста и модуля, обладающий удобными средствами создания, редактирования и синтаксической проверки модулей. Подробнее…
Начинающие программисты в 1С знают, как сложно найти понятную информацию о конфигурировании 1С и обучении для новичков. Даже опытные пользователи программы первый раз открыв конфигуратор растеряются: форма подачи информации здесь иная. Нужно знать интерфейс Конфигуратора 1С, чтобы начать ориентироваться в составе дерева конфигурации.
Дерево конфигурации: создаём, редактируем, удаляем
Обучение программиста конфигурированию в 1С начинается с запуска программы в режиме конфигуратора. Для чайников: Конфигурация – жмём «Открыть конфигурацию» – получаем дерево, состоящее из объектов Конфигурации.
Перед нами объекты конфигурации: справочники, константы, документы и отчёты. Используя объекты конфигурации можно создавать, вносить изменения и удалять элементы дерева. Для поиска нужного объекта, можно воспользоваться возможностями поиска по первым буквам. Объекты имеют свой интерфейс.
Пользовательский интерфейс содержит формы списка, формы записи объекта и формы выбора.
Создание и конструирование: управляемые формы в Конфигурации 1С
Важно осознавать, что любая команда пользователя об изменении данных объекта передаётся через форму. Формы позволяют вносить новые данные, корректировать информацию, удалять ошибочные данные. В программе 1С программист фактически сообщает системе, как управлять размещением объектов в форме, как группировать элементы, каким должен быть порядок расположения. Если писать инструкцию для чайников, то фактически нужно:
- Сделать описание состава формы;
- Добавить реквизиты и команды;
- Сформировать объекты в логические группы;
- Указать последовательность обхода всех элементов в формах.
Можно изменять по своему желанию не только расположение элементов, но и её внешний вид: достаточно воспользоваться функционалом такого инструмента, как: «Свойства элементов формы».
Открытие форм для редактирования
Для просмотра формы и её редактирования можно использовать как простое открытие, так и открытие формы с предварительно установленным отбором. При этом из всего числа выделяются конкретные параметры. Достичь этого можно либо установив отбор, либо используя параметризированные команды.
Изучение синтаксиса языка 1С: от простого к сложному
На курсах программирования 1С для чайников начинают с самых азов языка. Несколько академических часов, уроки в формате видео-курсов помогут стать уверенным разработчиком 1С. Что нужно знать новичку в конфигурировании 1С?
- Что такое программный модуль, виды, контекст выполнения;
- Виды примитивных типов данных;
- Выражения языка: арифметические, логические;
- Синтаксические конструкции и основные приёмы работы;
- Основные особенности режимов при запуске системы.
Важно понять изначально, что программа 1С – это очень гибкая система, которую нужно настраивать. Конфигурирование 1С позволит решить практически любые бизнес-задачи, относящиеся к сфере автоматизации процессов. Алгоритм работы описывается встроенным языком 1С. Его функционал прост, инструкция работы в конфигураторе «для чайников» позволит использовать его объектно-ориентированные возможности для доступа к справочникам и документам.
Разработка прикладных решений
Платформа 1С позволяет модифицировать прикладные решения на базе основного продукта. Для начала работы необходимо иметь следующие навыки:
- Приёмы работы с окнами, текстами, табличными документами;
- Навыки работы с меню и управление диалоговыми элементами;
- Понятия о буфере обмена и основных приёмах взаимодействия с ним.
Специально для обучения начинающих программистов 1С мной было разработано руководство по программированию в системе 1С:Предприятие. Скачивайте и читайте более подробно как изучить 1С!
Язык 1С считается самым простым в изучении. Одно из его конкурентных преимуществ – возможность написания кода на русском, что значительно упрощает процесс его освоения. Хотя имеются и англоязычные варианты языка, предназначенные для внедрения на зарубежных предприятиях.
Программирование на 1С – создание алгоритма или программного кода, который позволяет пользователю без проблем работать в программном интерфейсе. Основной инструмент языка – команды (слова), которые в определённой последовательности создают общую функциональную оболочку программы. Команды бывают следующих видов:
3. Функции и процедуры;
Давайте разберём все их более детально.
Переменные
Допустим, имеется число 15. Это есть значение. Изначально оно нигде не сохраняется. Чтобы поместить её в информационную базу (ИБ) программы, необходимо выполнить сохранение в переменной, которая может именоваться хоть как, скажем, результат.
Переменная, которая относится к объекту 1С (поле справочника, допустим) и сохраняется в информационную базу – это реквизит. К любой переменной допускается присвоение разных типов данных: можно сначала присвоить тип «число», а затем – тип «строка». Но для реквизитов язык 1С предусматривает только один тип данных. Если указать в нём другое значение, допустим, вместо цифры – строку, то программа сначала попробует выполнить преобразование в цифровой формат. Если она не сможет это сделать, значение будет пустым.
Строка в стандартной переменной не ограничена по длине, в реквизите – чётко определена (но если требуется выставить неограниченную длину – устанавливается значение длины 0). Выполнять обращение к отдельным буквам в слове нельзя, но можно искать целые части (Лев(), Прав(), Сред()).
Сложные переменные
Давайте разберём пример, когда переменной присвоено несколько значений.
По виду массив аналогичен колонке в Excel. Каждая ячейка – переменная, которая имеет только одно название. Чтобы перейти к определённой ячейке, нужно ввести её номер.
Ячейки в 1С нумеруются с 0, а не с 1.
Аналогичные ячейки, но с возможностью добавления комментария.
Здесь программирование таблиц значений на 1С аналогично Excel – страничке со множеством строк и колонок.
Древовидная таблица, самый простой пример – окно конфигурации.
Строки программы
В конце любой строчки стоит «;», а комментарий добавляется после знака «//». Значение пишется в кавычках, например «14». Если требуется ввести кавычку в значении, её пишут два раза: «14 ««o»»!».
Значение может быть разделено на две строки, для этого язык 1С имеет знак «|»:
Для указания специфических символов используется объект: «Символы.»:
Операторы
Это средства, встроенные в язык 1С. Используются для создания простейшей последовательности.
Те или иные строки выполняются при наличии необходимых условий.
Строчки выполняются установленное количество раз или пока выполняется определённое условие.
Для прерывания цикла язык 1С имеет команду «Прервать». Для прерывания только одной итерации – «Продолжить».
Объекты
Любой объект в 1С полноценен, то есть ему могут присваиваться уникальные от остальных методы и данные.
Для создания объекта используется параметр «Новый».
Для создания объектов применяются менеджеры. Их называют в соответствии с ветками конфигурации: Документы, Справочники и т.д. Методы в менеджере можно расширять:
Собственные объекты конфигурации 1С неизменяемы.
Ошибки в 1С
Программирование на 1С отличается тем, что при написании программы не всегда понятно, появится ли ошибка при выполнении той или иной строчки. Так, если во внешней обработке ввести:
и открыть её в базе, где указанного справочника нет – возникнет ошибка.
Чтобы она не выскочила, можно применять такой алгоритм:
Если при выполнении кода между «Попытка» и «Исключение» будет ошибка, то выполнение остановится и программа перейдёт к строчке между «Исключение» и «КонецПопытки». Если ошибка не появится, строчки выполняться не будут.
Функция ОписаниеОшибки() запускается только между «Исключение» и «КонецПопытки» и выдаёт сведения о содержании возникшей ошибки.
Функции и Процедуры
Данные методы предназначены для одноимённого наименования сразу нескольких строчек. Затем, при написании этого названия в тексте кода, будет активирована соответствующая функция. Функции и процедуры – это стандартные методы и обработчики в языке 1С:
Отличие функции от процедуры в том, что последняя не может вернуть значение, которое было посчитано при выполнении данных строк:
Как программировать?
Программирование на 1С подразумевает использование модулей. Найдя подходящий модуль, можно приступать к написанию своего кода.
Все мы знаем, что использование горячих клавиш значительно ускоряет работу программиста 1С. Но как показывает практика, для того чтобы посмотреть какие есть сочетания клавиш, запомнить их и начать использовать времени не хватает. В начале карьеры сосредотачиваешься на более важных вещах. При наборе определенного уровня профессионализма имеем уже устоявшиеся привычки и переучиваться трудно.
Все мы знаем, что использование горячих клавиш значительно ускоряет работу программиста 1С. Но как показывает практика, для того чтобы посмотреть какие есть сочетания клавиш, запомнить их и начать использовать времени не хватает. В начале карьеры сосредотачиваешься на более важных вещах. При наборе определенного уровня профессионализма имеем уже устоявшиеся привычки и переучиваться трудно.
Однако оно того стоит. Не только потому что быстрее, но, и это важнее, потому что удобнее. И здесь я хотел бы собрать наиболее часто используемые горячие клавиши в конфигураторе 1С.
Во время исследования не знакомого кода часто приходится прыгать по модулю в разные функции и процедуры. Иногда нужно анализировать пару функций одновременно в разных местах модуля. Учитывая что количество строк кода порой измеряется десятками тысяч, не обойтись без закладок.
С закладками работают два сочетания:
Alt+F2 - устанавливает закладку на текущую строку.
F2 - перемещает курсор между закладками.
Для перехода к телу процедуры или функции, необходим встать на неё курсором и нажать
Быстро пермещаться по ветвям конструкций Если. ИначеЕсли. Иначе. а так же между началом и концом цикла помогают клавиши
Для пермещения к конкретной строке с известным номером (например, если ошибка выскочила у пользователя, который сообщает о ней по телефону)
Написание кода обычно значительно менее затратно по времени, чем его отладка. Но и здесь время можно экономить.
При написании кода серьезную помощь оказывает автодополнение, либо контекстная подсказка
Быстро отформатировать отступами участок кода значительно удобнее, чем вручную нажимать Таб на каждой строке и для этого есть такое сочетание клавиш
Серьёзно ускорить кодирование может использование шаблонов, для этого служит сочетание
Для быстрой подсказки от синтакс-помощника по оператору, функции плотформы или любому другому ключевому слову надо установить курсор на это слово и нажать
Без отладки не обходится ни исследование незнакомого кода, ни написание собственного. Привычка использовать клавиатуру вместо мыши здесь окупается очень быстро. Это не только быстрее, но и удобнее.
F5 - запус отладки
F10 - выполнить следующую строку кода (не заходя в процедуры и функции)
F11 - выполнить следующую строку кода (c заходом в процедуры и функции)
Shift-F9 - рассчитать выражение
Запомнить сразу все сочетания клавиш трудно, да и не нужно. Лучше запоминать их небольшими кусочками по смыслу. Запоминать лучше всего применяя. В этой статье собраны наиболее часто применимые сочетания клавиш, все существующие сочетания клавиш можно найти в справке конфигуратора.
Читайте также: