Копирование части имени контрагента в комментарий

1. user2070470 23.04.24 16:26 Сейчас в теме
БП. Корп 8.3.
В конторе сложилась практика вносить перед ФИО номер лицевого счета.
Необходимо одноразово перенести данные цифры в комментарий.
Если комментарий не пустой - не переносить.

Процедура ЛСчВКомментарий ()  //Функция СтрНайти() ?
  "ВЫБРАТЬ
 |	Контрагенты.Наименование КАК Наименование,
 |	Контрагенты.Комментарий КАК Комментарий,
 |  ПОДСТРОКА (Справочник.Контрагенты.Наименование, 1, 10) КАК Подстрока
 |ИЗ
 |	Справочник.Контрагенты КАК Контрагенты
 |ГДЕ 
 |      Комментарий NOT NULL" // ЕСТЬ NULL

ЛСчВНаименовании = "0123456789"; //содержит

Если Подстрока = ЛСчВНаименовании Тогда
Объект.Комментарий = Подстрока;

КонецЕсли;
КонецПроцедуры
Показать


Извините, у меня проблемы с логикой.
По теме из базы знаний
Найденные решения
9. GeraltSnow 174 24.04.24 13:09 Сейчас в теме
ПервыеДесятьСимволовНаименования = Лев(Наименование, 10);
ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Ложь;

Попытка
	а = Число(ПервыеДесятьСимволовНаименования);
	ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Истина;
Исключение
	//не удалось выполнить преобразование к числу
КонецПопытки

Если ПервыеДесятьСимволовНаименованияЯвляютсяЧислом Тогда
	Комментарий = ПервыеДесятьСимволовНаименования;
	НовоеНаименование = Сред(Наименование, 11); 
КонецЕсли;
Показать
user1619761; +1 Ответить
11. Sashares 35 24.04.24 15:28 Сейчас в теме
(10) Вместо вашего кода
Первые10 = Лев(Наименование,10);
Если СтрДлина(Первые10) = 10 
     И СтрРазделить(Первые10,"0123456789",Ложь).Количество() = 0 Тогда
     //значит первые 10 символов содержат только цифры.
КонецЕсли;
user1619761; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 23.04.24 16:55 Сейчас в теме
(1) Что бы начать программировать нужно учиться. Здесь у вас какие-то куски несвязанного и нерабочего кода.
user1880116; +1 Ответить
3. user1837694 23.04.24 20:20 Сейчас в теме
(2) Да, я и учусь. Пробую обойтись без запроса:

Процедура ЛСчВКомментарий (Справочник.Контрагент)

ЛСчВНаименовании = "0123456789"; //так можно объявить массив цифр?

    Если Найти(Контрагент.Наименование, ЛСчВНаименовании) = 0 Тогда
        Справочник.Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
    Иначе
        Справочник.Контрагент.Комментарий = Лев(Удалить(Контрагент.Наименование, ЛСчВНаименовании), 10)
    КонецЕсли;
КонецПроцедуры
Показать
4. user2070470 24.04.24 08:21 Сейчас в теме
Пробую у простить, но даже вот такая штука не работает на первом шаге.
1 шаг. Добавить ФИО в комментарий
Процедура ЛицСчВКомментарий ()  
	Если Найти(Контрагент.Наименование, []) = 1 Тогда //как обратиться к полю Наименование? (пишет, что переменная не определена)
                 Контрагент.Комментарий = [];
        КонецЕсли;
КонецПроцедуры

2 шаг. Добавить первые 10 символов (лицевой счет) в комментарий
Процедура ЛицСчВКомментарий (Контрагент)
   Если Найти(Контрагент.Наименование, []) = 1 Тогда
        Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
    КонецЕсли;
КонецПроцедуры

3 шаг. Добавить первые 10 символов, если это цифры в комментарий
Процедура ЛицСчВКомментарий (Контрагент)
МассивВсехЦифр = СоздатьМассивЦифр(); //обращение к массиву
    Если Найти(Контрагент.Наименование, МассивВсехЦифр) = 0 Тогда
        Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
    КонецЕсли;
КонецПроцедуры

Функция СоздатьМассивЦифр() //так можно создать массив цифр?
    МассивЦифр = Новый Массив;
    Для Цифра = 0 По 9 Цикл
        МассивЦифр.Добавить(Цифра);
    КонецЦикла;
    Возврат МассивЦифр;
КонецФункции

4 шаг. Добавить первые 10 символов, если это цифры в комментарий, если он пустой.
// думаю, здесь без запроса не обойтись
6. RustamZz 24.04.24 10:04 Сейчас в теме
(4) По многочисленным просьбам разработчиков, использующих наши технологии, в версии 8.3.23 реализована возможность использования регулярных выражений во встроенном языке. Используются регулярные выражения стандарта ICU.
7. Sashares 35 24.04.24 11:18 Сейчас в теме
(6)Чтобы у ТС стало на одну проблему больше)))
Some people, when confronted with a problem, think
“I know, I'll use regular expressions.” Now they have two problems.
unknown181538; +1 Ответить
8. user1880116 24.04.24 12:38 Сейчас в теме
(7)
Чтобы
Прикрепленные файлы:
unknown181538; Sashares; +2 Ответить
5. user1880116 24.04.24 08:43 Сейчас в теме
Целевая аудитория инфостарта. Наглядно.
Прикрепленные файлы:
16. unknown181538 158 24.04.24 17:19 Сейчас в теме
(5) Может он и не программист, а обработки качает, но решил подучиться? Наоборот же круто
9. GeraltSnow 174 24.04.24 13:09 Сейчас в теме
ПервыеДесятьСимволовНаименования = Лев(Наименование, 10);
ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Ложь;

Попытка
	а = Число(ПервыеДесятьСимволовНаименования);
	ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Истина;
Исключение
	//не удалось выполнить преобразование к числу
КонецПопытки

Если ПервыеДесятьСимволовНаименованияЯвляютсяЧислом Тогда
	Комментарий = ПервыеДесятьСимволовНаименования;
	НовоеНаименование = Сред(Наименование, 11); 
КонецЕсли;
Показать
user1619761; +1 Ответить
10. user1619761 24.04.24 13:51 Сейчас в теме
ЛСчВНаименовании = "0123456789";
	Наименование = Контрагент.Наименование
		МассивЗначений = СтрРазделить(Наименование, " ");
		НачальноеЗначение = ?(МассивЗначений.Количество() > 0, МассивЗначений[0], Неопределено);
		Если Не НачальноеЗначение = Неопределено Тогда
			КоличествоСимволов = СтрДлина(НачальноеЗначение);
			НайденноеЗначение = "";
			Для i = 1 По КоличествоСимволов Цикл
				ИскомыйСимвол = Сред(НачальноеЗначение, i, 1);
				Если Найти(ЛСчВНаименовании, ИскомыйСимвол) Тогда
					НайденноеЗначение = НайденноеЗначение + ИскомыйСимвол;	
				КонецЕсли;
			КонецЦикла; 
			Если СтрДлина(НайденноеЗначение) = 10 Тогда
				НовоеНаименование = СокрЛП(СтрЗаменить(Наименование, НайденноеЗначение, "")); 
			КонецЕсли;
		КонецЕсли;
Если Не ПустаяСтрока(НовоеНаименование)  Тогда
КонтрагентОбъект = Контрагент.ПолучитьОбъект();
КонтрагентОбъект.Наименование = НовоеНаименование;
КонтрагентОбъект.Комментарий = НайденноеЗначение;
КонтрагентОбъект.Записать();
КонецЕсли;	
Показать
11. Sashares 35 24.04.24 15:28 Сейчас в теме
(10) Вместо вашего кода
Первые10 = Лев(Наименование,10);
Если СтрДлина(Первые10) = 10 
     И СтрРазделить(Первые10,"0123456789",Ложь).Количество() = 0 Тогда
     //значит первые 10 символов содержат только цифры.
КонецЕсли;
user1619761; +1 Ответить
12. user1880116 24.04.24 15:54 Сейчас в теме
(11)
Вместо вашего кода

ВЫБРАТЬ
    Контрагенты.Ссылка КАК Ссылка,
    СОКРЛП(ПОДСТРОКА(Контрагенты.Наименование, 11, 10000)) КАК НовоеНаименование,
    ПОДСТРОКА(Контрагенты.Наименование, 1, 10) КАК НовыйКомментарий
ИЗ
    Справочник.Контрагент КАК Контрагенты 
ГДЕ 
    Контрагенты.Наименование ПОДОБНО "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%"
    И Контрагент.Комментарий= ""
Показать
user1619761; Sashares; +2 Ответить
13. Sashares 35 24.04.24 15:56 Сейчас в теме
(12)Забавно.
Особенно наименование в 10000 символов.
14. user1880116 24.04.24 15:57 Сейчас в теме
(13) Лень править. Кому надо, тот поймет
15. GeraltSnow 174 24.04.24 16:19 Сейчас в теме
(12) Да, но Контрагент.Комментарий = "" вызовет ошибку сравнения поля неограниченной длинны с несовместимым типом.
Нужно так: Выразить(Контрагент.Комментарий КАК Строка(1)) = ""
17. user2070470 02.05.24 10:36 Сейчас в теме
Решено. Внесение лицевого счета в комментарий осуществлено через штатную обработку ГруповоеИзменениеРеквизитов (Администрирование > Обслуживание > Корректировка данных), настроил так:
- Ввести новые значения – открыжены все, связанные с Контрагентами поля.
- Выполнить произвольный алгоритм:
ПервыеДесятьСимволовНаименования = Лев(Объект.Наименование, 10);
Если СтрДлина(ПервыеДесятьСимволовНаименования) = 10 
    И СтрРазделить(ПервыеДесятьСимволовНаименования,"0123456789",Ложь).Количество() = 0 Тогда
               Объект.Комментарий = ПервыеДесятьСимволовНаименования;
               Объект.Наименование = СокрЛ(Сред(Объект.Наименование, 11)); //удалить лицевой счет из наименования
               Объект.НаименованиеПолное = СокрЛ(Сред(Объект.НаименованиеПолное, 11)); //удалить лицевой счет из полного наименования
КонецЕсли;  

- Выбор элементов для изменения: Отбор по Юридическое/физическое лицо = Физическое лицо,
Дата создания по Больше/Меньше.
Спасибо Sashares, GeraltSnow, user1880116 за весёлый запрос и RustamZz за регулярные выражения, но пока не освоил:
СтрНайтиПоРегулярномуВыражению(Объект.Наименование, "[0-9]{10}");
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот