Работа со справочниками
24.02.2010
11:58
#1
Есть ситуация в справочнике номенклатура есть позиции с одинаковыми артикулами, как программно можно сделать повторяющиеся артикулы разными, т.е. найти элементы с одинаковыми артикулами и один из них сделать другим? например есть 2 элемента с артикулом "ААА", надо один элемент оставить таким же, а второй "ААА_", подскажите плиз
24.02.2010
13:15
#4
"потренируйся на копии, вот примерный код:
МоёЗначениеАртикула = "ААА";
НовоеЗначениеАтикула = "ААА_";
Спр = СоздатьОбъект("Справочник.Номенклатура");
Если Спр.ВыбратьЭлементыПоРеквизиту("Артикул",МоёЗначениеАртикула,0,1)=0 Тогда
Сообщить("нет такого реквизита");
КонецЕсли;
Спр.ПолучитьЭлемент();
Спр.Артикул = НовоеЗначениеАтикула;
Спр.Записать();"
МоёЗначениеАртикула = "ААА";
НовоеЗначениеАтикула = "ААА_";
Спр = СоздатьОбъект("Справочник.Номенклатура");
Если Спр.ВыбратьЭлементыПоРеквизиту("Артикул",МоёЗначениеАртикула,0,1)=0 Тогда
Сообщить("нет такого реквизита");
КонецЕсли;
Спр.ПолучитьЭлемент();
Спр.Артикул = НовоеЗначениеАтикула;
Спр.Записать();"
24.02.2010
14:30
#5
суть в том что повторяющихся артикулов много, и какие они я незнаю, если бы был 1 то я бы ручками поменял, т.е.:
есть в справочнике колонка артикул и выглядит примерно так
1.ААА
2.ААА
3.BBB
4.CCC
5.CCC
6.DDD
7.EEE
8.FFF
9.FFF
а мне надо чтобы выглядело так:
1.ААА
2.ААА_
3.BBB
4.CCC
5.CCC_
6.DDD
7.EEE
8.FFF
9.FFF_
есть в справочнике колонка артикул и выглядит примерно так
1.ААА
2.ААА
3.BBB
4.CCC
5.CCC
6.DDD
7.EEE
8.FFF
9.FFF
а мне надо чтобы выглядело так:
1.ААА
2.ААА_
3.BBB
4.CCC
5.CCC_
6.DDD
7.EEE
8.FFF
9.FFF_
24.02.2010
15:26
#7
да необязательно, просто это произошло из-за некорректного заполнения справочника, у меня переносом из другой базы ищет по артикулу, а бухгалтера зачем-то заносили ручками некоторое время и не ставили артикул, поэтому создаваля новый товар
24.02.2010
15:41
#8
> да необязательно, просто это произошло из-за некорректного заполнения справочника, у меня переносом из другой базы ищет по артикулу, а бухгалтера зачем-то заносили ручками некоторое время и не ставили артикул, поэтому создаваля новый товар
1. делаешь запрос по справочнику - получаешь СЗ совсеми возможными Артикулами...
2. далее делаешь запрос для каждого и заменяешь
первое, что на мысль пришло
1. делаешь запрос по справочнику - получаешь СЗ совсеми возможными Артикулами...
2. далее делаешь запрос для каждого и заменяешь
первое, что на мысль пришло
24.02.2010
17:09
#9
"ТекстЗапроса="Товар=Справочник.Номенклатура.ТекущийЭлемент;
|Артикул=Справочник.Номенклатура.Артикул;
|Группировка Артикул;
|Группировка Товар без групп без упорядочивания;";
Запрос=СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса)=1 Тогда
Номенклатура=СоздатьОбъект("Справочник.Номенклатура");
Пока Запрос.Группировка(1)=1 Цикл
ТекАртикул=СокрЛП(Запрос.Артикул);
Если ПустаяСтрока(ТекАртикул)=0 Тогда
Счетчик=0;
Пока Запрос.Группировка(2)=1 Цикл
Счетчик=Счетчик+1;
Если Счетчик>1 Тогда
Если Номенклатура.НайтиЭлемент(Запрос.Товар)=1 Тогда
Номенклатура.Артикул=ТекАртикул+?(Счетчик=2,"_",Строка(Счетчик)); //а вдруг дубликатов много?! в результате такого будет "ААА", "ААА_", "ААА2", "ААА3"...
Номенклатура.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;"
|Артикул=Справочник.Номенклатура.Артикул;
|Группировка Артикул;
|Группировка Товар без групп без упорядочивания;";
Запрос=СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса)=1 Тогда
Номенклатура=СоздатьОбъект("Справочник.Номенклатура");
Пока Запрос.Группировка(1)=1 Цикл
ТекАртикул=СокрЛП(Запрос.Артикул);
Если ПустаяСтрока(ТекАртикул)=0 Тогда
Счетчик=0;
Пока Запрос.Группировка(2)=1 Цикл
Счетчик=Счетчик+1;
Если Счетчик>1 Тогда
Если Номенклатура.НайтиЭлемент(Запрос.Товар)=1 Тогда
Номенклатура.Артикул=ТекАртикул+?(Счетчик=2,"_",Строка(Счетчик)); //а вдруг дубликатов много?! в результате такого будет "ААА", "ААА_", "ААА2", "ААА3"...
Номенклатура.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;"
Читают тему
(гостей: 1)