Имя: Пароль:
1C
1С v8
Проверка на группу и присваивание
0 ArtYst
 
11.07.12
03:56
Доброго дня или ночи. Такая проблема: Есть справочник. В нем есть такие столбцы как:  ЭтоГруппа, Наименование, НаименованиеПолное. Необходимо сделать следующее: Проверить является ли ЭтоГруппа истиной (она булевого значения). Затем если она является ЛОЖЬ, то присвоить НаименованиеПолное значение Наименование. Эти два реквизита являются строкой. К примеру если у НАименованиеПолное отсутствует какое либо значение, надо что бы оно брало его из Наименование.
Вот примерный текст кода:

[CODE]    
Выборка = Справочники.ОсновныеСредства.Выбрать();
   Пока Выборка.Следующий() Цикл
       Объект = Выборка.ПолучитьОбъект();
       Если ПустаяСтрока(Объект.НаименованиеПолное) Тогда
           Если Объект.ЭтоГруппа = Истина Тогда
                 Продолжить;
                            //Сообщить(Объект.Наименование + "Принадлежит Группе");
           Иначе Объект.НаименованиеПолное = Объект.Наименование;    
               
           КонецЕсли;
       КонецЕсли;
       
   КонецЦикла;
[/CODE]
1 ArtYst
 
11.07.12
04:06
Уже разобрался. Тема закрыта
2 Avalone2010
 
11.07.12
04:06
Включу телепата и попробую угадать, полное наименование не записывается? Если угадал то надо сделать так:
Объект.Записать();

+могу бесплатно, то есть даром указать на грубые ошибки.
3 ArtYst
 
13.07.12
07:30
Не только. Доработал, вот результат:

[CODE]
Выборка = Справочники.ОсновныеСредства.Выбрать();
   Сч = 1;
   Пока Выборка.Следующий() Цикл
       Объект = Выборка.ПолучитьОбъект();
       Если ПустаяСтрока(Объект.НаименованиеПолное) Тогда  //Проверка на наличие записи в строке
           If Объект.ЭтоГруппа = false then  //проверка на булево картежа ЭтоГруппа  
               Объект.НаименованиеПолное = СокрЛП(Объект.Наименование); //Присвоение с сокращением пробелов
           сообщить (/"Количество исправленных элементов /"   Строка(Сч)   /". Исправляемый элемент /"   СокрЛП(Объект.Наименование)) ;
           Объект.Записать();   //непосредственно запись в Объект.НаименованиеПолное
           Сч = Сч  1;
           EndIf;
       КонецЕсли;
       
   КонецЦикла;
[/CODE]

А по поводу грубых ошибок, буду не против мнения со стороны.
4 Wobland
 
13.07.12
07:34
>//проверка на булево картежа ЭтоГруппа
что это?
5 Wobland
 
13.07.12
07:35
вообще, вся строка: If Объект.ЭтоГруппа = false then  //проверка на булево картежа ЭтоГруппа
6 Wobland
 
13.07.12
07:36
теперь о грубости. запросом отобрать только нужные кошерней будет
7 ArtYst
 
13.07.12
08:18
Есть такой индекс в таблице /"ЭтоГруппа/" И его значение булево. При все этом можно заполнять Индекс НаименованиеПолное только то, которое в индексе ЭтоГруппа имеет параметр /"нет/". Следовательно в этой строке происходит банальная проверка на да-нет.
p.s.  и да я оговорился вместо кортежей надо было писать индексы. БД рулит)
8 ArtYst
 
13.07.12
08:20
Насчет юза запросом. Я возможно ошибаюсь, но разве тогда общее использование такой внешней обработки не повредится? А то я как бы при таком коде могу ее использовать на различных базах.
9 izekia
 
13.07.12
08:25
(8) да наоборот и получше будет выглядеть чем твой код
10 MSII
 
13.07.12
08:26
(8) Ничего не повредится, отбирай запросом, станет веселей
ЭтоГруппа имеет тип значения булево, нет необходимости дополнительно сравнивать ее с Ложью
11 iceman2112
 
13.07.12
08:30
Да все тут норм вы чего, if, then, картеж ЭтоГруппа=Истина. Все огонь
12 izekia
 
13.07.12
08:31
(10) технически пофиг
13 izekia
 
13.07.12
08:32
а что такое "картеж"?
14 iceman2112
 
13.07.12
08:33
это олдскульное понятие атрибута
15 iceman2112
 
13.07.12
08:34
или реквизита в БД
16 FIXXXL
 
13.07.12
08:34
(8) еще добавь в запрос РАЗРЕШЕННЫЕ и точно не "повредится" :)
17 MSII
 
13.07.12
08:53
(12) Оно понятно. Вопрос читабельности кода исключительно.
18 izekia
 
13.07.12
08:59
(14) я к ФП привык, там кортежи - это другое
19 ArtYst
 
13.07.12
09:18
Всем Спасибо)) Насчет запроса попробую, чисто из интереса. Авось и понравится. Не вечно же кодить