INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Лимонтова Марина | Руководитель отдела автоматизации | Торговая сеть РЕМИ

«Как внедрить 1С:Документооборот в условиях хаоса»

В своём докладе хочу поделиться опытом внедрения 1С: Документооборот в крупной бурно развивающейся компании при условиях отсутствия описанных процессов и структуры предприятия. В ходе доклада слушатели на примере истории реального внедрения узнают: • Какие подводные камни ожидают внедренцев программы 1С:Документооборот. • Плюсы и минусы использования встроенного почтового клиента 1С:Документооборота, как важного фактора успешного внедрения. • Что важно понимать при распределении прав доступа. • Какие небольшие, но очень полезные доработки функционала можно сделать. • Какие организационные вопросы нужно решить для успешной эксплуатации внутреннего электронного документооборота. • Как заинтересовать руководителей подразделений выступать с инициативой по автоматизации своих процессов. • Ключевые моменты использования 1С:Документооборот совместно с другими программами.

Строковые функции для совместимости с платформой 8.3.5 и ниже

Программирование - Практика программирования

7
СтрНайти(), СтрНачинаетсяС(), СтрЗаканчиваетсяНа(), СтрРазделить(), СтрСоединить(), СтрШаблон() для платформы ниже 8.3.6

Приведенные ниже функции являются аналогами строковых методов, появившихся в платформе 8.3.6

Если у вас возникнет вопрос, ЗАЧЕМ нужно писать функции, которые и так есть в платформе, то просто закрывайте статью и не забивайте себе голову.

Думаю, что многие разработчики сталкивались с ситуацией, когда необходимо скопировать какой-нибудь кусок кода или модуль из, например, БСП или другой новой конфигурации в свою старенькую продуктовую конфигурацию, и при сохранении начинают сыпать ошибки, типа "Процедура или функция с указанным именем не определена (СтрНайти)".

Поэтому решил выложить эти методы сюда, чтобы были под рукой в нужную минуту.

 СтрНачинаетсяС()
Функция _СтрНачинаетсяС(Строка, СтрокаПоиска) Экспорт
	Возврат Найти(Строка, СтрокаПоиска) = 1;
КонецФункции

 

 СтрЗаканчиваетсяНа()
Функция _СтрЗаканчиваетсяНа(Строка, СтрокаПоиска) Экспорт
	Возврат Прав(Строка, СтрДлина(СтрокаПоиска)) = СтрокаПоиска;
КонецФункции

 

СтрРазделить()
Функция _СтрРазделить(знач Строка, Разделитель, ВключатьПустые = Истина) Экспорт
	Результат = Новый Массив;
	
	Если Строка = "" Тогда 
		Если ВключатьПустые Тогда
			Результат.Добавить(Строка);
		КонецЕсли;
		Возврат Результат;
	КонецЕсли;
	
	Позиция = Найти(Строка, Разделитель);
	Пока Позиция > 0 Цикл
		Подстрока = Лев(Строка, Позиция - 1);
		Если ВключатьПустые ИЛИ НЕ Подстрока = "" Тогда
			Результат.Добавить(Подстрока);
		КонецЕсли;
		Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
		Позиция = Найти(Строка, Разделитель);
	КонецЦикла;
	
	Если ВключатьПустые ИЛИ НЕ Строка = "" Тогда
		Результат.Добавить(Строка);
	КонецЕсли;
		
	Возврат Результат;
КонецФункции

 

СтрСоединить()
Функция _СтрСоединить(Строки, знач Разделитель = Неопределено) Экспорт
	Результат = "";
	
	Если Разделитель = Неопределено Тогда
		Разделитель = "";
	КонецЕсли;
	
	Если Строки.Количество() Тогда
		Результат = Строки[0];
	КонецЕсли;
	
	Для сч = 1 По Строки.ВГраница() Цикл
		Результат = Результат + Разделитель + Строки[сч];
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

 

СтрНайти()
Функция _СтрНайти(Строка, ПодстрокаПоиска, НаправлениеПоиска = Неопределено, НачальнаяПозиция = Неопределено, НомерВхождения = 1) Экспорт
	// НаправлениеПоиска: СКонца,СНачала. По умолчанию: СНачала
	
	Если Строка = "" и ПодстрокаПоиска = "" Тогда
		// чтобы отрабатывало как в платформе
		Если НаправлениеПоиска = "СКонца" Тогда
			Если НомерВхождения = 1 Тогда
				Возврат 1;
			Иначе
				Возврат 0;
			КонецЕсли;
		Иначе
			Возврат мин(НомерВхождения, ?(НачальнаяПозиция=Неопределено, 1, НачальнаяПозиция));
		КонецЕсли;
	КонецЕсли;
	
	Если НачальнаяПозиция = Неопределено Тогда
		Если НаправлениеПоиска = "СКонца" Тогда
			лНачальнаяПозиция = СтрДлина(Строка);
		Иначе
			лНачальнаяПозиция = 1;
		КонецЕсли;
	Иначе
		лНачальнаяПозиция = НачальнаяПозиция;
	КонецЕсли;
	
	Если НаправлениеПоиска = "СКонца" Тогда
		лСтрока = "";
		Для сч = 1 По СтрДлина(Строка) Цикл
			лСтрока = Сред(Строка, сч, 1) + лСтрока;
		КонецЦикла;
		лПодстрокаПоиска = "";
		Для сч = 1 По СтрДлина(ПодстрокаПоиска) Цикл
			лПодстрокаПоиска = Сред(ПодстрокаПоиска, сч, 1) + лПодстрокаПоиска;
		КонецЦикла;
		лНачальнаяПозиция = макс(1, СтрДлина(Строка)-лНачальнаяПозиция-СтрДлина(ПодстрокаПоиска)+2);
	Иначе
		лСтрока = Строка;
		лПодстрокаПоиска = ПодстрокаПоиска;
		лНачальнаяПозиция = лНачальнаяПозиция;
	КонецЕсли;
	
	лНомерВхождения = 0;
	Результат = Найти(Сред(лСтрока, лНачальнаяПозиция), лПодстрокаПоиска);
	Пока Результат Цикл
		лНачальнаяПозиция = Результат + лНачальнаяПозиция + СтрДлина(ПодстрокаПоиска)-1;
		лНомерВхождения = лНомерВхождения + 1;
		Если лНомерВхождения = НомерВхождения Тогда
			Прервать;
		КонецЕсли;
		Результат = Найти(Сред(лСтрока, лНачальнаяПозиция), лПодстрокаПоиска);
	КонецЦикла;
	
	Если лНомерВхождения = НомерВхождения Тогда
		Результат = лНачальнаяПозиция - СтрДлина(ПодстрокаПоиска);
	Иначе
		Результат = 0;
	КонецЕсли;
		
	Если НаправлениеПоиска = "СКонца" И Результат<>0 Тогда
		Результат = СтрДлина(Строка) - Результат - СтрДлина(ПодстрокаПоиска) + 2;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

 

СтрШаблон()
Функция _СтрШаблон(Шаблон, Параметр1=Неопределено, Параметр2=Неопределено, Параметр3=Неопределено,Параметр4=Неопределено,Параметр5=Неопределено,Параметр6=Неопределено,Параметр7=Неопределено,Параметр8=Неопределено,Параметр9=Неопределено,Параметр10=Неопределено) Экспорт
	Результат = Шаблон;
	
	Для сч = -10 По -1 Цикл
		Параметр = Вычислить("Параметр" + (-сч));
		Если Параметр = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Если Найти(Результат, "%("+(-сч)+")") = 0 И Найти(Результат, "%"+(-сч))=0 Тогда
			ВызватьИсключение "Слишком много фактических параметров";
		КонецЕсли;
		Результат = СтрЗаменить(Результат, "%("+ (-сч) + ")", Параметр);
		Результат = СтрЗаменить(Результат, "%"+ (-сч), Параметр);
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

 

И да - в интернете можно найти такие функции, НО я не нашел решения в виде отдельной публикации.

Есть аналоги в комментарии к статье 6 новых функций, которые не следует использовать в режиме совместимости, но все варианты СтрНайти82() отрабатывают не так, как в платформе

Если обнаружатся недочеты - пишите в комментариях, будем исправлять

p.s. Текст, расположенный ниже "Причины купить" и др. - добавляется автоматически и нет возможности его отключить. Рекомендую не обращать на него внимания

 

7

См. также

Комментарии
Сортировка: Древо
1. yurii_host 1790 03.06.18 09:33 Сейчас в теме
Юнит-тесты к функциям можно взять тут и при желании дополнить.
Тесты описаны в модуле объекта.
2. yelloo 03.06.18 10:14 Сейчас в теме
Думаю, что любой программист (даже "одынэсниг") вполне способен написать простенькую функцию по работе со строками уровня школьной программы.
3. yurii_host 1790 03.06.18 11:13 Сейчас в теме
(2) СтрНайти() с пятью параметрами - это "простенькая функция по работе со строками уровня школьной программы"?
Оставьте свое сообщение