This commit is contained in:
artem 2025-10-07 14:16:34 +05:00
parent 7b08c1d18e
commit c83173e972
11 changed files with 437 additions and 36 deletions

View File

@ -3,7 +3,7 @@ title: Табличный документ в ТЗ и обратно
slug: общие-обмен-данными/табличный-документ-в-тз-и-обратно
---
# Табличный документ в таблицу значений (табдок в ТЗ)
## Табличный документ в таблицу значений (табдок в ТЗ)
```bsl
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
@ -11,7 +11,7 @@ slug: общие-обмен-данными/табличный-документ-
ТабДанные = Построитель.Результат.Выгрузить();
```
# Таблица значений в табличный документ (ТЗ в табдок)
## Таблица значений в табличный документ (ТЗ в табдок)
```bsl
ТабДокумент = Новый ТабличныйДокумент;
@ -21,35 +21,35 @@ slug: общие-обмен-данными/табличный-документ-
Построитель.Вывести(ТабДокумент);
```
## Вариант с собственной функцией
### Вариант с собственной функцией
```bsl
&НаСервере
Функция ТабличныйДокументИзТаблицыЗначений(ТаблицаЗначений)
ТабДок = Новый ТабличныйДокумент;
ТабДок = Новый ТабличныйДокумент;
// Формируем заголовки
ОбластьЗаголовок = ТабДок.ПолучитьОбласть(1, 1, 1, ТаблицаЗначений.Колонки.Количество() + 1);
ОбластьЗаголовок.Область(1, 1).Текст = "№ п/п";
// Формируем заголовки
ОбластьЗаголовок = ТабДок.ПолучитьОбласть(1, 1, 1, ТаблицаЗначений.Колонки.Количество() + 1);
ОбластьЗаголовок.Область(1, 1).Текст = "№ п/п";
Для НомерКолонки = 1 По ТаблицаЗначений.Колонки.Количество() Цикл
ОбластьЗаголовок.Область(1, НомерКолонки + 1).Текст = ТаблицаЗначений.Колонки[НомерКолонки - 1].Имя;
КонецЦикла;
ТабДок.Вывести(ОбластьЗаголовок);
Для НомерКолонки = 1 По ТаблицаЗначений.Колонки.Количество() Цикл
ОбластьЗаголовок.Область(1, НомерКолонки + 1).Текст = ТаблицаЗначений.Колонки[НомерКолонки - 1].Имя;
КонецЦикла;
ТабДок.Вывести(ОбластьЗаголовок);
// Заполняем данными
Для НомерСтроки = 1 По ТаблицаЗначений.Количество() Цикл
ОбластьСтрока = ТабДок.ПолучитьОбласть(НомерСтроки + 1, 1, НомерСтроки + 1, ТаблицаЗначений.Колонки.Количество() + 1);
ОбластьСтрока.Область(1, 1).Текст = Формат(НомерСтроки, "ЧГ=");
// Заполняем данными
Для НомерСтроки = 1 По ТаблицаЗначений.Количество() Цикл
ОбластьСтрока = ТабДок.ПолучитьОбласть(НомерСтроки + 1, 1, НомерСтроки + 1, ТаблицаЗначений.Колонки.Количество() + 1);
ОбластьСтрока.Область(1, 1).Текст = Формат(НомерСтроки, "ЧГ=");
Для НомерКолонки = 1 По ТаблицаЗначений.Колонки.Количество() Цикл
ОбластьСтрока.Область(1, НомерКолонки + 1).Текст = Строка(ТаблицаЗначений[НомерСтроки - 1][НомерКолонки - 1]);
КонецЦикла;
Для НомерКолонки = 1 По ТаблицаЗначений.Колонки.Количество() Цикл
ОбластьСтрока.Область(1, НомерКолонки + 1).Текст = Строка(ТаблицаЗначений[НомерСтроки - 1][НомерКолонки - 1]);
КонецЦикла;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабДок;
Возврат ТабДок;
КонецФункции
```

View File

@ -1,6 +1,6 @@
---
title: Чтение DBF
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-dbf
slug: общие-обмен-данными-чтение-данных-из-файла/чтение-dbf
---
> Длина имени файла DBF без расширения не должна быть больше **8 символов**

View File

@ -1,6 +1,6 @@
---
title: Чтение Excel
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-excel
slug: общие-обмен-данными-чтение-данных-из-файла/чтение-excel
---
## Обычное чтение

View File

@ -1,6 +1,6 @@
---
title: Чтение JSON
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-json
slug: общие-обмен-данными-чтение-данных-из-файла/чтение-json
---
```bsl

View File

@ -1,6 +1,6 @@
---
title: Чтение TXT, CSV
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-txt-csv
slug: общие-обмен-данными-чтение-данных-из-файла/чтение-txt-csv
---
## Вариант с ЧтениеТекста

View File

@ -1,6 +1,6 @@
---
title: Чтение XML
slug: общие-обмен-данными-чтение-файлов-примеры/чтение-xml
slug: общие-обмен-данными-чтение-данных-из-файла/чтение-xml
---
## С помощью XDTO

View File

@ -0,0 +1,39 @@
---
title: Сравнить элементы перечисления
slug: общие-общего-назначения/сравнить-элементы-перечисления
---
## В ERP Управление холдингом
```bsl
Результат = ОбщегоНазначенияУХ.СравнитьЗначенияПеречисления(Значение1, Значение2);
```
> Реализация
```bsl
// Сравнивает два значения перечисления.
// Параметры:
// Значение1 - ПеречислениеСсылка
// Значение2 - ПеречислениеСсылка
// Возвращает:
// Если значения равны, то возвращает 0.
// Если Значение1 стоит раньше по порядку Значение2, то -1
// Если Значение1 стоит позже по порядку Значение2, то 1
Функция СравнитьЗначенияПеречисления(Значение1, Значение2) Экспорт
Если Значение1 = Значение2 Тогда
Возврат 0;
КонецЕсли;
ПерчислениеМенеджер = Перечисления[Значение1.Метаданные().Имя];
Индекс1 = ПерчислениеМенеджер.Индекс(Значение1);
Индекс2 = ПерчислениеМенеджер.Индекс(Значение2);
Если Индекс1 < Индекс2 Тогда
Возврат -1;
ИначеЕсли Индекс1 > Индекс2 Тогда
Возврат 1;
КонецЕсли;
Возврат 0;
КонецФункции
```

View File

@ -2,7 +2,7 @@
title: Ссылка на объект из навигационной ссылки
slug: типовые-erp-общего-назначения-ух/ссылка-на-объект-из-навигационной-ссылки
---
# Пример вызова
# Пример вызова в УХ
```bsl
Ссылка = ОбщегоНазначенияУХ.СсылкаНаОбъектИзНавигационнойСсылки(СокрЛП(НавигационнаяСсылка));
```

View File

@ -0,0 +1,68 @@
---
title: Из UpperCamelCase в обычную строку
slug: общие-работа-с-текстом/из-uppercamelcase-в-обычную-строку
---
```bsl
// Функция - Преобразует CamelCase в обычный текст.
//
// Параметры:
// СтрокаCamelCase - Строка - строка в стиле CamelCase. Например ВДополнительномПодменю, ВводПоСтроке и т.д.
//
// Возвращаемое значение:
// Строка - преобразованный CamelCase в обычный текст. Например "HTTPСервис" => "HTTP сервис"
//
Функция НатуральноеПредставлениеСтрокиCamelCase(Знач СтрокаCamelCase) Экспорт
СтрокаCamelCase = СтрЗаменить(СтрокаCamelCase, "_", "");
Результат = "";
ПредыдущийСимвол = "";
КоличествоЗаглавныхСимволов = 0;
// Делим СтрокиТипаТакой на отдельные слова
Для Сч = 1 По СтрДлина(СтрокаCamelCase) Цикл
Символ = Сред(СтрокаCamelCase, Сч, 1);
ЭтоЗаглавная = (Символ = ВРег(Символ));
// Переход от аббревиатуры к обычному слову
Если НЕ ЭтоЗаглавная И КоличествоЗаглавныхСимволов >= 2 Тогда
Результат = Лев(Результат, СтрДлина(Результат) - 1) + " " + Прав(Результат, 1);
// Начало нового слова
ИначеЕсли ЭтоЗаглавная И КоличествоЗаглавныхСимволов = 0 И ПредыдущийСимвол <> "" Тогда
Результат = Результат + " ";
КонецЕсли;
Результат = Результат + Символ;
Если ЭтоЗаглавная Тогда
КоличествоЗаглавныхСимволов = КоличествоЗаглавныхСимволов + 1;
Иначе
КоличествоЗаглавныхСимволов = 0;
КонецЕсли;
ПредыдущийСимвол = Символ;
КонецЦикла;
// Приведение к строчному регистра (кроме первого слова и аббревиатур)
Слова = СтрРазделить(Результат, " ");
Для Индекс = 1 По Слова.ВГраница() Цикл
Слово = Слова[Индекс];
ЭтоАббревиатура = (Слово = ВРег(Слово));
Если СтрДлина(Слово) = 1 Или Не ЭтоАббревиатура Тогда // это точно не аббревиатура
Слова[Индекс] = НРег(Слово);
КонецЕсли;
КонецЦикла;
Возврат СокрЛП(СтрСоединить(Слова, " "));
КонецФункции
```

View File

@ -0,0 +1,104 @@
---
title: Из ЙЦУКЕН в QWERTY
slug: общие-работа-с-текстом/из-йцукен-в-qwerty
---
```bsl
&НаКлиенте
Процедура ИзЙЦУКЕНвQWERTY(Строка)
Строка = СокрЛП(Строка);
// Нижний регистр
Раскладка = Новый Соответствие;
Раскладка.Вставить("й", "q");
Раскладка.Вставить("ц", "w");
Раскладка.Вставить("у", "e");
Раскладка.Вставить("к", "r");
Раскладка.Вставить("е", "t");
Раскладка.Вставить("н", "y");
Раскладка.Вставить("г", "u");
Раскладка.Вставить("ш", "i");
Раскладка.Вставить("щ", "o");
Раскладка.Вставить("з", "p");
Раскладка.Вставить("х", "[");
Раскладка.Вставить("ъ", "]");
Раскладка.Вставить("ф", "a");
Раскладка.Вставить("ы", "s");
Раскладка.Вставить("в", "d");
Раскладка.Вставить("а", "f");
Раскладка.Вставить("п", "g");
Раскладка.Вставить("р", "h");
Раскладка.Вставить("о", "j");
Раскладка.Вставить("л", "k");
Раскладка.Вставить("д", "l");
Раскладка.Вставить("ж", ";");
Раскладка.Вставить("э", "'");
Раскладка.Вставить("я", "z");
Раскладка.Вставить("ч", "x");
Раскладка.Вставить("с", "c");
Раскладка.Вставить("м", "v");
Раскладка.Вставить("и", "b");
Раскладка.Вставить("т", "n");
Раскладка.Вставить("ь", "m");
Раскладка.Вставить("б", ",");
Раскладка.Вставить("ю", ".");
Раскладка.Вставить(".", "/");
// Верхний регистр
Раскладка.Вставить("Й", "Q");
Раскладка.Вставить("Ц", "W");
Раскладка.Вставить("У", "E");
Раскладка.Вставить("К", "R");
Раскладка.Вставить("Е", "T");
Раскладка.Вставить("Н", "Y");
Раскладка.Вставить("Г", "U");
Раскладка.Вставить("Ш", "I");
Раскладка.Вставить("Щ", "O");
Раскладка.Вставить("З", "P");
Раскладка.Вставить("Х", "{");
Раскладка.Вставить("Ъ", "}");
Раскладка.Вставить("Ф", "A");
Раскладка.Вставить("Ы", "S");
Раскладка.Вставить("В", "D");
Раскладка.Вставить("А", "F");
Раскладка.Вставить("П", "G");
Раскладка.Вставить("Р", "H");
Раскладка.Вставить("О", "J");
Раскладка.Вставить("Л", "K");
Раскладка.Вставить("Д", "L");
Раскладка.Вставить("Ж", ":");
Раскладка.Вставить("Э", """");
Раскладка.Вставить("Я", "Z");
Раскладка.Вставить("Ч", "X");
Раскладка.Вставить("С", "C");
Раскладка.Вставить("М", "V");
Раскладка.Вставить("И", "B");
Раскладка.Вставить("Т", "N");
Раскладка.Вставить("Ь", "M");
Раскладка.Вставить("Б", "<");
Раскладка.Вставить("Ю", ">");
Раскладка.Вставить(",", "?");
Раскладка.Вставить("""", "@");
Раскладка.Вставить(";", "$");
Раскладка.Вставить(":", "^");
Раскладка.Вставить("?", "&");
СимволыНовойСтроки = Новый Массив;
Для Сч = 1 По СтрДлина(Строка) Цикл
Символ = Сред(Строка, Сч, 1);
СоответствующийСимвол = Раскладка.Получить(Символ);
Если СоответствующийСимвол = Неопределено Тогда
СимволыНовойСтроки.Добавить(Символ);
Иначе
СимволыНовойСтроки.Добавить(СоответствующийСимвол);
КонецЕсли;
КонецЦикла;
Строка = СтрСоединить(СимволыНовойСтроки, "");
КонецПроцедуры
```

View File

@ -0,0 +1,190 @@
---
title: Представление отборов форматированной строкой
slug: общие-управляемые-формы/представление-отборов-форматированной-строкой
---
```bsl
// Функция - Представление отборов форматированной строкой
//
// Параметры:
// ТаблицаОтборов - ТаблицаЗначений - Таблица отборов для формирования представлений. Колонки
// * Имя - Строка - Имя отбора. Должно отвечать требованиям к идентификаторов 1С
// * Значение - Произвольный - Значение установленного отбора
// * Представление - Строка - Представление, которое будет выведено в итоговую строку. Если не заполнено, будет сформировано автоматически
// по имени
//
// ВыводитьНезаполненные - Булево - Истина, если нужно выводить отборы, значения которых не заполнены. По умолчанию Ложь
//
// Возвращаемое значение:
// ФорматированнаяСтрока - Представление установленных отборов вида "УстановленыОтборы: ИмяОтбора: ЗначениеОтбора; ..."
//
Функция ПредставлениеОтборовФорматированнойСтрокой(ТаблицаОтборов, ВыводитьНезаполненные = Ложь) Экспорт
ПараметрыОформления = ПараметрыФорматированнойСтрокиПредставленияОтборов();
ОписанияОтборов = Новый Массив;
Для Каждого Строка Из ТаблицаОтборов Цикл
ИмяОтбора = Строка.Имя;
ЗначениеОтбора = Строка.Значение;
ПредставлениеОтбора = ?(ЗначениеЗаполнено(Строка.Представление),
Строка.Представление,
НатуральноеПредставлениеСтрокиCamelCase(ИмяОтбора));
Если ВыводитьНезаполненные Тогда
ДобавитьОписаниеЭлементаОтбораВКоллекцию(ОписанияОтборов, ПредставлениеОтбора, ЗначениеОтбора, ПараметрыОформления);
Иначе
Если ТипЗнч(ЗначениеОтбора) = Тип("Булево") И Не ЗначениеОтбора Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(ЗначениеОтбора) Тогда
Если ТипЗнч(ЗначениеОтбора) = Тип("СписокЗначений") Тогда
ЗначениеОтбора = ЗначениеОтбора.ВыгрузитьЗначения();
КонецЕсли;
ДобавитьОписаниеЭлементаОтбораВКоллекцию(ОписанияОтборов, ПредставлениеОтбора, ЗначениеОтбора, ПараметрыОформления);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ОписанияОтборов.Количество() > 0 Тогда
ОписанияОтборов.Удалить(ОписанияОтборов.ВГраница());
ОписанияОтборов.Вставить(0,
Новый ФорматированнаяСтрока(
СтрШаблон("%1: ", ПараметрыОформления.ЗаголовокДекорации),
ПараметрыОформления.ШрифтЗаголовкаДекорации,
ПараметрыОформления.ЦветТекстаЗаголовкаДекорации));
Иначе
ОписанияОтборов.Вставить(0,
Новый ФорматированнаяСтрока(
ПараметрыОформления.ПредставлениеПустыхОтборов,
ПараметрыОформления.ШрифтЗаголовкаДекорации,
ПараметрыОформления.ЦветТекстаЗаголовкаДекорации));
КонецЕсли;
Результат = Новый ФорматированнаяСтрока(ОписанияОтборов);
Возврат Результат;
КонецФункции
Процедура ДобавитьОписаниеЭлементаОтбораВКоллекцию(Описания, ПредставлениеЭлемента, ЗначениеЭлемента, ПараметрыОформления)
ЦветТекстаЗаголовкаПоля = ПараметрыОформления.ЦветТекстаЗаголовкаПоля;
ШрифтЗаголовкаПоля = ПараметрыОформления.ШрифтЗаголовкаПоля;
ЦветТекстаЗначения = ПараметрыОформления.ЦветТекстаЗначения;
ШрифтЗначения = ПараметрыОформления.ШрифтЗначения;
Описания.Добавить(Новый ФорматированнаяСтрока(СтрШаблон("%1: ", ПредставлениеЭлемента), ШрифтЗаголовкаПоля , ЦветТекстаЗаголовкаПоля));
Если ЗначениеЗаполнено(ЗначениеЭлемента) Тогда
Если ТипЗнч(ЗначениеЭлемента) = Тип("Массив")
Или ТипЗнч(ЗначениеЭлемента) = Тип("ФиксированныйМассив") Тогда
ПредставленияЭлементов = Новый Массив;
Для Каждого ТекЭлемент Из ЗначениеЭлемента Цикл
Если ЗначениеЗаполнено(ТекЭлемент) Тогда
ПредставленияЭлементов.Добавить(Строка(ТекЭлемент));
Иначе
ПредставленияЭлементов.Добавить(НСтр("ru = '<Пустое значение>'"));
КонецЕсли;
КонецЦикла;
ТекстЗначения = СтрСоединить(ПредставленияЭлементов, "; ");
ИначеЕсли ТипЗнч(ЗначениеЭлемента) = Тип("Дата") Тогда
ТекстЗначения = Формат(ЗначениеЭлемента, "ДФ='ММММ гггг ""г.""'");
Иначе
ТекстЗначения = Строка(ЗначениеЭлемента);
КонецЕсли;
Иначе
ТекстЗначения = НСтр("ru = '<Пустое значение>'");
КонецЕсли;
Описания.Добавить(Новый ФорматированнаяСтрока(Строка(ТекстЗначения), ШрифтЗначения , ЦветТекстаЗначения));
Описания.Добавить("; ");
КонецПроцедуры
Функция ПараметрыФорматированнойСтрокиПредставленияОтборов()
ПараметрыПредставления = Новый Структура;
ПараметрыПредставления.Вставить("ЦветТекстаЗаголовкаДекорации", Новый Цвет(0,150,70));
ПараметрыПредставления.Вставить("ШрифтЗаголовкаДекорации", Новый Шрифт(, , Истина));
ПараметрыПредставления.Вставить("ЦветТекстаЗаголовкаПоля", Новый Цвет(110, 110, 110));
ПараметрыПредставления.Вставить("ШрифтЗаголовкаПоля", Новый Шрифт());
ПараметрыПредставления.Вставить("ЦветТекстаЗначения", Новый Цвет(80, 40, 0));
ПараметрыПредставления.Вставить("ШрифтЗначения", Новый Шрифт(, , Истина));
ПараметрыПредставления.Вставить("ЗаголовокДекорации", "Установлены отборы");
ПараметрыПредставления.Вставить("ПредставлениеПустыхОтборов", "Отборы не установлены");
Возврат ПараметрыПредставления;
КонецФункции
// Функция - Преобразует CamelCase в обычный текст.
//
// Параметры:
// СтрокаCamelCase - Строка - строка в стиле CamelCase. Например ВДополнительномПодменю, ВводПоСтроке и т.д.
//
// Возвращаемое значение:
// Строка - преобразованный CamelCase в обычный текст. Например "HTTPСервис" => "HTTP сервис"
//
Функция НатуральноеПредставлениеСтрокиCamelCase(Знач СтрокаCamelCase) Экспорт
СтрокаCamelCase = СтрЗаменить(СтрокаCamelCase, "_", "");
Результат = "";
ПредыдущийСимвол = "";
КоличествоЗаглавныхСимволов = 0;
Для Сч = 1 По СтрДлина(СтрокаCamelCase) Цикл
Символ = Сред(СтрокаCamelCase, Сч, 1);
ЭтоЗаглавная = (Символ = ВРег(Символ));
Если НЕ ЭтоЗаглавная И КоличествоЗаглавныхСимволов >= 2 Тогда
Результат = Лев(Результат, СтрДлина(Результат) - 1) + " " + Прав(Результат, 1);
ИначеЕсли ЭтоЗаглавная И КоличествоЗаглавныхСимволов = 0 И ПредыдущийСимвол <> "" Тогда
Результат = Результат + " ";
КонецЕсли;
Результат = Результат + Символ;
Если ЭтоЗаглавная Тогда
КоличествоЗаглавныхСимволов = КоличествоЗаглавныхСимволов + 1;
Иначе
КоличествоЗаглавныхСимволов = 0;
КонецЕсли;
ПредыдущийСимвол = Символ;
КонецЦикла;
Слова = СтрРазделить(Результат, " ");
Для Индекс = 1 По Слова.ВГраница() Цикл
Слово = Слова[Индекс];
ЭтоАббревиатура = (Слово = ВРег(Слово));
Если СтрДлина(Слово) = 1 Или Не ЭтоАббревиатура Тогда // это точно не аббревиатура
Слова[Индекс] = НРег(Слово);
КонецЕсли;
КонецЦикла;
Возврат СокрЛП(СтрСоединить(Слова, " "));
КонецФункции
```