наполнение

This commit is contained in:
wakadakawaka 2025-04-16 18:37:21 +05:00
parent 4e4946c392
commit 684daa47a4
42 changed files with 2367 additions and 6 deletions

View File

@ -0,0 +1,16 @@
## Через константу
```bsl
Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
```
> Далее - функции служебного программного интерфейса
## На клиенте
```bsl
Валюта = ЗначениеНастроекВызовСервера.ВалютаРегламентированногоУчетаОрганизации(Организация);
```
## На сервере
```bsl
Валюта = ЗначениеНастроекКлиентСерверПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
```

View File

@ -0,0 +1,40 @@
```bsl
&НаКлиенте
Процедура КорзинаНоменклатурыРазбитьСтроку(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("КорзинаНоменклатурыРазбитьСтрокуЗавершение", ЭтотОбъект);
ПараметрыРазбиения = РаботаСТабличнымиЧастямиКлиент.ПараметрыРазбиенияСтроки();
ПараметрыРазбиения.ИмяПоляКоличество = "Количество";
ПараметрыРазбиения.Заголовок = "Введите количество для новой строки";
ПараметрыРазбиения.РазрешитьНулевоеКоличество = Ложь;
ПараметрыРазбиения.Количество = Неопределено;
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(
ТаблицаКорзинаНоменклатуры,
Элементы.ТаблицаКорзинаНоменклатуры,
ОписаниеОповещения,
ПараметрыРазбиения);
КонецПроцедуры
&НаКлиенте
Процедура КорзинаНоменклатурыРазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт
ТекДанн = Элементы.ТаблицаКорзинаНоменклатуры.ТекущиеДанные;
// обработка новой и старой строк при необходимости
Если НоваяСтрока <> Неопределено Тогда
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму", "Количество");
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекДанн, СтруктураДействий, КэшированныеЗначения);
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, КэшированныеЗначения);
Элементы.ТаблицаКорзинаНоменклатуры.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
КонецЕсли;
КонецПроцедуры
```

View File

@ -0,0 +1,39 @@
---
title: ВТ «Плановые начисления» сотрудников на дату
---
Сначала необходимо создать временную таблицу отборов, в которой будет 2 поля `Сотрудник` и `Дата`. Эти поля заполняем списком сотрудников, по которым необходимо получить начисления и дату актуальности. В примере ниже создается временная таблица `ВТСотрудникиПериоды`, в которую из формы через таблицу значений передаются сотрудники.
```bsl
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТЗ = РеквизитФормыВЗначение("Сотрудники", Тип("ТаблицаЗначений"));
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Сотрудник КАК Сотрудник,
| &Дата КАК Период
|ПОМЕСТИТЬ ВТСотрудникиПериоды
|ИЗ
| &ТЗ КАК Сотрудники";
Запрос.УстановитьПараметр("ТЗ", ТЗ);
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.Выполнить();
```
Далее вызываем функцию общего модуля `КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников`, которая вернет текст запроса для получения начислений:
```bsl
ЗапросНачисления = КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников(
, Истина // Только разрешенные
, "ВТНачисления" // Имя создаваемой ВТ
, "ВТСотрудникиПериоды" // Имя ВТ-отбора (создали выше)
, "Сотрудник, Период"); // Имя полей таблицы ВТ-отбора
```
Теперь полученный текст запроса необходимо передать в сам запрос. В менеджере временных таблиц такого запроса должна быть таблица отборов, которая была указана в качестве аргумента функции `ЗапросВТПлановыеНачисленияСотрудников` (в нашем случае `ВТСотрудникиПериоды`). Проще всего передать текст в уже имеющийся запрос:
```bsl
Запрос.Текст = ЗапросНачисления.Текст;
Запрос.Выполнить();
```
В результате - Временная таблица со всеми начислениями сотрудников

View File

@ -0,0 +1,7 @@
Для того, чтобы нумерация документов была "Типовой", длину кода нужно установить **11 символов**, а в модуле объекта документа прописать.
```bsl
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(ЭтотОбъект, СтандартнаяОбработка, Префикс);
КонецПроцедуры
```
Для того, чтобы этот код работал, нужно, чтобы в реквизитах документа обязательно была `Организация`

View File

@ -0,0 +1,22 @@
---
title: Как вывести произвольный табличный документ в общую форму печати
---
```bsl
&НаКлиенте
Процедура ВывестиНаПечать(Команда)
Если Не ПроверитьЗаполнение(); Тогда
Возврат;
КонецЕсли;
ТабДок = СформироватьТабличныйДокумент();
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("ИмяКоллекцииПечатныхФорм");
КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок;
КоллекцияПечатныхФорм[0].Экземпляров = 1;
КоллекцияПечатныхФорм[0].СинонимМакета = "Синоним макета;
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, Неопределено, ЭтотОбъект);
КонецПроцедуры
```

View File

@ -0,0 +1,19 @@
```bsl
&НаСервереБезКонтекста
Процедура ОтправитьСообщенияПоСписку(ТекстСообщения, Отправитель, СписокПолучатеелей)
Сообщение = Обсуждения.ОписаниеСообщения(ТекстСообщения);
Для Каждого Пользователь Из СписокПользователей Цикл
ПолучательВМассиве = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Пользователь);
Попытка
Обсуждения.ОтправитьСообщение(Отправитель, ПолучательВМассиве, Сообщение, Неопределено);
Исключение
ЗаписьЖурналаРегистрации(...);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
```

View File

@ -0,0 +1,25 @@
```bsl
// Функция - Адрес электронной почты пользователя
//
// Параметры:
// Пользователь - СправочникСсылка.Пользователи -
//
// Возвращаемое значение:
// Строка - Проверенный адрес электронной почты. Если данные контактной информации не отвечают трвебованиям к адресу ЭП,
// возвращается пустая строка
//
Функция АдресЭлектроннойПочтыПользователя(Пользователь) Экспорт
АдресЭлектроннойПочты = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Пользователь,
Справочники.ВидыКонтактнойИнформации.EmailПользователя);
Результат = "";
Если ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Ложь) Тогда
Результат = АдресЭлектроннойПочты;
КонецЕсли;
Возврат Результат;
КонецФункции
```

View File

@ -0,0 +1,30 @@
```bsl
Процедура ОтправитьПисьмо(АдресЭлектроннойПочты, ТекстСообщения, ТемаСообщения) Экспорт
Если Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Ложь) Тогда
ЗаписьЖурналаРегистрации("Рассылка уведомлений на электронную почту",
УровеньЖурналаРегистрации.Ошибка,,,
СтрШаблон("Ошибка отправки сообщения. Адрес ""%1"" не валиден", АдресЭлектроннойПочты));
Возврат;
КонецЕсли;
УчетнаяЗапись = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись();
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", АдресЭлектроннойПочты);
ПараметрыПисьма.Вставить("Тема", ТемаСообщения);
ПараметрыПисьма.Вставить("Тело", ТекстСообщения);
Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма);
Попытка
РаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо);
Исключение
ЗаписьЖурналаРегистрации("Рассылка уведомлений на электронную почту",
УровеньЖурналаРегистрации.Ошибка,,,
СтрШаблон("Ошибка отправки сообщения. Описание ошибки %1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
КонецПроцедуры
```

View File

@ -0,0 +1,13 @@
```bsl
// QRСтрока - Строка - данные, которые необходимо разместить в QR-коде.
//
// УровеньКоррекции - Число - уровень погрешности изображения, при котором данный QR-код все еще возможно 100%
// распознать.
// Параметр должен иметь тип целого и принимать одно из 4 допустимых значений:
// 0 (7 % погрешности), 1 (15 % погрешности), 2 (25 % погрешности), 3 (35 % погрешности).
//
// Размер - Число - определяет длину стороны выходного изображения в пикселях.
// Если минимально возможный размер изображения больше этого параметра - код сформирован не будет.
//
КартинкаQR = ГенерацияШтрихкода.ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер)
```

View File

@ -0,0 +1,55 @@
```bsl
// Структура:
// * Ширина - Число - ширина изображения штрих кода.
// * Высота - Число - высота изображения штрих кода.
// * ТипКода - Число - штрихкода.
// Возможные значение:
// 99 - Авто выбор
// 0 - EAN8
// 1 - EAN13
// 2 - EAN128
// 3 - Code39
// 4 - Code128
// 5 - Code16k
// 6 - PDF417
// 7 - Standart (Industrial) 2 of 5
// 8 - Interleaved 2 of 5
// 9 - Code39 Расширение
// 10 - Code93
// 11 - ITF14
// 12 - RSS14
// 14 - EAN13AddOn2
// 15 - EAN13AddOn5
// 16 - QR
// 17 - GS1DataBarExpandedStacked
// 18 - Datamatrix ASCII
// 19 - Datamatrix BASE256
// 20 - Datamatrix TEXT
// 21 - Datamatrix C40
// 22 - Datamatrix X12
// 23 - Datamatrix EDIFACT
// 24 - Datamatrix GS1ASCII
// 25 - Aztec
// * ОтображатьТекст - Булево - отображать HRI теста для штрихкода.
// * РазмерШрифта - Число - размер шрифта HRI теста для штрихкода.
// * УголПоворота - Число - угол поворота.
// Возможные значения: 0, 90, 180, 270.
// * Штрихкод - Строка - значение штрихкод в виде строки или Base64.
// * ТипВходныхДанных - Число - тип входных данных
// Возможные значения: 0 - Строка, 1 - Base64
// * ПрозрачныйФон - Булево - прозрачный фон изображения штрихкода.
// * УровеньКоррекцииQR - Число - уровень коррекции штрихкода QR.
// Возможные значения: 0 - L, 1 - M, 2 - Q, 3 - H.
// * Масштабировать - Булево - масштабировать изображение штрихкода.
// * СохранятьПропорции - Булево - сохранять пропорции изображения штрихкода.
// * ВертикальноеВыравнивание - Число - вертикальное выравнивание штрихкода.
// Возможные значения: 1 - По верхнему краю, 2 - По центру, 3 - По нижнему краю
// * GS1DatabarКоличествоСтрок - Число - количество строк в штрихкоде GS1Databar.
// * УбратьЛишнийФон - Булево
// * ЛоготипКартинка - Строка - строка с base64 представлением png картинки логотипа.
// * ЛоготипРазмерПроцентОтШК - Число - процент от генерированного QR для вписывания логотипа.
//
Параметры = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
ИзображениеШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
```

View File

@ -0,0 +1,6 @@
```bsl
ЭлементОтбора = СписокДокументов.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = ДатаНачала;
```

View File

@ -0,0 +1,7 @@
```bsl
Элементы.СписокДокументов.Период.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод;
Элементы.СписокДокументов.Период.ДатаНачала = ДатаНачала;
Элементы.СписокДокументов.Период.ДатаОкончания = ДатаОкончания;
Элементы.СписокДокументов.Обновить();
```

View File

@ -0,0 +1,106 @@
---
title: ОбработкаПолученияДанныхВыбора
---
## 📌 Назначение
Обработчик `ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)` позволяет:
- Влиять на формирование списка выбора.
- Модифицировать параметры отбора.
- Полностью формировать список выбора вручную.
---
## 🔧 Параметры обработчика
- `ДанныеВыбора`: переменная для возврата кастомного списка.
- `Параметры`: структура параметров, включая отборы и строку поиска.
- `СтандартнаяОбработка`:
- `Истина`: платформа формирует список выбора.
- `Ложь`: список задаётся вручную через `ДанныеВыбора`.
---
## 🔹 Пример 1: Модификация параметров отбора
**Задача:** Выводить товары только от указанного поставщика и не услуги.
### Решение:
1. В `Параметры.Отбор` добавить:
```1C
Параметры.Отбор.Вставить("ВидТовара", Перечисления.ВидыТоваров.Товар);
```
2. Оставить `СтандартнаяОбработка = Истина`.
---
## 🔹 Пример 2: Полное переопределение — простой список
**Задача:** Предлагать склады, не являющиеся розничными.
### Пример кода:
```1C
СтандартнаяОбработка = Ложь;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Склады.Ссылка ИЗ Справочник.Склады КАК Склады
ГДЕ Склады.Розничный = ЛОЖЬ
И Склады.Наименование ПОДОБНО &СтрокаПоиска";
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
Результат = Запрос.Выполнить();
Список = Новый СписокЗначений;
Пока Результат.Выбрать().Следующий() Цикл
Список.Добавить(Выборка.Ссылка);
КонецЦикла;
ДанныеВыбора = Список;
```
---
## 🔹 Пример 3: Полное переопределение — сложный список
**Задача:** Выводить поставщиков с пометкой удаления и предупреждением о ненадёжности.
### Пример кода:
```1C
СтандартнаяОбработка = Ложь;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Поставщики.Ссылка, Поставщики.ПометкаУдаления, Поставщики.Ненадежный
ИЗ Справочник.Поставщики КАК Поставщики
ГДЕ Поставщики.Наименование ПОДОБНО &СтрокаПоиска";
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
Результат = Запрос.Выполнить();
Список = Новый СписокЗначений;
Пока Результат.Выбрать().Следующий() Цикл
Структура = Новый Структура;
Структура.Вставить("Значение", Выборка.Ссылка);
Структура.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
Если Выборка.Ненадежный Тогда
Структура.Вставить("Предупреждение", "Это ненадежный поставщик...");
КонецЕсли;
Список.Добавить(Структура);
КонецЦикла;
ДанныеВыбора = Список;
```
---
## ⚠️ Особенности производительности
Обработчик вызывается:
- При автоподборе.
- При потере фокуса поля ввода.
- При быстром выборе.
**Рекомендация:** тщательно оптимизировать запросы и код обработчика.

View File

@ -0,0 +1,9 @@
1. Установите EDT
2. После установки EDT для того, чтобы файлы проектов хранились в произвольном расположении, создайте папку в удобном месте, например `D:\EDT`
3. Внесите корректировки в файл настроек EDT (по умолчанию расположен `C:\Program Files\1C\1CE\components\1c-edt-2023.2.4+6-x86_64\1cedt.ini`)
4. Для того, чтобы EDT выделяла больше оперативной памяти, необходимо откорректировать строку `-Xmx4096m`, где вместо 4096 указать произвольный объем оперативной памяти в мегабайтах
5. В продолжение п.5, для того, чтобы проекты сохранялись в произвольном месте, нужно добавить строку `-Djava.io.tmpdir=D:\EDT`, где можно указать любой удобный путь.

View File

@ -1,7 +1,3 @@
---
title: Разрешенное имя переменной из любой строки
slug: knowledge-base/snippety/razreshennoe-imya-peremennoy-iz-lyuboy-stroki
---
```bsl
// Функция - Разрешенное имя переменной из наименования
//

View File

@ -0,0 +1,19 @@
```bsl
Функция ФайлЗаблокирован(ПолноеИмяФайла) Экспорт
ЕстьБлокировка = Ложь;
Файл = Новый Файл(ПолноеИмяФайла);
Если Файл.Существует() Тогда
Попытка
ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, , , Истина);
Исключение
ЕстьБлокировка = Истина;
КонецПопытки;
КонецЕсли;
Возврат ЕстьБлокировка;
КонецФункции
```

View File

@ -0,0 +1,12 @@
```bsl
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
...
Настройки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
Дата = Настройки.ПараметрыДанных.Элементы.Найти("Дата").Значение.Дата;
Сотрудник = Настройки.ПараметрыДанных.Элементы.Найти("Сотрудник").Значение;
КонецПроцедуры
```

View File

@ -0,0 +1,43 @@
## Сохранение настроек
```bsl
&НаСервереБезКонтекста
Процедура СохранитьНастройкиФормы(ВидПечати)
КлючОбъектаНастроек = "Расш1_ФормаНастроекПечатиЭтикеток";
КлючНастроек = "Расш1_ВидПечати";
ИмяТекущегоПользователя = ИмяПользователя();
Настройки = Новый Структура("ВидПечати", ВидПечати); // Структура с произвольными значениями
ХранилищеОбщихНастроек.Сохранить(КлючОбъектаНастроек, КлючНастроек, Настройки, , ИмяТекущегоПользователя);
КонецПроцедуры
```
## Восстановление настроек
```bsl
&НаСервереБезКонтекста
Функция СохраненныеНастройкиФормы()
КлючОбъектаНастроек = "Расш1_ФормаНастроекПечатиЭтикеток";
КлючНастроек = "Расш1_ВидПечати";
ИмяТекущегоПользователя = ИмяПользователя();
ОшибкаПолученияНастроек = Ложь;
Попытка
Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъектаНастроек, КлючНастроек, , ИмяТекущегоПользователя);
Исключение
ОшибкаПолученияНастроек = Истина;
КонецПопытки;
Если ОшибкаПолученияНастроек Тогда
Настройки = Новый Структура("ВидПечати", 0);
КонецЕсли;
Возврат Настройки;
КонецФункции
```

View File

@ -0,0 +1,53 @@
### Обычная группа без отображения
```bsl
ГруппаДатаНомер = Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
```
### Обычная группа
```bsl
//Пример создания обычной группы
ГруппаШапка = Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"), ЭтотОбъект);
ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаШапка.Заголовок = "Основные реквизиты";
ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;
```
### Свертываемая группа
```bsl
ГруппаХарактеристики = Элементы.Добавить("СвертываемаяГруппа", Тип("ГруппаФормы"), Элементы.СтраницаКонтейнер);
ГруппаХарактеристики.Заголовок = "СвертываемаяГруппа";
ГруппаХарактеристики.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаХарактеристики.Поведение = ПоведениеОбычнойГруппы.Свертываемая;
ГруппаХарактеристики.ОтображатьОтступСлева = Истина;
ГруппаХарактеристики.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.Картинка;
```
### Группа страниц
```bsl
//Пример создания группы страниц
ГруппаСтраниц = Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"), ЭтотОбъект);
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
```
### Страницы
```bsl
СтраницаТовары = Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"), ГруппаСтраниц);
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
СтраницаТовары.Заголовок = "Товары";
СтраницаДополнительно = Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"), ГруппаСтраниц);
СтраницаДополнительно.Вид = ВидГруппыФормы.Страница;
СтраницаДополнительно.Заголовок = "Дополнительно";
```

View File

@ -0,0 +1,15 @@
### Декорация "Надпись"
```bsl
НовыйЭлемент = Элементы.Добавить("ЗаголовокТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
НовыйЭлемент.Заголовок = "Глобус";
```
### Декорация "Картинка"
```bsl
НовыйЭлемент = Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка;
НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть;
НовыйЭлемент.Ширина = 20;
НовыйЭлемент.Высота = 8;
```

View File

@ -0,0 +1,14 @@
Для работы кнопок, необходимо наличие команды. Если на форме нет определенной команды, то её необходимо создать программно.
### Создаем команду
```bsl
НоваяКоманда = Команды.Добавить("ОбщаяКоманда");
НоваяКоманда.Заголовок = "Общая команда";
НоваяКоманда.Действие = "ОбщееДействие"; //указываем только имя процедуры
```
### Создаем кнопку
```bsl
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"),СтраницаТовары);
НовыйЭлемент.Заголовок = "Привет мир!";
НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда";
```

View File

@ -0,0 +1,23 @@
```bsl
//Создание полей
НовыйЭлемент = Элементы.Добавить("Номер", Тип("ПолеФормы"),ГруппаДатаНомер);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Номер";
НовыйЭлемент = Элементы.Добавить("Дата", Тип("ПолеФормы"),ГруппаДатаНомер);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Дата";
НовыйЭлемент = Элементы.Добавить("Наименование", Тип("ПолеФормы"),ГруппаШапка);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Наименование";
НовыйЭлемент = Элементы.Добавить("Комментарий", Тип("ПолеФормы"),СтраницаДополнительно);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Комментарий";
НовыйЭлемент = Элементы.Добавить("ПометкаУдаления", Тип("ПолеФормы"),СтраницаДополнительно);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "ПометкаУдаления";
```

View File

@ -0,0 +1,61 @@
## Пример добавления
```1c
ДобавляемыеРеквизиты = Новый Массив; // Определяем массив добавляемых реквизитов
НовыйРеквизит = Новый РеквизитФормы(
"Комментарий",
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500))
);
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы(
"Номер",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0))
);
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы(
"Дата",
Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))
);
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы(
"Наименование",
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150))
);
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
НовыйРеквизит = Новый РеквизитФормы(
"ПометкаУдаления",
Новый ОписаниеТипов("Булево")
);
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
ЭтотОбъект.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
```
### Синтаксис
#### **`ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)`**
### Параметры
#### `<ДобавляемыеРеквизиты>` (необязательный)
- **Тип:** `Массив`
- **Описание:** Массив, содержащий объекты типа `РеквизитФормы`.
Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками.
К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции:
```1c
ЭтотОбъект.<Имя реквизита>
```
#### `<УдаляемыеРеквизиты>` (необязательный)
- **Тип:** `Массив`
- **Описание:** Массив, содержащий строки, описывающие пути к удаляемым реквизитам.

View File

@ -0,0 +1,20 @@
Для работы таблицы формы необходимо наличие реквизита **`Таблица значений`** или **`Динамический список`**. Не забывайти про путь, если таблица находиться в объекте, тогда указываем полный путь, пример: **`Объект.Товары`** и так же для колонок **`Объект.Товары.Номенклатура`**.
### Создаем таблицу
```bsl
ТаблицаФормы = Элементы.Добавить("МояТаблицаТоваров", Тип("ТаблицаФормы"),ЭтотОбъект);
ТаблицаФормы.ПутьКДанным = "Объект.Товары";
```
### Создаем колонки
```bsl
//Создаем колонку для выбора и ввода
НовыйЭлемент = Форма.Элементы.Добавить("МояТаблицаТоваровНоменклатура",Тип("ПолеФормы"),ТаблицаФормы);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Объект.Товары.Номенклатура";
//Создаем колонку для булево
НовыйЭлемент = Форма.Элементы.Добавить("МояТаблицаТоваровПроведен",Тип("ПолеФормы"),ТаблицаФормы);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "Объект.Товары.Используется";
```

View File

@ -18,6 +18,7 @@
НовыйЭлемент.Использование = Истина;
// Настраиваем оформление. Варианты параметров можно посмотреть в форме настройки условного оформления на форме
//(цвет фона, цвет текста, видимость, доступность и пр.)
НовыйЭлемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветВажного);
НовыйЭлемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ЦветФонаГруппировкиОтчета1);

View File

@ -0,0 +1,156 @@
## 📝 Описание
Стандартные формы выбора даты не предполагают выбор времени — его нужно вводить вручную в поле ввода. Для удобства можно создать собственную форму и вызывать её при выборе даты в поле ввода.
## 🛠 Создание формы, параметров, реквизитов
1. Создаём новую форму с реквизитами:
- `День` (тип: Дата)
- `Часы` (тип: Число)
- `Минуты` (тип: Число)
2. Размещаем реквизиты на форме и объединяем их в группу с горизонтальной группировкой.
3. Создаём ключевой параметр `Дата` (тип: Дата, состав: Дата и время), в который будем передавать исходную дату в форму извне.
![Изображение 1.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F16&files=aa602e3a-8359-411c-be66-4df036543426.png)
4. Для реквизитов `Часы` и `Минуты` устанавливаем вид как «Поле переключателя» с видом переключателя «Тумблер».
5. Для `Часы` определяем список выбора и устанавливаем количество колонок = 2.
![Изображение 2.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F16&files=1df97832-daf2-4cae-96e1-3524b06f712f.png)
6. Для `Минуты` делаем аналогично, но количество колонок = 1 и список выбора немного другой.
7. Добавляем команду `Выбрать` и размещаем её на командной панели.
8. Добавляем декорацию `Представление времени`, настраиваем шрифт, цвет и прочее. Эта декорация будет показывать выбранные значения.
## 🧩 Модуль формы
### Обработчики событий формы
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ЗначениеЗаполнено(Параметры.Дата) Тогда
СтруктураДаты = СтруктураДаты(Параметры.Дата);
День = Параметры.Дата;
Часы = СтруктураДаты.Час;
Минуты = СтруктураДаты.Минута;
Иначе
День = ТекущаяДатаСеанса();
Часы = 8;
Минуты = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОбновитьДекорациюВыбранноеВремя();
КонецПроцедуры
```
### Обработчики событий элементов шапки формы
```bsl
&НаКлиенте
Процедура ДеньВыбор(Элемент, ВыбраннаяДата)
ВыбратьДатуВремя();
КонецПроцедуры
&НаКлиенте
Процедура ДеньПриИзменении(Элемент)
ОбновитьДекорациюВыбранноеВремя();
КонецПроцедуры
&НаКлиенте
Процедура ЧасыПриИзменении(Элемент)
ОбновитьДекорациюВыбранноеВремя();
КонецПроцедуры
&НаКлиенте
Процедура МинутыПриИзменении(Элемент)
ОбновитьДекорациюВыбранноеВремя();
КонецПроцедуры
```
### Обработчики команд формы
```bsl
&НаКлиенте
Процедура Выбрать(Команда)
ВыбратьДатуВремя();
КонецПроцедуры
```
### Служебные процедуры и функции
```bsl
&НаКлиенте
Процедура ВыбратьДатуВремя()
СтруктураДаты = СтруктураДаты(День);
ВыбраннаяДатаВремя = Дата(СтруктураДаты.Год, СтруктураДаты.Месяц, СтруктураДаты.День, Часы, Минуты, 0);
ОповеститьОВыборе(ВыбраннаяДатаВремя);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьДекорациюВыбранноеВремя()
ВыбранноеВремя = СтрШаблон("Выбрано: %1 %2 ч. %3 мин.",
Формат(День, "ДФ='дд ММММ гггг "г."'"),
Формат(Часы, "ЧЦ=2; ЧН=00; ЧВН="),
Формат(Минуты, "ЧЦ=2; ЧН=00; ЧВН="));
Элементы.ПредставлениеВремени.Заголовок = ВыбранноеВремя;
КонецПроцедуры
&НаКлиенте
Функция СтруктураДаты(Дата) Экспорт
Структура = Новый Структура;
Структура.Вставить("Год", 1);
Структура.Вставить("Месяц", 1);
Структура.Вставить("День", 1);
Структура.Вставить("Час", 0);
Структура.Вставить("Минута", 0);
Структура.Вставить("Секунда", 0);
Если ТипЗнч(Дата) = Тип("Дата") Тогда
Структура.Год = Год(Дата);
Структура.Месяц = Месяц(Дата);
Структура.День = День(Дата);
Структура.Час = Час(Дата);
Структура.Минута = Минута(Дата);
Структура.Секунда = Секунда(Дата);
КонецЕсли;
Возврат Структура;
КонецФункции
```
## 🚀 Вызов формы
Определяем два обработчика событий произвольного реквизита формы с типом дата — `НачалоВыбора` и `ОбработкаВыбора`.
В обработчике `НачалоВыбора` вызываем нашу форму. При вызове владельцем нужно указать элемент формы, который инициировал выбор.
```bsl
&НаКлиенте
Процедура ДатаВремяУбытияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Дата", Объект.ДатаВремяУбытия);
ОткрытьФорму("ОбщаяФорма.УТЗ_ПЛ_ВыборСтантартногоПериодаСоВременем", ПараметрыФормы,
Элементы.ДатаВремяУбытия, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ДатаВремяУбытияОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, СтандартнаяОбработка)
Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Объект.ДатаВремяУбытия = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
```