Skip to content

Commit 4bd4412

Browse files
committed
first commit
0 parents  commit 4bd4412

95 files changed

Lines changed: 17139 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
*.[bB][iI][nN] binary
2+
*.[aA][xX][dD][tT] binary
3+
*.[aA][dD][dD][iI][nN] binary
4+
*.[bB][mM][pP] binary
5+
*.[jJ][pP][gG] binary
6+
*.[zZ][iI][pP] binary
7+
*.[pP][nN][gG] binary
8+
*.[cC][fF] binary
9+
*.[gG][iI][fF] binary
10+
*.[sS][vV][gG] binary

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.metadata
2+
Safe_REST_API/bin

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# [1.0.1.1] - 2025-02-28
2+
- Первая публичная версия

CONTRIBUTING.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# Участие в проекте
2+
3+
Вначале, хотим поблагодарить Вас за желание участвовать в проекте!
4+
5+
Далее описаны советы, как сделать свое участие наиболее эффективным для проекта и для себя. Это не жесткие правила, поэтому используйте свой разум, если здесь что-либо не описано.
6+
7+
## Правила участия в проекте
8+
9+
В проекте может участвовать любой желающий. Достаточно иметь общеполезную разработку, идею разработки или желание помочь другим в развитии имеющегося инструмента. Предлагать исправления/новую функциональность может любой, в т.ч. и не сотрудник компании. Оставить заявку на участие в проекте можно по [ссылке](https://forms.gle/5Fzf1Q4J2tG6p5Gg9).
10+
11+
12+
## Требования к проектам
13+
Код разработки обязательно должен быть полностью открыт сообществу. Если используются дополнительные библиотеки, разработанные автором, то их исходный код также должен быть включен в состав репозитория.
14+
Строго запрещается использовать готовый код, не имея на него прав собственности. Разработка не может содержать код, заимствованный из других ПП и сервисов, за исключением случаев, когда владелец дал согласие на включение его кода в состав библиотеки. Это касается в т.ч. совместных ПП с фирмой 1С, которые разрабатывает компания 1С-РАРУС.
15+
В начале каждого модуля располагается ссылка на лицензию и авторские права компании 1С-РАРУС. В справке к основному объекту обязательно указываются авторские права и логотип компании 1С-РАРУС.
16+
При разработке необходимо строго соблюдать стандарты разработки фирмы 1С.
17+
Инструментом для разработки может быть как конфигуратор, так и EDT, но исходные коды в репозитории хранятся исключительно в формате проекта EDT.
18+
Завершение очередного цикла развития инструмента сопровождается подготовкой релизной сборки, публикуемой в репозитории в разделе релизов.
19+
20+
21+
## Авторские права и лицензия
22+
Разработка ведется на условиях лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0). Таким образом, возможно свободное использование кем угодно на любом проекте внедрения и у любого клиента. Основное ограничение - сохранение указания авторских прав и логотипа компании 1С-РАРУС. Полный текст лицензии доступен по [ссылке](https://creativecommons.org/licenses/by-sa/4.0/).
23+
Включение в состав тиражируемого программного продукта, собственником которого НЕ является компания 1С-РАРУС (например, любой совместный с фирмой 1С продукт) возможно исключительно с соблюдением следующих требований:
24+
- сохранить ссылку на лицензию, авторские права и логотип компании 1С-РАРУС;
25+
- проинформировать ответственных лиц 1С-РАРУС о заимствовании в составе тиражного продукта;
26+
- указать в пользовательской документации конечного программного продукта заимствование данной библиотеки.
27+
28+
### Лицензия
29+
30+
1. Добавляя любой контент в этот репозиторий (в т.ч. код), вы соглашаетесь с тем, что Ваш контент будет поставляться по [лицензии проекта](LICENSE).
31+
2. Создавая "Запрос на объединение" текстов модулей, вы подтверждаете, что публикуете код с согласия правообладателя (это вы или ваша компания). **Внимание!** Если вы работаете в компании, убедитесь, что вы не публикуете код вашей компании без ее согласия.
32+
3. При модификации текстов модулей Вы должны добавить себя или свою компанию в секцию копирайта в заголовке модуля. Если в секции копирайта уже указан **один** дополнительный автор, необходимо заменить на `ООО 1С-Рарус и другие.`
33+
4. При создании новых модулей, в заголовок модуля необходимо добавить лицензию этого проекта и правообладателя.
34+
35+
```bsl
36+
///////////////////////////////////////////////////////////////////////////////////////////////////////
37+
// Copyright (c) 2022-2025, ООО 1С-Рарус
38+
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
39+
// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
40+
// Текст лицензии доступен по ссылке:
41+
// https://creativecommons.org/licenses/by-sa/4.0/
42+
///////////////////////////////////////////////////////////////////////////////////////////////////////
43+
```
44+
45+
46+
## Сообщить об ошибке
47+
48+
Печально, что ошибка существует, но мы благодарны, что вы о ней нам сообщите!
49+
50+
#### Прежде чем зарегистрировать
51+
52+
* Проверьте раздел [Issues](https://github.com/rarus/safe-rest-api-1c/issues), чтобы не создавать дубликатов
53+
54+
#### Как сообщить об ошибке эффективно
55+
56+
Следуйте простым правилам:
57+
58+
1. Задайте понятный заголовок `issue`, лаконично и исчерпывающе определяющий проблему
59+
* постарайтесь не допускать двойного смысла, сленга из других областей и т.д.
60+
* Не используйте "метки" в заголовке - для этого существуют сами метки (labels)
61+
2. Опишите сценарий воспроизведения ошибки.
62+
* скриншоты очень сильно помогают, но не заменяют сценарий
63+
* добавьте логи ЖР, из лог-файлов (убедитесь, что они не содержат приватной информации)
64+
3. Опишите, что есть ошибка по вашему мнению и почему
65+
4. Опишите ожидаемое поведение
66+
67+
### Исправление ошибок
68+
69+
* Создайте `issue` в проекте с описанием ошибки. Убедитесь, что владельцы проекта также считают текущее поведение ошибочным.
70+
* Создайте ветку в своем **форке** с именем `bugfix/issue-<Номер issue>-доп-название`
71+
* Создайте **pull-request** из своей ветки в ветку **`main`** проекта
72+
* Убедитесь, что модификация кода действительно исправляет ошибку, описанную в issue, и не привносит новую функциональность - новую функциональность следует делать отдельным issue и pull-request'ом.
73+
* Следуйте общим правилам [Pull/merge request](#Pull-Requests-Merge-Requests)
74+
75+
76+
## Предложите улучшение функциональности
77+
78+
1. Задайте понятный заголовок `issue`, лаконично и исчерпывающе определяющий новую функциональность
79+
2. Опишите суть улучшений и обсудите в issue варианты реализации.
80+
3. Реализуйте Ваше улучшение функциональности проекта в отдельном форке и предложите его через [Pull/merge request](#Pull-Requests-Merge-Requests)
81+
82+
83+
### Pull Requests (Merge Requests)
84+
85+
* Создайте `issue` в проекте с описанием новой функциональности, желательно перед началом работы, чтобы исключить параллельную работу разных людей над одной задачей
86+
* Создайте ветку в своем **форке** с именем `feature/issue-<Номер issue>-доп-название`
87+
* Внесите изменения
88+
* Создайте **pull-request** из своей ветки в ветку **`main`** проекта
89+
* Укажите ссылку на issue, которую закрывает данный pull-request
90+
* Установите в своем PR флажок "allow edits from maintainers"
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+

2+
Функция ВызовМетодаPOST(Запрос)
3+
4+
// Получаем перечень параметров извлекаемых из запроса
5+
ПараметрыМетода = ПараметрыМетодаВызовМетодаPOST();
6+
7+
// Регистрируем запрос в подсистеме контроля HTTP-сервисов
8+
Контекст = кв_HTTPСервисы.КонтекстЗапроса(Запрос, Истина, Истина, ПараметрыМетода);
9+
10+
// Проверяем запрос на идемпотентность
11+
Если Контекст.ГотовОтветНаЗапрос Тогда
12+
Возврат кв_HTTPСервисы.ОтветНаЗапрос(Контекст);
13+
КонецЕсли;
14+
15+
// Выполняем обработку бизнес логики запроса
16+
ОбработатьЗапросВызовМетодаPOST(Контекст);
17+
18+
// Регистрируем ответ сервиса и статус обработки
19+
Возврат кв_HTTPСервисы.ОтветНаЗапрос(Контекст);
20+
21+
КонецФункции
22+
23+
// Формирует описание получаемых параметров запроса ВызовМетодаPOST.
24+
// В коллекции перечислены поля, избирательно извлекаемые из тела запроса,
25+
// которые при этом могут быть обязательными к заполнению.
26+
//
27+
// Возвращаемое значение:
28+
// - Структура - описание параметров полей
29+
// *Ключ - Строка - Имя поля запроса.
30+
// *Значение - Булево - Признак обязательности заполнения поля.
31+
//
32+
Функция ПараметрыМетодаВызовМетодаPOST()
33+
34+
ПараметрыМетода = Новый Структура;
35+
ПараметрыМетода.Вставить("Article", Истина);
36+
37+
Возврат ПараметрыМетода;
38+
39+
КонецФункции
40+
41+
// Обработчик входящего запроса ВызовМетодаPOST
42+
// Функциональный уровень обработки, бизнес-логика.
43+
//
44+
// Параметры:
45+
// Контекст - Структура - см. кв_HttpСервисы.КонтекстЗапроса().
46+
//
47+
Процедура ОбработатьЗапросВызовМетодаPOST(Контекст)
48+
49+
Артикул = Контекст.ПараметрыЗапроса["Article"];
50+
51+
Товар = ПолучитьТоварПоАртикулу(Артикул);
52+
Если Товар = Неопределено Тогда
53+
ТекстОшибки = СтрШаблон("Товар с артикулом '%1' не найден", Артикул);
54+
кв_HTTPСервисы.ДобавитьОписаниеОшибки(Контекст, 400, , ТекстОшибки);
55+
Возврат;
56+
КонецЕсли;
57+
58+
ИмяМетода = Контекст.ПараметрыЗапроса["ИмяМетода"];
59+
60+
Если НЕ ИзвестныйМетод(ИмяМетода) Тогда
61+
ТекстОшибки = СтрШаблон("Неизвестное имя метода: %1", ИмяМетода);
62+
кв_HTTPСервисы.ДобавитьОписаниеОшибки(Контекст, 400, , ТекстОшибки);
63+
Возврат;
64+
КонецЕсли;
65+
66+
УстановитьОписаниеТовара(ИмяМетода, Товар, Контекст);
67+
68+
ПередатьОписаниеТовара(ИмяМетода, Товар, Контекст);
69+
70+
КонецПроцедуры
71+
72+
Функция ПолучитьТоварПоАртикулу(Артикул)
73+
74+
ТекстЗапроса = "ВЫБРАТЬ Ссылка
75+
| ИЗ Справочник.Товары
76+
| ГДЕ Артикул = &Артикул";
77+
78+
Запрос = Новый Запрос(ТекстЗапроса);
79+
Запрос.УстановитьПараметр("Артикул", Артикул);
80+
81+
УстановитьПривилегированныйРежим(Истина);
82+
83+
Результат = Запрос.Выполнить();
84+
Выборка = Результат.Выбрать();
85+
86+
Если Выборка.Следующий() Тогда
87+
Возврат Выборка.Ссылка.ПолучитьОбъект();
88+
Иначе
89+
Возврат Неопределено;
90+
КонецЕсли;
91+
92+
КонецФункции
93+
94+
Функция ИзвестныйМетод(ИмяМетода)
95+
96+
ИзвестныеМетоды = СтрРазделить("SetDescription, GetDescription", ", ", Ложь);
97+
98+
ЭтоИзвестныйМетод = НЕ ИзвестныеМетоды.Найти(ИмяМетода) = Неопределено;
99+
100+
Возврат ЭтоИзвестныйМетод;
101+
102+
КонецФункции
103+
104+
Процедура УстановитьОписаниеТовара(ИмяМетода, Товар, Контекст)
105+
106+
Если НЕ ИмяМетода = "SetDescription" Тогда
107+
Возврат;
108+
КонецЕсли;
109+
110+
Товар.Описание = Контекст.ТелоЗапроса;
111+
112+
УстановитьПривилегированныйРежим(Истина);
113+
Товар.Записать();
114+
УстановитьПривилегированныйРежим(Ложь);
115+
116+
ЗаполнитьОтветНаЗапросЗаписиТовара(Контекст);
117+
118+
КонецПроцедуры
119+
120+
Процедура ПередатьОписаниеТовара(ИмяМетода, Товар, Контекст)
121+
122+
Если НЕ ИмяМетода = "GetDescription" Тогда
123+
Возврат;
124+
КонецЕсли;
125+
126+
ЗаполнитьОтветНаЗапросПолученияОписанияТовара(Товар, Контекст);
127+
128+
КонецПроцедуры
129+
130+
Процедура ЗаполнитьОтветНаЗапросЗаписиТовара(Контекст)
131+
132+
ПараметрыОтвета = Новый Структура;
133+
ПараметрыОтвета.Вставить("succes", Истина);
134+
ПараметрыОтвета.Вставить("Article", Контекст.ПараметрыЗапроса["Article"]);
135+
136+
Контекст.Результат.Вставить("ПараметрыОтвета", ПараметрыОтвета);
137+
Контекст.Результат.Вставить("КодСостояния", 204);
138+
139+
КонецПроцедуры
140+
141+
Процедура ЗаполнитьОтветНаЗапросПолученияОписанияТовара(Товар, Контекст)
142+
143+
ПараметрыОтвета = Новый Структура;
144+
ПараметрыОтвета.Вставить("Article", Контекст.ПараметрыЗапроса["Article"]);
145+
ПараметрыОтвета.Вставить("Description", Товар.Описание);
146+
147+
Контекст.Результат.Вставить("ПараметрыОтвета", ПараметрыОтвета);
148+
149+
КонецПроцедуры
150+
Binary file not shown.

0 commit comments

Comments
 (0)