7.7 ДатаДок

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Kugelfangg, 21 фев 2008.

  1. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    здравствуйте господа.проблема в том что не могу доделать обработку..=(

    смысл обработки в том, чтобы выбрать все непроведенные документы на указанную дату, и поменять их дату на следующий рабочий день(датадок+1,если конец недели, то датадок+3) подскажите пожалуйста в чем моя ошибка
    текст модуля:
    Код:
    Процедура Сформировать()
    спр=создатьобъект("справочник.склады");
    спр.найтипокоду("00002");
    выбсклад=спр.текущийэлемент();
    реал    =создатьобъект("документ.Реализация");
    реал.выбратьдокументы(выбначпериода,выбконпериода);
    
    пока реал.получитьдокумент()=1 цикл     
    док=реал.текущийдокумент();
    сообщить(док);
    
    если (реал.отгружено=0) и (реал.склад<>выбсклад) тогда  
    реал.сделатьнепроведенным();
    //    док.датадок=выбконпериода+1; 
    
    реал.записать();
    конецесли;    
    конеццикла;                       
    ////////////////////////////////////////////////////////////////////
    дато=ТекущаяДата();
    //сообщить(дато);
    если (док.проведен()=0) тогда  
    Если КонНедели(дато)=1 тогда
    дд=дато+3;  
    иначе дд=дато+1;
    сообщить(дд);
    конецесли;
    конецесли;     
    реалн    =создатьобъект("документ.Реализация");
    реалн.выбратьдокументы(выбначпериода,выбконпериода);
    пока реалн.выбратьдокументы()=1 цикл
    //    если док.датадок(выбначпериода)=1 тогда
    
    док=реалн.текущийдокумент();
    сообщить(док); 
    реалн.найтипономеру(док.номердок);        
    Если реалн.найтипономеру(док.номердок) =1 тогда 
    //    реал.сделатьнепроведенным();    
    док.датадок=дд;
    реалн.записать();
    //    конецесли;    
    
    конецесли;    
    конеццикла;    
    ////////////////////////////////////////////////////////////////////
    
    КонецПроцедуры
    
    
    выбначпериода=текущаядата();
    выбконпериода=текущаядата();
    
    
    Используйте тэг
    Код:
    [/color]
  2. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    чего-то я вообще ничего не понял в твоем коде...
    1. зачем делать реализации не проведенными, если они по условию должны оными являться...
    2. КонНедели у тебя вернет не число пятницы, а число воскресения и то не будет учитывать праздничные дни...
    3. ну а зачем третий цикл нужен я вообще не понял...

    м-дя... точ что заметил... он не третий а второй... а даты ты меняешь вообще не в цикле... короче я бы на твоем месте все это удил бы и начал писать снова!
  3. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    разобрался с кодом,все работает,только одна проблемка.. дата документа просчитывается,но не меняется.
    как заменить дату в документе?хелп плз.
    КОД:
    Код:
    Процедура Сформировать()
    спр=создатьобъект("справочник.склады");
    спр.найтипокоду("00002");
    выбсклад=спр.текущийэлемент();
    реал    =создатьобъект("документ.Реализация");
    реал.выбратьдокументы(выбначпериода,выбконпериода);
    пока реал.получитьдокумент()=1 цикл 
    док=реал.текущийдокумент();
    сообщить(док);     
    датаст=док.датадок;
    если (реал.отгружено=0) и (реал.склад<>выбсклад) тогда  
    реал.сделатьнепроведенным();
    
    
    ыы=НомерДняНедели(5);
    Если (ыы)=1 тогда док.датадок=выбконпериода+3 иначе док.датадок=выбконпериода+1;
    КонецЕсли;        
    сообщить(док.датадок);
    КонецЕсли;
    //док.датадок=выбконпериода+1  
    
    
    
    ////////////
    
    реал.записать();
    ///////////
    
    КонецЦикла; 
    
    рр=создатьобъект("документ.Реализация");
    номер=док.номердок;
    //дата=док.датадок;
    если рр.найтипономеру(номер,датаст)=1 тогда  
    
    рр.записать();
    Конецесли;
    КонецПроцедуры
    
    
    выбначпериода=текущаядата();
    выбконпериода=текущаядата();
    
    
    
  4. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Код:
    док=реал.текущийдокумент();
    
    
    это тебе зачем? убирай и обращайся везде к документу через реал.
  5. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    Спасибо Огромное!помогло.осталась последняя проаблемка,как запихать это в цикл, т.к. он делат изменение одного документа, а нужно изменение всех с определенной датой.о как=)
    Код:
    Процедура Сформировать()
    спр=создатьобъект("справочник.склады");
    спр.найтипокоду("00002");
    выбсклад=спр.текущийэлемент();
    реал    =создатьобъект("документ.Реализация");
    реал.выбратьдокументы(выбначпериода,выбконпериода);
    пока реал.получитьдокумент()=1 цикл 
    если (реал.отгружено=0) и (реал.склад<>выбсклад) тогда 
    реал.сделатьнепроведенным();
    реал.датадок=выбначпериода1;
    реал.записать();
    КонецЕсли; 
    ///реал.записать();
    КонецЦикла;
    КонецПроцедуры
    
    Создать таблицу
    
    
    
    выбначпериода=текущаядата();
    выбконпериода=текущаядата();
    выбначпериода1=текущаядата()+1; 
    сообщить(выбначпериода1);
    
    
  6. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    да у тебя вроде и так все в цикле... может ты как-то не так тестишь? глянь повнимательнее... отладчик тебе в помощь!
  7. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    не я все норм смотрю, просто одно нажатие на кнопку,один документ. проблема в том что из каждый день больше 100, и столько по клавише клацать совсем не вариант=(
  8. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    ЫЫыыыЫЫЫЫЫЫЫЫ!!!! Хура!заработало!
    Код:
    Процедура Сформировать()
    спр=создатьобъект("справочник.склады");                         //  
    спр.найтипокоду("00002");                                       //  
    выбсклад=спр.текущийэлемент();                                  //  
    реал=создатьобъект("документ.Реализация");                      //
    пока реал.выбратьдокументы(выбначпериода,выбконпериода)=1 цикл  //
    пока реал.получитьдокумент()=1 цикл                             //
    если (реал.отгружено=0) и (реал.склад<>выбсклад)                //
    тогда реал.сделатьнепроведенным();
    реал.датадок=выбначпериода1;                                    //
    реал.записать();                                                //
    КонецЕсли; 
    КонецЕсли;                                                      //
    КонецЦикла;                                                     //
    КонецЦикла;
    КонецЦикла;                                                     //
    КонецПроцедуры                                                  //
    выбначпериода=текущаядата();                                    //
    выбконпериода=текущаядата();                                    //
    выбначпериода1=текущаядата()+1;                                 //
    сообщить(выбначпериода1);  
    
    
    
  9. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    Нипонял задание было

    в конечном коде:

    Код:
    если (реал.отгружено=0) и (реал.склад<>выбсклад)                
    //тогда реал.сделатьнепроведенным();реал.датадок=выбначпериода1;
    
    
    по логике нужно:
    Код:
    Если реал.Проведен()=0 тогда
    реал.датадок=выбначпериода1;                                    
    реал.записать();
    КонецЕсли;
    
    
    да и выбначпериода1=текущаядата()+1 не решает проблему полностью

    :unsure:
  10. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    да не, все круто работает, только мне еще, как оказалось, нужно сделать так, чтобы у сделаных непроведенными доков и подчиненный документ СчетФактура становился не проведенным.
    попытался, выдает ошибку:=(
    -----------------------------------------------------------------------------------------------------------
    пока фак.ВыбратьПодчиненныеДокументы(выбначпериода,выбконпериода,реал)=1 цикл
    : Объект - документ определенного вида!
    -----------------------------------------------------------------------------------------------------------
  11. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    если выбираешь все подчиненные документы, то у тебя должно быть
    Код:
    фак = СоздатьОбъект("Документ"); 
    
    
    а у тебя видимо
    Код:
    фак = СоздатьОбъект("Документ.СчетФактура"); 
    
    
  12. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    если писать без СчетФактура то компьютер начинает сильно греЦЦо и очень долго тупит=(
    мож нужно минут 20 подождать?
  13. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Код:
    док = СоздатьОбъект("Документ"); 
    док.ВыбратьПодчиненныеДокументы(,,ДокументПодчиненныеКоторомуТыИщешь);
    
    
    вот так должно быть... тупит - видимо много документов в базе у тебя... хотя - хз точно...
  14. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    спс=)
  15. TopicStarter Overlay
    Kugelfangg
    Offline

    Kugelfangg Опытный в 1С

    Регистрация:
    13 фев 2008
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    походу она всетаки циклится=(.мож как нибудь можно сделать без 3-его цикла?
    Код:
    Процедура Сформировать()
    фак=создатьобъект("документ");    //  
    спр=создатьобъект("справочник.склады");                         //  
    спр.найтипокоду("00002");                                       //  
    выбсклад=спр.текущийэлемент();                                  //  
    реал=создатьобъект("документ.Реализация");   
    
    пока реал.выбратьдокументы(выбначпериода,выбконпериода)=1 цикл
    ////////////////////////////////////////////////////////////////
    пока фак.ВыбратьПодчиненныеДокументы(выбначпериода,выбконпериода,реал)=1 цикл//ВОТ БЕЗ ЭТОГО
    //////////////////////////////////////////////////////////////////
    пока реал.получитьдокумент()=1 цикл 
    если (реал.отгружено=0) и (реал.склад<>выбсклад)                //
    тогда реал.сделатьнепроведенным();     
    если (реал.отгружено=0) и (реал.склад<>выбсклад)
    тогда фак.сделатьнепроведенным();
    сообщить(фак.сделатьнепроведенным);
    реал.датадок=выбначпериода1;
    реал.записать();                                                //
    КонецЕсли;   
    КонецЕсли; //
    КонецЦикла; 
    КонецЦикла; 
    КонецЦикла;
    КонецПроцедуры                                                  //
    выбначпериода=текущаядата();                                    //
    выбконпериода=текущаядата();                                    //
    выбначпериода1=текущаядата()+1;                                 //
    сообщить(выбначпериода1);                                       //
    //////////////////////////////////////////////////////////////////
    
    
    
  16. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    ахинею какую-то написал...
    Код:
    пока реал.выбратьдокументы(выбначпериода,выбконпериода)=1 цикл
    
    
    
    
    эт че? надо так:
    Код:
    реал.выбратьдокументы(выбначпериода,выбконпериода);
    
    
    
    
    потом пока реал.получитьдокумент()
    фак.выбратьподчиненные... потом пока фак.получитьдокумент...
    а после этого проверку на тип документа не забудь поставить типа
    Код:
    Если фак.Вид()<>"СчетФактура" Тогда продолжить; КонецЕсли;
    
    
    
    

Поделиться этой страницей