Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Процедура не работает почему?


Автор: REn005 26.9.2008, 13:26
Код

Процедура ИзменитьКоличество(УжеПроведен)
        СпрПодр=СоздатьОбъект("Справочник.Подразделения");
        СпрПодр.НайтиЭлемент(Подразделение);
        СпрПодр.ТекущийЭлемент();
        ЕСли УжеПроведен=0 Тогда
            СпрПодр.КолСотр=СпрПодр.КолСотр-1;
        Иначе
            СпрПодр.КолСотр=СпрПодр.Колсотр+1;
        КонецЕсли;
        СпрПодр.Записать();
        КонецПроцедуры


почему то ругаеца етим.
Код

СпрПодр.КолСотр=СпрПодр.КолСотр-1;
{Документ.ПриказОбУвольнении.Модуль Документа(6)}: Не выбран элемент! 


Автор: geka6pucT 26.9.2008, 13:33
Попробуй
СпрПодр.ТекущийЭлемент().КолСотр=СпрПодр.ТекущийЭлемент().КолСотр-1

Автор: REn005 26.9.2008, 13:56
тоже самое,опять ругаеца что не выбран елемент, но странно етон код норамльно работает
     
Код

           
     Процедура ИзменитьКоличество(УжеПроведен)
        СпрПодр=СоздатьОбъект("Справочник.Подразделения");
        СпрПодр.НайтиЭлемент(Подразделение);
        СпрПодр.ТекущийЭлемент();
        ЕСли УжеПроведен=1 Тогда
            СпрПодр.КолСотр=СпрПодр.КолСотр-1;
        Иначе
            СпрПодр.КолСотр=СпрПодр.Колсотр+1;
        КонецЕсли;
        СпрПодр.Записать();
        КонецПроцедуры

а почему так?

Автор: REn005 26.9.2008, 15:05
вот все процедуры в дакументе  может что то не там паставлено?написано в модуле документа
        
Код

 Процедура ИзменитьКоличество(УжеПроведен)
        СпрПодр=СоздатьОбъект("Справочник.Подразделения");
        СпрПодр.НайтиЭлемент(Подразделение);
        СпрПодр.ТекущийЭлемент();
        ЕСли УжеПроведен=0 Тогда
            СпрПодр.КолСотр=СпрПодр.КолСотр-1;
        Иначе
            СпрПодр.КолСотр=СпрПодр.КолСотр+1;
        КонецЕсли;
        СпрПодр.Записать();
     КонецПроцедуры
     

Процедура ОбработкаПроведения()

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

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

    
           КонецЕсли;
      
    КонецПроцедуры

Автор: Zero 28.9.2008, 20:51
1. ты посмотри что ты указываешь в качестве параметра в строке:
Код

СпрПодр.НайтиЭлемент(Подразделение);
Параметр Подразделение должен являтся реквизитом документа с агрегатным типом Справочник.Подразделения. Если это не так, тогда при вызове метода НайтиЭлемент вернётся пустое значение, а далее вылезет твоя ошибка.
Либо этот параметр должен содержать ссылку на элемент справочника Подразделения.
2. СпрПодр.ТекущийЭлемент();
Это вообще к чему? Если ты к переменной СпрСотрудники применяешь функцию СоздатьОбъект то данная переменная и так является текущим элементом, а не ссылкой - строку можешь убрать.

Автор: REn005 30.9.2008, 10:46
 а какой именно реквезит? табличной части или  шапки. у меня два документа    в одной  параметр Подразделение  в реквезите шапке ,а в другой он реквезит таблияной части.для обоих докмунетов в глобалном модуле 
   
Код

Процедура ИзменитьКоличество(УжеПроведен,Конт) Экспорт
        СпрПодр=СоздатьОбъект("Справочник.Подразделения");
        СпрПодр.НайтиЭлемент(Конт.Подразделение);
     
        ЕСли ((УжеПроведен=1) и(Конт.Вид()="ПриказОПриемеНаРаботу")) или((УжеПроведен=0) и (КОнт.Вид()="ПриказОбУвольнении")) Тогда
            СпрПодр.КолСотр=СпрПодр.КолСотр-1;
        Иначе
            СпрПодр.КолСотр=СпрПодр.Колсотр+1;
        КонецЕсли;
        СпрПодр.Записать();
        КонецПроцедуры 
    

для документа где ПОдразделение в реквезите шапке нормално работает, а для другова документа ругаеца
Код

СпрПодр.КолСотр=СпрПодр.КолСотр-1;
{Глобальный модуль(7)}: Не выбран элемент!

можно ето как небуть исправить?

Автор: Itsys 30.9.2008, 11:24
Это значит, что строка документа, где указано подразделение не выбрана, т.е. Конт.Подразделение не определена.

Конт - это контекст документа или объект созданный функцией СоздатьОбъект()?

Если второе, то перед вызовом твоей процедуры необходимо инициализировать выбор и получение строки

ЗЫ Ошибка может быть в том, что реально подраздление не выбрано (процедура вызывается до выбора подразделения) в этом случае надо просто поставить заглушку...

Код

Процедура ИзменитьКоличество(УжеПроведен,Конт) Экспорт
        Если ПустоеЗначение(Конт.Подразделение) = 1 Тогда
                Возврат;
        КонецЕсли;
        СпрПодр=СоздатьОбъект("Справочник.Подразделения");
        СпрПодр.НайтиЭлемент(Конт.Подразделение);
     
        Если ((УжеПроведен=1) и(Конт.Вид()="ПриказОПриемеНаРаботу")) или((УжеПроведен=0) и (КОнт.Вид()="ПриказОбУвольнении")) Тогда
            СпрПодр.КолСотр=СпрПодр.КолСотр-1;
        Иначе
            СпрПодр.КолСотр=СпрПодр.Колсотр+1;
        КонецЕсли;
        СпрПодр.Записать();
КонецПроцедуры 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)