Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 02:28

Помагите поставить запрет на перепроведение проведеных документов

Автор Geenij, 04 июл 2014, 12:23

0 Пользователей и 1 гость просматривают эту тему.

Geenij

// Вставить содержимое обработчика.
   
       
   лНомерЗаявки="";
   лЗаказКлиента=Неопределено;   
   ФормаПоступления =Неопределено;
   
   Для каждого лСтрока из СписокЗаявок Цикл
                                     СледующийДень = ДатаДок + 60 * 60 * 24;
                  
Запрос = Новый Запрос;
      Запрос.УстановитьПараметр("НачПериода", ?(СледующийДень = Дата(1, 1, 1),'19800101'  , НачалоДня(СледующийДень)));
      Запрос.УстановитьПараметр("КонПериода",?(ДобавитьМесяц(ТекущаяДата(), 24) = Дата(1, 1, 1),'20200101'  , КонецДня(ДобавитьМесяц(ТекущаяДата(), 24))));
         
                        
               Запрос.Текст = "ВЫБРАТЬ 
            |   ЗаказПокупателя.Ссылка КАК Док,
            |   ЗаказПокупателя.ORDERID КАК ORDERID
            |ИЗ
            |   Документ.ЗаказПокупателя КАК ЗаказПокупателя
            |ГДЕ
            |   ЗаказПокупателя.Проведен = ЛОЖЬ
            |   И ЗаказПокупателя.Дата МЕЖДУ &НачПериода И &КонПериода
            |УПОРЯДОЧИТЬ ПО
            |   ЗаказПокупателя.Дата";
                     
            Результат = Запрос.Выполнить();
            Выборка = Результат.Выбрать();
                          Пока Выборка.Следующий() Цикл  // выборка по списку
            

                             Если выборка.ORDERID= лСтрока.ORDERID Тогда
                                Сообщить("Найдены пов документы за буд период");

                                Сообщить(выборка.Док);
                                   Сообщить("пропуск создания");

                                                                                       

                             иначе
                                       Сообщить("Создание и добавление товара");

                                                                                    
                                                                     
                        Если лНомерЗаявки=лСтрока.ORDERID Тогда
                                 иначе
                     Сообщить("Новый заказ клиента");
         Сообщить(лСтрока.ORDERID);
                     
               
      
                                      // Документ уже сгенерирован, записываем его
         Если ФормаПоступления<>Неопределено Тогда
                                         
            СтруктураШапкиДокумента = Новый Структура("Контрагент, ТипЦен, ДоговорКонтрагента, ДатаДокумента, ВалютаДокумента, УчитыватьНДС, СуммаВключаетНДС",
            лЗаказКлиента.Контрагент, лЗаказКлиента.ТипЦен, лЗаказКлиента.ДоговорКонтрагента, лЗаказКлиента.Дата,лЗаказКлиента.ВалютаДокумента, лЗаказКлиента.УчитыватьНДС,лЗаказКлиента.СуммаВключаетНДС);
                               
                                 
            
            Для Каждого лСтрокаПересчет из  ФормаПоступления.Товары Цикл
                        ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(лСтрокаПересчет,ФормаПоступления.ЭтаФорма, СтруктураШапкиДокумента, лЗаказКлиента.ВалютаДокумента);
               ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(лСтрокаПересчет, ФормаПоступления.ЭтаФорма);
               ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(лСтрокаПересчет, ФормаПоступления.ЭтаФорма);
               ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(лСтрокаПересчет, ФормаПоступления.ЭтаФорма);
               
               Если лСтрокаПересчет.Цена = 0 Тогда
                  Сообщить("Не удалось найти цену поставщика для номенклатуры="+лСтрокаПересчет.Номенклатура);
               КонецЕсли;   
               
            КонецЦикла;   
            
                       КонецЕсли;
            // Теперь пробуем записать документ            
                                  Попытка                                
                                 
                                 
         
                   
Запрос = Новый Запрос;
      Запрос.УстановитьПараметр("НачПериода", ?(ДатаДок = Дата(1, 1, 1),'19800101'  , НачалоДня(ДатаДок)));
      Запрос.УстановитьПараметр("КонПериода",?(ДатаДок = Дата(1, 1, 1),'20200101'  , КонецДня(ДатаДок+7)));
         
      
      
               Запрос.Текст = "ВЫБРАТЬ 
            |   ЗаказПокупателя.Ссылка КАК Док,
            |   ЗаказПокупателя.ORDERID КАК ORDERID
            |ИЗ
            |   Документ.ЗаказПокупателя КАК ЗаказПокупателя
            |ГДЕ
            |   ЗаказПокупателя.Проведен = ИСТИНА
            |   И ЗаказПокупателя.Дата МЕЖДУ &НачПериода И &КонПериода
            |УПОРЯДОЧИТЬ ПО
            |   ЗаказПокупателя.Дата";
                     
            Результат = Запрос.Выполнить();
            Выборка = Результат.Выбрать();
                        
                  Пока Выборка.Следующий() Цикл  // выборка по списку
                     Если выборка.ORDERID= лСтрока.ORDERID Тогда
                                 A=1;
                                       КонецЕсли;

                КонецЦикла;   

   
                                         СледующийДень = ТекущаяДата() + 60 * 60 * 24;
                   
Запрос = Новый Запрос;
      Запрос.УстановитьПараметр("НачПериода", ?(СледующийДень = Дата(1, 1, 1),'19800101'  , НачалоДня(СледующийДень)));
      Запрос.УстановитьПараметр("КонПериода",?(ДобавитьМесяц(ТекущаяДата(), 12) = Дата(1, 1, 1),'20200101'  , КонецДня(ДобавитьМесяц(ТекущаяДата(), 12))));
         
                           
               Запрос.Текст = "ВЫБРАТЬ 
            |   ЗаказПокупателя.Ссылка КАК Док,
            |   ЗаказПокупателя.ORDERID КАК ORDERID
            |ИЗ
            |   Документ.ЗаказПокупателя КАК ЗаказПокупателя
            |ГДЕ
            |   ЗаказПокупателя.Проведен = ЛОЖЬ
            |   И ЗаказПокупателя.Дата МЕЖДУ &НачПериода И &КонПериода
            |УПОРЯДОЧИТЬ ПО
            |   ЗаказПокупателя.Дата";
                     
            Результат = Запрос.Выполнить();
            Выборка = Результат.Выбрать();
                          Пока Выборка.Следующий() Цикл  // выборка по списку
            

                     Если выборка.ORDERID= лСтрока.ORDERID Тогда
                                 АБ=1;
                                       КонецЕсли;
                                           КонецЦикла;


                  
                                   Если A=1    Тогда
                     
                             
                            иначе     
                               ФормаПоступления.ЗаписатьВФорме(РежимЗаписиДокумента.Запись);

                  ФормаПоступления=Неопределено;
         лЗаказКлиента=Неопределено;

                              КонецЕсли;



Исключение

               ФормаПоступления=Неопределено;
                              
                        КонецПопытки;   
            

            
                                   КонецЕсли;   
         
            

        
               
            
         Если лЗаказКлиента=Неопределено  Тогда
                  
   
            лДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("CLIENTID",лСтрока.CLIENTID);
         
            Если лДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.ПустаяСсылка() Тогда
               Сообщить("Не найден магазин с кодом="+лСтрока.CLIENTID);
               Прервать;
            КонецЕсли;   
            
             //  и  ДокОбъект<>лДоговорКонтрагента
            лЗаказКлиента=НайтиЗаявкуПоID(ДатаДок,лСтрока.ORDERID);
            Если лЗаказКлиента=Неопределено    Тогда
               
   лЗаказКлиента = Документы.ЗаказПокупателя.СоздатьДокумент();
               лЗаказКлиента.Дата = ДатаДок;
               лЗаказКлиента.ДатаОтгрузки = ПолучитьДатуИзСтроки(лСтрока.DELIVERY_DATE);
               лЗаказКлиента.Организация = Организация;
               лЗаказКлиента.Контрагент = лДоговорКонтрагента.Владелец;
               лЗаказКлиента.Грузополучатель= лДоговорКонтрагента.Владелец;                                           
               лЗаказКлиента.ДоговорКонтрагента = лДоговорКонтрагента;
               лЗаказКлиента.ВалютаДокумента = лДоговорКонтрагента.ВалютаВзаиморасчетов;
               лЗаказКлиента.ТипЦен = лДоговорКонтрагента.ТипЦен;
               лЗаказКлиента.УчитыватьНДС = Истина;
               лЗаказКлиента.СуммаВключаетНДС = Истина;
               Курс   = МодульВалютногоУчета.ПолучитьКурсВалюты(лЗаказКлиента.ВалютаДокумента, ДатаДок);
               лЗаказКлиента.КурсВзаиморасчетов      = Курс.Курс;
               лЗаказКлиента.КратностьВзаиморасчетов = Курс.Кратность;
         
            
                           //лЗаказ.ОтражатьВУправленческомУчете = Истина;
               //лЗаказ.ОтражатьВБухгалтерскомУчете = Истина;
               //лЗаказ.ОтражатьВНалоговомУчете = Истина;
               
               лЗаказКлиента.СкладГруппа         = Склад;
               
               лЗаказКлиента.ORDERID =лСтрока.ORDERID;
               
                                   
               
               лЗаказКлиента.Записать();
               
               ФормаПоступления = лЗаказКлиента.ПолучитьФорму();
         Иначе
      
ФормаПоступления = лЗаказКлиента.ПолучитьФорму();
               ФормаПоступления.Контрагент = лДоговорКонтрагента.Владелец;
               ФормаПоступления.ДоговорКонтрагента = лДоговорКонтрагента;
               ФормаПоступления.ВалютаДокумента = лДоговорКонтрагента.ВалютаВзаиморасчетов;
               ФормаПоступления.ТипЦен = лДоговорКонтрагента.ТипЦен;
               ФормаПоступления.СкладГруппа         = Склад;
               
               
               ///////////////////////////////организацция
               ФормаПоступления.Организация = Организация;
               ////////////////////ммгрузополучатель
                ФормаПоступления.Грузополучатель = лДоговорКонтрагента.Владелец;
               
                            //////////////////////
                ////////////////////подразделение
               Выбока = Справочники.Подразделения.НайтиПоКоду("000000007");
                 ФормаПоступления.Подразделение = Выбока;
                
                   ////////////////маршрут
                
                 ПВХ = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Маршрут");
               
   
   Объект = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(лДоговорКонтрагента);

   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ

      |   ЗначенияСвойствОбъектов.Значение

      |ИЗ
      |   РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
      |ГДЕ
      |   ЗначенияСвойствОбъектов.Объект = &Объект
      |   И ЗначенияСвойствОбъектов.Свойство = &Свойство";

   Запрос.УстановитьПараметр("Объект", Объект);
   Запрос.УстановитьПараметр("Свойство", ПВХ);
    




Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл


  // Сообщить("SV: "+Выборка.Значение);
                          Выбока = Справочники.Маршруты.НайтиПоНаименованию( Выборка.Значение);
                 ФормаПоступления.Маршрут = Выбока;
            

              КонецЦикла;   //маршрут         
              /////////////////////////////////Коментарии
                     ТекДата = ТекущаяДата();

                  ФормаПоступления.Комментарий = "№ " +лЗаказКлиента.ORDERID+" "+"Дата Заяв: "+Формат(ТекДата,"ДЛФ=DD")+" Отв:"+лСтрока.SALES_REPID;
                         //////////////////////////Коментарии

               
                  ФормаПоступления.Товары.Очистить();
               
            КонецЕсли;
            ~М2:

                     
            лСтрока.ЗаказКлиента =лЗаказКлиента.Ссылка;
            
            
            
         КонецЕсли;
         
         
         лНомерЗаявки=лСтрока.ORDERID;
         
      
                          
         лСтрокаТовары = ФормаПоступления.Товары.Добавить();
                      
       Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|   Номенклатура.Ссылка
|ИЗ
|   Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|   Номенклатура.Ссылка В ИЕРАРХИИ(&КокаКола)";
ГруппаСправочника = Справочники.Номенклатура.НайтиПоРеквизиту("ЮнимилкКод",лСтрока.PRODUCT_CODE);

Запрос.УстановитьПараметр("КокаКола",ГруппаСправочника );
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

   



             Пока Выборка.Следующий() Цикл

       

         лСпрНом=Справочники.Номенклатура.НайтиПоРеквизиту("ЮнимилкКод",лСтрока.PRODUCT_CODE);
          КонецЦикла;
         Если лСпрНом=Справочники.Номенклатура.ПустаяСсылка() Тогда
            Сообщить("Не найдена номенклатура с кодом="+лСтрока.PRODUCT_CODE);                
            Прервать;
         КонецЕсли;
         лСтрокаТовары.Номенклатура=лСпрНом;
         лСтрокаТовары.ЕдиницаИзмерения = лСпрНом.ЕдиницаХраненияОстатков;
         лСтрокаТовары.Коэффициент=лСпрНом.ЕдиницаХраненияОстатков.Коэффициент;
         //лСтрокаТовары.Количество = лКолВоМест*Фасовка+лКолВоШт;
         Если  лСтрока.QTY_BOTTLES ="0" Тогда
            лСтрокаТовары.ПроцентСкидкиНаценки=100;
            лСтрокаТовары.Количество=лСтрока.FREE_CASE*лСпрНом.ЕдиницаДляОтчетов.Коэффициент;
         Иначе
            лСтрокаТовары.Количество=лСтрока.QTY_BOTTLES;
         конецесли;
         
         ФлагУчитыватьНДС=  Истина;                               
         Если ФлагУчитыватьНДС Тогда
            лСтрокаТовары.СтавкаНДС = лСпрНом.СтавкаНДС;
         КонецЕсли;
         
         Если  лСтрока.FREE_CASE <>"0" и лСтрока.QTY_CASES <>"0" Тогда
            
            лСтрокаТовары = ФормаПоступления.Товары.Добавить();
            лСтрокаТовары.Номенклатура=лСпрНом;
            лСтрокаТовары.ЕдиницаИзмерения = лСпрНом.ЕдиницаХраненияОстатков;
            лСтрокаТовары.Коэффициент=лСпрНом.ЕдиницаХраненияОстатков.Коэффициент;
            лСтрокаТовары.ПроцентСкидкиНаценки=100;
            лСтрокаТовары.Количество=лСтрока.FREE_CASE*лСпрНом.ЕдиницаДляОтчетов.Коэффициент;
                Если ФлагУчитыватьНДС Тогда
               лСтрокаТовары.СтавкаНДС = лСпрНом.СтавкаНДС;   
            КонецЕсли;
КонецЕсли;


           
              КонецЕсли;
                                  КонецЦикла;

            
           
                 КонецЦикла;


   
   
   
         Если ФормаПоступления<>Неопределено Тогда
                                   
      СтруктураШапкиДокумента = Новый Структура("Контрагент, ТипЦен, ДоговорКонтрагента, ДатаДокумента, ВалютаДокумента, УчитыватьНДС, СуммаВключаетНДС",
      лЗаказКлиента.Контрагент, лЗаказКлиента.ТипЦен, лЗаказКлиента.ДоговорКонтрагента, лЗаказКлиента.Дата,лЗаказКлиента.ВалютаДокумента, лЗаказКлиента.УчитыватьНДС,лЗаказКлиента.СуммаВключаетНДС);
      
                        
      Для Каждого лСтрокаПересчет из  ФормаПоступления.Товары Цикл
                                                 
         ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(лСтрокаПересчет,ФормаПоступления.ЭтаФорма, СтруктураШапкиДокумента, лЗаказКлиента.ВалютаДокумента);
         ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(лСтрокаПересчет, ФормаПоступления.ЭтаФорма);
         ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(лСтрокаПересчет, ФормаПоступления.ЭтаФорма);
         ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(лСтрокаПересчет, ФормаПоступления.ЭтаФорма);
            
                      
                  
                  
      
         
      КонецЦикла;              
                   

      // Теперь пробуем записать документ
      Попытка
                                                             
                                           
                A=0;
                   
Запрос = Новый Запрос;
      Запрос.УстановитьПараметр("НачПериода", ?(ДатаДок = Дата(1, 1, 1),'19800101'  , НачалоДня(ДатаДок)));
      Запрос.УстановитьПараметр("КонПериода",?(ДатаДок = Дата(1, 1, 1),'20200101'  , КонецДня(ДатаДок+7)));
         
      
      
               Запрос.Текст = "ВЫБРАТЬ 
            |   ЗаказПокупателя.Ссылка КАК Док,
            |   ЗаказПокупателя.ORDERID КАК ORDERID
            |ИЗ
            |   Документ.ЗаказПокупателя КАК ЗаказПокупателя
            |ГДЕ
            |   ЗаказПокупателя.Проведен = ИСТИНА
            |   И ЗаказПокупателя.Дата МЕЖДУ &НачПериода И &КонПериода
            |УПОРЯДОЧИТЬ ПО
            |   ЗаказПокупателя.Дата";
                     
            Результат = Запрос.Выполнить();
            Выборка = Результат.Выбрать();
                        
                  Пока Выборка.Следующий() Цикл  // выборка по списку
                     Если выборка.ORDERID= лСтрока.ORDERID Тогда
                                 A=1;
                                       КонецЕсли;

                КонецЦикла;   

   
                        

                  
                                   Если A=1    Тогда
                     
                             
                            иначе     
                               ФормаПоступления.ЗаписатьВФорме(РежимЗаписиДокумента.Запись);

                  ФормаПоступления=Неопределено;
         лЗаказКлиента=Неопределено;

                              КонецЕсли;
               

                                        
   
                  Исключение
                  
                          

         Сообщить(ОписаниеОшибки());
         ФормаПоступления=Неопределено;
         

      КонецПопытки;   
                
               
               
            
   
            

   КонецЕсли;   

         

LexaK

Все очень понятно из вашего кода!!! Для запрещения перепроведения (и отмены проведения)  в модуле документа, в событии ПередЗаписью, добавляете такой код

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если Ссылка.Проведен Тогда
Отказ = Истина;
Возврат;
КонецЕсли

...
если помогло нажмите: Спасибо!

Klyacksa

Geenij, уважайте форумчан, никто не будет читать такое полотно, еще и без оформления.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск