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

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

Автор Geenij, 26 июн 2014, 11:27

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

Geenij

Процедура КнопкаСгенерироватьЗаявкиНажатие(Элемент)
   // Вставить содержимое обработчика.
   УстановитьПривилегированныйРежим(Истина);
 

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

            |ИЗ
            |   Документ.ЗаказПокупателя КАК ЗаказПокупателя
            |ГДЕ
            |   ЗаказПокупателя.Проведен = ИСТИНА
            |   И ЗаказПокупателя.Дата МЕЖДУ &НачПериода И &КонПериода
            |УПОРЯДОЧИТЬ ПО
            |   ЗаказПокупателя.Дата";
                     
            Результат = Запрос.Выполнить();
            Выборка = Результат.Выбрать();
            
            
            
            Пока Выборка.Следующий() Цикл  // выборка по списку
                           
               ОбработкаПрерыванияПользователя();   
               состояние("Обработка: " + выборка.Док);
               
               ДокОбъект = выборка.док.ПолучитьОбъект();
            КонецЦикла;         
   
            лДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("CLIENTID",лСтрока.CLIENTID);
         
            Если лДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.ПустаяСсылка() Тогда
               Сообщить("Не найден магазин с кодом="+лСтрока.CLIENTID);
               Прервать;
            КонецЕсли;   
            
                         //  и  ДокОбъект<>лДоговорКонтрагента
            лЗаказКлиента=НайтиЗаявкуПоID(ДатаДок,лСтрока.ORDERID);
            
            Если лЗаказКлиента=Неопределено    Тогда
               лЗаказКлиента = Документы.ЗаказПокупателя.СоздатьДокумент();
                    
               лЗаказКлиента.Дата = ДатаДок;
               лЗаказКлиента.ДатаОтгрузки = ПолучитьДатуИзСтроки(лСтрока.DELIVERY_DATE);
               лЗаказКлиента.Организация = Организация;
            //   лЗаказКлиента.Ответственный
            //   лЗаказКлиента.Ответственный = ПараметрыСеанса.ТекущийПользователь;
               // лЗаказКлиента.Подразделение.Наименование =   "1 Дистрибьюция";
               лЗаказКлиента.Контрагент = лДоговорКонтрагента.Владелец;
               лЗаказКлиента.Грузополучатель= лДоговорКонтрагента.Владелец;
                                                                 
               лЗаказКлиента.ДоговорКонтрагента = лДоговорКонтрагента;
               лЗаказКлиента.ВалютаДокумента = лДоговорКонтрагента.ВалютаВзаиморасчетов;
               лЗаказКлиента.ТипЦен = лДоговорКонтрагента.ТипЦен;
               лЗаказКлиента.УчитыватьНДС = Истина;
               лЗаказКлиента.СуммаВключаетНДС = Истина;
               Курс   = МодульВалютногоУчета.ПолучитьКурсВалюты(лЗаказКлиента.ВалютаДокумента, ДатаДок);
               лЗаказКлиента.КурсВзаиморасчетов      = Курс.Курс;
               лЗаказКлиента.КратностьВзаиморасчетов = Курс.Кратность;
         
            
                           //лЗаказ.ОтражатьВУправленческомУчете = Истина;
               //лЗаказ.ОтражатьВБухгалтерскомУчете = Истина;
               //лЗаказ.ОтражатьВНалоговомУчете = Истина;
               
               лЗаказКлиента.СкладГруппа         = Склад;
               
               лЗаказКлиента.ORDERID =лСтрока.ORDERID;
               лЗаказКлиента.Записать();
               ФормаПоступления = лЗаказКлиента.ПолучитьФорму();
               
            Иначе
               //лЗаказКлиента1 = Документы.ЗаказПокупателя.ПолучитьОбъект();
               //Если лЗаказКлиента.Проведен = 1 Тогда   
               //   Перейти ~М2;
               //КонецЕсли;
                   
   //Запрос = Новый Запрос("ВЫБРАТЬ
   //                 |   ДоговорКонтрагента.Ссылка,
   //                 |   ДоговорКонтрагента.CLIENTID,
   //                 |   ДоговорКонтрагента.Наименование,
   //                 |   ДоговорКонтрагента.Маршрут,
   //                 |ИЗ
   //                 |   Справочник.ДоговорКонтрагента КАК ДоговорКонтрагента
   //                 |ГДЕ
   //                 |   ДоговорКонтрагента.Наименование
                      
      //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
   



//

//    Код_агента = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Код_агента");
//   
//      Объект = Справочники.ФизическиеЛица.НайтиПоНаименованию("Агеева Марина Николаевна");

//   Запрос = Новый Запрос;
//   Запрос.Текст =
//      "ВЫБРАТЬ
//      |   ЗначенияСвойствОбъектов.Значение
//      |ИЗ
//      |   РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
//      |ГДЕ
//      |   ЗначенияСвойствОыбъектов.Объект = &Объект
//      |   И ЗначенияСвойствОбъектов.Свойство = &Свойство";

//   Запрос.УстановитьПараметр("Объект", Объект);
//   Запрос.УстановитьПараметр("Свойство", Код_агента);


//Выборка = Запрос.Выполнить().Выбрать();
//Пока Выборка.Следующий() Цикл
// 
//   Сообщить("SV-ag: "+Выборка.Значение);
//КонецЦикла;   





               ФормаПоступления = лЗаказКлиента.ПолучитьФорму();
               ФормаПоступления.Контрагент = лДоговорКонтрагента.Владелец;
               ФормаПоступления.ДоговорКонтрагента = лДоговорКонтрагента;
               ФормаПоступления.ВалютаДокумента = лДоговорКонтрагента.ВалютаВзаиморасчетов;
               ФормаПоступления.ТипЦен = лДоговорКонтрагента.ТипЦен;
               ФормаПоступления.СкладГруппа         = Склад;
                              ФормаПоступления.Организация = Организация;
                ФормаПоступления.Грузополучатель = лДоговорКонтрагента.Владелец;
                             Выбока = Справочники.Подразделения.НайтиПоКоду("000000007");
                 ФормаПоступления.Подразделение = Выбока;
                               ПВХ = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Маршрут");
                   
      //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
   Объект = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(лДоговорКонтрагента);

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

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

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

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




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


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

КонецЦикла;   
                      
         
                                           

                  
                  



//ФормаПоступления.Маршрут = "";

                       ТекДата = ТекущаяДата();

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

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

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

   



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

       

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


            
         КонецЕсли;

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

                  
         Если лСтрокаПересчет.Цена = 0 Тогда
            Сообщить("Не удалось найти цену поставщика для номенклатуры="+лСтрокаПересчет.Номенклатура);
         КонецЕсли;   
         
      КонецЦикла;   
      
      // Теперь пробуем записать документ            
      Попытка
   

         ФормаПоступления.ЗаписатьВФорме(РежимЗаписиДокумента.Запись);
         ФормаПоступления=Неопределено;
         лЗаказКлиента=Неопределено;
      Исключение
         Сообщить(ОписаниеОшибки());
         ФормаПоступления=Неопределено;
      КонецПопытки;   

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

Теги:

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

Рейтинг@Mail.ru

Поиск