Имя: Пароль:
1C
 
Нужно переименовать (Наименование) все товары в справочнике.
0 MSH5555
 
21.06.08
13:45
Сабж.
Версия 1с - 7.7. Имеется база. В ней в поле наименование забит код и само наименование. Необходимо отделить код от наименования. Код должен быть сохранен в одно поле, наименование (без кода), соответственно, в наименование.
Как это сделать наиболее удобно?

Пытался сделать через выборку - при смене наименования либо выдает ошибку, что "сменили наименование" и дальше не работаем, либо при использовании второй копии справочника слетает выборка. В итоге меняется пара-тройка процентов товаров. Можно запустить заново, либо запустить в бесконечном цикле, но что-то такой вариант мне не нравится. Использовал выборку как по справочнику, так и по реквизиту - один черт. :(
1 romix
 
модератор
21.06.08
13:50
Можно еще выбрать по реквизиту. Т.е. создать какой-нибудь реквизит с признаком сортировки.

Или можно еще коды записать в доп. реквизит (создать его), исправить наименования (коды будут уже там), а потом, выбирая элементы "по наименованию", исправить коды.
2 romix
 
модератор
21.06.08
13:54
Резервную копию базы еще сделай.
3 FreeFin
 
21.06.08
14:02
(1) Зачем реквизит? (копию понятно делать всегда надо) В список собрать и всех делов.
Спс=СоздатьОбъект("СписокЗначений")
ВыбратьЭлементы()
Пока ПолучитьЭлемент
Спс.ДобавитьЗначение(...ТекущийЭлемент());
и далее со списком
Для Ном=1 ПоСпс.РазмерСписка() Цикл
СМеняем=Спр.НайтиЭлемент(Спс.ПолучитьЗначение(ном));
СМеняем.Код=...
СМеняем.Наименование=...
СМеняем.Записать()

и никуда выборка не денется.
4 FreeFin
 
21.06.08
14:04
Перданул )))
Спр.НайтиЭлемент(Спс.ПолучитьЗначение(ном));
Спр.Код=...
Спр.Наименование=...
Спр.Записать()
5 кикабидзе
 
21.06.08
14:15
6 дущ
 
21.06.08
14:27
(0) а код надо в предопределённый реквизит Код записать? Если да, то так делать нельзя, потому что база на середине может наткнуться на "Код не уникален". Тогда вначале делаешь ПорядокНаименований ВыбратьЭлементы, в "Код" прошиваешь какой-нибудь индексный счётчик (я обычно пользую "собакаХХХ"), затем ПорядокРеквизита ВыбратьЭлементы и там уже правильный код в "Код", наименование в "Наименование"
7 MSH5555
 
21.06.08
15:07
romix, не подходит, наверное. Хотя я не пробовал в справочнике делать сортировку по реквизиту, например, а потом переименовывать. Не дошло как-то...
Копию базы всегда делаю перед любым изменением. Тем более, что на этот код в наименовании завязано много всего.

FreeFin, спс, логично.

Кикабидзе, на счет Спр.ПорядокКодов() - попробую. Возможно будет достаточно сделать сортировку в самом справочнике...

Дущ, естественно, код пишется в отдельное поле. 1С-овский код по каким-то причинам изначально не используется. Я бы вообще ничего не менял (и не менял) по принципу: "работает - не трожь". Но просто есть идея частично автоматизировать формирование кода + есть идея группировки товаров по коду (по первой цифре после букв:)).
Код типа АА12345.
АА - буквы, которые присваиваются вручную (в зависимости от поставщика - возможно будет в "полуавтоматическом режиме": выбрали поставщика и сразу выбрался буквенный код).
1 - "группа товаров". От 0 до 8, которая выбирается из списка (9 - используется для старых товаров, со временем все коды поменяются на коды по группам).
2345 - присваиваются автоматически по инкременту.
Основная причина - чтобы в прайсе товар был отсортирован по "группам товаров". В справочнике товар разбросан по группам от поставщиков. Т.е. такой вариант не очень подходит. Тоже изначально так сложилось. До меня еще:)

Всем спасибо. В понедельник буду пробовать.

Заодно офтопичный вопрос: В коде товара есть как две буквы вначале, так и одна. Как наиболее красиво отделить буквенную часть кода от цифровой? Потом все-таки приведу код к "стандартному виду". :)
8 дущ
 
21.06.08
18:19
(7) на мой взгляд проще всего методом исключения:
Функция ПолучитьБуквеннуюЧасть(СтрокаКода)
Для Ном = 1 по СтрДлина(СтрокаКода) Цикл
   Символ = Сред(СтрокаКода, Ном, 1);
   Если Найти("0123456789", Символ) > 0 Тогда
       Возврат Лев(СтрокаКода, Ном - 1);
   КонецЕсли;
КонецЦикла
Возврат ""; //весь код символьный
КонецФункции
9 levlvov
 
21.06.08
18:40
См. желто-красные книжки.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.