Имя: Пароль:
1C
1C 7.7
v7: Справочник Найти по элементу
0 work92
 
03.09.12
16:37
Процедура Выполнить()      
   Если Вопрос("Чтобы продолжить нажмите <Да>, чтобы отменить нажмите <Нет>",4)=7 тогда
       Возврат;
   КонецЕсли;
   Сп=СоздатьОбъект("СписокЗначений");
   СпрСотр=СоздатьОбъект("Справочник.Сотрудники");
   СпрСостСемьи=СоздатьОбъект("Справочник.СоставСемьи");
   СпрНалЛьготы=СоздатьОбъект("Справочник.НалоговыеЛьготы");
   СпрТипЛьготы=СоздатьОбъект("Справочник.ЛьготыПоПодоходномуНалогу");
   СпрТипЛьготы.НайтиПоНаименованию("На детей",0,1);  
   ТипЛьготыНаДет=СпрТипЛьготы.ТекущийЭлемент();
   СпрСотр.ВыбратьЭлементы();
   Стр="";
   Пока СпрСотр.ПолучитьЭлемент()=1 цикл  
       Если СпрСотр.ЭтоГруппа()=0 тогда  
           СпрНалЛьготы.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());  
           СпрНалЛьготы.ВыбратьЭлементы();  
           Пока СпрНалЛьготы.ПолучитьЭлемент()=1 цикл
               Если СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет тогда
                   ///СпрНалЛьготы.Удалить();
               КонецЕсли;
           КонецЦикла;    
           СпрСостСемьи.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());
           СпрСостСемьи.ВыбратьЭлементы();
           Сп.УдалитьВсе();
           Пока СпрСостСемьи.ПолучитьЭлемент()=1 Цикл
               Если ((СпрСостСемьи.Родство=Перечисление.СтепениРодства.Сын)или
               (СпрСостСемьи.Родство=Перечисление.СтепениРодства.Дочь))и
               (СпрСостСемьи.ДеньРождения>Д)тогда
                   Сп.ДобавитьЗначение(СпрСостСемьи.ТекущийЭлемент());  
               КонецЕсли;
           КонецЦикла;  
           Если Сп.РазмерСписка()>=2 тогда
               Для н=1 по Сп.РазмерСписка() цикл  
                   СпрНалЛьготы.Новый()????????????????????????????????????????;  
                   СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
                   СпрНалЛьготы.Владелец=СпрСотр.ТекущийЭлемент();  
                   СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
                   СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
                   СпрНалЛьготы.Сумма=2;
                   СпрНалЛьготы.Записать();  
               
               КонецЦикла;
           ИначеЕсли Сп.РазмерСписка()=1 тогда
               Для н=1 по Сп.РазмерСписка() цикл  
                   СпрНалЛьготы.Новый???????????????????????????????????????????????();  
                   СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
                   СпрНалЛьготы.Владелец=СпрСотр.ТекущийЭлемент();  
                   СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
                   СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
               
                   СпрНалЛьготы.Записать();  
                   
               КонецЦикла;                
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   Сообщить("льготы на детей удалены");
   Сообщить(Стр);
   Сообщить("Выполнено");
1 Boleev
 
03.09.12
16:37
КонецПроцедуры
2 work92
 
03.09.12
16:39
подскажите что вписать в замен -----------СпрНалЛьготы.Новый()????????????????????????????????????????;  
чтобы не создава новый элемент а изменял старый элемент
3 work92
 
03.09.12
16:40
кто может кто знает
4 Boleev
 
03.09.12
16:40
(2) Выбирай!
СпрНалЛьготы.НайтиПоНаименованию()
СпрНалЛьготы.НайтиПоКоду()
СпрНалЛьготы.НайтиПоРеквизиту()
5 work92
 
03.09.12
16:41
6 work92
 
03.09.12
16:42
Boleev если можешь напиши а то я писал найти по элементу у меня вылазит ошибка не выбран
7 rutony
 
03.09.12
16:44
8 Boleev
 
03.09.12
16:44
(6) а ты выбрал из (4)
9 work92
 
03.09.12
16:47
я писал
                  СПрНалЛьготы.НайтиЭлемент(На детей)
                   СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
                   СпрНалЛьготы.Владелец=СпрСотр.ТекущийЭлемент();  
                   СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
                   СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
                   СпрНалЛьготы.Сумма=2;
                   СпрНалЛьготы.Записать();  
правильно
10 work92
 
03.09.12
16:48
забыл
СПрНалЛьготы.НайтиЭлемент("На детей")
11 Boleev
 
03.09.12
16:48
(9) Если СПрНалЛьготы.НайтиПоНаименованию("На детей")=1 //нашли
12 work92
 
03.09.12
16:51
а для чего там если
13 work92
 
03.09.12
16:55
пишет
СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
{Обработка.новый1.Форма.Модуль(52)}: Не выбран элемент!
14 del123
 
03.09.12
16:56
для этого там и было Если =)
15 Budy
 
03.09.12
16:58
(2) Может чего не понял.

СправочникСсылка.<Имя справочника> (CatalogRef.<Имя справочника>)
ПолучитьОбъект (GetObject)
Синтаксис:

ПолучитьОбъект()
Возвращаемое значение:

Тип: СправочникОбъект; Неопределено.
Неопределено - объекта в базе нет (например, при обмене данными или после непосредственного удаления объекта, на который есть ссылки).
Описание:

Получает по ссылке объект, предназначенный для чтения, изменения, добавления и удаления справочника.
16 del123
 
03.09.12
17:08
(15) Ну во первых, тут семерка) А во вторых, что бы получить из чего то объект, надо сначала найти это самое что то :)

(13) Почитай в СП описание метода НайтиПоНаименованию(). Скорее всего наименование неверно указываешь, либо режим поиска неверный. попробуй
НайтиПоНаименованию("На детей", 0, 0) и посмотри в отладчике какое значение туда попадает...
17 del123
 
03.09.12
17:12
Кстати у тебя в примере есть уже поиск по наименованию в другом справочнике, чужой код правим?:)
18 work92
 
03.09.12
17:13
Процедура Выполнить()      
   Если Вопрос("Чтобы продолжить нажмите <Да>, чтобы отменить нажмите <Нет>",4)=7 тогда
       Возврат;
   КонецЕсли;
   Сп=СоздатьОбъект("СписокЗначений");
   СпрСотр=СоздатьОбъект("Справочник.Сотрудники");
   СпрСостСемьи=СоздатьОбъект("Справочник.СоставСемьи");
   СпрНалЛьготы=СоздатьОбъект("Справочник.НалоговыеЛьготы");
   СпрТипЛьготы=СоздатьОбъект("Справочник.ЛьготыПоПодоходномуНалогу");
   СпрТипЛьготы.НайтиПоНаименованию("На детей",0,1);  
   ТипЛьготыНаДет=СпрТипЛьготы.ТекущийЭлемент();
   СпрСотр.ВыбратьЭлементы();
   Стр="";
   Пока СпрСотр.ПолучитьЭлемент()=1 цикл  
       Если СпрСотр.ЭтоГруппа()=0 тогда  
           СпрНалЛьготы.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());  
           СпрНалЛьготы.ВыбратьЭлементы();  
           Пока СпрНалЛьготы.ПолучитьЭлемент()=1 цикл
               Если СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет тогда
               ///    СпрНалЛьготы.Удалить();
               КонецЕсли;
           КонецЦикла;    
           СпрСостСемьи.ИспользоватьВладельца(СпрСотр.ТекущийЭлемент());
           СпрСостСемьи.ВыбратьЭлементы();
           Сп.УдалитьВсе();
           Пока СпрСостСемьи.ПолучитьЭлемент()=1 Цикл
               Если ((СпрСостСемьи.Родство=Перечисление.СтепениРодства.Сын)или
               (СпрСостСемьи.Родство=Перечисление.СтепениРодства.Дочь))и
               (СпрСостСемьи.ДеньРождения>Д)тогда
                   Сп.ДобавитьЗначение(СпрСостСемьи.ТекущийЭлемент());  
               КонецЕсли;
           КонецЦикла;  
           Если Сп.РазмерСписка()>=2 тогда
               Для н=1 по Сп.РазмерСписка() цикл  
               Если    СПрНалЛьготы.НайтиПоНаименованию("На детей")=1 тогда
                   СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
                   СпрНалЛьготы.Владелец=СпрСотр.ТекущийЭлемент();  
                   СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
                   СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
                   СпрНалЛьготы.Сумма=2;
                   СпрНалЛьготы.Записать();  
                            конецЕсли;
               КонецЦикла;
           ИначеЕсли Сп.РазмерСписка()=1 тогда
               Для н=1 по Сп.РазмерСписка() цикл  
               Если    СПрНалЛьготы.НайтиПоНаименованию("На детей")=1 тогда
                   СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
                   СпрНалЛьготы.Владелец=СпрСотр.ТекущийЭлемент();  
                   СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
                   СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
                   СпрНалЛьготы.Сумма=27;
                   СпрНалЛьготы.Записать();  
                     конецЕсли;
               КонецЦикла;                
           КонецЕсли;
       
          конецЕсли;
   КонецЦикла;
   Сообщить("льготы на детей удалены");
   Сообщить(Стр);
   Сообщить("Выполнено");
КонецПроцедуры
19 work92
 
03.09.12
17:15
гонит в пустую включаю сразу отключается гляньте плиз может где в коде ошибка
Если Сп.РазмерСписка()>=2 тогда
               Для н=1 по Сп.РазмерСписка() цикл  
               Если    СПрНалЛьготы.НайтиПоНаименованию("На детей")=1 тогда
                   СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
                   СпрНалЛьготы.Владелец=СпрСотр.ТекущийЭлемент();  
                   СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
                   СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
                   СпрНалЛьготы.Сумма=2;
                   СпрНалЛьготы.Записать();  
                            конецЕсли;
               КонецЦикла;
           ИначеЕсли Сп.РазмерСписка()=1 тогда
               Для н=1 по Сп.РазмерСписка() цикл  
               Если    СПрНалЛьготы.НайтиПоНаименованию("На детей")=1 тогда
                   СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
                   СпрНалЛьготы.Владелец=СпрСотр.ТекущийЭлемент();  
                   СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
                   СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
                   СпрНалЛьготы.Сумма=27;
                   СпрНалЛьготы.Записать();  
                     конецЕсли;
               КонецЦикла;                
           КонецЕсли;
20 work92
 
03.09.12
17:16
del123  можешь глянуть код если не занят
21 del123
 
03.09.12
17:17
какой элемент в Справочнике "налоговые льготы" ты хочешь найти?
22 work92
 
03.09.12
17:21
На детей
23 del123
 
03.09.12
17:24
Вобщем, на сколько я понял, тебе надо что то вроде такого:
Если СпрНалЛьготы.НайтиПоРеквизиту("ТипЛьготы", ТипЛьготыНаДет, 0) = 0 тогда
    СпрНалЛьготы.Новый();
    СпрНалЛьготы.ТипЛьготы=ТипЛьготыНаДет;
    СпрНалЛьготы.Владелец=СпрСотр.ТекущийЭлемент();  
КонецЕсли;
СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
СпрНалЛьготы.Сумма=27;
СпрНалЛьготы.Записать();
24 del123
 
03.09.12
17:25
Оплату принимаю на карту :D
25 work92
 
03.09.12
17:27
да эта пригодится........

ты новый создаешь  а как изменить который там есть
26 work92
 
03.09.12
17:28
ты новый создаешь  а как изменить который там уже есть   del123
27 del123
 
03.09.12
17:29
я проверяю сначала. Если его там нет то создаю. Для этого там Если и стоит.
28 work92
 
03.09.12
17:31
а как изменить который там есть вот в чем главная проблема del123
29 work92
 
03.09.12
17:35
del123 ты в онлайне
30 del123
 
03.09.12
17:36
Может поучиться пойти?... Что такое Синтаксис помощник знаешь? Почитай там что делает функция НайтиПоРеквизиту()
31 Budy
 
03.09.12
17:43
(16) Да, согласен, я тот самый.
(0) Для начала вот это переписать надо

СпрТипЛьготы.НайтиПоНаименованию("На детей",0,1);  
ТипЛьготыНаДет=СпрТипЛьготы.ТекущийЭлемент();

на

Если СпрТипЛьготы.НайтиПоНаименованию("На детей",0,1) = 1 тогда  
   ТипЛьготыНаДет=СпрТипЛьготы.ТекущийЭлемент();

Иначе
   Сообщить("Не найден ...");
   возврат;
КонецЕсли;
32 del123
 
03.09.12
17:44
ну, если не нужно что бы создавало новый элемент, то можно сделать:
Если СпрНалЛьготы.НайтиПоРеквизиту("ТипЛьготы", ТипЛьготыНаДет, 0) = 0 тогда
    Сообщить("Элемент не найден, запись невозможна!!!");
    продолжить;
КонецЕсли;
СпрНалЛьготы.ДатаНачала=Сп.ПолучитьЗначение(н,).ДеньРождения;
СпрНалЛьготы.ДатаОкончания=ДобавитьМесяц(Сп.ПолучитьЗначение(н,).ДеньРождения,216);
СпрНалЛьготы.Сумма=27;
СпрНалЛьготы.Записать();
33 del123
 
03.09.12
17:45
(31) ну и это тоже не помешает..)
А кто это - тот самый?)
34 Budy
 
03.09.12
17:46
(33) Не скажу ))) только жена знает
35 del123
 
03.09.12
17:48
:D
36 Budy
 
03.09.12
17:54
(13) (31) ну что этот элемент не выбран?
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший