наполнение
This commit is contained in:
parent
4e4946c392
commit
684daa47a4
@ -0,0 +1,16 @@
|
||||
|
||||
## Через константу
|
||||
```bsl
|
||||
Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
|
||||
```
|
||||
|
||||
> Далее - функции служебного программного интерфейса
|
||||
## На клиенте
|
||||
```bsl
|
||||
Валюта = ЗначениеНастроекВызовСервера.ВалютаРегламентированногоУчетаОрганизации(Организация);
|
||||
```
|
||||
|
||||
## На сервере
|
||||
```bsl
|
||||
Валюта = ЗначениеНастроекКлиентСерверПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
|
||||
```
|
@ -0,0 +1,40 @@
|
||||
```bsl
|
||||
&НаКлиенте
|
||||
Процедура КорзинаНоменклатурыРазбитьСтроку(Команда)
|
||||
|
||||
ОписаниеОповещения = Новый ОписаниеОповещения("КорзинаНоменклатурыРазбитьСтрокуЗавершение", ЭтотОбъект);
|
||||
|
||||
ПараметрыРазбиения = РаботаСТабличнымиЧастямиКлиент.ПараметрыРазбиенияСтроки();
|
||||
ПараметрыРазбиения.ИмяПоляКоличество = "Количество";
|
||||
ПараметрыРазбиения.Заголовок = "Введите количество для новой строки";
|
||||
ПараметрыРазбиения.РазрешитьНулевоеКоличество = Ложь;
|
||||
ПараметрыРазбиения.Количество = Неопределено;
|
||||
|
||||
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(
|
||||
ТаблицаКорзинаНоменклатуры,
|
||||
Элементы.ТаблицаКорзинаНоменклатуры,
|
||||
ОписаниеОповещения,
|
||||
ПараметрыРазбиения);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура КорзинаНоменклатурыРазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт
|
||||
|
||||
ТекДанн = Элементы.ТаблицаКорзинаНоменклатуры.ТекущиеДанные;
|
||||
|
||||
// обработка новой и старой строк при необходимости
|
||||
Если НоваяСтрока <> Неопределено Тогда
|
||||
|
||||
СтруктураДействий = Новый Структура;
|
||||
СтруктураДействий.Вставить("ПересчитатьСумму", "Количество");
|
||||
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекДанн, СтруктураДействий, КэшированныеЗначения);
|
||||
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, КэшированныеЗначения);
|
||||
|
||||
Элементы.ТаблицаКорзинаНоменклатуры.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
```
|
@ -0,0 +1,39 @@
|
||||
---
|
||||
title: ВТ «Плановые начисления» сотрудников на дату
|
||||
---
|
||||
Сначала необходимо создать временную таблицу отборов, в которой будет 2 поля `Сотрудник` и `Дата`. Эти поля заполняем списком сотрудников, по которым необходимо получить начисления и дату актуальности. В примере ниже создается временная таблица `ВТСотрудникиПериоды`, в которую из формы через таблицу значений передаются сотрудники.
|
||||
|
||||
```bsl
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
|
||||
|
||||
ТЗ = РеквизитФормыВЗначение("Сотрудники", Тип("ТаблицаЗначений"));
|
||||
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| Сотрудники.Сотрудник КАК Сотрудник,
|
||||
| &Дата КАК Период
|
||||
|ПОМЕСТИТЬ ВТСотрудникиПериоды
|
||||
|ИЗ
|
||||
| &ТЗ КАК Сотрудники";
|
||||
|
||||
Запрос.УстановитьПараметр("ТЗ", ТЗ);
|
||||
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
|
||||
Запрос.Выполнить();
|
||||
```
|
||||
|
||||
Далее вызываем функцию общего модуля `КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников`, которая вернет текст запроса для получения начислений:
|
||||
```bsl
|
||||
ЗапросНачисления = КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников(
|
||||
, Истина // Только разрешенные
|
||||
, "ВТНачисления" // Имя создаваемой ВТ
|
||||
, "ВТСотрудникиПериоды" // Имя ВТ-отбора (создали выше)
|
||||
, "Сотрудник, Период"); // Имя полей таблицы ВТ-отбора
|
||||
```
|
||||
|
||||
Теперь полученный текст запроса необходимо передать в сам запрос. В менеджере временных таблиц такого запроса должна быть таблица отборов, которая была указана в качестве аргумента функции `ЗапросВТПлановыеНачисленияСотрудников` (в нашем случае `ВТСотрудникиПериоды`). Проще всего передать текст в уже имеющийся запрос:
|
||||
```bsl
|
||||
Запрос.Текст = ЗапросНачисления.Текст;
|
||||
Запрос.Выполнить();
|
||||
```
|
||||
В результате - Временная таблица со всеми начислениями сотрудников
|
@ -0,0 +1,7 @@
|
||||
Для того, чтобы нумерация документов была "Типовой", длину кода нужно установить **11 символов**, а в модуле объекта документа прописать.
|
||||
```bsl
|
||||
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
|
||||
ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(ЭтотОбъект, СтандартнаяОбработка, Префикс);
|
||||
КонецПроцедуры
|
||||
```
|
||||
Для того, чтобы этот код работал, нужно, чтобы в реквизитах документа обязательно была `Организация`
|
@ -0,0 +1,22 @@
|
||||
---
|
||||
title: Как вывести произвольный табличный документ в общую форму печати
|
||||
---
|
||||
```bsl
|
||||
&НаКлиенте
|
||||
Процедура ВывестиНаПечать(Команда)
|
||||
|
||||
Если Не ПроверитьЗаполнение(); Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ТабДок = СформироватьТабличныйДокумент();
|
||||
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("ИмяКоллекцииПечатныхФорм");
|
||||
|
||||
КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок;
|
||||
КоллекцияПечатныхФорм[0].Экземпляров = 1;
|
||||
КоллекцияПечатныхФорм[0].СинонимМакета = "Синоним макета;
|
||||
|
||||
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, Неопределено, ЭтотОбъект);
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
@ -0,0 +1,19 @@
|
||||
```bsl
|
||||
&НаСервереБезКонтекста
|
||||
Процедура ОтправитьСообщенияПоСписку(ТекстСообщения, Отправитель, СписокПолучатеелей)
|
||||
|
||||
Сообщение = Обсуждения.ОписаниеСообщения(ТекстСообщения);
|
||||
|
||||
Для Каждого Пользователь Из СписокПользователей Цикл
|
||||
|
||||
ПолучательВМассиве = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Пользователь);
|
||||
Попытка
|
||||
Обсуждения.ОтправитьСообщение(Отправитель, ПолучательВМассиве, Сообщение, Неопределено);
|
||||
Исключение
|
||||
ЗаписьЖурналаРегистрации(...);
|
||||
КонецПопытки;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
@ -0,0 +1,25 @@
|
||||
```bsl
|
||||
// Функция - Адрес электронной почты пользователя
|
||||
//
|
||||
// Параметры:
|
||||
// Пользователь - СправочникСсылка.Пользователи -
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Проверенный адрес электронной почты. Если данные контактной информации не отвечают трвебованиям к адресу ЭП,
|
||||
// возвращается пустая строка
|
||||
//
|
||||
Функция АдресЭлектроннойПочтыПользователя(Пользователь) Экспорт
|
||||
|
||||
АдресЭлектроннойПочты = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Пользователь,
|
||||
Справочники.ВидыКонтактнойИнформации.EmailПользователя);
|
||||
|
||||
Результат = "";
|
||||
|
||||
Если ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Ложь) Тогда
|
||||
Результат = АдресЭлектроннойПочты;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
```
|
@ -0,0 +1,30 @@
|
||||
```bsl
|
||||
|
||||
Процедура ОтправитьПисьмо(АдресЭлектроннойПочты, ТекстСообщения, ТемаСообщения) Экспорт
|
||||
|
||||
Если Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Ложь) Тогда
|
||||
ЗаписьЖурналаРегистрации("Рассылка уведомлений на электронную почту",
|
||||
УровеньЖурналаРегистрации.Ошибка,,,
|
||||
СтрШаблон("Ошибка отправки сообщения. Адрес ""%1"" не валиден", АдресЭлектроннойПочты));
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
УчетнаяЗапись = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись();
|
||||
|
||||
ПараметрыПисьма = Новый Структура;
|
||||
ПараметрыПисьма.Вставить("Кому", АдресЭлектроннойПочты);
|
||||
ПараметрыПисьма.Вставить("Тема", ТемаСообщения);
|
||||
ПараметрыПисьма.Вставить("Тело", ТекстСообщения);
|
||||
|
||||
Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма);
|
||||
|
||||
Попытка
|
||||
РаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо);
|
||||
Исключение
|
||||
ЗаписьЖурналаРегистрации("Рассылка уведомлений на электронную почту",
|
||||
УровеньЖурналаРегистрации.Ошибка,,,
|
||||
СтрШаблон("Ошибка отправки сообщения. Описание ошибки %1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
@ -0,0 +1,13 @@
|
||||
```bsl
|
||||
// QRСтрока - Строка - данные, которые необходимо разместить в QR-коде.
|
||||
//
|
||||
// УровеньКоррекции - Число - уровень погрешности изображения, при котором данный QR-код все еще возможно 100%
|
||||
// распознать.
|
||||
// Параметр должен иметь тип целого и принимать одно из 4 допустимых значений:
|
||||
// 0 (7 % погрешности), 1 (15 % погрешности), 2 (25 % погрешности), 3 (35 % погрешности).
|
||||
//
|
||||
// Размер - Число - определяет длину стороны выходного изображения в пикселях.
|
||||
// Если минимально возможный размер изображения больше этого параметра - код сформирован не будет.
|
||||
//
|
||||
КартинкаQR = ГенерацияШтрихкода.ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер)
|
||||
```
|
@ -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 для вписывания логотипа.
|
||||
//
|
||||
Параметры = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
|
||||
|
||||
ИзображениеШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
|
||||
```
|
@ -0,0 +1,6 @@
|
||||
```bsl
|
||||
ЭлементОтбора = СписокДокументов.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
|
||||
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
|
||||
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
|
||||
ЭлементОтбора.ПравоеЗначение = ДатаНачала;
|
||||
```
|
@ -0,0 +1,7 @@
|
||||
|
||||
```bsl
|
||||
Элементы.СписокДокументов.Период.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод;
|
||||
Элементы.СписокДокументов.Период.ДатаНачала = ДатаНачала;
|
||||
Элементы.СписокДокументов.Период.ДатаОкончания = ДатаОкончания;
|
||||
Элементы.СписокДокументов.Обновить();
|
||||
```
|
@ -0,0 +1,106 @@
|
||||
---
|
||||
title: ОбработкаПолученияДанныхВыбора
|
||||
---
|
||||
|
||||
## 📌 Назначение
|
||||
Обработчик `ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)` позволяет:
|
||||
- Влиять на формирование списка выбора.
|
||||
- Модифицировать параметры отбора.
|
||||
- Полностью формировать список выбора вручную.
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Параметры обработчика
|
||||
|
||||
- `ДанныеВыбора`: переменная для возврата кастомного списка.
|
||||
- `Параметры`: структура параметров, включая отборы и строку поиска.
|
||||
- `СтандартнаяОбработка`:
|
||||
- `Истина`: платформа формирует список выбора.
|
||||
- `Ложь`: список задаётся вручную через `ДанныеВыбора`.
|
||||
|
||||
---
|
||||
|
||||
## 🔹 Пример 1: Модификация параметров отбора
|
||||
|
||||
**Задача:** Выводить товары только от указанного поставщика и не услуги.
|
||||
|
||||
### Решение:
|
||||
1. В `Параметры.Отбор` добавить:
|
||||
```1C
|
||||
Параметры.Отбор.Вставить("ВидТовара", Перечисления.ВидыТоваров.Товар);
|
||||
```
|
||||
2. Оставить `СтандартнаяОбработка = Истина`.
|
||||
|
||||
---
|
||||
|
||||
## 🔹 Пример 2: Полное переопределение — простой список
|
||||
|
||||
**Задача:** Предлагать склады, не являющиеся розничными.
|
||||
|
||||
### Пример кода:
|
||||
```1C
|
||||
СтандартнаяОбработка = Ложь;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст = "ВЫБРАТЬ Склады.Ссылка ИЗ Справочник.Склады КАК Склады
|
||||
ГДЕ Склады.Розничный = ЛОЖЬ
|
||||
И Склады.Наименование ПОДОБНО &СтрокаПоиска";
|
||||
|
||||
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
|
||||
|
||||
Результат = Запрос.Выполнить();
|
||||
Список = Новый СписокЗначений;
|
||||
|
||||
Пока Результат.Выбрать().Следующий() Цикл
|
||||
Список.Добавить(Выборка.Ссылка);
|
||||
КонецЦикла;
|
||||
|
||||
ДанныеВыбора = Список;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔹 Пример 3: Полное переопределение — сложный список
|
||||
|
||||
**Задача:** Выводить поставщиков с пометкой удаления и предупреждением о ненадёжности.
|
||||
|
||||
### Пример кода:
|
||||
```1C
|
||||
СтандартнаяОбработка = Ложь;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст = "ВЫБРАТЬ Поставщики.Ссылка, Поставщики.ПометкаУдаления, Поставщики.Ненадежный
|
||||
ИЗ Справочник.Поставщики КАК Поставщики
|
||||
ГДЕ Поставщики.Наименование ПОДОБНО &СтрокаПоиска";
|
||||
|
||||
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
|
||||
|
||||
Результат = Запрос.Выполнить();
|
||||
Список = Новый СписокЗначений;
|
||||
|
||||
Пока Результат.Выбрать().Следующий() Цикл
|
||||
Структура = Новый Структура;
|
||||
Структура.Вставить("Значение", Выборка.Ссылка);
|
||||
Структура.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
|
||||
|
||||
Если Выборка.Ненадежный Тогда
|
||||
Структура.Вставить("Предупреждение", "Это ненадежный поставщик...");
|
||||
КонецЕсли;
|
||||
|
||||
Список.Добавить(Структура);
|
||||
КонецЦикла;
|
||||
|
||||
ДанныеВыбора = Список;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Особенности производительности
|
||||
|
||||
Обработчик вызывается:
|
||||
- При автоподборе.
|
||||
- При потере фокуса поля ввода.
|
||||
- При быстром выборе.
|
||||
|
||||
**Рекомендация:** тщательно оптимизировать запросы и код обработчика.
|
||||
|
@ -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`, где можно указать любой удобный путь.
|
@ -1,7 +1,3 @@
|
||||
---
|
||||
title: Разрешенное имя переменной из любой строки
|
||||
slug: knowledge-base/snippety/razreshennoe-imya-peremennoy-iz-lyuboy-stroki
|
||||
---
|
||||
```bsl
|
||||
// Функция - Разрешенное имя переменной из наименования
|
||||
//
|
@ -0,0 +1,19 @@
|
||||
|
||||
```bsl
|
||||
Функция ФайлЗаблокирован(ПолноеИмяФайла) Экспорт
|
||||
|
||||
ЕстьБлокировка = Ложь;
|
||||
|
||||
Файл = Новый Файл(ПолноеИмяФайла);
|
||||
Если Файл.Существует() Тогда
|
||||
Попытка
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, , , Истина);
|
||||
Исключение
|
||||
ЕстьБлокировка = Истина;
|
||||
КонецПопытки;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЕстьБлокировка;
|
||||
|
||||
КонецФункции
|
||||
```
|
@ -0,0 +1,12 @@
|
||||
|
||||
```bsl
|
||||
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
|
||||
|
||||
...
|
||||
|
||||
Настройки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
|
||||
Дата = Настройки.ПараметрыДанных.Элементы.Найти("Дата").Значение.Дата;
|
||||
Сотрудник = Настройки.ПараметрыДанных.Элементы.Найти("Сотрудник").Значение;
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
@ -0,0 +1,43 @@
|
||||
|
||||
## Сохранение настроек
|
||||
|
||||
```bsl
|
||||
&НаСервереБезКонтекста
|
||||
Процедура СохранитьНастройкиФормы(ВидПечати)
|
||||
|
||||
КлючОбъектаНастроек = "Расш1_ФормаНастроекПечатиЭтикеток";
|
||||
КлючНастроек = "Расш1_ВидПечати";
|
||||
|
||||
ИмяТекущегоПользователя = ИмяПользователя();
|
||||
Настройки = Новый Структура("ВидПечати", ВидПечати); // Структура с произвольными значениями
|
||||
ХранилищеОбщихНастроек.Сохранить(КлючОбъектаНастроек, КлючНастроек, Настройки, , ИмяТекущегоПользователя);
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
## Восстановление настроек
|
||||
|
||||
```bsl
|
||||
&НаСервереБезКонтекста
|
||||
Функция СохраненныеНастройкиФормы()
|
||||
|
||||
КлючОбъектаНастроек = "Расш1_ФормаНастроекПечатиЭтикеток";
|
||||
КлючНастроек = "Расш1_ВидПечати";
|
||||
|
||||
ИмяТекущегоПользователя = ИмяПользователя();
|
||||
|
||||
ОшибкаПолученияНастроек = Ложь;
|
||||
Попытка
|
||||
Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъектаНастроек, КлючНастроек, , ИмяТекущегоПользователя);
|
||||
Исключение
|
||||
ОшибкаПолученияНастроек = Истина;
|
||||
КонецПопытки;
|
||||
|
||||
Если ОшибкаПолученияНастроек Тогда
|
||||
Настройки = Новый Структура("ВидПечати", 0);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Настройки;
|
||||
|
||||
КонецФункции
|
||||
```
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,53 @@
|
||||
|
||||
### Обычная группа без отображения
|
||||
```bsl
|
||||
ГруппаДатаНомер = Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
|
||||
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
|
||||
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
|
||||
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
|
||||
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
|
||||
```
|
||||
|
||||
### Обычная группа
|
||||
```bsl
|
||||
//Пример создания обычной группы
|
||||
ГруппаШапка = Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"), ЭтотОбъект);
|
||||
ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
|
||||
ГруппаШапка.Заголовок = "Основные реквизиты";
|
||||
ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
|
||||
ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
|
||||
ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
|
||||
ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;
|
||||
```
|
||||
|
||||
### Свертываемая группа
|
||||
```bsl
|
||||
ГруппаХарактеристики = Элементы.Добавить("СвертываемаяГруппа", Тип("ГруппаФормы"), Элементы.СтраницаКонтейнер);
|
||||
ГруппаХарактеристики.Заголовок = "СвертываемаяГруппа";
|
||||
ГруппаХарактеристики.Вид = ВидГруппыФормы.ОбычнаяГруппа;
|
||||
ГруппаХарактеристики.Поведение = ПоведениеОбычнойГруппы.Свертываемая;
|
||||
ГруппаХарактеристики.ОтображатьОтступСлева = Истина;
|
||||
ГруппаХарактеристики.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.Картинка;
|
||||
|
||||
```
|
||||
|
||||
### Группа страниц
|
||||
```bsl
|
||||
//Пример создания группы страниц
|
||||
ГруппаСтраниц = Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"), ЭтотОбъект);
|
||||
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
|
||||
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
|
||||
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
|
||||
|
||||
```
|
||||
|
||||
### Страницы
|
||||
```bsl
|
||||
СтраницаТовары = Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"), ГруппаСтраниц);
|
||||
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
|
||||
СтраницаТовары.Заголовок = "Товары";
|
||||
|
||||
СтраницаДополнительно = Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"), ГруппаСтраниц);
|
||||
СтраницаДополнительно.Вид = ВидГруппыФормы.Страница;
|
||||
СтраницаДополнительно.Заголовок = "Дополнительно";
|
||||
```
|
@ -0,0 +1,15 @@
|
||||
### Декорация "Надпись"
|
||||
```bsl
|
||||
НовыйЭлемент = Элементы.Добавить("ЗаголовокТовара", Тип("ДекорацияФормы"),СтраницаТовары);
|
||||
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
|
||||
НовыйЭлемент.Заголовок = "Глобус";
|
||||
```
|
||||
### Декорация "Картинка"
|
||||
```bsl
|
||||
НовыйЭлемент = Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары);
|
||||
НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка;
|
||||
НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
|
||||
НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть;
|
||||
НовыйЭлемент.Ширина = 20;
|
||||
НовыйЭлемент.Высота = 8;
|
||||
```
|
@ -0,0 +1,14 @@
|
||||
|
||||
Для работы кнопок, необходимо наличие команды. Если на форме нет определенной команды, то её необходимо создать программно.
|
||||
### Создаем команду
|
||||
```bsl
|
||||
НоваяКоманда = Команды.Добавить("ОбщаяКоманда");
|
||||
НоваяКоманда.Заголовок = "Общая команда";
|
||||
НоваяКоманда.Действие = "ОбщееДействие"; //указываем только имя процедуры
|
||||
```
|
||||
### Создаем кнопку
|
||||
```bsl
|
||||
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"),СтраницаТовары);
|
||||
НовыйЭлемент.Заголовок = "Привет мир!";
|
||||
НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда";
|
||||
```
|
@ -0,0 +1,23 @@
|
||||
```bsl
|
||||
//Создание полей
|
||||
|
||||
НовыйЭлемент = Элементы.Добавить("Номер", Тип("ПолеФормы"),ГруппаДатаНомер);
|
||||
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
|
||||
НовыйЭлемент.ПутьКДанным = "Номер";
|
||||
|
||||
НовыйЭлемент = Элементы.Добавить("Дата", Тип("ПолеФормы"),ГруппаДатаНомер);
|
||||
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
|
||||
НовыйЭлемент.ПутьКДанным = "Дата";
|
||||
|
||||
НовыйЭлемент = Элементы.Добавить("Наименование", Тип("ПолеФормы"),ГруппаШапка);
|
||||
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
|
||||
НовыйЭлемент.ПутьКДанным = "Наименование";
|
||||
|
||||
НовыйЭлемент = Элементы.Добавить("Комментарий", Тип("ПолеФормы"),СтраницаДополнительно);
|
||||
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
|
||||
НовыйЭлемент.ПутьКДанным = "Комментарий";
|
||||
|
||||
НовыйЭлемент = Элементы.Добавить("ПометкаУдаления", Тип("ПолеФормы"),СтраницаДополнительно);
|
||||
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
|
||||
НовыйЭлемент.ПутьКДанным = "ПометкаУдаления";
|
||||
```
|
@ -0,0 +1,61 @@
|
||||
|
||||
## Пример добавления
|
||||
|
||||
```1c
|
||||
ДобавляемыеРеквизиты = Новый Массив; // Определяем массив добавляемых реквизитов
|
||||
|
||||
НовыйРеквизит = Новый РеквизитФормы(
|
||||
"Комментарий",
|
||||
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500))
|
||||
);
|
||||
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
|
||||
|
||||
НовыйРеквизит = Новый РеквизитФормы(
|
||||
"Номер",
|
||||
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0))
|
||||
);
|
||||
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
|
||||
|
||||
НовыйРеквизит = Новый РеквизитФормы(
|
||||
"Дата",
|
||||
Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))
|
||||
);
|
||||
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
|
||||
|
||||
НовыйРеквизит = Новый РеквизитФормы(
|
||||
"Наименование",
|
||||
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150))
|
||||
);
|
||||
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
|
||||
|
||||
НовыйРеквизит = Новый РеквизитФормы(
|
||||
"ПометкаУдаления",
|
||||
Новый ОписаниеТипов("Булево")
|
||||
);
|
||||
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
|
||||
|
||||
ЭтотОбъект.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
|
||||
```
|
||||
|
||||
### Синтаксис
|
||||
|
||||
#### **`ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)`**
|
||||
|
||||
### Параметры
|
||||
|
||||
#### `<ДобавляемыеРеквизиты>` (необязательный)
|
||||
|
||||
- **Тип:** `Массив`
|
||||
- **Описание:** Массив, содержащий объекты типа `РеквизитФормы`.
|
||||
|
||||
Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками.
|
||||
К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции:
|
||||
|
||||
```1c
|
||||
ЭтотОбъект.<Имя реквизита>
|
||||
```
|
||||
|
||||
#### `<УдаляемыеРеквизиты>` (необязательный)
|
||||
|
||||
- **Тип:** `Массив`
|
||||
- **Описание:** Массив, содержащий строки, описывающие пути к удаляемым реквизитам.
|
@ -0,0 +1,20 @@
|
||||
Для работы таблицы формы необходимо наличие реквизита **`Таблица значений`** или **`Динамический список`**. Не забывайти про путь, если таблица находиться в объекте, тогда указываем полный путь, пример: **`Объект.Товары`** и так же для колонок **`Объект.Товары.Номенклатура`**.
|
||||
|
||||
### Создаем таблицу
|
||||
```bsl
|
||||
ТаблицаФормы = Элементы.Добавить("МояТаблицаТоваров", Тип("ТаблицаФормы"),ЭтотОбъект);
|
||||
ТаблицаФормы.ПутьКДанным = "Объект.Товары";
|
||||
```
|
||||
|
||||
### Создаем колонки
|
||||
```bsl
|
||||
//Создаем колонку для выбора и ввода
|
||||
НовыйЭлемент = Форма.Элементы.Добавить("МояТаблицаТоваровНоменклатура",Тип("ПолеФормы"),ТаблицаФормы);
|
||||
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
|
||||
НовыйЭлемент.ПутьКДанным = "Объект.Товары.Номенклатура";
|
||||
|
||||
//Создаем колонку для булево
|
||||
НовыйЭлемент = Форма.Элементы.Добавить("МояТаблицаТоваровПроведен",Тип("ПолеФормы"),ТаблицаФормы);
|
||||
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
|
||||
НовыйЭлемент.ПутьКДанным = "Объект.Товары.Используется";
|
||||
```
|
@ -18,6 +18,7 @@
|
||||
НовыйЭлемент.Использование = Истина;
|
||||
|
||||
// Настраиваем оформление. Варианты параметров можно посмотреть в форме настройки условного оформления на форме
|
||||
//(цвет фона, цвет текста, видимость, доступность и пр.)
|
||||
НовыйЭлемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветВажного);
|
||||
НовыйЭлемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ЦветФонаГруппировкиОтчета1);
|
||||
|
@ -0,0 +1,156 @@
|
||||
## 📝 Описание
|
||||
|
||||
Стандартные формы выбора даты не предполагают выбор времени — его нужно вводить вручную в поле ввода. Для удобства можно создать собственную форму и вызывать её при выборе даты в поле ввода.
|
||||
|
||||
## 🛠 Создание формы, параметров, реквизитов
|
||||
|
||||
1. Создаём новую форму с реквизитами:
|
||||
- `День` (тип: Дата)
|
||||
- `Часы` (тип: Число)
|
||||
- `Минуты` (тип: Число)
|
||||
|
||||
2. Размещаем реквизиты на форме и объединяем их в группу с горизонтальной группировкой.
|
||||
|
||||
3. Создаём ключевой параметр `Дата` (тип: Дата, состав: Дата и время), в который будем передавать исходную дату в форму извне.
|
||||
|
||||

|
||||
|
||||
4. Для реквизитов `Часы` и `Минуты` устанавливаем вид как «Поле переключателя» с видом переключателя «Тумблер».
|
||||
|
||||
5. Для `Часы` определяем список выбора и устанавливаем количество колонок = 2.
|
||||
|
||||

|
||||
|
||||
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
|
||||
&НаКлиенте
|
||||
Процедура ДатаВремяУбытияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
|
||||
|
||||
СтандартнаяОбработка = Ложь;
|
||||
|
||||
ПараметрыФормы = Новый Структура;
|
||||
ПараметрыФормы.Вставить("Дата", Объект.ДатаВремяУбытия);
|
||||
|
||||
ОткрытьФорму("ОбщаяФорма.УТЗ_ПЛ_ВыборСтантартногоПериодаСоВременем", ПараметрыФормы,
|
||||
Элементы.ДатаВремяУбытия, УникальныйИдентификатор);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ДатаВремяУбытияОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, СтандартнаяОбработка)
|
||||
|
||||
Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
|
||||
Объект.ДатаВремяУбытия = ВыбранноеЗначение;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user