Копирование части имени контрагента в комментарий
БП. Корп 8.3.
В конторе сложилась практика вносить перед ФИО номер лицевого счета.
Необходимо одноразово перенести данные цифры в комментарий.
Если комментарий не пустой - не переносить.
Извините, у меня проблемы с логикой.
В конторе сложилась практика вносить перед ФИО номер лицевого счета.
Необходимо одноразово перенести данные цифры в комментарий.
Если комментарий не пустой - не переносить.
Процедура ЛСчВКомментарий () //Функция СтрНайти() ?
"ВЫБРАТЬ
| Контрагенты.Наименование КАК Наименование,
| Контрагенты.Комментарий КАК Комментарий,
| ПОДСТРОКА (Справочник.Контрагенты.Наименование, 1, 10) КАК Подстрока
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Комментарий NOT NULL" // ЕСТЬ NULL
ЛСчВНаименовании = "0123456789"; //содержит
Если Подстрока = ЛСчВНаименовании Тогда
Объект.Комментарий = Подстрока;
КонецЕсли;
КонецПроцедуры
ПоказатьИзвините, у меня проблемы с логикой.
По теме из базы знаний
Найденные решения
ПервыеДесятьСимволовНаименования = Лев(Наименование, 10);
ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Ложь;
Попытка
а = Число(ПервыеДесятьСимволовНаименования);
ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Истина;
Исключение
//не удалось выполнить преобразование к числу
КонецПопытки
Если ПервыеДесятьСимволовНаименованияЯвляютсяЧислом Тогда
Комментарий = ПервыеДесятьСимволовНаименования;
НовоеНаименование = Сред(Наименование, 11);
КонецЕсли;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Да, я и учусь. Пробую обойтись без запроса:
Процедура ЛСчВКомментарий (Справочник.Контрагент)
ЛСчВНаименовании = "0123456789"; //так можно объявить массив цифр?
Если Найти(Контрагент.Наименование, ЛСчВНаименовании) = 0 Тогда
Справочник.Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
Иначе
Справочник.Контрагент.Комментарий = Лев(Удалить(Контрагент.Наименование, ЛСчВНаименовании), 10)
КонецЕсли;
КонецПроцедуры
Показать
Пробую у простить, но даже вот такая штука не работает на первом шаге.
1 шаг. Добавить ФИО в комментарий
2 шаг. Добавить первые 10 символов (лицевой счет) в комментарий
3 шаг. Добавить первые 10 символов, если это цифры в комментарий
4 шаг. Добавить первые 10 символов, если это цифры в комментарий, если он пустой.
// думаю, здесь без запроса не обойтись
1 шаг. Добавить ФИО в комментарий
Процедура ЛицСчВКомментарий ()
Если Найти(Контрагент.Наименование, []) = 1 Тогда //как обратиться к полю Наименование? (пишет, что переменная не определена)
Контрагент.Комментарий = [];
КонецЕсли;
КонецПроцедуры
2 шаг. Добавить первые 10 символов (лицевой счет) в комментарий
Процедура ЛицСчВКомментарий (Контрагент)
Если Найти(Контрагент.Наименование, []) = 1 Тогда
Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
КонецЕсли;
КонецПроцедуры
3 шаг. Добавить первые 10 символов, если это цифры в комментарий
Процедура ЛицСчВКомментарий (Контрагент)
МассивВсехЦифр = СоздатьМассивЦифр(); //обращение к массиву
Если Найти(Контрагент.Наименование, МассивВсехЦифр) = 0 Тогда
Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
КонецЕсли;
КонецПроцедуры
Функция СоздатьМассивЦифр() //так можно создать массив цифр?
МассивЦифр = Новый Массив;
Для Цифра = 0 По 9 Цикл
МассивЦифр.Добавить(Цифра);
КонецЦикла;
Возврат МассивЦифр;
КонецФункции
4 шаг. Добавить первые 10 символов, если это цифры в комментарий, если он пустой.
// думаю, здесь без запроса не обойтись
ПервыеДесятьСимволовНаименования = Лев(Наименование, 10);
ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Ложь;
Попытка
а = Число(ПервыеДесятьСимволовНаименования);
ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Истина;
Исключение
//не удалось выполнить преобразование к числу
КонецПопытки
Если ПервыеДесятьСимволовНаименованияЯвляютсяЧислом Тогда
Комментарий = ПервыеДесятьСимволовНаименования;
НовоеНаименование = Сред(Наименование, 11);
КонецЕсли;
ПоказатьЛСчВНаименовании = "0123456789";
Наименование = Контрагент.Наименование
МассивЗначений = СтрРазделить(Наименование, " ");
НачальноеЗначение = ?(МассивЗначений.Количество() > 0, МассивЗначений[0], Неопределено);
Если Не НачальноеЗначение = Неопределено Тогда
КоличествоСимволов = СтрДлина(НачальноеЗначение);
НайденноеЗначение = "";
Для i = 1 По КоличествоСимволов Цикл
ИскомыйСимвол = Сред(НачальноеЗначение, i, 1);
Если Найти(ЛСчВНаименовании, ИскомыйСимвол) Тогда
НайденноеЗначение = НайденноеЗначение + ИскомыйСимвол;
КонецЕсли;
КонецЦикла;
Если СтрДлина(НайденноеЗначение) = 10 Тогда
НовоеНаименование = СокрЛП(СтрЗаменить(Наименование, НайденноеЗначение, ""));
КонецЕсли;
КонецЕсли;
Если Не ПустаяСтрока(НовоеНаименование) Тогда
КонтрагентОбъект = Контрагент.ПолучитьОбъект();
КонтрагентОбъект.Наименование = НовоеНаименование;
КонтрагентОбъект.Комментарий = НайденноеЗначение;
КонтрагентОбъект.Записать();
КонецЕсли;
Показать
(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]%"
И Контрагент.Комментарий= ""
Показать
Решено. Внесение лицевого счета в комментарий осуществлено через штатную обработку ГруповоеИзменениеРеквизитов (Администрирование > Обслуживание > Корректировка данных), настроил так:
- Ввести новые значения – открыжены все, связанные с Контрагентами поля.
- Выполнить произвольный алгоритм:
- Выбор элементов для изменения: Отбор по Юридическое/физическое лицо = Физическое лицо,
Дата создания по Больше/Меньше.
Спасибо Sashares, GeraltSnow, user1880116 за весёлый запрос и RustamZz за регулярные выражения, но пока не освоил:
- Ввести новые значения – открыжены все, связанные с Контрагентами поля.
- Выполнить произвольный алгоритм:
ПервыеДесятьСимволовНаименования = Лев(Объект.Наименование, 10);
Если СтрДлина(ПервыеДесятьСимволовНаименования) = 10
И СтрРазделить(ПервыеДесятьСимволовНаименования,"0123456789",Ложь).Количество() = 0 Тогда
Объект.Комментарий = ПервыеДесятьСимволовНаименования;
Объект.Наименование = СокрЛ(Сред(Объект.Наименование, 11)); //удалить лицевой счет из наименования
Объект.НаименованиеПолное = СокрЛ(Сред(Объект.НаименованиеПолное, 11)); //удалить лицевой счет из полного наименования
КонецЕсли;
- Выбор элементов для изменения: Отбор по Юридическое/физическое лицо = Физическое лицо,
Дата создания по Больше/Меньше.
Спасибо Sashares, GeraltSnow, user1880116 за весёлый запрос и RustamZz за регулярные выражения, но пока не освоил:
СтрНайтиПоРегулярномуВыражению(Объект.Наименование, "[0-9]{10}");
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот