Имя: Пароль:
1C
1C 7.7
v7: 1с77 Бух предпр. 4.5 ред. все потерли нафиг
,
0 AlPer
 
07.12.13
00:51
процедура Выполнить()
    сСотр = СоздатьОбъект("Справочник.Номенклатура");
    сСотр.ВыбратьЭлементы();
    пока сСотр.ПолучитьЭлемент() = 1 цикл
        если (сСотр.ЭтоГруппа() = 0) тогда //и (сСотр.Уровень() = 1) тогда
            Если ПустоеЗначение(сСотр.ПолнНаименование)=0 Тогда  
                сСотр.Наименование=сСотр.ПолнНаименование;
            КонецЕсли;
        конецЕсли;
    конецЦикла;
конецПроцедуры;

потерли ребята наименование у Номенклатур. А я не программист. Хочу взять наименование из полного наименования и "не париться" руками- там больше 1500 наименований. Не работает код - помогите... Мне деваться некуда - накажут меня вмето тех ребят...а убегать и прятаться я не хочу
1 AlPer
 
07.12.13
00:52
вот такая пятница .... блииииин
2 Aleksey
 
07.12.13
00:55
А где записать()?
3 Aleksey
 
07.12.13
00:59
Причем записать напрямую он скорее не даст (будет ругаться что собьется выборка)

Список = СоздатьОбъект("СписокЗначений");
сСотр = СоздатьОбъект("Справочник.Номенклатура");
сСотр.ВыбратьЭлементы();
пока сСотр.ПолучитьЭлемент() = 1 цикл
   если (сСотр.ЭтоГруппа() = 0) и (ПустоеЗначение(сСотр.Наименование)=1 тогда
      Список.ДобавиьтЗначение(сСотр.ТекущийЭлемент());
   конецЕсли;
конецЦикла;

Для й=1 по Список.РазмерСписка() Цикл
   сСотр.НайтиЭлемент(Список.ПолучитьЭлемент(й));
    сСотр.Наименование=сСотр.ПолнНаименование;
    сСотр.Записать();
КонецЦикла;
4 AlPer
 
07.12.13
01:08
нет пока
5 France
 
07.12.13
02:00
(3)  с чего бы это выборке сбиваться?
6 КонецЦикла
 
07.12.13
02:03
(5) Выборка по основному представлению идет
Надо применить ПорядокКодов()
7 КонецЦикла
 
07.12.13
02:04
И не надо лохматить бабушку со списком или тз
8 Холст
 
07.12.13
02:06
(0) сделай бекап сейчас... а то ПОСЛЕ тебя будет трудней восстанавливать базу
9 ifso
 
07.12.13
09:58
скушна ^^

Процедура Сформировать()
    Спр01=СоздатьОбъект("Справочник.Номенклатура");
    Спр02=СоздатьОбъект("Справочник.Номенклатура");
    ТолькоТест=1; // 1 - только проверка; 0 - записывать изменения
    Если ТолькоТест=1 Тогда
        Сообщить("==Начало тестовой обработки==");
    Иначе
        Сообщить("==Начало обработки==");
    КонецЕсли;
    ПодсчетЭлементов=0;
    Спр01.ВыбратьЭлементы();
    Пока Спр01.ПолучитьЭлемент()=1 Цикл
        Если Спр01.ТекущийЭлемент().ЭтоГруппа()=1 Тогда
            Продолжить;
        КонецЕсли;
        Если СокрЛП(Спр01.ТекущийЭлемент().Наименование)<>"" Тогда
            Продолжить;
        КонецЕсли;
        Если СокрЛП(Спр01.ТекущийЭлемент().ПолнНаименование)="" Тогда
            ТекСообщение="Для элемента справочника Номенклатура (код "+СокрЛП(Спр01.ТекущийЭлемент().Код)+")";
            ТекСообщение=ТекСообщение+" не корректно заданы Наименование и Полное наименование";
            Сообщить(ТекСообщение);
            Продолжить;
        КонецЕсли;
        Спр02.НайтиЭлемент(Спр01.ТекущийЭлемент());
        Спр02.Наименование=СокрЛП(Спр01.ПолнНаименование);
        Если ТолькоТест=1 Тогда
            Сообщить("Спр02.Наименование = "+СокрЛП(Спр02.Наименование));
        Иначе
            Попытка
                Спр02.Записать();
            Исключение
                ТекСообщение="Для Элемента справочника Номенклатура (код "+СокрЛП(Спр01.ТекущийЭлемент().Код)+")";
                ТекСообщение=ТекСообщение+" не удалось записать изменения";
                Сообщить(ТекСообщение);
            КонецПопытки;
        КонецЕсли;
        ПодсчетЭлементов=1+ПодсчетЭлементов;
    КонецЦикла;
    Сообщить("==Обработка завершена. Обработано элементов: "+ПодсчетЭлементов+"==");
КонецПроцедуры
10 milisha
 
07.12.13
19:15
Если ПустоеЗначение(сСотр.ПолнНаименование)=0 Тогда  
                сСотр.Наименование=сСотр.ПолнНаименование;

Ошибка в условии, надо поменять
Если ПустоеЗначение(сСотр.Наименование)=0 Тогда
11 milisha
 
07.12.13
19:25
Сорри, Если ПустоеЗначение(сСотр.Наименование)=1 , иначе у вас и заполненные поменяются. Не могли же они все 1500 стереть?
12 КонецЦикла
 
07.12.13
20:16
(9) Лучше бы вместо красоты сообщений пачками транзакции записывал
13 milisha
 
07.12.13
20:17
Поправила Вашу обработку и протестировала ради интереса. вот так работает.
//*******************************************
Процедура Сформировать()
    сСотр = СоздатьОбъект("Справочник.Номенклатура");
    сСотр.ПорядокКодов();
        сСотр.ВыбратьЭлементы();
  пока сСотр.ПолучитьЭлемент() = 1 цикл
        если (сСотр.ЭтоГруппа() = 0) тогда
            Если ПустоеЗначение(сСотр.Наименование)=1    Тогда  
                сСотр.Наименование=сСотр.ПолнНаименование;
        сСотр.Записать();
            КонецЕсли;
        конецЕсли;
  конецЦикла;
КонецПроцедуры
14 КонецЦикла
 
07.12.13
20:21
Не парьтесь, автор давно гуляет по берегу океана и сплевывает от счастья
15 Джинн
 
07.12.13
20:34
(3) Все проще - ПорядокКодов
16 Джинн
 
07.12.13
20:34
О! Не успел :)
17 milisha
 
07.12.13
20:34
(14) С оторванной головой? :-)
18 ifso
 
07.12.13
21:33
(12) финансирование хромает
19 Buhta
 
07.12.13
21:41
У вас до сих пор задают такие вопросы?  Думаю, автор хотел того, что хотел (т.е. переписать полное наименование, при наличии, в наименование), только Записать() забыл и про порядок выборки
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.