Не работает код 1С
17.02.2025, 21:52. Показов 1390. Ответов 1
krabovich не работает код 1с
Модуль формы документа
| 1C | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| &НаСервере
Процедура пр_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Элементы.ГруппаВидИСостояние.Видимость = Ложь;
Элементы.ПланированиеЗаказчикРабота.Видимость = Ложь;
НовыйРеквизитФормы = Новый РеквизитФормы("пр_Статус", Новый ОписаниеТипов("СправочникСсылка.КолонкиКалендарейСотрудников"),,"Статус");
МассивРеквизитовФормы = Новый Массив;
МассивРеквизитовФормы.Добавить(НовыйРеквизитФормы);
ИзменитьРеквизиты(МассивРеквизитовФормы);
НоваяГруппаЦентральнаяКолонка = Элементы.Добавить("пр_ЦентральнаяКолонка", Тип("ГруппаФормы"), Элементы.Шапка);
НоваяГруппаЦентральнаяКолонка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НоваяГруппаЦентральнаяКолонка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
НовыйЭлементСтатус = Элементы.Добавить("пр_Статус", Тип("ПолеФормы"), Элементы.Шапка.ПодчиненныеЭлементы.ЛеваяКолонка);
НовыйЭлементСтатус.ПутьКДанным = "пр_Статус";
НовыйЭлементСтатус.Вид = ВидПоляФормы.ПолеНадписи;
НовыйЭлементСтатус.ТолькоПросмотр = Истина;
Элементы.Переместить(НовыйЭлементСтатус, Элементы.Шапка.ПодчиненныеЭлементы.ЛеваяКолонка, Элементы.Шапка.ПодчиненныеЭлементы.ЛеваяКолонка.ПодчиненныеЭлементы.Сотрудник);
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
ЭтотОбъект["пр_Статус"] = КолонкаКалендаряЗадачи(Объект.Ссылка, Объект.КалендарьСотрудника);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция КолонкаКалендаряЗадачи(Задача, Календарь)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаписиКалендаряСотрудника.КолонкаКалендаря КАК КолонкаКалендаря
|ИЗ
| Справочник.ЗаписиКалендаряСотрудника КАК ЗаписиКалендаряСотрудника
|ГДЕ
| ЗаписиКалендаряСотрудника.Календарь = &Календарь
| И ЗаписиКалендаряСотрудника.Источник = &Источник";
Запрос.УстановитьПараметр("Источник", Задача);
Запрос.УстановитьПараметр("Календарь", Календарь);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.КолонкаКалендаря;
КонецЕсли;
Возврат Справочники.КолонкиКалендарейСотрудников.ПустаяСсылка();
КонецФункции |
|
Модуль объекта документа
| 1C | 1
2
3
4
5
6
7
8
| &После("ПередЗаписью")
Процедура К_ПередЗаписьюПосле(Отказ, РежимЗаписи, РежимПроведения)
Если Не ЗначениеЗаполнено(Сотрудник) Тогда
Сотрудник = Константы.пр_Бэклог.Получить();
КонецЕсли;
КонецПроцедуры |
|
Модуль объекта записи календаря сотр
| 1C | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| &После("ПередЗаписью")
Процедура К_ПередЗаписьюПосле(Отказ)
ВипЛимит = 3;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаписиКалендаряСотрудника.Источник) КАК КоличествоЗадачВКолонке
|ИЗ
| Справочник.ЗаписиКалендаряСотрудника КАК ЗаписиКалендаряСотрудника
|ГДЕ
| ЗаписиКалендаряСотрудника.Источник <> &Источник
| И ЗаписиКалендаряСотрудника.КолонкаКалендаря = &КолонкаКалендаря
| И ЗаписиКалендаряСотрудника.Календарь = &Календарь
| И ЗаписиКалендаряСотрудника.Ссылка <> &Ссылка
| И НЕ ЗаписиКалендаряСотрудника.ПометкаУдаления";
Запрос.УстановитьПараметр("Источник", Источник);
Запрос.УстановитьПараметр("Календарь", Календарь);
Запрос.УстановитьПараметр("КолонкаКалендаря", КолонкаКалендаря);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.КоличествоЗадачВКолонке > ВипЛимит И КолонкаКалендаря.Наименование = "Анализ" Тогда
ОбщегоНазначения.СообщитьПользователю("Превышен VIP-лимит, переместить новую задачу нельзя",,,,Отказ);
Отказ = Истина;
КонецЕсли;
КонецПроцедуры |
|
| 1C | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
| &НаКлиенте
Функция ОтправитьЗапросGETКартинку()
HTTP = Новый HTTPСоединение("gitlab.com",,,,,, Новый ЗащищенноеСоединениеOpenSSL);
ЗапросHTTP = Новый HTTPЗапрос("api/v4/projects/66840636");
ОтветHTTP = HTTP.Получить(ЗапросHTTP);
JSON = ОтветHTTP.ПолучитьТелоКакСтроку();
Результат = ДесериализоватьJSON(JSON);
Возврат Результат;
КонецФункции
&НаКлиенте
Функция СериализоватьВJSON(ДанныеОКлиенте)
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеОКлиенте);
СтрокаДляТела = ЗаписьJSON.Закрыть();
Возврат СтрокаДляТела;
КонецФункции
&НаКлиенте
Функция ДесериализоватьJSON(JSON)
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(JSON);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПроверитьДоступКПроекту(Команда)
Результат = ОтправитьЗапросGETКартинку();
Сообщить(Результат["message"]);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьСобытие(Команда)
Структура = СфомироватьСтруктуру();
СтрокаДляТела = СериализоватьВJSON(Структура);
Результат = Отправить(СтрокаДляТела);
КонецПроцедуры
&НаКлиенте
функция СфомироватьСтруктуру()
title="Программное создание";
descriptions="Программное создание описания";
labels="Необработано";
СтруктураЗапроса=Новый Структура("title,descriptions,labels",title,descriptions,labels);
Возврат СтруктураЗапроса;
КонецФункции
&НаКлиенте
функция Отправить(СтрокаДляТела)
HTTP = Новый HTTPСоединение("gitlab.com",,,,,, Новый ЗащищенноеСоединениеOpenSSL);
ЗаголовокЗапроса = Новый Структура;
ЗаголовокЗапроса.Вставить("PRIVATE-TOKEN", "glpat-LaVCrVLRkyrR9z1SStYo");
ЗаголовокЗапроса.Вставить("Content-Type","application/json");
ЗапросHTTP = Новый HTTPЗапрос("api/v4/projects/66840636/issues",ЗаголовокЗапроса);
ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаДляТела);
ОтветHTTP = HTTP.ОтправитьДляОбработки(ЗапросHTTP);
JSON = ОтветHTTP.ПолучитьТелоКакСтроку();
Результат = ДесериализоватьJSON(JSON);
Возврат Результат;
КонецФункции |
|
СКД отчёта
| 1C | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| ВЫБРАТЬ
ЗаказПокупателя.Контрагент КАК Контрагент,
ЗаданиеНаРаботу.К_Проект КАК К_Проект,
ЗаданиеНаРаботу.Сотрудник КАК Сотрудник,
ЗаданиеНаРаботу.К_Оценка КАК К_Оценка,
ЗаданиеНаРаботу.К_Факт КАК К_Факт,
ЗаданиеНаРаботу.К_Оценка - ЗаданиеНаРаботу.К_Факт КАК К_Разница
ИЗ
Документ.ЗаданиеНаРаботу КАК ЗаданиеНаРаботу,
Документ.ЗаказПокупателя КАК ЗаказПокупателя
СГРУППИРОВАТЬ ПО
ЗаказПокупателя.Контрагент,
ЗаданиеНаРаботу.К_Проект,
ЗаданиеНаРаботу.Сотрудник,
ЗаданиеНаРаботу.К_Оценка,
ЗаданиеНаРаботу.К_Факт,
ЗаданиеНаРаботу.К_Оценка - ЗаданиеНаРаботу.К_Факт |
|
Ресурсы отчёта: оценка, факт, разница
Настройки -> детальные записи. Выбранные поля -> Все. Условное оформление -> К_Разница Меньше "0" в группировке
Дополнительные материалы: https://its.1c.ru/db/intgr83/content/41/hdoc
Объединение:
1. Создать access token пользователя или проекта api read_api роль developer (желательно)
2. Создать доску Plan -> Issue bords... add time entry
Тот же самый документ: Модуль объекта
| 1C | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| &После("ПередЗаписью")
Процедура пр_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ТокенGitLab = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(пр_Проект,"пр_ТокенGitLab");
Если Не ЗначениеЗаполнено(ТокенGitLab) Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(пр_ИдентификаторGitLab) Тогда
Возврат;
КонецЕсли;
АдресСервера = "gitlab.com";
ПутьНаСервере = "/api/v4/projects/61127527/issues";
Соединение = Новый HTTPСоединение(АдресСервера,,,,,, Новый ЗащищенноеСоединениеOpenSSL);
ДанныеЗапроса = Новый Структура;
ДанныеЗапроса.Вставить("title", СтрШаблон("№%1 от %2", Номер, Формат(Дата, "ДЛФ=D")));
ДанныеЗапроса.Вставить("labels", Строка(пр_ДанныеКалендаря.КолонкаКаландаряЗадачи(Ссылка, КалендарьСотрудника)));
ТелоЗапроса = ЗаписатьЗначениеJSON(ДанныеЗапроса);
Заголовки = Новый Соответствие;
Заголовки.Вставить("PRIVATE-TOKEN", ТокенGitLab);
Заголовки.Вставить("Content-Type", "application/json");
Запрос = Новый HTTPЗапрос(ПутьНаСервере, Заголовки);
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось отправить задачу в GitLab, повторная попытка будет выполнена при следующей записи");
Возврат;
КонецПопытки;
Если Ответ.КодСостояния >= 300 Тогда
ОбщегоНазначения.СообщитьПользователю("Не удалось отправить задачу в GitLab, повторная попытка будет выполнена при следующей записи");
Возврат;
КонецЕсли;
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
ДанныеОтвета = ПрочитатьЗначениеJSON(ТелоОтвета);
пр_ИдентификаторGitLab = ДанныеОтвета.iid;
КонецПроцедуры |
|
Справочнику проекта можно создать реквизит пр_ТокенGitLab (быстрее раскопировать токен в код)
пр_ДанныеКалендаря - общий модуль с процедурой КолонкаКаландаряЗадачи
0
|