Все публикации

БСП
Разработки

Преобразование строки в число

Не вызывает исключение
RomanVG 75 4 2
// функция преобразует строку в число, примеры:
// 315 руб. = 315
// 1 007,30 м2 (квадратный метр) = 1007,3
// -12.5% = -12,5
// ,05 = 0,05
// пустая строка или пробелы = 0
Функция грв_СтрокаВЧисло(Знач СтрокаЧисло) Экспорт
	
	Результат = "";
	Для Индекс = 1 По СтрДлина(СтрокаЧисло) Цикл
		Символ = Сред(СтрокаЧисло, Индекс, 1);
		КодСимвола = КодСимвола(Символ);
		Если ((КодСимвола >= 48 И КодСимвола <= 57) Или (Символ = "-" И Индекс = 1) Или (Символ = ",") Или (Символ = ".") Или (Символ = " ") Или (КодСимвола = 160)) Тогда
			Если КодСимвола <> 32 И КодСимвола <> 160 Тогда
				Результат = Результат + Символ;
			КонецЕсли; 
		Иначе
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Результат = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(Результат);
	
	Возврат Результат;
	
КонецФункции

Как запустить скрипт VBS с правами администратора

Понадобилось по быстрому запустить скрипт для очистки логов IIS. Но для этого потребовались права администратора. Помог совет со StackOverflow, добавил в начало скрипта: If Not WScript.Arguments.Named.Exists(elevate) Then CreateObject(Shell.Application)....
bolsun 319 5 6 6

TurboConf - расширение Конфигуратора 1С Промо

TurboConf повышает эффективность работы в Конфигураторе 1С и помогает программисту автоматизировать свои задачи.
bolsun
4 990 руб.

Получить количество строк динамического списка

ChOP 181 2 7 5
// Возвращает количество строк динамического списка
//
// Параметры:
//  ЭтаФорма - ФормаКлиентскогоПриложения - Форма клиентского приложения
//  Список	 - строка - имя динамического списка
// 
// Возвращаемое значение:
//  Строка - количество строк в динамическом списке 
//
Функция ПосчитатьКоличествоВДинамСписке(ЭтаФорма, Список) Экспорт
	
	Схема = ЭтаФорма.Элементы[Список].ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = ЭтаФорма.Элементы[Список].ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	Запрос = Новый Запрос;
	Запрос.Текст = МакетКомпоновки.НаборыДанных.НаборДанныхДинамическогоСписка.Запрос;
	
	ПозВыбратьНачало = СтрНайти(Запрос.Текст, "ВЫБРАТЬ ", НаправлениеПоиска.СКонца);
	Пока НЕ ПозВыбратьНачало = 1
		и НЕ Сред(Запрос.Текст, ПозВыбратьНачало - 1, 1) = Символы.ПС Цикл
		ПозВыбратьНачало = СтрНайти(Запрос.Текст, "ВЫБРАТЬ ", НаправлениеПоиска.СКонца, ПозВыбратьНачало - 1);
	КонецЦикла;
	ПозВыбратьКонец = СтрНайти(Запрос.Текст, Символы.ПС,, ПозВыбратьНачало);
	
	СтрокаВЫБРАТЬ = Лев(Запрос.Текст, ПозВыбратьКонец);
	СтрокаИз = Сред(Запрос.Текст, СтрНайти(Запрос.Текст, Символы.ПС + "ИЗ" + Символы.ПС,, ПозВыбратьКонец));
	
	Если СтрНайти(СтрокаИз, Символы.ПС + "СГРУППИРОВАТЬ") Тогда
		СтрокаИз = Лев(СтрокаИз, СтрНайти(СтрокаИз, Символы.ПС + "СГРУППИРОВАТЬ"));
	КонецЕсли;
	
	Запрос.Текст = СтрокаВЫБРАТЬ + "Количество(*) КАК Кол" + СтрокаИз;
	Если СтрНайти(Запрос.Текст, Символы.ПС + "УПОРЯДОЧИТЬ ПО",, ПозВыбратьКонец) Тогда
		Запрос.Текст = Лев(Запрос.Текст, СтрНайти(Запрос.Текст, Символы.ПС + "УПОРЯДОЧИТЬ ПО",, ПозВыбратьКонец));
	КонецЕсли;
	
	Для Каждого парам из МакетКомпоновки.ЗначенияПараметров Цикл
		Запрос.УстановитьПараметр(парам.Имя, парам.Значение);
	КонецЦикла;
	
	Попытка
		Результат = Запрос.Выполнить();
	Исключение
		ЗаписьЖурналаРегистрации("КоличествоВСписке в Списке " + ЭтаФорма.ИмяФормы, УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
	КонецПопытки;
	
	Выборка = Результат.Выбрать();
	Выборка.Следующий();
	
	Возврат Выборка.Кол;
	
КонецФункции

Восстановить положение окна программно

ChOP 181 2 7 5
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    ЭтаФорма.ИмяСохраненияПоложенияОкна = Новый УникальныйИдентификатор();
КонецПроцедуры

Общая форма для вывода сообщений пользователю в HTML

Как то мне потребовалось вывести пользователю сообщение с таблицей 4 на 4. Решил сделать для этого общую форму HTMLСообщение, пример ее вызова ниже: СтруктураПараметров = Новый Структура(Заголовок, ТекстСообщения); СтруктураПараметров.Заголовок = Заключе...
RomanVG 75 4 2

Функция преобразует Массив из структур в ТаблицуЗначений

RomanVG 75 4 2
&НаСервереБезКонтекста
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) 
    
    тзДанные = Новый ТаблицаЗначений;
    
    Для Каждого ЭлементМассива Из мсДанные Цикл
		
		Если тзДанные.Колонки.Количество() = 0 Тогда
            Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
                тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ);
            КонецЦикла;
        КонецЕсли;
        
        НоваяСтрока = тзДанные.Добавить();
        Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
            НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
        КонецЦикла;
    КонецЦикла;
    
    Возврат тзДанные;
    
КонецФункции

Прибавить рабочие дни к дате (Запрос)

Получение указанного порядкового рабочего дня к дате
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000000
	Календарь.ДатаКалендаря КАК ДатаКалендаря
ПОМЕСТИТЬ БанковскиеДниКалендаря
ИЗ
	РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ГДЕ
	(Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
			ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))

УПОРЯДОЧИТЬ ПО
	Календарь.ДатаКалендаря

ИНДЕКСИРОВАТЬ ПО
	Календарь.ДатаКалендаря
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ДАТАВРЕМЯ(2022, 4, 1) КАК ДатаДокумента,
	5 КАК ДнейОтсрочки
ПОМЕСТИТЬ ТаблицаОплат

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ДАТАВРЕМЯ(2022, 4, 9),
	7
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Оплаты.ДатаДокумента КАК ДатаДокумента,
	Оплаты.ДнейОтсрочки КАК ДнейОтсрочки,
	Календарь.ДатаКалендаря КАК ДатаОплаты
ИЗ
	ТаблицаОплат КАК Оплаты
		ЛЕВОЕ СОЕДИНЕНИЕ БанковскиеДниКалендаря КАК Календарь
		ПО ((Календарь.ДатаКалендаря, Оплаты.ДнейОтсрочки) В
				(ВЫБРАТЬ
					Выборка.ДатаКалендаря КАК ДатаКалендаря,
					СУММА(1) КАК НомерРабочегоДня
				ИЗ
					БанковскиеДниКалендаря КАК Выборка ЛЕВОЕ СОЕДИНЕНИЕ БанковскиеДниКалендаря КАК ПодВыборка
						ПО
							ПодВыборка.ДатаКалендаря > Оплаты.ДатаДокумента
								И ПодВыборка.ДатаКалендаря <= Выборка.ДатаКалендаря
				ГДЕ
					Выборка.ДатаКалендаря > Оплаты.ДатаДокумента
				СГРУППИРОВАТЬ ПО
							Выборка.ДатаКалендаря))

Сравнить ТЗ

Сравнение Таблиц Значений две Таблицы
miha 123 8 1
// Предварительно надо отсортировать обе таблицы по одному и тому же уникальному ключу
	СтрВнутр_СтараяТЗ = ЗначениеВСтрокуВнутр(тзСтарыеПартииГТД.Скопировать());
	СтрВнутр_НоваяТЗ  = ЗначениеВСтрокуВнутр(тзНовыеПартииГТД.Скопировать());

	Если СтрВнутр_СтараяТЗ <> СтрВнутр_НоваяТЗ Тогда

Свернуть массив

RomanVG 75 4 2
Процедура СвернутьМассив(Мас) Экспорт 
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("ЗначМас");
	Для каждого ЗначМас из Мас Цикл 
		НСтрока = ТЗ.Добавить();
		НСтрока.ЗначМас = ЗначМас;
	КонецЦикла;
	ТЗ.Свернуть("ЗначМас");
	Мас.Очистить();
	Для каждого СтрТЗ из ТЗ Цикл 
		Мас.Добавить(СтрТЗ.ЗначМас);
	КонецЦикла;
	
КонецПроцедуры

Транспонировать таблицу значений

RomanVG 75 4 2
Функция ТранспонироватьТЗ(ТЗ)
   
	ТЗ2 = Новый ТаблицаЗначений;
	Массив = ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0]); // первая колонка содержит названия новых колонок
	ТЗ2.Колонки.Добавить(ТЗ.Колонки[0].Имя); // старые названия колонок сохраним в первой колонке
	
	Для Каждого Значения из Массив Цикл
		ТЗ2.Колонки.Добавить(СокрЛП(Значения));
	КонецЦикла;
	
	Для Сч = 1 По ТЗ.Колонки.Количество() - 1 Цикл
		ТЗ2.Добавить();
		ТЗ2[Сч - 1][ТЗ.Колонки[0].Имя] = ТЗ.Колонки[Сч].Имя;
	КонецЦикла;
	
	СчетчикСтрок = -1;
	Для каждого стр из Тз Цикл
		СчетчикСтрок = СчетчикСтрок + 1;
		Мас = Новый Массив;
		Для Сч = 1 По ТЗ.Колонки.Количество() - 1 Цикл
			Мас.Вставить(Сч - 1, стр[Сч]);
		КонецЦикла;
		ТЗ2.ЗагрузитьКолонку(Мас, ТЗ2.Колонки[СчетчикСтрок + 1]);
	КонецЦикла;
	
	Возврат ТЗ2;
   
КонецФункции

Выгрузить динамический список в таблицу значений

RomanVG 75 4 2
&НаСервере
Функция ПолучитьТЗизДинамическогоСписка()

	Схема = Элементы.Сделки.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = Элементы.Сделки.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
	
	ТабЗначений = Новый ТаблицаЗначений;
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ПроцессорВывода.УстановитьОбъект(ТабЗначений);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
	
	Возврат ТабЗначений;

КонецФункции

Простое добавление колонки в Динамический список

Предлагаю свой вариант добавления нового поля в текст запроса динамического списка и добавление этого поля на форму.
Sergpn 14 1
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ЧастиЗапроса = СтрРазделить(Список.ТекстЗапроса, ",");
	ЧастиЗапроса.Вставить(1, "СправочникКонтрагенты.ПометкаУдаления");
	Список.ТекстЗапроса = СтрСоединить(ЧастиЗапроса, ",");
	
	НовыйЭлемент  = Элементы.Добавить("СписокПометкаУдаления", Тип("ПолеФормы"), Элементы.Список);
	НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;      
	НовыйЭлемент.ПутьКДанным = "Список.ПометкаУдаления";
	
КонецПроцедуры

Передача менеджера временных таблиц в СКД

Для того, чтобы компоновщик настроек мог понять, с каким типами данных из временной таблицы он имеет дело, желательно прописать это в тексте запроса, используя выражения языка запросов ВЫРАЗИТЬ(ВТ.ЗначениеПоля КАК <Описание типа>) или ЕСТЬNULL(ВТ.ЗначениеП...
ChOP 181 2 7 5

Ввод по строке вхождением с доп параметрами и подсветкой вхождения

К оригиналу добавил возможность передать дополнительно свои условия к запросу Модуль менеджера //Параметры.ДопУсловияПоиска - строка - значение подставится в параметры запроса // Пример: Справочники.ПодразделенияОрганизаций.ПолучитьДанныеВыбора(Новый Ст...
ChOP 181 2 7 5

Получить web-cсылку на объект метаданных

Примеры использования: для запуска ДО из других конфигураций или из Битрикс24 и т.п. интеграций Функция ПолучитьWebСсылкуНаОбъект(Объект) Экспорт НавСсылка = ПолучитьНавигационнуюСсылку(Объект); ДлинаСтроки = СтрДлина(НавСсылка); ПозицияРеф = СтрНа...
RomanVG 75 4 2

Фильтрация таблицы значений

С помощью построителя запросов
freeman 8 1
// ТаблицаОтборов - Таблица значений с колонками
// ИмяОтбора - Строка
// ВидСравнения - ВидСравнения
// Значение - Any
// Возвращает отфильтрованную таблицу значений

Функция ОтфильтроватьТаблицуЗначений(ТаблицаЗначенийДляФильтрации, ТаблицаОтборов)

	Построитель                = Новый ПостроительЗапроса;
	Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначенийДляФильтрации);

	Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл
		Отбор                     = Построитель.Отбор.Добавить(СтрокаКоллекции.ИмяОтбора);
		Отбор.ВидСравнения        = СтрокаКоллекции.ВидСравнения;
		Отбор.Использование       = Истина;
		Отбор.Значение            = СтрокаКоллекции.Значение;
	КонецЦикла;

	Возврат Построитель.Результат.Выгрузить();

КонецФункции

Определить это Linux или Windows

buketoff 129 2 2 9
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоLinux = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы.Linux_x86_64;

Раскрасить код

Раскрашивает код 1с
ChOP 181 2 7 5
//Вспомогательная, используется в "РаскраситьКод1С8"
Процедура ДобавитьСлово(Код, Слово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, ТипСлова=Неопределено)
    Если ПустаяСтрока(Слово) Тогда
        Код = Код + СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, " ", " "), Символы.НПП, " "), Символы.Таб, "    ");
        Возврат;
    ИначеЕсли ТипСлова=Неопределено Тогда
        нсл = НРег(СокрП(Слово));
        Если Найти(СписокКлючевыхСлов, нсл)>0 Тогда
            ТипСлова = "<keywrd>";
        ИначеЕсли Слово = "0" или мОписаниеТипаЧисло.ПривестиЗначение(Слово)<>0 Тогда
            ТипСлова = "<num>";
        Иначе
            ТипСлова = "<text>";
            ЭтоЧисло = Истина;
            Для сч=1 по СтрДлина(нсл) Цикл
                ТекСимв=Сред(нсл, сч, 1);
                Если Найти(ДопустимыеЗнаки, ТекСимв)=0 Тогда
                    ТипСлова="<unwn>";
                    Прервать;
                ИначеЕсли ТекСимв<>"0" Тогда
                    ЭтоЧисло = Ложь;
                КонецЕсли;
            КонецЦикла;
            Если ЭтоЧисло Тогда
                ТипСлова = "<num>";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Код = Код + ?(ТекТипСлова=ТипСлова, "", ТипСлова) + СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, "<", "<"), ">", ">"), " ", " "), Символы.НПП, " "), Символы.Таб, "    ");
    ТекТипСлова = ТипСлова;
    Слово = "";
КонецПроцедуры

//Реализует функционал "Оформить фрагмент кода"
Функция РаскраситьКод1С8(ТекстКод) Экспорт
    мОписаниеТипаЧисло = Новый ОписаниеТипов("Число");
    Таб = Символы.Таб;
    НПП = Символы.НПП;
    ДопустимыеЗнаки = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789abcdefghijklmnopqrstyvwxyz_";
    СписокКлючевыхСлов = "асинх|async|ждать|await|if|если|then|тогда|elsif|иначеесли|else|иначе|endif|конецесли|do|цикл|for|для|to|по|each|каждого|in|из|while|пока|enddo|конеццикла|procedure|процедура|endprocedure|конецпроцедуры|function|функция|endfunction|конецфункции|var|перем|export|экспорт|goto|перейти|and|и|or|или|not|не|val|знач|break|прервать|continue|продолжить|return|возврат|try|попытка|except|исключение|endtry|конецпопытки|raise|вызватьисключение|false|ложь|true|истина|undefined|неопределено|null|new|новый|execute|выполнить|";
    Ответ = "<span style=""text-align: left; font-family: courier new,courier; color: blue; font-size: 10pt; white-space: pre; display: inline-block; ""><font>";
    ТекТипСлова = "<text>";
    Для нс=1 По СтрЧислоСтрок(ТекстКод) Цикл
        ТекСтрока = СокрП(СтрПолучитьСтроку(ТекстКод, нс));
        дл = СтрДлина(ТекСтрока);
        сч = 0;
        ТекСлово = "";
        КодНеНачался = Истина;
        Пока сч<дл Цикл
            сч = сч + 1;
            ТекущийСимвол = Сред(ТекСтрока, сч, 1);
            Если КодНеНачался Тогда
                Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
                    //ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", "    ");
                    Ответ = Ответ + ТекущийСимвол;
                    Продолжить;
                ИначеЕсли ТекущийСимвол="#" или ТекущийСимвол="&" Тогда
                    ТекСлово = "";
                    ДобавитьСлово(Ответ, Сред(ТекСтрока, сч), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<dir>");
                    Прервать;
                КонецЕсли;
            КонецЕсли;
            КодНеНачался = Ложь;            
            Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
                Если КодНеНачался Тогда
                    Ответ = Ответ + ТекущийСимвол;
                    Продолжить;
                КонецЕсли;
                //ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", "    ");
                ДобавитьСлово(Ответ, ТекСлово+ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
                ТекСлово = "";
                Продолжить;
            ИначеЕсли Найти("():;.,=+-*<>?[]%/", ТекущийСимвол) > 0 Тогда
                ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
                ТекСлово = "";
                //Проверяем на комментарий
                Если ТекущийСимвол="/" и Сред(ТекСтрока, сч+1, 1)="/" Тогда
                    ТекСлово = "";
                    ДобавитьСлово(Ответ, СокрП(Сред(ТекСтрока, сч)), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<cmnt>");
                    Прервать;
                КонецЕсли;    
                ДобавитьСлово(Ответ, ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<symb>");
                Продолжить;
            ИначеЕсли ТекущийСимвол="""" или ТекущийСимвол="|" Тогда
                ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
                // найти закрывающую кавычку
                нач = сч;
                сч = сч + 1;
                СледующийСимвол = Сред(ТекСтрока, сч, 1);
                Пока сч<дл Цикл
                    сч = сч + 1;
                    ТекущийСимвол = СледующийСимвол;
                    СледующийСимвол = Сред(ТекСтрока, сч, 1);
                    Если ТекущийСимвол="""" Тогда
                        Если СледующийСимвол="""" Тогда
                            сч = сч + 1;
                            СледующийСимвол = Сред(ТекСтрока, сч, 1);
                        Иначе
                            Прервать;
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;
                ТекСлово = "";
                ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
                сч = сч - 1;
                Продолжить;
            ИначеЕсли ТекущийСимвол="'" Тогда
                нач = сч;
                сч = сч + 1;
                СледующийСимвол = Сред(ТекСтрока, сч, 1);
                Пока сч<дл Цикл
                    сч = сч + 1;
                    ТекущийСимвол = СледующийСимвол;
                    СледующийСимвол = Сред(ТекСтрока, сч, 1);
                    Если ТекущийСимвол="'" Тогда
                        Если СледующийСимвол="'" Тогда
                            сч = сч + 1;
                            СледующийСимвол = Сред(ТекСтрока, сч, 1);
                        Иначе
                            Прервать;
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;
                ТекСлово = "";
                ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
                сч = сч - 1;
                Продолжить;
            КонецЕсли;
            ТекСлово = ТекСлово + ТекущийСимвол;
        КонецЦикла;
        Если Не ПустаяСтрока(ТекСлово) Тогда
            ДобавитьСлово(Ответ,СокрП(ТекСлово), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
        КонецЕсли;
        Ответ = Ответ + "";
    КонецЦикла;    
    Ответ = Ответ + Символы.ПС+"</font></span>";
    Ответ = СтрЗаменить(Ответ, "<keywrd>", "</font><font color=red>");
    Ответ = СтрЗаменить(Ответ, "<text>", "</font><font color=blue>");
    Ответ = СтрЗаменить(Ответ, "<str>", "</font><font color=black>");
    Ответ = СтрЗаменить(Ответ, "<num>", "</font><font color=black>");
    Ответ = СтрЗаменить(Ответ, "<unwn>", "</font><font color=black>");
    Ответ = СтрЗаменить(Ответ, "<symb>", "</font><font color=red>");
    Ответ = СтрЗаменить(Ответ, "<cmnt>", "</font><font color=green>");
    Ответ = СтрЗаменить(Ответ, "<dir>", "</font><font color=brown>");    
    Ответ = СтрЗаменить(Ответ, Символы.Таб, "    ");
    Возврат Ответ;
КонецФункции

Формат даты в СКД

Неделя Полугодие Декада |Поле|Тип|Формат| |-------- | --------- | --------------------------------------------| |ПериодДень | формат | ДФ='dd.MM.yyyy'| |ПериодНеделя | выражение | Формат(НачалоПериода(ПериодНеделя, "Неделя"), "ДФ='dd.MM.yyyy...
miha 123 8 1

Генератор обработчиков оповещения

Скрипт для TurboConf реализует вставку в текст модуля конструкцию создания нового описания оповещения, а также саму процедуру-обработчик для него.
dhurricane 8 1
Бесплатно