Смена "Статуса проверки документа" после нажатия на кнопку формы
X

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Показано с 1 по 3 из 3
  1. #1
    Гость форума

    Регистрация
    15.09.2021
    Сообщений
    2
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию Смена "Статуса проверки документа" после нажатия на кнопку формы

    Всем привет. Скажу сразу, я совсем новенький, так что сразу извиняюсь, если где-то сильно тупить буду. Прошу у вас помощи вот с таким заданием: есть пустая база,с одним документом, создано в целях тренировки, мне необходимо создать механизм проверки документов с тремя статусами, "Проверен", "Не проверен" и "На повторной проверке", которые берутся из перечисления. Цель задания учебная, я только учусь, пытаюсь разбираться в программировании.
    Так же создан регистр сведений, в котором есть Измерение с ссылкой на документ, ресурсом "Статус", тип у которого ссылка на перечисление и реквизитами "Проверен"( ссылка на справочник Пользователи), Дата Проверки ( Тип "Дата"), Изменил( справочник.Пользователи) и Дата Изменения( Дата). Суть в том, что пользователь проверяет документ, нажимает на кнопку проверки и должна идти запись в регистр с правильным статусом, т.е. от проведения документа не зависит. Так же есть сама кнопка на форме "ИзменениеСтатусаПроверки� �окумента(Команда)"
    Только созданный документ попадает в регистр со статусом "Не проверен", при нажатии на кнопку должен быть статус "Проверен", а после ее снятия статус "К повторной проверке". Это все сделано. Теперь необходимо, чтобы статус в регистре менялся не при перепроведении документа, а после нажатия на кнопку. Подскажите, пожалуйста, как реализовать это? Скидываю модуль формы документа
    Код:
    &НаКлиенте
    Процедура ИзменениеСтатусаПроверкиДокумента(Команда) 
    	Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка;	
    	
    	Если  Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда           //обработчик событий кнопки
    		//ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
    		ОбновитьСтатусДокумента(ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен"));
    		СтатусДокумента=ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке"); //Обновили реквизит формы со статусом на новый.
    	ИначеЕсли НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
    		 ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
    	ИначеЕсли  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
    		ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен"); 
    	КонецЕсли;
    		 
    	Если ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен") И Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
    		ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
    		ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
    	ИначеЕсли ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен") И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          
    		ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
    		ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Не нажата";
    	ИначеЕсли ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен") И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
    		ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");    
    		ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
    	ИначеЕсли  ЭтаФорма.СтатусДокумента = Неопределено И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
    		ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
    		ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
    	КонецЕсли;
    
    	 Если ЭтаФорма.Открыта() Тогда
      	КонецЕсли;
    	 
    КонецПроцедуры
    
    &НаСервере
    Процедура ОбновитьСтатусДокумента(Проверен);
     	МенеджерЗаписи = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьМенеджерЗаписи(); 
    	//МенеджерЗаписи =  НоваяЗапись.Добавить();      
    	МенеджерЗаписи.Документ = Объект.Ссылка;
    	МенеджерЗаписи.Отбор.Документ.Установить(Объект.Ссылка);
    
       Если СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен") Тогда
            МенеджерЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
        ИначеЕсли СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен")Тогда 
            МенеджерЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен;
        ИначеЕсли СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке") Тогда
            МенеджерЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке;
        КонецЕсли;
    	МенеджерЗаписи.СтатусПроверки = Проверен;
     	Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
        МенеджерЗаписи.Проверил = Пользователь;
        МенеджерЗаписи.ДатаПроверки = ТекущаяДатаСеанса();
        МенеджерЗаписи.Изменил = Пользователь;    
        МенеджерЗаписи.ДатаИзменения = ТекущаяДатаСеанса();
        МенеджерЗаписи.Записать(Истина);
    	
    КонецПроцедуры
    
    &НаСервере
    Процедура ЗаписьВРегистр(Статус)
    
    	СписокСтрок = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();
    	СписокСтрок.Отбор.Регистратор.Значение = Объект.Ссылка;
    	СписокСтрок.Отбор.Регистратор.Использование = Истина;
    	СписокСтрок.Прочитать();
    	Для каждого Строчка Из СписокСтрок Цикл
    	Строчка.Статус= СтатусДокумента;
    	КонецЦикла;
    	СписокСтрок.Записать();
    	
    КонецПроцедуры
    
    &НаСервере
    Функция ОпределитьСтатус()
    
    	Запрос = Новый Запрос;
    	Запрос.Текст =
    	"ВЫБРАТЬ
    	| СтатусыПроверкиДокументов.Статус КАК Статус
    	|ИЗ
    	| РегистрСведений.СтатусыПроверкиДокументов КАК СтатусыПроверкиДокументов
    	|ГДЕ
    	| СтатусыПроверкиДокументов.ДокументСсылка= &Документ";
    
    	Запрос.УстановитьПараметр("Документ", Объект.Ссылка);
    	Результат = Запрос.Выполнить();
    
    	Если Результат.Пустой() Тогда
    		СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    	Иначе
    		ВыборкаДетальныеЗаписи = Результат.Выбрать();
    	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    		СтатусДокумента = ВыборкаДетальныеЗаписи.СтатусДокумента;
    	КонецЦикла;
    	КонецЕсли;
    	Если НЕ ЗначениеЗаполнено(СтатусДокумента) Тогда
    		СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    	КонецЕсли;
    
    	Если СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен Тогда
    		СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке;
    	КонецЕсли;
    
    	Если СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке Тогда
    		СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке;
    	КонецЕсли;
    
    	Возврат СтатусДокумента;
    	
    КонецФункции
                                         
     
    &НаСервере
    Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    	//в обработчике ПередЗаписьюНаСервере в параметре ТекущийОбъект 
    	//находится сам прикладной объект, а не данные формы. 
    	//Соответственно доступны и ДополнительныеСвойства и 
    	//экспортная переменная модуля объекта
    	ТекущийОбъект.ДополнительныеСвойства.Вставить("СтатусДокумента",СтатусДокумента);
    	
    	
    КонецПроцедуры
    
    
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Экспорт
    	
    	Запрос = Новый Запрос;
    	Запрос.Текст = 
    		"ВЫБРАТЬ
    		|	ЛП_СтатусыПроверкиДокументов.СтатусПроверки КАК СтатусПроверки
    		|ИЗ
    		|	РегистрСведений.ЛП_СтатусыПроверкиДокументов КАК ЛП_СтатусыПроверкиДокументов
    		|ГДЕ
    		|	ЛП_СтатусыПроверкиДокументов.Документ = &Документ
    		|
    		|УПОРЯДОЧИТЬ ПО
    		|	ЛП_СтатусыПроверкиДокументов.ДатаПроверки УБЫВ";
    	
    	Запрос.УстановитьПараметр("Документ", Объект.Ссылка);
    	РезультатЗапроса = Запрос.Выполнить();
    	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    	Если Объект.Ссылка=Неопределено Тогда
    		ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    	КонецЕсли;
    	КонецЕсли;
    	Если ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен Тогда
    		ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
    		ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен ;                                                                     
    		Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Истина;
    	ИначеЕсли ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке  Тогда
    		ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
    		ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке ;                                                                     
    		Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Истина;
    	ИначеЕсли ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен Тогда
    		ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Не нажата";
    		ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен ;
    		Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Ложь;
    	КонецЕсли;
    	
    		Если  НЕ РольДоступна("ЛП_ИзменениеСтатусыПроверкиДокументов") Тогда
    		Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Доступность = Ложь;
    	КонецЕсли;
    	Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
    		ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    	КонецЕсли;
    	КонецПроцедуры
    Так же скидываю модуль объекта документа:
    Код HTML:
    Процедура ОбработкаПроведения(Отказ, РежимПроведения) 
    	
    	НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей(); // запись документов в регистр сведений
        НаборЗаписей.Отбор.Документ.Установить(Ссылка);
        НоваяЗапись = НаборЗаписей.Добавить();      
        НоваяЗапись.Документ = Ссылка;	
    
        Если ДополнительныеСвойства.Свойство("СтатусДокумента") Тогда
            РеквизитФормы = ДополнительныеСвойства.СтатусДокумента;
            Сообщить("Проведение: " + РеквизитФормы);
    	КонецЕсли;
    	
    	
    	НоваяЗапись.СтатусПроверки = РеквизитФормы;
    	Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
        НоваяЗапись.Проверил = Пользователь;
    	НоваяЗапись.ДатаПроверки = ТекущаяДатаСеанса();
        НоваяЗапись.Изменил = Пользователь;    
    	НоваяЗапись.ДатаИзменения = ТекущаяДатаСеанса();
        НаборЗаписей.Записать(Истина);
    	
    		
    КонецПроцедуры
    
    Процедура ОбработкаУдаленияПроведения(Отказ)
    	НаборЗаписей =РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();
    	НаборЗаписей.Отбор.Документ.Установить(Ссылка);
    	НаборЗаписей.Прочитать();
    	НаборЗаписей.Очистить();
    	НаборЗаписей.Записать();
    	
    	Если НЕ РольДоступна("ЛП_ИзменениеСтатусыПроверкиДокументов") Тогда
    	Если Документы.ПеремещениеТоваров = Проведен и (Не Документы.ПеремещениеТоваров.ПометкаУдаления) Тогда
    			
    		ТолькоПросмотр = Проведен;                    
    	КонецЕсли;
    	КонецЕсли;
    		                 
    КонецПроцедуры
    
    
    
    
    
    Буду очень благодарен за помощь!

  2. #2
    Модератор
    Аватар для Konor18
    Регистрация
    18.06.2020
    Сообщений
    90
    Сказал(а) спасибо
    30
    Поблагодарили 105 раз(а) в 40 сообщениях

    По умолчанию Re: Смена "Статуса проверки документа" после нажатия на кнопку формы

    Сложно понять, что вы вообще хотите в итоге.
    Расписываете какой-то алгоритм который работает в форме документа, и работает правильно по вашим словам.
    А затем откуда-то появляется проведение документа и всё ломает.
    Так удалите "лишние" строки в процедуре проведения и ... всё.
    А вообще, такой алгоритм, который требуется в разных местах конфигурации лучше выносить в отдельную экспортную процедуру в общих модулях.

  3. #3
    Гость форума

    Регистрация
    15.09.2021
    Сообщений
    2
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию Re: Смена "Статуса проверки документа" после нажатия на кнопку формы

    В итоге мне необходимо сделать так, чтобы статус документа в регистре сведений менялся после нажатия на кнопку, а не после перепроведения документа. Изначально было всего два статуса: "Проверен" и "Не проверен" и не было необходимости в том, чтобы статус перезаписывался после нажатия на кнопку и все это работало. Потом появился третий статус "На повторной проверке" и необходимость в перезаписи статуса при каждом нажатии на кнопку, я стал всё это исправлять и вот в итоге что вышло. Честно говоря, я попросту запутался уже и не могу понять, как все это исправлять. Я понимаю, что какие-то строки тут лишние, но какие именно - не знаю. Я только учусь еще программированию, так что тяжело идет. По заданию в общий модуль и надо будет это все записывать, просто дело в том, что сейчас все делается в пустой базе, так как в тестовой базе слишком много всяких процедур, модулей, я в этом путаюсь и в итоге создал пустую базу, в которую добавил один документ, справочник, регистр сведений и перечисление и кнопку на форму документа. Все это нужно для задания. Еще, конечно, надо с ролями разобраться, разными пиктограммами кнопки для разных пользователей, но это совсем другая история и сначала надо доделать смену статуса в регистре при нажатии на кнопку, а не после перезаписи документа.

Похожие темы

  1. ошибка при открытии документа "Приказ на пересчёт товаров" (Розница 2.2)
    от Alexisonfire в разделе 1С - Предприятие 8.0, 8.1, 8.2, 8.3
    Ответов: 1
    Последнее сообщение: 22.06.2019, 13:21
  2. Запретить кнопку "Записать объект".
    от skillful в разделе 1С - Предприятие 8.0, 8.1, 8.2, 8.3
    Ответов: 7
    Последнее сообщение: 18.04.2019, 02:32
  3. Создал для Документа РТиУ в БП 2.0 обработка табличной части "Товары"
    от Touch_of_soul в разделе 1С - Предприятие 8.0, 8.1, 8.2, 8.3
    Ответов: 0
    Последнее сообщение: 12.07.2016, 16:47

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •