Добавлены статьи

This commit is contained in:
wakadakawaka 2025-04-16 21:21:27 +05:00
parent 684daa47a4
commit 97584b4baa
25 changed files with 1837 additions and 26 deletions

View File

@ -16,6 +16,7 @@
`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\1C:Enterprise 8.3 Server Agent` `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\1C:Enterprise 8.3 Server Agent`
3. Найдите параметр `ImagePath`, откройте его и в конец строки **добавьте пробел и флаг `debug`**. 3. Найдите параметр `ImagePath`, откройте его и в конец строки **добавьте пробел и флаг `debug`**.
3.1. Если нужно включить HTTP-отладку, то дальше добавляем флаг `-http` (т.е. получится строка `-debug -http`)
4. Нажмите **OK**. 4. Нажмите **OK**.

View File

@ -0,0 +1,110 @@
# 🛠 Установка Apache HTTP Server на Windows
Полная пошаговая инструкция по установке и настройке веб-сервера Apache на Windows.
---
## 📥 Шаг 1: Загрузка Apache
1. Перейдите на официальный сайт [Apache Lounge](https://www.apachelounge.com/download/).
2. Скачайте последнюю версию `httpd` для Windows (обычно архив `.zip`).
3. Рекомендуется скачивать версию с поддержкой `VC` (Visual C++), совместимую с вашей системой (например, VC15/VS16).
---
## 📦 Шаг 2: Распаковка архива
1. Распакуйте архив в удобную директорию, например:
```
C:\Apache24
```
2. Убедитесь, что структура папок содержит:
```
C:\Apache24\bin
C:\Apache24\conf
C:\Apache24\htdocs
...
```
---
## 🔧 Шаг 3: Установка Visual C++ Redistributable
Для запуска Apache требуется соответствующий **Visual C++ Redistributable**.
1. Перейдите на сайт Microsoft: https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist
2. Скачайте и установите подходящий пакет (`x64` и/или `x86` в зависимости от вашей системы).
---
## ⚙️ Шаг 4: Первоначальная настройка
1. Перейдите в директорию `conf` и откройте `httpd.conf`.
2. Убедитесь, что в строке `ServerRoot` указан правильный путь:
```
ServerRoot "C:/Apache24"
```
3. Измените строку `DocumentRoot` на нужную папку, например:
```
DocumentRoot "C:/Apache24/htdocs"
<Directory "C:/Apache24/htdocs">
```
4. Установите `ServerName`:
```
ServerName localhost:80
```
---
## ▶️ Шаг 5: Запуск Apache вручную
Откройте командную строку от имени администратора и выполните:
```
cd C:\Apache24\bin
httpd.exe
```
Если всё настроено правильно, в браузере перейдите на [http://localhost](http://localhost) — должна отобразиться стартовая страница Apache.
---
## 🛠 Шаг 6: Установка Apache как службы Windows
1. Откройте командную строку от имени администратора.
2. Выполните команду:
```
httpd.exe -k install
```
3. После этого Apache появится в списке служб Windows. Его можно запускать и останавливать через `services.msc`.
---
## 🚫 Шаг 7: Устранение возможных ошибок
- **Порт 80 занят:** Измените порт в конфигурации `httpd.conf`:
```
Listen 8080
```
и перезапустите Apache.
- **Ошибки конфигурации:** Проверьте конфигурацию с помощью:
```
httpd.exe -t
```
---
## ✅ Готово!
Теперь Apache установлен, работает как служба и готов обслуживать веб-сайты. Размещайте ваши HTML/PHP-файлы в папке `htdocs` или настройте виртуальные хосты.

View File

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

View File

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

View File

@ -0,0 +1,51 @@
Механизм **представлений** позволяет строить "неявный" запрос, который затем преобразуется встроенными функциями ЗУП в готовый запрос для исполнения
Примеры работы с механизмом можно посмотреть на Инфостарте: [Готовые механизмы 1С: ЗУП, представления](https://infostart.ru/1c/articles/1544167/)
## Пример запроса
```bsl
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Сотрудники.Ссылка КАК Сотрудник,
&ДатаОстатков КАК Период
ПОМЕСТИТЬ ВТСотрудники
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
НЕ Сотрудники.ВАрхиве
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
ВТСотрудники КАК Сотрудники
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Представления_КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
Представления_КадровыеДанныеСотрудников.Организация КАК Организация
ИЗ
Представления_КадровыеДанныеСотрудников КАК Представления_КадровыеДанныеСотрудников
```
## Преобразование запроса
### В системе компоновки данных
В отчете необходимо прописать `ПриКомпоновкеРезультата`:
```bsl
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект);
КонецПроцедуры
```
### В иных местах
```bsl
Запрос = Новый Запрос;
Запрос.Текст = "......"; // текст запроса, построенный через механизм представлений
Запрос.УстановитьПараметр([Свои параметры]);
//Далее запрос-пустышка преобразуется в нормальный
ЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц(Запрос.Текст, Запрос);
Запрос.Выполнить();
```

View File

@ -0,0 +1,400 @@
---
title: Список возможных ключей параметра "Кадровые данные"
---
## Реквизиты справочников
Имена всех реквизитов справочника Сотрудники.
Имена всех реквизитов справочника ФизическиеЛица.
## Контактная информация физического лица
АдресДляИнформирования 
АдресДляИнформированияПредставление.
АдресЗаПределамиРФ
АдресЗаПределамиРФПредставление.
АдресМестаПроживания
АдресМестаПроживанияПредставление.
АдресПоПрописке
АдресПоПропискеПредставление.
ТелефонДомашний
ТелефонДомашнийПредставление.
ТелефонРабочий
ТелефонРабочийПредставление.
ТелефонМобильный
ТелефонМобильныйПредставление.
EMail
EMailПредставление
## Образования физических лиц:
Образование1УчебноеЗаведение  
Образование1ВидОбразования    
Образование1Специальность     
Образование1Начало 
Образование1Окончание         
Образование1ВидДокумента      
Образование1Серия             
Образование1Номер             
ОбразованиеатаВыдачи        
Образование1Квалификация      
Образование2УчебноеЗаведение  
Образование2ВидОбразования    
Образование2Специальность     
Образование2Начало            
Образование2Окончание         
Образование2ВидДокумента      
Образование2Серия             
Образование2Номер             
ОбразованиеатаВыдачи        
Образование2Квалификация      
ВысшееОбразованиеУчебноеЗаведение 
ВысшееОбразованиеСпециальность    
ВысшееОбразованиеНачало           
ВысшееОбразованиеОкончание        
ВысшееОбразованиеВидДокумента     
ВысшееОбразованиеСерия            
ВысшееОбразованиеНомер            
ВысшееОбразованиеДатаВыдачи       
ВысшееОбразованиеКвалификация     
ПослевузовскоеОбразованиеУчебноеЗаведение     
ПослевузовскоеОбразованиеВидОбразования       
ПослевузовскоеОбразованиеВидПослевузовскогоОбразования    
ПослевузовскоеОбразованиеСпециальность        
ПослевузовскоеОбразованиеНачало   
ПослевузовскоеОбразованиеОкончание 
ПослевузовскоеОбразованиеВидДокумента         
ПослевузовскоеОбразованиеСерия    
ПослевузовскоеОбразованиеНомер    
ПослевузовскоеОбразованиеДатаВыдачи 
ПослевузовскоеОбразованиеКвалификация
## Ученые степени физических лиц:
УченаяСтепень
УченаяСтепеньОтрасльНауки
УченаяСтепеньДатаПрисуждения      
УченаяСтепеньДиссертационныйСовет 
УченаяСтепеньДипломСерияНомер     
УченаяСтепеньОрганизация
## Ученые звания физических лиц:
УченоеЗвание      
УченоеЗваниеАттестатСерия     
УченоеЗваниеАттестатНомер     
УченоеЗваниеДатаПрисвоения    
УченоеЗваниеОрганизация       
УченоеЗваниеСпециальность     
## Знание языков
ВладеемыйЯзык1    
ВладеемыйЯзык1СтепеньЗнания   
ВладеемыйЯзык2
ВладеемыйЯзык2СтепеньЗнания
## Профессии физических лиц
Профессия1 
Профессия2
## Строковые сведения физических лиц
ПолученныеОбразования 
Награды   
Документы 
ЗнанияЯзыков
Профессии 
Специальности
ТрудоваяДеятельность  
СоставСемьи
ПовышениеКвалификации 
Переподготовка        
## Сведения о государственном служащем
ВключаетсяВРеестрГосслужащих      
ЛичныйРеестровыйНомер 
СпособПоступленияНаСлужбу
## Информация о гражданстве
ГражданствоПериодРегистрации  
Страна
ИННВСтранеГражданства
## Информация о документе, удостоверяющем личность
ДокументПериодРегистрации 
ДокументВид   
ДокументКодМВД 
ДокументСерия 
ДокументНомер 
ДокументДатаВыдачи        
ДокументСрокДействия      
ДокументКемВыдан 
ДокументКодПодразделения  
ДокументСтранаВыдачи      
ДокументПредставление     
## Информация о фамилии, имени, отчестве
ФИОПериодРегистрации  
Фамилия   
Имя       
Отчество  
ФИОПолные 
ФамилияИО 
ИОФамилия 
Инициалы  
## Сведения о стажах
ОбщийСтажВид      
ОбщийСтажПериодРегистрации    
ОбщийСтажРазмерДней
ОбщийСтажРазмерМесяцев        
ОбщийСтажДней     
ОбщийСтажМесяцев  
ОбщийСтажЛет      
СеверныйСтажВид
СеверныйСтажПериодРегистрации
СеверныйСтажРазмерДней
СеверныйСтажРазмерМесяцев
СеверныйСтажДней
СеверныйСтажМесяцев
СеверныйСтажЛет.
НепрерывныйСтажВид
НепрерывныйСтажПериодРегистрации
НепрерывныйСтажРазмерДней
НепрерывныйСтажРазмерМесяцев
НепрерывныйСтажДней
НепрерывныйСтажМесяцев
НепрерывныйСтажЛет.
СтажНаНадбавкуЗаВыслугуЛетВид
СтажНаНадбавкуЗаВыслугуЛетПериодРегистрации
СтажНаНадбавкуЗаВыслугуЛетРазмерДней
СтажНаНадбавкуЗаВыслугуЛетРазмерМесяцев
СтажНаНадбавкуЗаВыслугуЛетДней
СтажНаНадбавкуЗаВыслугуЛетМесяцев
СтажНаНадбавкуЗаВыслугуЛетЛет.
ОбщийНаучноПедагогическийСтажВид
ОбщийНаучноПедагогическийСтажПериодРегистрации
ОбщийНаучноПедагогическийСтажРазмерДней
ОбщийНаучноПедагогическийСтажРазмерМесяцев
ОбщийНаучноПедагогическийСтажДней
ОбщийНаучноПедагогическийСтажМесяцев
ОбщийНаучноПедагогическийСтажЛет.
ПедагогическийСтажВид
ПедагогическийСтажПериодРегистрации
ПедагогическийСтажРазмерДней
ПедагогическийСтажРазмерМесяцев
ПедагогическийСтажДней
ПедагогическийСтажМесяцев
ПедагогическийСтажЛет.
СтраховойСтажВид
СтраховойСтажПериодРегистрации
СтраховойСтажРазмерДней
СтраховойСтажРазмерМесяцев
СтраховойСтажДней
СтраховойСтажМесяцев
СтраховойСтажЛет.
РасширенныйСтраховойСтажВид
РасширенныйСтраховойСтажПериодРегистрации
РасширенныйСтраховойСтажРазмерДней
РасширенныйСтраховойСтажРазмерМесяцев
РасширенныйСтраховойСтажДней
РасширенныйСтраховойСтажМесяцев
РасширенныйСтраховойСтажЛет.
ПрочийСтажВид
ПрочийСтажПериодРегистрации
ПрочийСтажРазмерДней
ПрочийСтажРазмерМесяцев
ПрочийСтажДней
ПрочийСтажМесяцев
ПрочийСтажЛет.
ВыслугаЛетНаГосударственнойСлужбеВид
ВыслугаЛетНаГосударственнойСлужбеПериодРегистрации
ВыслугаЛетНаГосударственнойСлужбеРазмерМесяцев
ВыслугаЛетНаГосударственнойСлужбеРазмерДней
ВыслугаЛетНаГосударственнойСлужбеДней
ВыслугаЛетНаГосударственнойСлужбеМесяцев
ВыслугаЛетНаГосударственнойСлужбеЛет.
ВыслугаЛетНаВоеннойСлужбеВид
ВыслугаЛетНаВоеннойСлужбеПериодРегистрации
ВыслугаЛетНаВоеннойСлужбеРазмерМесяцев
ВыслугаЛетНаВоеннойСлужбеРазмерДней
ВыслугаЛетНаВоеннойСлужбеДней
ВыслугаЛетНаВоеннойСлужбеМесяцев
ВыслугаЛетНаВоеннойСлужбеЛет.
## Состояния в браке
СостояниеВБракеПериодРегистрации  
СостояниеВБраке       
## Воинский учет
ВоинскийУчетПериодРегистрации 
ВоинскийУчетКатегорияЗапаса   
ВоинскийУчетЗвание            
ВоинскийУчетСостав            
ВоинскийУчетВУС               
ВоинскийУчетГодность          
ВоинскийУчетВоенкомат         
ВоинскийУчетНомерКомандыПартии
ВоинскийУчетПунктПеречня      
ВоинскийУчетНаличиеМобпредписания
ВоинскийУчетОтношениеКВоинскойОбязанности 
ВоинскийУчетОтношениеКВоинскомуУчету      
ВоинскийУчетДатаСнятияСВоинскогоУчета     
ВоинскийУчетДатаОформленияОтсрочки        
ВоинскийУчетСерияУдостоверенияОбОтсрочке  
ВоинскийУчетНомерУдостоверенияОбОтсрочке  
ВоинскийУчетДатаСписка        
ВоинскийУчетИсходящийНомерСписка
ВоинскийУчетПринадлежностьККазачеству     
ВоинскийУчетАдминистративныеВзыскания     
ВоинскийУчетДопускКонтрольныхОрганов  
ВоинскийУчетПрохождениеВоенныхСборов  
ВоинскийУчетКонтрактНаПребываниеВРезерве 
ВоинскийУчетДополнительныеСведенияКарточки 
ВоинскийУчетЗабронированОрганизациейПериодРегистрации 
ВоинскийУчетЗабронированОрганизациейРегистратор       
ВоинскийУчетЗабронированОрганизацией 
ВоинскоеСпециальноеЗваниеПериодРегистрации    
ВоинскоеСпециальноеЗвание
## Состав семей
КоличествоДетей
КоличествоДетейДляТ2      
КоличествоИждивенцев      
КоличествоРодственников   
## Текущие кадровые данные
ТабельныйНомер        
ДатаПриема            
ДатаУвольнения        
ДатаЗавершенияРаботы  
ТекущаяОрганизация    
ТекущееПодразделение  
ТекущаяДолжность      
ТекущийВидЗанятости   
ОсновноеРабочееМестоВОрганизации  
ОформленПоТрудовомуДоговору       
ТекущаяДолжностьПоШтатномуРасписанию 
ТекущийВидДоговора    
ТекущаяТерритория     
## Текущие данные об оплате труда
ТекущаяТарифнаяСтавка
ТекущийФОТ        
ТекущаяНадбавка   
ТекущийСпособРасчетаАванса    
ТекущийАванс      
ДатаНачалаУчета   
## Данные приказа о приеме и увольнении
ПриказОПриеме 
ПриказОПриемеДата     
ПриказОПриемеНомер    
ПриказОПриемеДатаЗавершенияТрудовогоДоговора  
КраткосрочныйТрудовойДоговор      
ПриказОбУвольнении
ПриказОбУвольненииДата        
ПриказОбУвольненииНомер       
ПриказОбУвольненииСтатьяТКРФ  
## Сведения о подработках сотрудников
НазначениеПодработки
ПрекращениеПодработки
## Сведения о месте выплаты зарплаты
ВладелецМестаВыплаты  
СправочникСсылка.Организации
СправочникСсылка.ПодразделенияОрганизаций
ВидМестаВыплаты       
МестоВыплаты
СправочникСсылка.Кассы
СправочникСсылка.Банки
СправочникСсылка.ЗарплатныеПроекты.
## Информация о рабочем месте
РабочееМестоПериодРегистрации 
РабочееМестоРегистратор       
Организация       
Подразделение     
Должность         
ВидЗанятости      
ВидСобытия        
КоличествоСтавок  
ДолжностьПоШтатномуРасписанию 
ВидДоговора       
МестоВСтруктуреПредприятия    
РайонныйКоэффициент
РайонныйКоэффициентРФ
РазрядКатегорияПериодРегистрации  
РазрядКатегорияРегистратор        
РазрядКатегория       
ПКУПериодРегистрации
ПКУРегистратор    
ПКУ   
СостояниеПериодРегистрации    
Состояние
ТерриторияПериодРегистрации   
ТерриторияРегистратор
Территория    
РуководительСтруктурногоПодразделения 
ДолжностьРуководителяСтруктурногоПодразделения    
ЯвляетсяЧленомЛетногоЭкипажа 
ЯвляетсяШахтером 
ЯвляетсяФармацевтом       
ЯвляетсяРаботникомСДосрочнойПенсией   
ЯвляетсяЧленомЭкипажаСуднаПодФлагомРФ 
ТарифнаяСетка 
ТарифнаяСеткаНадбавки     
КлассныйЧинРангДолжности  
## Информация об оплате труда
ОплатаТрудаПериодЗаписи   
ОплатаТрудаРегистратор    
ТарифнаяСтавка 
ФОТ  
Надбавка       
ОсновноеНачисление        
ПоказательТарифнойСтавки  
СовокупнаяТарифнаяСтавкаПериодРегистрации 
СовокупнаяТарифнаяСтавкаРегистратор       
СовокупнаяТарифнаяСтавка      
ВидСовокупнойТарифнойСтавки   
ПорядокРасчетаСтоимостиЕдиницыВремениПериодРегистрации    
ПорядокРасчетаСтоимостиЕдиницыВремениРегистратор
ПорядокРасчетаСтоимостиЕдиницыВремени
ГрейдПериодРегистрации    
ГрейдРегистратор
Грейд
ГрафикРаботыПериодРегистрации     
ГрафикРаботыРегистратор
ГрафикРаботы
СуммированныйУчетРабочегоВремени  
СреднемесячноеЧислоЧасов
СреднемесячноеЧислоДней
ДоляНеполногоРабочегоВремени  
АвансПериодРегистрации        
АвансРегистратор      
СпособРасчетаАванса   
Аванс     
ЗарплатныйПроектДатаОткрытияЛицевогоСчета 
ЗарплатныйПроектРегистратор   
ЗарплатныйПроект  
НомерЛицевогоСчета
## Информация об учете затрат
УчетЗатратПериодРегистрации       
СтатьяФинансирования  
СпособОтраженияЗарплатыВБухучете  
ОтношениеКЕНВД        
УчетЗатратДокументОснование       
## Основные данные контрактов, договоров сотрудника
ПредставительНанимателя           
ДолжностьПредставителяНанимателя  
ОснованиеПредставителя
ВидАктаГосоргана      
ДатаОкончания         
СрочныйДоговор        
СрокЗаключенияДоговора
ОборудованиеРабочегоМеста
ИныеУсловияДоговора   
ОснованиеСрочногоДоговора
## Информация о классах СОУТ
КлассУсловийТрудаПериодРегистрации        
КлассУсловийТруда 
КлассУсловийТрудаДатаРегистрацииИзменений

View File

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

View File

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

View File

@ -0,0 +1,103 @@
---
title: Подключение к подсистеме "Подключаемые команды"
---
## Форма объекта
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
...
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
...
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
...
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
...
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
```
## Форма списка
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
...
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
...
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
```

View File

@ -0,0 +1,183 @@
---
title: Подключение к подсистеме "Присоединенные Файлы"
---
## Настройка определяемых типов
Включить собственный объект в определяемые типы:
- **`ВладелецПрисоединенныхФайлов`**
- **`ВладелецПрисоединенныхФайловОбъект`** (только для справочников)
- **`ВладелецПрисоединенныхФайловБЗК`** (в ЗУП)
## Создание справочника для хранения информации о файлах
- Скопировать любой стандартный справочник БСП, имя которого заканчивается на **`ПрисоединенныеФайлы`**. Например: **`АнкетаПокупателяПрисоединенныеФайлы`**.
- Скопированный справочник переименовать, следуя шаблону: **`<МойСправочник>ПрисоединенныеФайлы`**. Например: **`СН_АвтотранспортПрисоединенныеФайлы`**
- В скопированном справочнике **`<МойСправочник>ПрисоединенныеФайлы`** необходимо откорректировать тип реквизита **`ВладелецФайла`**. Как тип необходимо указать тот объект, который подключается к подсистеме. Например **`СН_АвтотранспортСсылка`**
- Справочник **`<МойСправочник>ПрисоединенныеФайлы`** нужно включить в определяемые типы **`ПрисоединенныйФайл`** и **`ПрисоединенныйФайлОбъект`**.
## Настройка формы объекта
Создать форму элемента (при отсутствии). В модуле формы необходимо добавить следующий код:
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
// При необходимости, гиперссылка
// СтандартныеПодсистемы.РаботаСФайлами
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
// Конец СтандартныеПодсистемы.РаботаСФайлами
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
// При необходимости, гиперссылка
// СтандартныеПодсистемы.РаботаСФайлами
РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
// Конец СтандартныеПодсистемы.РаботаСФайлами
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// При необходимости, гиперссылка
// СтандартныеПодсистемы.РаботаСФайлами
РаботаСФайлами.ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, ЭтотОбъект);
// Конец СтандартныеПодсистемы.РаботаСФайлами
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
// При необходимости, гиперссылка
// СтандартныеПодсистемы.РаботаСФайлами
РаботаСФайлами.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
// Конец СтандартныеПодсистемы.РаботаСФайлами
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
// ПРИ ИСПОЛЬЗОВАНИИ ГИПЕРССЫЛКИ ИЗ ПОДСИСТЕМЫ "РАБОТА С ФАЙЛАМИ"
// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
```
## Настройка формы списка
### Подключение к программному интерфейсу
Создать форму списка (при отсутствии). В модуле формы необходимо добавить следующий код:
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура <ИмяСписка>ПриАктивизацииСтроки(Элемент)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
```
### Вывод изображения скрепки в список
- Определить запрос для списка как `Произвольный`
> Информация о наличии файлов в БСП хранится в регистре сведений `НаличиеФайлов`, соответственно для получения информации необходимо присоединить этот регистр к основной таблице. Регистр сведений “Наличие файлов” содержит единственное измерение с типом `ОпределяемыйТип.ВладелецПрисоединенныхФайлов`, по которому и будет осуществляться соединение.
- В настройках списка на вкладке “Запрос” добавьте еще одно поле “ЕстьФайлы”, полученное в результате левого соединения с регистром “Наличие файлов”. В простейшем варианте запрос будет выглядеть так:
```bsl
ВЫБРАТЬ
ДокументЗаявкаНаРазработку.Ссылка КАК Ссылка,
//Произвольные поля,
ВЫБОР
КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
ТОГДА 0
КОГДА НаличиеФайлов.ЕстьФайлы
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК ЕстьФайлы
ИЗ
Документ.ЗаявкаНаРазработку КАК ДокументЗаявкаНаРазработку
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
ПО ДокументЗаявкаНаРазработку.Ссылка = НаличиеФайлов.ОбъектСФайлами
```
- После сохранения произвольного запроса необходимо вывести новое поле `ЕстьФайлы` в таблицу формы. В свойствах этого реквизита устанавливаем свойство `Вид` в значение `Поле картинки`, свойство `ПоложениеЗаголовка` в значение `Нет`, а в свойстве `КартинкаЗначений` выбираем стандартную БСПшную картинку `КоллекцияСкрепка`, которая находится во вкладке `Из конфигурации`

View File

@ -0,0 +1,4 @@
```bsl
Результат = ФормированиеПечатныхФорм.КоличествоПрописью(Количество)
```

View File

@ -0,0 +1,3 @@
```bsl
Результат = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаЧислом, Валюта, БезДробнойЧасти, КодЯзыка, ДробнаяЧастьПрописью);
```

View File

@ -0,0 +1,6 @@
Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно,
с учетом типов дочерних элементов. При этом содержимое значений объектных типов
`(СправочникОбъект, ДокументОбъект и т.п.)` не копируются, а возвращаются ссылки на исходный объект.
```bsl
Результат = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(Источник, ФиксироватьДанные);
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -0,0 +1,28 @@
Пример запроса к ресурсу `https://proverkacheka.com/api/v1/check/get`
```bsl
АдресХоста = "proverkacheka.com";
АдресРесурса = "/api/v1/check/get";
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Соединение = Новый HTTPСоединение(АдресХоста, 443, , , , 30, ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
// application/x-www-form-urlencoded - формат, когда тело передается строкой с парами "Ключ-значение", разделенными &
// формат запроса читаем в документации к api
// Т.к. амерсанд разделяет пары, то нужно, чтобы в значениях его не было. Заменяем на %26
Тело = СтрШаблон("token=%1&qrraw=%2", "my_secret_token", СтрЗаменить(СыройТекстQRКода(), "&", "%26"));
Запрос.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос); // это POST, см. синтакс-помощник
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Если Ответ.КодСостояния = 200 Тогда // запрос обработан успешно
// обрабатываем результат
Иначе
// Обрабатываем ошибку
КонецЕсли;
```

View File

@ -0,0 +1,72 @@
# 🌐 Символы, требующие экранирования в теле HTTP-запроса
В теле HTTP-запроса (в URL, JSON, form-data, XML и других форматах) **некоторые символы должны быть экранированы**, чтобы не нарушить синтаксис или не вызвать ошибку интерпретации данных.
---
## 🔒 Символы, которые нужно экранировать (URL encoding)
| Символ | Назначение / причина экранирования | Кодировка (URL encoding) |
|--------|------------------------------------|---------------------------|
| ` ` (пробел) | Разделитель — не допускается в URL | `%20` или `+` |
| `"` | Строковый литерал в JSON/XML | `%22` |
| `'` | Апостроф (может нарушить SQL/XML/HTML) | `%27` |
| `<` | Тег в HTML/XML | `%3C` |
| `>` | Тег в HTML/XML | `%3E` |
| `&` | Разделитель параметров | `%26` |
| `=` | Разделяет имя и значение | `%3D` |
| `?` | Начало query-строки | `%3F` |
| `/` | Разделитель пути | `%2F` |
| `\` | Экранирование в JSON/JS | `%5C` |
| `#` | Якорь в URL | `%23` |
| `%` | Префикс для escape-последовательностей | `%25` |
| `:` | Разделитель схемы URL | `%3A` |
| `@` | В URL может обозначать логин | `%40` |
| `+` | Обозначает пробел в `application/x-www-form-urlencoded` | `%2B` |
| `{` `}` | JSON-структуры | `%7B` `%7D` |
| `[` `]` | Массивы / JSON | `%5B` `%5D` |
| `,` | Разделитель в CSV, JSON и др. | `%2C` |
---
## 📌 Пример экранирования URL
Исходный URL:
```
https://example.com/api?query=тест & значение
```
После экранирования:
```
https://example.com/api?query=%D1%82%D0%B5%D1%81%D1%82%20%26%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5
```
---
## 📎 Пример в JSON
JSON с кавычками и спецсимволами:
```json
{
"message": "Привет \"мир\" <script>alert('xss');</script>"
}
```
При передаче должно быть:
```json
{
"message": "Привет \\"мир\\" \\u003Cscript\\u003Ealert(\\'xss\\');\\u003C/script\\u003E"
}
```
---
## 🧠 Совет
- В URL используйте `encodeURIComponent()` (JavaScript) или аналогичные функции в других языках.
- В JSON-строках используйте escape-символ `\` и Unicode-коды.
- Для `application/x-www-form-urlencoded` — кодируйте с учётом `+` вместо пробела.

View File

@ -0,0 +1,17 @@
Чтобы изменить цветовое оформление для информационных баз, отличных от рабочей, необходимо создать расширение, в котором создать объект `Стиль`.
![image-15.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F16&files=e9650922-0cc5-4e5d-a9a1-4a0ffb32414b.png)
Затем, в модуле сеанса реализовать процедуру `УстановкаПараметровСеанса`
```bsl
&После("УстановкаПараметровСеанса")
Процедура Расш1_УстановкаПараметровСеанса(ТребуемыеПараметры)
СтрокаСоединения = ВРег(СтрокаСоединенияИнформационнойБазы());
ЭтоТестовая = СтрНайти(СтрокаСоединения, ВРег("Ref=""имя-вашей-базы""")) = 0;
Если ЭтоТестовая И ГлавныйСтиль <> БиблиотекаСтилей["Расш1_СтильТестовойБазы"] Тогда
ГлавныйСтиль = БиблиотекаСтилей["Расш1_СтильТестовойБазы"];
КонецЕсли;
КонецПроцедуры
```

View File

@ -0,0 +1,7 @@
```bsl
Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
Хеш.Добавить("НУЖНЫЙ ТЕКСТ");
ДД = Хеш.ХешСумма;
ХешСтрока = ПолучитьHexСтрокуИзДвоичныхДанных(ДД);
```

View File

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

View File

@ -0,0 +1,137 @@
# 🔍 Основные операторы регулярных выражений с примерами
Регулярные выражения (RegExp) — это мощный инструмент для поиска и обработки текста.
---
## 📌 1. `.` — любой символ
Соответствует **любому одному символу**, кроме перевода строки.
**Пример:**
- Шаблон: `a.c`
- Совпадёт с: `abc`, `axc`, `a1c`
- Не совпадёт с: `ac`, `abbc`
---
## 📌 2. `^` — начало строки
Соответствует **началу строки**.
**Пример:**
- Шаблон: `^Привет`
- Совпадёт с: `Привет мир`
- Не совпадёт с: `Мир, Привет`
---
## 📌 3. `$` — конец строки
Соответствует **концу строки**.
**Пример:**
- Шаблон: `мир$`
- Совпадёт с: `Привет, мир`
- Не совпадёт с: `мир!`
---
## 📌 4. `*` — ноль или более повторений
**Пример:**
- Шаблон: `a*`
- Совпадёт с: `""`, `a`, `aa`, `aaaa`
---
## 📌 5. `+` — один или более повторений
**Пример:**
- Шаблон: `a+`
- Совпадёт с: `a`, `aa`, `aaa`
- Не совпадёт с: `""`
---
## 📌 6. `?` — ноль или одно вхождение
**Пример:**
- Шаблон: `a?`
- Совпадёт с: `""`, `a`
- Не совпадёт с: `aa`
---
## 📌 7. `[]` — набор символов
Соответствует **одному из символов внутри скобок**.
**Пример:**
- Шаблон: `[abc]`
- Совпадёт с: `a`, `b`, `c`
- Не совпадёт с: `d`, `ab`
Можно использовать диапазоны:
- `[a-z]` — все строчные латинские буквы
- `[0-9]` — все цифры
---
## 📌 8. `[^]` — отрицание
Соответствует **любому символу, кроме указанных**.
**Пример:**
- Шаблон: `[^0-9]`
- Совпадёт с: `a`, `!`
- Не совпадёт с: `5`, `3`
---
## 📌 9. `|` — логическое ИЛИ
Соответствие **любому из вариантов**.
**Пример:**
- Шаблон: `кот|пёс`
- Совпадёт с: `кот`, `пёс`
- Не совпадёт с: `слон`
---
## 📌 10. `()` — группировка
Используется для объединения символов в **группы**.
**Пример:**
- Шаблон: `(ab)+`
- Совпадёт с: `ab`, `abab`, `ababab`
---
## 📌 11. `\` — экранирование
Используется для экранирования специальных символов.
**Пример:**
- Шаблон: `\.` — точка как символ, а не оператор
---
## 🎯 Практический пример
Найти все email-адреса в тексте:
```regexp
\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b
```
---
## 📘 Совет
Тестируйте регулярные выражения на сайтах:
- https://regex101.com/
- https://regexr.com/

View File

@ -0,0 +1,104 @@
# 🚀 Продвинутые операторы регулярных выражений
Эти конструкции дают больше контроля над поиском и заменой текста.
---
## 🧱 1. `{n}`, `{n,}`, `{n,m}` — точное количество повторений
- `{n}` — ровно n повторений
- `{n,}` — минимум n повторений
- `{n,m}` — от n до m повторений
**Примеры:**
- `a{3}``aaa`
- `a{2,4}``aa`, `aaa`, `aaaa`
---
## 🧠 2. `(?...)` — специальные конструкции
### 2.1 `(?:...)` — негруппирующая скобка
- Не сохраняет группу для дальнейшего обращения
**Пример:**
- `(?:abc)+` — совпадает с `abcabc`, но не сохраняет `abc` как отдельную группу
### 2.2 `(?=...)` — позитивная опережающая проверка (lookahead)
- Условие, что **далее по тексту есть шаблон**
**Пример:**
- `\d(?=px)` — цифра перед `px`, например: `5px` → совпадает `5`
### 2.3 `(?!...)` — негативная опережающая проверка
- Условие, что **далее по тексту нет шаблона**
**Пример:**
- `foo(?!bar)` — найдёт `foo`, не за которым идёт `bar`
---
## 🧩 3. `(?<=...)` и `(?<!...)` — lookbehind (опережающее назад)
- `(?<=...)` — **есть шаблон до**
- `(?<!...)` — **нет шаблона до**
**Пример:**
- `(?<=@)\w+` — найдёт слово **после символа `@`** (например, `gmail` в `user@gmail.com`)
---
## 🌀 4. `\b` и `\B` — границы слова
- `\b` — граница слова
- `\B`НЕ граница слова
**Примеры:**
- `\bword\b` — точное слово `word`
- `\Bword``password`, `sword`
---
## 🔂 5. Рекурсивные шаблоны (в некоторых движках)
Некоторые реализации (например, PCRE) поддерживают вложенные структуры:
```regexp
\((?>[^()]+|(?R))*\)
```
Этот шаблон находит корректно вложенные скобки. Используется редко.
---
## 💡 6. Обратные ссылки (Backreferences)
Позволяют ссылаться на уже найденные группы.
**Пример:**
- Шаблон: `(\w+) \1`
- Совпадёт с: `test test`, `hello hello`
---
## 🔄 7. Условные выражения
Поддерживаются не везде, но позволяют задать условия:
```regexp
(?(1)yes|no)
```
Если группа 1 существует, будет `yes`, иначе `no`.
---
## 📘 Полезные ресурсы
- [regex101.com](https://regex101.com/)
- [Regular Expressions Cheat Sheet (MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Cheatsheet)
- [rexegg.com](https://www.rexegg.com/)

View File

@ -0,0 +1,116 @@
# 📚 Часто используемые регулярные выражения
Полезная мини-библиотека шаблонов на каждый день.
---
## 📧 Email
```regex
\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b
```
---
## 📱 Телефон (Россия)
```regex
\+7\s?\(?\d{3}\)?\s?\d{3}[-\s]?\d{2}[-\s]?\d{2}
```
---
## 🔗 URL
```regex
https?:\/\/(www\.)?[a-zA-Z0-9\-]+(\.[a-zA-Z]{2,})+(\/\S*)?
```
---
## 🔢 Только числа
```regex
^\d+$
```
---
## 🔠 Только буквы
```regex
^[a-zA-Zа-яА-Я]+$
```
---
## 🆔 UUID (GUID)
```regex
[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}
```
---
## 📅 Дата в формате YYYY-MM-DD
```regex
\d{4}-\d{2}-\d{2}
```
---
## 💳 Номер банковской карты (16 цифр)
```regex
\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b
```
---
## 💻 IP-адрес (IPv4)
```regex
\b(?:\d{1,3}\.){3}\d{1,3}\b
```
---
## 🔐 Пароль (минимум 8 символов, буквы и цифры)
```regex
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
```
---
## 📦 Почтовый индекс (Россия)
```regex
\b\d{6}\b
```
---
## 🧼 HTML-теги
```regex
<[^>]+>
```
---
## 🔍 Ненулевое число с десятичной точкой
```regex
^\d*\.\d+$
```
---
## 📁 Расширение файла `.jpg`, `.png`, `.gif`
```regex
\.(jpe?g|png|gif)$
```

View File

@ -0,0 +1,100 @@
# 🧙‍♂️ Экспертные техники регулярных выражений
Эти конструкции полезны для сложных сценариев обработки текста. Они не всегда поддерживаются во всех движках (например, JavaScript, Python, PCRE, .NET могут отличаться).
---
## 🧬 1. Балансирующие группы (только .NET)
Позволяют обрабатывать вложенные конструкции без рекурсии.
**Пример:**
```regex
^\((?>[^()]+|\((?<Depth>)|\)(?<-Depth>))*(?(Depth)(?!))\)$
```
Используется для проверки сбалансированных скобок.
---
## 🧠 2. Отрицательные и позитивные lookbehind'ы
Условие, что **перед символом** есть (или нет) шаблон.
- `(?<=\d{3})abc``abc` после трёх цифр
- `(?<!\d{3})abc``abc`, не после трёх цифр
---
## 🔃 3. Atomic groups
Предотвращают backtracking.
**Пример:**
```regex
(?>\d+)
```
Это "жадный" захват — если не сработало, движок не будет пробовать другие варианты внутри группы.
---
## 🌀 4. Рекурсия (PCRE)
Вложенные шаблоны:
```regex
\((?:[^()]+|(?R))*\)
```
Используется для обработки вложенных скобок, тегов и пр.
---
## 🧾 5. Named capture groups (именованные группы)
```regex
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
```
Доступ к `year`, `month`, `day` по имени.
---
## 📌 6. Inline flags
Изменяют поведение внутри шаблона.
**Примеры:**
- `(?i)` — регистронезависимый режим
- `(?m)` — многострочный режим
- `(?s)` — точка `.` включает `\n`
Пример:
```regex
(?i)abc # будет найдено и ABC, и abc
```
---
## ⚠️ 7. Группы с ленивым захватом
Жадный поиск: `.*`
Ленивый: `.*?`
**Пример:**
- `".*"` — захватит всё между первой и последней кавычкой
- `".*?"` — захватит только между ближайшими кавычками
---
## 🧠 Советы:
- Используйте отладчик: [regex101.com](https://regex101.com/)
- Проверяйте поддержку: не все движки поддерживают recursion, lookbehind, atomic и т.д.
- Разбивайте сложные выражения на части