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

Публикация № 841165 03.06.18

Разработка - Практика программирования

СтрЗаканчиваетсяНа СтрНачинаетсяС СтрРазделить СтрСоединить СтрНайти СтрШаблон

СтрНайти(), СтрНачинаетсяС(), СтрЗаканчиваетсяНа(), СтрРазделить(), СтрСоединить(), СтрШаблон() для платформы ниже 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. Текст, расположенный ниже "Причины купить" и др. - добавляется автоматически и нет возможности его отключить. Рекомендую не обращать на него внимания

 

Специальные предложения

Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. json 03.06.18 09:33 Сейчас в теме
Юнит-тесты к функциям можно взять тут и при желании дополнить.
Тесты описаны в модуле объекта.
user878157; DevSerg; user721902; +3 Ответить
2. triviumfan 27 03.06.18 10:14 Сейчас в теме
Думаю, что любой программист (даже "одынэсниг") вполне способен написать простенькую функцию по работе со строками уровня школьной программы.
3. json 03.06.18 11:13 Сейчас в теме
(2) СтрНайти() с пятью параметрами - это "простенькая функция по работе со строками уровня школьной программы"?
unknown181538; +1 Ответить
22. user721902 15.01.19 08:33 Сейчас в теме
(2) Зачем тратить на это время, когда есть готовое решение
45. psa247 13 16.03.21 11:17 Сейчас в теме
(2) естесна, может, но мне понадобилось и Я быстро нашел эту статью, за что автору большое спасибо
4. strange2007 144 15.08.18 04:55 Сейчас в теме
Когда надо было очень быстро решить вопрос с универсальностью СтрНайти, родился вот такой, малооптимальный код


	ЛеваяЧастьНайти = ПолучениеФункцииСтрНайти();
	// Доподготовка
	РезультатРаботы = 0;
	ИскомаяПодстрока = "(точка маршрута)";
	ИсходнаяСтрока = Строка(ИсходныйТип);
	// Составление итоговой строки
	ИтоговаяСтрока = "РезультатРаботы=" + ЛеваяЧастьНайти + "(ИсходнаяСтрока, ИскомаяПодстрока);";
	// Поиск
	Выполнить(ИтоговаяСтрока);

// В зависимости от клиента может работать Найти или СтрНайти
Функция ПолучениеФункцииСтрНайти()
	Перем ВозврЗначение, ИспытуемаяЧасть, ПолнаяСтрока;
	Перем ВрСтрока, ПоисковыйСимвол;
	
	// Предподготовка
	ВозврЗначение = "";
	ВрСтрока = "097987897";
	ПоисковыйСимвол = "9";
	
	// Попытка "Найти"
	ИспытуемаяЧасть = "Найти";
	ПолнаяСтрока = ИспытуемаяЧасть + "(ВрСтрока, ПоисковыйСимвол);";
	Попытка
		Выполнить(ПолнаяСтрока);
		ВозврЗначение = ИспытуемаяЧасть;
	Исключение КонецПопытки;
	
	// Попытка "СтрНайти"
	ИспытуемаяЧасть = "СтрНайти";
	ПолнаяСтрока = ИспытуемаяЧасть + "(ВрСтрока, ПоисковыйСимвол);";
	Попытка
		Выполнить(ПолнаяСтрока);
		ВозврЗначение = ИспытуемаяЧасть;
	Исключение КонецПопытки;
	
	//// Анализ предыдщей манипуляции
	//Если ВозврЗначение="" Тогда
	//	ВозврЗначение = "СтрНайти";
	//КонецЕсли;
	
	Возврат(ВозврЗначение);
КонецФункции
Показать
5. DrBlack 21 16.08.18 08:28 Сейчас в теме
(4) Да вас по рукам бы набить
6. strange2007 144 16.08.18 09:23 Сейчас в теме
(5) Вызываю на дуэль! Оружием выбираю спички! Тяните первый! (с)
А если серьёзно, то данный кривой код (и ещё подобные куски) сэкономил уйму времени, позволил уволить кучу ит-отделов и ит-контор и до сих пор крутится во многих организациях. Вы просто не пробовали оптимизировать работу системы на всех 7 уровнях оптимизации. Попробуйте и с ужасом увидите, что кривой код всегда гораздо эффективней красивого.
Именно поэтому в своё время появилась Майкрософт и 1С
7. DrBlack 21 16.08.18 13:30 Сейчас в теме
(6) Поддерживаю дуэль, вот мой велосипед:

Функция СтрНайти_83_82(Строка, ПодстрокаПоиска) Экспорт
	
	ЗнВозврат = 0;
	
	Попытка
		ЗнВозврат = Вычислить("СтрНайти(Строка, ПодстрокаПоиска)");
	Исключение
		ЗнВозврат = Найти(Строка, ПодстрокаПоиска);
	КонецПопытки;
	
	Возврат ЗнВозврат;
	
КонецФункции
Показать
Ignatov_mu; user682181_tarbos; TManukovskaya; strange2007; +4 Ответить
10. strange2007 144 17.08.18 05:51 Сейчас в теме
(7) Сдаюсь. Моё кунг-фу слабее.
Хм, а как скомпилится Найти в конфе, где эта конструкция не поддерживается? Оно ж ошибку выдаст. После исключения надо же тоже в вычислить/выполнить.

(украл код себе)
11. DrBlack 21 17.08.18 08:12 Сейчас в теме
(10) Функция "Найти" существует с 8.0 (если я не ошибаюсь), зачем тут попытка? :)
14. strange2007 144 17.08.18 08:42 Сейчас в теме
(11) Не просто так ведь сделали СтрНайти. Скорее всего с очередного момента Найти не будет использоваться. Значит надо это предусмотреть.
15. json 17.08.18 08:48 Сейчас в теме
(14)
а вы будущее предсказывать умеете?
Или есть какие-то конкретные тексты от разработчиков платформы, что уберут функцию Найти()?

Мне кажется, что СтрНайти() добавили, чтобы расширить функционал Найти(). Добавить различные варианты поиска. Ну и плюс они, возможно, заметили нелогичность, что все строковые функции начинаются с "Стр", а эта без префикса.
16. strange2007 144 17.08.18 09:01 Сейчас в теме
(15) Конечно умею. Предсказываю - сейчас пойду наливать чай))))))
А если серьёзно, то мы уже привыкли к тому, что 1С-вцы всегда стремятся вперёд и плохой прошлый опыт просто вычёркивают. Например, ЗначениеНеОпределено (или как оно там писалось) было жёстко исключено. Только вот цена исключения оказалась высокой.
Далее рекомендую обратить внимание на то, что "ктрл+пробел" не показывает ф-ю Найти. Что это? Начало отказа!
Поэтому, как мне кажется, Найти исчезнет. Хоть и позже, но это случится. И вот тут и возникает повод для "загордиться перед столбом" - а мой код не заметил вселенской катастрофы.
17. DrBlack 21 17.08.18 09:17 Сейчас в теме
(14) Тогда такой код:
Функция СтрНайти_83_82(Строка, ПодстрокаПоиска) Экспорт
    
    ЗнВозврат = 0;
    
    Попытка
        ЗнВозврат = Вычислить("СтрНайти(Строка, ПодстрокаПоиска)");
    Исключение
        ЗнВозврат = Вычислить("Найти(Строка, ПодстрокаПоиска)");
    КонецПопытки;
    
    Возврат ЗнВозврат;
    
КонецФункции
Показать


При компиляции ошибки не будет, наличие второй "Попытки" не потребуется :)
37. vshish 139 06.07.20 10:13 Сейчас в теме
(14) Функция Найти Остается в режиме совместимости с 8.2.16
8. json 16.08.18 14:28 Сейчас в теме
(4)
(7)
А в чем фишка?
Почему нельзя просто использовать Найти() ?
Я так понимаю, что если нет нужды искать с конца, или искать, скажем второе вхождение, или не с первого символа, то СтрНайти() - ни к чему (если мы хотим поддерживать совместимость с ранними версиями)
Зачем пытаетесь использовать СтрНайти() да еще в попытке?
9. strange2007 144 17.08.18 05:46 Сейчас в теме
(8) Я ж не крутой программер, поэтому как могу...
12. DrBlack 21 17.08.18 08:19 Сейчас в теме
(8) Тут скорее задумка просто использовать новые функции (по возможности), а я лишь раскритиковал выложенный код, который его автору "сэкономил уйму времени", а также привел пример более простой реализации его задумки.
13. json 17.08.18 08:28 Сейчас в теме
(12) ясно.
А то я уж подумал что это серьезно.
Вдруг в новых релизах убрали Найти(), и поэтому приходится костылить.
18. RomanKod 16.10.18 11:39 Сейчас в теме
Спасибо тебе, добрый человек. Выручил.
19. axelerleo 318 08.11.18 15:48 Сейчас в теме
А я бы это дело оформил в отдельный общий глобальный модуль "Полифиллы", и при его добавлении можно было бы юзать код из новых конфигураций на старых платформах. Эдакий babeljs от мира 1С :)
20. rpgshnik 2694 18.11.18 16:02 Сейчас в теме
Не помню в каком релизе но осенью 2018 комплект подобных функций теперь прилетел в комплексную автоматизацию 1.1, я за наименьшим опытом, хапнул горя 😁 теперь тоже схожие функции называю с "_" :)
21. Алексей777 70 30.11.18 12:42 Сейчас в теме
Отлично, когда, действительно сталкиваешься с совместимостью методов платформ и думаешь, блин, писать, а времени в обрез - спасибо, респект и уважуха автору!!!
23. KTo 18.01.19 06:08 Сейчас в теме
Всем привет! Вопрос про функцию "СтрШаблон()". А если я в эту функцию передам код очистки регистра партий?)
24. mvxyz 293 04.02.19 10:55 Сейчас в теме
25. avz_1C 10 11.04.19 12:13 Сейчас в теме
26. itPiligrim 3 18.06.19 18:11 Сейчас в теме
Спасибо, но для всех параметров надо поставить Знач. В противном случае поведение будет отличаться. ВАЖНО! Это приводит к трудно отлавливаемым ошибкам.
27. dendzu 60 27.11.19 09:31 Сейчас в теме +0.25 $m
Спасибо автору сэкономленных 1 час жизни -:)
28. dhurricane 27.11.19 09:42 Сейчас в теме
Стоит заметить, что функция "СтрРазделить" работает немного не так, как в платформе. В публикации Разделитель есть неделимый набор символов, обозначающий границы подстрок в исходной строке. В платформе же каждый символ Разделителя является индивидуальным разделителем.
29. Mikadzy 17.01.20 12:38 Сейчас в теме
(28) Были идеи, как можно было бы это сделать?
30. dhurricane 17.01.20 12:57 Сейчас в теме
(29) Не знаю, наверное простым перебором символов исходной строки:
НачалоПодстроки = 1;

Пока НачалоПодстроки <= СтрДлина(Строка) Цикл
	
	КонецПодстроки = НачалоПодстроки;
	
	Пока КонецПодстроки <= СтрДлина(Строка)
		И Не Найти(Разделитель, Сред(Строка, КонецПодстроки, 1)) Цикл
		КонецПодстроки = КонецПодстроки + 1;
	КонецЦикла; 
	
	Если НачалоПодстроки < КонецПодстроки Тогда
		Подстрока = Сред(Строка, НачалоПодстроки, КонецПодстроки - НачалоПодстроки);
		Результат.Добавить(Подстрока);
	ИначеЕсли ВключатьПустые Тогда 
		Результат.Добавить("");
	КонецЕсли;
	
	НачалоПодстроки = КонецПодстроки + 1;
	
КонецЦикла;
Показать
itlite; Mikadzy; +2 Ответить
31. Mikadzy 17.01.20 13:12 Сейчас в теме
32. shetill 23 10.03.20 13:40 Сейчас в теме
В бух 2.0 есть такой модуль "РегламентированнаяОтчетностьАЛКОКлиентСервер" - там есть все эти функции. Называются правда немного по другому, например СтрЗаменить82
33. mity1982 12.03.20 11:51 Сейчас в теме
Я бы добавил функцию направление поиска:

Функция НаправленияПоиска()
       Возврат Новый Структура("СНачала,СКонца","СНачала","СКонца");
КонецФункции



Упростит рефакторинг.

Еще проще в начало модуля добавить:
Перем НаправленияПоиска;

В конец:
НаправленияПоиска = Новый Структура("СНачала,СКонца","СНачала","СКонца");
35. Rain_man 23.06.20 09:17 Сейчас в теме
(33)
Упростит рефакторинг.

Еще проще в начало модуля добавить:
Перем НаправленияПоиска;

В конец:
НаправленияПоиска = Новый Структура("СНачала,СКонца","СНачала","СКонца");


В этом варианте - инициализация не будет работать из серверного кода, если она прописана в конце клиентского!
Для функции - я могу поставить &НаКлиентеНаСервереБезКонтекста, а вот для этой инициализации - никак.
39. mity1982 08.09.20 20:04 Сейчас в теме
(35) Сорри, не думал о таком варианте.
34. Rain_man 23.06.20 09:01 Сейчас в теме
{...}: Переменная не определена (НаправлениеПоиска)
П1 = СтрНайти(П2,".",<<?>>НаправлениеПоиска.СНачала, П3);

Думаю, что тут понятно - чего не хватает.
36. Rain_man 23.06.20 10:47 Сейчас в теме
(34)
Добавлю. В контекстах пока не идеально разбираюсь, отсюда вопрос.
Вызов СтрНайти происходит из модуля формы - много раз, из разных функций. Некоторые из вызывающих функций, объявлены, как &НаКлиенте, некоторые - &НаСервере, а некоторые - &НаКлиентеНаСервереБезКонтекста.
Если для СтрНайти - не объявить контекст, то он, по-умолчанию - клиентский. Если объявить её &НаСервере - из &НаКлиенте и &НаСервере - вызывается, а вот из &НаКлиентеНаСервереБезКонтекста - нет, заявляет, что:
Процедура или функция с указанным именем не определена (СтрНайти)
...<<?>>СтрНайти(...; (Проверка: Сервер)
Можно как-то сделать, чтобы не писать несколько клонов, каждый со своим именем?
38. mity1982 08.09.20 20:03 Сейчас в теме
40. dikd 13 15.09.20 09:50 Сейчас в теме
Спасибо! Тоже столкнулся с внезапной "совместимостью" при объединение 2х конфигураций. Выручил набор этих функций. Респект!
41. AgnepuS 7 25.09.20 12:10 Сейчас в теме
На платформе 8.3.13.1690 СтрРазделить вообще шикарно работает.
Прикрепленные файлы:
42. AgnepuS 7 25.09.20 14:25 Сейчас в теме
(41) Забыл добавить, что режим совместимости 8.3.5
43. Mechanik21 23 02.10.20 17:14 Сейчас в теме
В своё время задумался над задачей, которая решалась функцией СтрНайти(), но тогда я про неё ещё не знал. Начал что-то ковырять, ничего не взлетело. Товарищ с той работы подсказал, что есть СтрНайти(), мол, не парься, друг, всё уже написано. И я на протяжении следующих трёх лет спокойно её юзал, пока не начал искать другую работу и неожиданно попал на одно интересное собеседование.
И что вы думаете, мне дали лист А4 и 15 мин на задачу. В задаче, опуская подробности, нужно было написать код функции СтрНайти(), как раз то, что было написано здесь. И я столкнулся с каким-то барьером в мозгу. Зачем над этим думать, если это уже решено? и 15 мин писал и зачёркивал СтрНайти(). В общем, с треском провалился.
44. UkKvazar 28.10.20 12:35 Сейчас в теме
Если в _СтрШаблон() не первым(!) параметром передать значение-флаг предыдущего параметра, т.е. в %2 передать "%1", то в мире появится на одного грустного программиста больше. Будьте аккуратны.
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

Практика программирования v8 Бесплатно (free)

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    4103    Eugen-S    23    

Полезные примеры СКД, ч.2

Практика программирования v8 v8::СКД Бесплатно (free)

Еще несколько примеров решения задач в СКД.

06.04.2021    10236    Neti    8    

Неочевидные нюансы записи управляемой формы

Практика программирования v8 v8::УФ Платформа 1C v8.2 1cv8.cf Бесплатно (free)

Разберем несколько нюансов записи управляемой формы.

02.04.2021    12071    SeiOkami    54    

Обзор полезных методов БСП 3.1.4

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

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

25.03.2021    38179    rayastar    51    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    85264    Serginio    115    

Звуковое управление в 1С 8.3

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    6970    velemir    33    

ЦУП 2.1.6 Исправленная обработка выгрузки метаданных для платформы 8.2

Структура метаданных ЦУП v8 1cv8.cf Абонемент ($m)

Обработка предназначена для ЦУП 2.1.6. Исправленная типовая обработка для выгрузки метаданных для конфигурацию, работающих на платформе 8.2 (в т.ч. в режиме совместимости).

1 стартмани

04.03.2021    1565    0    SpecRam    0    

Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)

Практика программирования v8 ERP2 БУ Бесплатно (free)

Покажу точки входа для доработки "типового" проведения документов в ERP для регистров оперативного учета. Рассмотрим три основные ситуации: нужно изменить имеющееся проведение документа; нужно сделать записи в существующие регистры; нужно с нуля описать алгоритм проведения в добавленный регистр. Пример реализован на 1С:ERP Управление предприятием 2 (2.5.4.120)

10.01.2021    10425    BuriyLesha    10    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    40929    unichkin    74    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    8672    comol    31    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Бесплатно (free)

В данной публикации я опишу полезные процедуры и функции модуля общего назначения библиотеки стандартных подсистем, обязательные к использованию любым программистом 1С.

30.08.2020    19621    quazare    34    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    35892    tormozit    106    

Серверные вызовы, которые нельзя вызывать

Практика программирования v8 v8::УФ 1cv8.cf Бесплатно (free)

Не баян, а классика. Рассмотрим особенность платформы настолько же древнюю, как сами УФ.

12.05.2020    9181    SeiOkami    34    

Форма выбора (подбор) в управляемых формах

Практика программирования v8 v8::УФ 1cv8.cf Россия Бесплатно (free)

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    74146    user5300    19    

Совместимость работы со строками. Жизнь до 8.3.6 и после

Практика программирования v8 Бесплатно (free)

Немного о совместимости со старыми версиям платформы 1С в работе со строками.

21.02.2020    6149    YPermitin    24    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    82684    tormozit    131    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    63756    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    42682    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    34366    kuzyara    38    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    54147    tormozit    51    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    23858    YPermitin    62    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    12121    Sibars    19    

Полезные процедуры и функции для программиста

Практика программирования Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.

07.10.2019    39259    HostHost    41    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    50902    tormozit    74    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    52141    Yashazz    56    

О программе Postman для тестирования API и для чего она нужна 1С-нику

Практика программирования Программное обеспечение (software) v8 Бесплатно (free)

Для чего нужна программа Postman для тестирования API и какая от него польза для 1С-программиста.

24.09.2019    19758    budidich    31    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    99158    rpgshnik    75    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    17926    m-rv    3    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    76228    ids79    56    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    45730    YPermitin    25    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    30042    YPermitin    81    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    23212    m-rv    18    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    44640    ids79    22    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    148290    ids79    75    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    59509    avalakh    26    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    36612    m-rv    23    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    40946    json    17    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    103402    ids79    16    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    47805    ids79    27    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    30701    itriot11    34    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    33562    YPermitin    14    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    22421    SeiOkami    53    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    82670    ids79    18    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    75035    ids79    28    

Регистры накопления. Виртуальные таблицы. Часть №2: "Остатки" и "Остатки и обороты"

Практика программирования v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальными таблицами регистров накопления "Остатки" и "Остатки и обороты". Анализ SQL-запрос при работе с виртуальными таблицами

22.05.2019    43419    YPermitin    8    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    62601    YPermitin    31    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    42287    ellavs    131