Включает/отключает в окнах текстовых документов панель с отображением номеров строк
Две экспортные функции для удобной работы с JSON.
1. Преобразовать строку JSON в структуру или соответствие
2. Преобразовать структуру в строку JSON (или записать в файл)
Функция JSONВСтруктуру(СтрокаJSON, ПрочитатьВСоответствие=Ложь) Экспорт
Если Пу...
Синтакс-помощник БСП - cправочник по библиотеке стандартных подсистем. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП. В справчоник добавлены ассистенты на базе нейросетевых моделей ИИ.
Подходит для интеграций с внешними системами, веб-сервисами и API, где используется UNIX-время.
Функция ДатаВUNIX(Дата) Экспорт
Результат = Число((Дата - '19700101') * 1000);
Результат = Формат(Результат, ЧГ=);
Возврат Результат;
КонецФункции
Функци...
Удаление пустых строк в коде
Эта команда адаптера открывает сравнение выделенного текста с текстом буфера обмена с синтаксической подсветкой. После нажатия кнопки "Применить" выполняется замена выделенного текста на текст из буфера и вставленный фрагмент остается выделенным.
Пример POST-запроса к API
Функция ПримерВызоваМетодаAPI()
Соединение = Новый HTTPСоединение("https://<адрес API>",,,,,5,Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос();
Запрос.АдресРесурса = "/api/v1/echo";
Запрос.Заголовки.Вставить("Authorization", "Ключ сервиса");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
ДанныеДляПередачи = Новый Структура("data");
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписатьJSON(ЗаписьJSON, ДанныеДляПередачи);
ТелоЗапросаСтрока = ЗаписьJSON.Закрыть();
Запрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока);
ОтветHTTP = Соединение.ВызватьHTTPМетод("POST", Запрос);
КодСостояния = ОтветHTTP.КодСостояния;
Если КодСостояния < 200 Или КодСостояния >= 300 Тогда
Сообщить("Ошибка " + КодСостояния + " подключения к сервису " + ОтветHTTP.ПолучитьТелоКакСтроку());
Возврат Неопределено;
КонецЕсли;
СтрокаJSON = ОтветHTTP.ПолучитьТелоКакСтроку();
Возврат СтрокаJSON;
КонецФункции
Функция ПримерВызоваМетодаAPI()
Соединение = Новый HTTPСоединение("https://<адрес API>",,,,,5,Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос();
Запрос.АдресРесурса = "/api/v1/echo";
Запрос.Заголовки.Вставить("Authorization", "Ключ сервиса");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
ДанныеДляПередачи = Новый Структура("data");
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписатьJSON(ЗаписьJSON, ДанныеДляПередачи);
ТелоЗапросаСтрока = ЗаписьJSON.Закрыть();
Запрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока);
ОтветHTTP = Соединение.ВызватьHTTPМетод("POST", Запрос);
КодСостояния = ОтветHTTP.КодСостояния;
Если КодСостояния < 200 Или КодСостояния >= 300 Тогда
Сообщить("Ошибка " + КодСостояния + " подключения к сервису " + ОтветHTTP.ПолучитьТелоКакСтроку());
Возврат Неопределено;
КонецЕсли;
СтрокаJSON = ОтветHTTP.ПолучитьТелоКакСтроку();
Возврат СтрокаJSON;
КонецФункции
Функция СтрНайтиВсеПоРегулярномуВыражению() доступна в платформе «1С:Предприятие» версии 8.3.23 и выше.
// определим количество закрывающих тегов блоков item
КоличествоСтрок = СтрНайтиВсеПоРегулярномуВыражению(ТекстПакета, /.*_item, Истина).Количество(...
Добавляет возможности использования ИИ в Конфигураторе 1С с TurboConf.
Эта кнопка адаптера сериализует текущий объект в JSON и генерирует функцию-конструктор для типизирующих комментариев анализатора кода ИР
<iframe width="560" height="315" src="https://www.youtube.com/embed/SZLeHbYpPDY?si=oyKTPWMl55zjdQm_" title="YouTube vi...
Функция определяет, високосный ли год по григорианскому календарю (полное правило).
Платформа "1C:Предприятие.Элемент Скрипт"
method Leap(year:Number):Boolean
case True
when year % 400 == 0
return True
when year % 100 == 0
...
Из идентификатора "МояТаблицаTable" формирует строку "Моя таблица table"
Минимальная версия платформы: 8.3.23
Функция СинонимИзИдентификатора(Идентификатор)
Возврат СокрЛП(ВРЕГ(Лев(Идентификатор,1)) + нрег(СтрЗаменитьПоРегулярномуВыражению(Сред(Иденти...
// Проверить расположен ли элемент управляемой формы ПроверяемыйЭлемент внутри элемента Родитель.
// Параметры:
// Родитель - ГруппаФормы, ТаблицаФормы, ФормаКлиентскогоПриложения -
// ПроверяемыйЭлемент - ПолеФормы, ГруппаФормы, ТаблицаФормы, КнопкаФормы, ДекорацияФормы -
// Возвращаемое значение:
// Булево -
Функция ЛиВнутриРодителяФормыЛкс(Знач Родитель, Знач ПроверяемыйЭлемент) Экспорт
ТекущийРодитель = ПроверяемыйЭлемент;
Пока Истина Цикл
Если ТекущийРодитель = Родитель Тогда
Возврат Истина;
КонецЕсли;
Если ТипЗнч(ТекущийРодитель) = Тип("ФормаКлиентскогоПриложения") Тогда
Возврат Ложь;
КонецЕсли;
ТекущийРодитель = ТекущийРодитель.Родитель;
КонецЦикла;
КонецФункции
// Проверить расположен ли элемент управляемой формы ПроверяемыйЭлемент внутри элемента Родитель.
// Параметры:
// Родитель - ГруппаФормы, ТаблицаФормы, ФормаКлиентскогоПриложения -
// ПроверяемыйЭлемент - ПолеФормы, ГруппаФормы, ТаблицаФормы, КнопкаФормы, ДекорацияФормы -
// Возвращаемое значение:
// Булево -
Функция ЛиВнутриРодителяФормыЛкс(Знач Родитель, Знач ПроверяемыйЭлемент) Экспорт
ТекущийРодитель = ПроверяемыйЭлемент;
Пока Истина Цикл
Если ТекущийРодитель = Родитель Тогда
Возврат Истина;
КонецЕсли;
Если ТипЗнч(ТекущийРодитель) = Тип("ФормаКлиентскогоПриложения") Тогда
Возврат Ложь;
КонецЕсли;
ТекущийРодитель = ТекущийРодитель.Родитель;
КонецЦикла;
КонецФункции
Эта команда адаптера улучшает штатную команду "Проверить модуль" конфигуратора:
Очищает окно сообщений (есть опция в Турбоконфе)
Запускает штатную проверку модуля конфигуратора
Дожидается ее завершения
Активирует первое сообщение об ошибке в окне сообщений...
//.
// Возвращаемое значение:
// Структура - значения положительны для месячных типов и отрицательны для секундных
Функция МножителиТиповПериодов() Экспорт
Сутки = 24*60*60;
Множители = Новый Структура("Год, Полугодие, Квартал, Месяц, Декада, Неделя, День, Час, Минута, Секунда",
12, 6, 3, 1, -10*Сутки, -7*Сутки, -1*Сутки, -60*60, -60, -1);
Возврат Множители;
КонецФункции
// Аналог функции ДобавитьКДате языка запросов.
// Параметры:
// ИсходнаяДата - Дата -
// ТипПериода - Строка - имя типа периода аналогично языку запросов, регистр букв не важен
// Количество - Число - допускается отрицательное
// Возвращаемое значение:
// Дата -
Функция ДобавитьКДате(Знач ИсходнаяДата, Знач ТипПериода, Знач Количество = -1) Экспорт
ТипПериода = ВРег(ТипПериода);
Если Найти("ГОД;КВАРТАЛ;ПОЛУГОДИЕ;МЕСЯЦ;", ТипПериода + ";") > 0 Тогда
Если Цел(Количество) <> Количество Тогда
ВызватьИсключение "Количество должно быть целым числом для типа периода " + ТипПериода;
КонецЕсли;
КонецЕсли;
Множители = МножителиТиповПериодов();
Если Не Множители.Свойство(ТипПериода) Тогда
ВызватьИсключение "Неподдерживаемый тип периода: " + ТипПериода;
КонецЕсли;
Если Множители[ТипПериода] > 0 Тогда
Возврат ДобавитьМесяц(ИсходнаяДата, Количество * Множители[ТипПериода]);
Иначе
Возврат ИсходнаяДата - Количество * Множители[ТипПериода];
КонецЕсли;
КонецФункции
// Аналог функции РазностьДат языка запросов.
// Параметры:
// ВычитаемаяДата - Дата - которую вычитаем
// ИсходнаяДата - Дата - из которой вычитаем
// ТипПериода - Строка - имя типа периода аналогично языку запросов, регистр букв не важен
// Возвращаемое значение:
// Число - ИсходнаяДата-ВычитаемаяДата
Функция РазностьДат(Знач ВычитаемаяДата, Знач ИсходнаяДата, Знач ТипПериода) Экспорт
Множители = МножителиТиповПериодов();
Если Не Множители.Свойство(ТипПериода) Тогда
ВызватьИсключение "Неподдерживаемый тип периода: " + ТипПериода;
КонецЕсли;
Если Множители[ТипПериода] > 0 Тогда
Возврат Цел((Год(ИсходнаяДата) * 12 + Месяц(ИсходнаяДата) - 1) / Множители[ТипПериода])
- Цел((Год(ВычитаемаяДата) * 12 + Месяц(ВычитаемаяДата) - 1) / Множители[ТипПериода])
Иначе
Возврат Цел((Дата(1,1,1) - ИсходнаяДата) / Множители[ТипПериода])
- Цел((Дата(1,1,1) - ВычитаемаяДата) / Множители[ТипПериода])
КонецЕсли;
КонецФункции
//.
// Возвращаемое значение:
// Структура - значения положительны для месячных типов и отрицательны для секундных
Функция МножителиТиповПериодов() Экспорт
Сутки = 24*60*60;
Множители = Новый Структура("Год, Полугодие, Квартал, Месяц, Декада, Неделя, День, Час, Минута, Секунда",
12, 6, 3, 1, -10*Сутки, -7*Сутки, -1*Сутки, -60*60, -60, -1);
Возврат Множители;
КонецФункции
// Аналог функции ДобавитьКДате языка запросов.
// Параметры:
// ИсходнаяДата - Дата -
// ТипПериода - Строка - имя типа периода аналогично языку запросов, регистр букв не важен
// Количество - Число - допускается отрицательное
// Возвращаемое значение:
// Дата -
Функция ДобавитьКДате(Знач ИсходнаяДата, Знач ТипПериода, Знач Количество = -1) Экспорт
ТипПериода = ВРег(ТипПериода);
Если Найти("ГОД;КВАРТАЛ;ПОЛУГОДИЕ;МЕСЯЦ;", ТипПериода + ";") > 0 Тогда
Если Цел(Количество) <> Количество Тогда
ВызватьИсключение "Количество должно быть целым числом для типа периода " + ТипПериода;
КонецЕсли;
КонецЕсли;
Множители = МножителиТиповПериодов();
Если Не Множители.Свойство(ТипПериода) Тогда
ВызватьИсключение "Неподдерживаемый тип периода: " + ТипПериода;
КонецЕсли;
Если Множители[ТипПериода] > 0 Тогда
Возврат ДобавитьМесяц(ИсходнаяДата, Количество * Множители[ТипПериода]);
Иначе
Возврат ИсходнаяДата - Количество * Множители[ТипПериода];
КонецЕсли;
КонецФункции
// Аналог функции РазностьДат языка запросов.
// Параметры:
// ВычитаемаяДата - Дата - которую вычитаем
// ИсходнаяДата - Дата - из которой вычитаем
// ТипПериода - Строка - имя типа периода аналогично языку запросов, регистр букв не важен
// Возвращаемое значение:
// Число - ИсходнаяДата-ВычитаемаяДата
Функция РазностьДат(Знач ВычитаемаяДата, Знач ИсходнаяДата, Знач ТипПериода) Экспорт
Множители = МножителиТиповПериодов();
Если Не Множители.Свойство(ТипПериода) Тогда
ВызватьИсключение "Неподдерживаемый тип периода: " + ТипПериода;
КонецЕсли;
Если Множители[ТипПериода] > 0 Тогда
Возврат Цел((Год(ИсходнаяДата) * 12 + Месяц(ИсходнаяДата) - 1) / Множители[ТипПериода])
- Цел((Год(ВычитаемаяДата) * 12 + Месяц(ВычитаемаяДата) - 1) / Множители[ТипПериода])
Иначе
Возврат Цел((Дата(1,1,1) - ИсходнаяДата) / Множители[ТипПериода])
- Цел((Дата(1,1,1) - ВычитаемаяДата) / Множители[ТипПериода])
КонецЕсли;
КонецФункции
Часто при работе с Интернет ресурсами в ответ приходит строка JSON в неформатированном виде. Хочется получить эту строку с отступами и другими прикрасами
Функция ФорматироватьСтрокуJSON(СтрокаJSON, ПереносСтрокJSON, СимволыОтступа = " ", ИспользоватьДвойныеКавычки = Истина, ЭкранированиеСимволов = Неопределено)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Структура = ПрочитатьJSON(ЧтениеJSON, Ложь);
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON, СимволыОтступа, ИспользоватьДвойныеКавычки, ЭкранированиеСимволов);
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, Структура);
СтрокаJSON = ЗаписьJSON.Закрыть();
Возврат СтрокаJSON;
КонецФункции
Функция ФорматироватьСтрокуJSON(СтрокаJSON, ПереносСтрокJSON, СимволыОтступа = " ", ИспользоватьДвойныеКавычки = Истина, ЭкранированиеСимволов = Неопределено)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Структура = ПрочитатьJSON(ЧтениеJSON, Ложь);
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON, СимволыОтступа, ИспользоватьДвойныеКавычки, ЭкранированиеСимволов);
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, Структура);
СтрокаJSON = ЗаписьJSON.Закрыть();
Возврат СтрокаJSON;
КонецФункции
Иногда при работе с WEB сервисами возникает задача преобразовать строку в строку Base64
Функция СтрокаBase64(Стр, Кодировка = Неопределено, ЗаписатьBOM = Ложь) Экспорт
Если НЕ ЗначениеЗаполнено(Кодировка) Тогда
Кодировка = КодировкаТекста.UTF8;
КонецЕСли;
ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(Стр, Кодировка, ЗаписатьBOM);
Результат = Base64Строка(ДвоичныеДанныеСтроки);
Возврат Результат;
КонецФункции
Функция СтрокаBase64(Стр, Кодировка = Неопределено, ЗаписатьBOM = Ложь) Экспорт
Если НЕ ЗначениеЗаполнено(Кодировка) Тогда
Кодировка = КодировкаТекста.UTF8;
КонецЕСли;
ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(Стр, Кодировка, ЗаписатьBOM);
Результат = Base64Строка(ДвоичныеДанныеСтроки);
Возврат Результат;
КонецФункции
Эта кнопка адаптера замещает штатную кнопку "ОК" в окне "Тип вызова" при создании расширения метода, чтобы автоматически вставлять корневую инструкцию препроцессора в модуль расширения. Это очень важно для расширения модулей менеджеров для обеспечения их к...
Например, при передаче данных в запрос в качестве таблицы с одной строкой.
// Преобразовать Структуру в Таблицу значений (одну строку)
// Каждое значение станет колонкой в таблице значений,
// тип значения в колонке будет определён по содержащемуся в по...
Эта команда адаптера открывает в приложении ИР список измененных модулей кэша по отношению к папке Гита. Двойной клик на изменном модуле открывает его сравнение с версией Гита в окне "Сравнение текстов", откуда можно открыть VS Code для выборочного отката ...
Функция для проверки, есть ли документы с тем же интервалом дат, что и заданный.
//Истина - есть пересечения
//Ложь - пересечений нет.
Функция ЕстьПересечениеДат(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВашДокумент.Ссылка
|ИЗ
| Документ.ВашДокумент КАК ВашДокумент
|ГДЕ
| ПлановыйГрафикРаботы.Проведен
| И &НачалоПериода < ВашДокумент.КонецПериода
| И &КонецПериода > ВашДокумент.НачалоПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
РезультатЗапроса = Запрос.Выполнить();
Возврат Не РезультатЗапроса.Пустой();
КонецФункции
//Истина - есть пересечения
//Ложь - пересечений нет.
Функция ЕстьПересечениеДат(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВашДокумент.Ссылка
|ИЗ
| Документ.ВашДокумент КАК ВашДокумент
|ГДЕ
| ПлановыйГрафикРаботы.Проведен
| И &НачалоПериода < ВашДокумент.КонецПериода
| И &КонецПериода > ВашДокумент.НачалоПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
РезультатЗапроса = Запрос.Выполнить();
Возврат Не РезультатЗапроса.Пустой();
КонецФункции