Вход | Регистрация
    1  2   

Кнопка "Проверка статуса документов" в самописной конфигурации

Кнопка "Проверка статуса документов" в самописной конфигурации
Я
   Alexandt
 
05.09.21 - 21:42
Всем привет. Скажу сразу, я совсем новенький, так что сразу извиняюсь, если где-то сильно тупить буду. Прошу у вас помощи вот с таким заданием: есть пустая база,с одним документом, создано в целях тренировки, мне необходимо создать механизм проверки документов с тремя статусами, "Проверен", "Не проверен" и "На повторной проверке", которые берутся из перечисления.
Так же создан регистр сведений, в котором есть Измерение с ссылкой на документ, ресурсом "Статус", тип у которого ссылка на перечисление и реквизитами "Проверен"( ссылка на справочник Пользователи), Дата Проверки ( Тип "Дата"), Изменил( справочник.Пользователи) и Дата Изменения( Дата). Суть в том, что пользователь проверяет документ, нажимает на кнопку проверки и должна идти запись в регистр с правильным статусом, т.е. от проведения документа не зависит.
Только созданный документ попадает в регистр со статусом "Не проверен", при нажатии на кнопку должен быть статус "Проверен", а после ее снятия статус "К повторной проверке"
У меня было сделано так, что было 2 статуса проверки "Проверен" и "Не проверен", записи шли, но после проведения документа. Сейчас же появилось третье значение измерения "К повторной проверке"( После снятия кнопки, ставится этот статус) и задача записывать этот статус сразу после нажатия на кнопку, а не после проведения документа. Буду очень признателен, если кто поможет!

Код скидываю ниже:

Процедура ОбработкаПроведения(Документ, СтатусПроверки, ЭтоИзменениеДокумента = Истина) Экспорт
НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗа писей(); // запись документов в регистр сведений
НаборЗаписей.Отбор.Документ.Установить(Документ);
//НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Запись = НаборЗаписей.Добавить();
Иначе //запись уже существует
Запись = НаборЗаписей[0];
КонецЕсли;

Запись.Документ = Документ;
Запись.СтатусПроверки = СтатусПроверки;
ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнф ормационнойБазы.ТекущийПользователь().Имя);
Запись.Проверил = ТекущийПользователь;
Запись.ДатаПроверки = ТекущаяДатаСеанса();
//ЭтоИзменениеДокумента =
//Если ЭтоИзменениеДокумента Тогда
Запись.Изменил = ТекущийПользователь;
Запись.ДатаИзменения = ТекущаяДатаСеанса();
//КонецЕсли;

НаборЗаписей.Записать();

КонецПроцедуры


Модуль формы

&НаКлиенте
Процедура ИзменениеСтатусаПроверкиДокумента(Команда)

Если ЭтаФорма.СтатусДокумента = Истина Тогда //обработчик событий кнопки
ЭтаФорма.СтатусДокумента = Ложь ;
ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь Тогда
ЭтаФорма.СтатусДокумента = Истина ;
КонецЕсли;


ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = ЭтаФорма.СтатусДокумента; //Показываем состояние кнопки на декорации форм
Если ЭтаФорма.СтатусДокумента = Истина Тогда
ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь Тогда
ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
КонецЕсли;

//Делаем кнопку нажатой и не нажатой
Элементы.ИзменениеСтатусаПроверкиДокумента.Пометка = НЕ Элементы.ИзменениеСтатусаПроверкиДокумента.Пометка
КонецПроцедуры



&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
//в обработчике ПередЗаписьюНаСервере в параметре ТекущийОбъект
//находится сам прикладной объект, а не данные формы.
//Соответственно доступны и ДополнительныеСвойства и
//экспортная переменная модуля объекта
ТекущийОбъект.ДополнительныеСвойства.Вставить("СтатусДокумен та",СтатусДокумента);

КонецПроцедуры

&НаСервере
Функция ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Экспорт

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЛП_СтатусыПроверкиДокументов.СтатусПроверки КАК СтатусПроверки
|ИЗ
| РегистрСведений.ЛП_СтатусыПроверкиДокументов КАК ЛП_СтатусыПроверкиДокументов
|ГДЕ
| ЛП_СтатусыПроверкиДокументов.Документ = &Документ";

Запрос.УстановитьПараметр("Документ", СтатусДокумента);

РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Ложь;
КонецЕсли;

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

Если ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен Тогда
Возврат Ложь;
Иначе
Возврат Истина;

КонецЕсли;

КонецФункции
   МимохожийОднако
 
1 - 05.09.21 - 22:11
Не надо запись в регистр привязывать к проведению документа. Для чего хранишь в регистре историю изменения статусов?
   Alexandt
 
2 - 05.09.21 - 22:14
Так по заданию надо. Регистр независимый, не подчиненный регистратору. Я, если честно, мало чего понимаю, только учусь
   hhhh
 
3 - 06.09.21 - 08:41
(2) "СтатусДокумен та" зачем-то пробел у тебя внутри слова
   Alexandt
 
4 - 06.09.21 - 08:48
Скопировалось неправильно почему-то, в модуле объекта все без пробелов
   Alexandt
 
5 - 06.09.21 - 09:21
Обработчик кнопки на модуле формы:
&НаКлиенте
Процедура ИзменениеСтатусаПроверкиДокумента(Команда)
    
    Если  Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          //обработчик событий кнопки        ЭтаФорма.СтатусДокумента = Ложь ;

    Иначе
        ЭтаФорма.СтатусДокумента = Истина ;
    КонецЕсли;
    Если    ЭтаФорма.СтатусДокумента = Истина Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
    ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
    КонецЕсли;
            
     Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка;  //Делаем кнопку нажатой и не нажатой

     
    Если СтатусДокумента = Истина И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          
        СтатусПроверки = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
        ИначеЕсли СтатусДокумента = Ложь  И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        СтатусПроверки = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");
        ИначеЕсли СтатусДокумента = Истина И Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда
        СтатусПроверки = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
        ИначеЕсли  СтатусДокумента = Неопределено И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        СтатусПроверки = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");
    КонецЕсли;

Модуль объекта документа:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) 
    
    НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();// запись документов в регистр сведений

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

    Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);

    НоваяЗапись.Проверил = Пользователь;
    НоваяЗапись.ДатаПроверки = ТекущаяДатаСеанса();
    НоваяЗапись.Изменил = Пользователь; 
       
    НоваяЗапись.ДатаИзменения = ТекущаяДатаСеанса();
 
    НаборЗаписей.Записать(Истина);
 
КонецПроцедуры

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



Так более понятно должно быть, надеюсь. Повторюсь, что все работало до того, как появился третий статус "К повторной проверке" и необходимость записи статуса в регистр еще до проведения документа. Сейчас при нажатии кнопки запись не идет, а после проведения документа в регистре отображается только статус "Не проверен". Извините, если криво объясняю, просто плохо разбираюсь еще.
   hhhh
 
6 - 06.09.21 - 09:22
ЭтаФорма.СтатусДокумента = Ложь ;

надо наверно СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен  или Проверен.

зачем вы истина -ложь туда пишете?
   Alexandt
 
7 - 06.09.21 - 09:36
Исправил, спасибо. Но все равно после проведения документа запись в регистр идет с пустым статусом, т.е. ничего в статусе документа не отображается. После нажатия на кнопку так же ничего не меняется и лишь после 3 нажатия появляется статус "Не проверен"
   Alexandt
 
8 - 07.09.21 - 13:08
Так и не смог разобраться. Код изменил, но все равно запись в регистр неправильно идет. Отображается только статус "Не проверен", а вместо "К повторной проверке" или "Проверен" пустая строка.
Скину код, может кто поймет, в чем дело. Сначала модуль формы:
&НаКлиенте
Процедура ИзменениеСтатусаПроверкиДокумента(Команда) 
        
    Если  Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          //обработчик событий кнопки

        ЭтаФорма.СтатусДокумента = Ложь ;
    Иначе
        ЭтаФорма.СтатусДокумента = Истина ;
    КонецЕсли;
    
    Если    ЭтаФорма.СтатусДокумента = Истина Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
    ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
    КонецЕсли;
            
     Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка;  //Делаем кнопку нажатой и не нажатой

  
     Если СтатусДокумента = Истина И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          
        СтатусПроверки = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
        ИначеЕсли СтатусДокумента = Ложь  И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        СтатусПроверки = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");                                         
        ИначеЕсли СтатусДокумента = Истина И Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда
        СтатусПроверки = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
        ИначеЕсли  СтатусДокумента = Неопределено И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        СтатусПроверки = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");
    КонецЕсли;
  // Состояние статуса при открытии документа - СтатусДокумента = Истина/Ложь   ???

  // Состояние кнопки СтатусПроверки = Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка( кнопка нажата) и НЕ Пометка

  
 КонецПроцедуры

&НаСервере
Процедура ЗаписьВРегистр(Статус)

    СписокСтрок = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();
    СписокСтрок.Отбор.Регистратор.Значение = Объект.Ссылка;
    СписокСтрок.Отбор.Регистратор.Использование = Истина;
    СписокСтрок.Прочитать();
    Для каждого Строчка из СписокСтрок Цикл
    Строчка.Статус= Статус;
    КонецЦикла;
    СписокСтрок.Записать();
    
КонецПроцедуры

&НаСервере
Функция ОпределитьСтатус()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СтатусыПроверкиДокументов.Статус КАК статус
    |ИЗ
    | РегистрСведений.СтатусыПроверкиДокументов КАК СтатусыПроверкиДокументов
    |ГДЕ
    | СтатусыПроверкиДокументов.ДокументСсылка= &документ";

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

    Если Результат.Пустой() Тогда
    СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    Иначе
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    СтатусДокумента = ВыборкаДетальныеЗаписи.Статус;
    КонецЦикла;
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(СтатусДокумента) Тогда
    СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    КонецЕсли;

    Если СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен Тогда
    СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПроверке;
    КонецЕсли;

    Если СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПроверке Тогда
    СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке;
    КонецЕсли;

    Возврат СтатусДокумента;

КонецФункции
                                     
 
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    //в обработчике ПередЗаписьюНаСервере в параметре ТекущийОбъект 

    //находится сам прикладной объект, а не данные формы. 

    //Соответственно доступны и ДополнительныеСвойства и 

    //экспортная переменная модуля объекта

    ТекущийОбъект.ДополнительныеСвойства.Вставить("СтатусДокумента",СтатусДокумента);
    
    
КонецПроцедуры


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

    ИначеЕсли ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен  Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
        ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен ;                                                                     
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Истина;
        //СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке = Истина;


    КонецЕсли;    
    
    Если  НЕ РольДоступна("ЛП_ИзменениеСтатусыПроверкиДокументов") Тогда
    Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Доступность = Ложь;

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





Затем модуль объекта документа
Процедура ОбработкаПроведения(Отказ, РежимПроведения) 
    
    НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();// запись документов в регистр сведений

    
    //НаборЗаписей.Прочитать();

    
    //НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);

    НаборЗаписей.Отбор.Документ.Установить(Ссылка);
    НоваяЗапись = НаборЗаписей.Добавить();
    
         
    НоваяЗапись.Документ = Ссылка;
    //СтатусДокумента = Ложь;

    
    Если ДополнительныеСвойства.Свойство("СтатусДокумента") Тогда
        РеквизитФормы = ДополнительныеСвойства.СтатусДокумента;
        Сообщить("Проведение: " + РеквизитФормы);
    КонецЕсли;
    
         
    //Если РеквизитФормы = Истина  Тогда                                                             

    //НоваяЗапись.СтатусПроверки  = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен = Истина ИЛИ  

    //НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке = Истина;

    //Иначе    

    //    НоваяЗапись.СтатусПроверки  = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен; 

    //КонецЕсли;

    ////

    
    
    Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);

    НоваяЗапись.Проверил = Пользователь;
    НоваяЗапись.ДатаПроверки = ТекущаяДатаСеанса();
    НоваяЗапись.Изменил = Пользователь; 
       
    НоваяЗапись.ДатаИзменения = ТекущаяДатаСеанса();
 
    НаборЗаписей.Записать(Истина);
 
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
    НаборЗаписей =РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Документ.Установить(Ссылка);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();
    
    Если НЕ РольДоступна("ЛП_ИзменениеСтатусыПроверкиДокументов") Тогда
        Если Документы.ПеремещениеТоваров = Проведен и (Не Документы.ПеремещениеТоваров.ПометкаУдаления) Тогда
            
            ТолькоПросмотр = Проведен;                    
    КонецЕсли;
    КонецЕсли;
         
КонецПроцедуры
   hhhh
 
9 - 08.09.21 - 10:58
СтатусДокумента и ЭтаФорма.СтатусДокумента - это одна и таже переменная. Что-то у вас тут в эту переменную пишется Истина и тут же пишете туда перечисление. В общем все полностью перепутано, лучше это всё выбросить и написать по-новой со свежей головой.
   AceVi
 
10 - 08.09.21 - 12:54
(0) Сначала ответь на вопрос
1. Задачу нужно решить как угодно или как правильно?(если как угодно то можно и через реквизит на форме документа, если как надо то через объект конфигурации Бизнес -процессы).
2. Изменять статус документа может кто угодно? или есть ответсвенные роли\лица?
   Alexandt
 
11 - 08.09.21 - 13:11
(9) Кстати точно, не замечал этого, спасибо. Сейчас попробую разобраться.
(10) 1. Задачу нужно решить именно через регистр сведений, так в задании написано.
     2. Есть ответственные лица, которые могут менять статус документа,  для этого создана роль, но работает пока не совсем так, как надо. Но отображаться кнопка должна у всех. Те пользователи, у которых есть доступ, должны видеть ее как галку, нажатую или не нажатую. Те, у кого доступа нет, должны видеть картинку открытого замка( если документ не проверен) и как закрытый замок с подсказкой "Документ проверен, изменение невозможно", затем ФИО проверяющего и дату проверки( берется из этого же регистра сведений)
   Kassern
 
12 - 08.09.21 - 13:15
(11) это задание в связке с обучением, или это задача для устройства на работу?
   Alexandt
 
13 - 08.09.21 - 13:17
(12) В связке с обучением. Т.е. я сейчас только обучаюсь, делаю все в пустой базе,тренируюсь, а как сделаю, то этот же механизм реализовать в реальной базе.
   Kassern
 
14 - 08.09.21 - 13:21
(13) а тот кто обучает, разве не давал инфу как это делать, возможно на части было разбиты аспекты. Наверное есть и учебное пособие и видео уроки скорее всего. Просто если тут уже затык, то дальше будет еще хуже. Такие задания лучше пытаться самому решать, если не получается, обратиться к своему наставнику, еще раз почитать литературу, разбить задачу на подзадачи.
   Alexandt
 
15 - 08.09.21 - 13:29
(14) У меня составлено задание, там разбито все на части, но в таком виде что "На формах сделать кнопку в виде галочки, создать перечисление с такими-то значениями, разработать регистр сведений с такой то структурой, создать роль и назначить пользователям, при создании документа проверять наличие данного документа в регистре и если он отсутствует, то записывать данные по документу со статусом Не проверен" и т.д. Читаю книгу "Практическое пособие разработчика", смотрю различные видео но все равно застрял. Пытаюсь сам решить, но я полностью застрял, сижу почти неделю с этим уже. Наставнику постоянно некогда, так что я сам по себе практически, помощи почти не бывает
   Alexandt
 
16 - 08.09.21 - 13:32
Кстати, СтатусДокумента - реквизит на форме документа с типом Булево, в нем храним значение статуса, поэтому Истина или Ложь.
   Kassern
 
17 - 08.09.21 - 14:15
(16) " при нажатии на кнопку должен быть статус "Проверен", а после ее снятия статус "К повторной проверке" " Я правильно понимаю, нажимая на одну и ту же кнопку будет статус меняться между Проверен и К повторной проверке?
   Kassern
 
18 - 08.09.21 - 14:20
(17) делаете кнопочку у документа, в нее пихаете кусок кода, который проверяет текущий статус, если он проверен то к К повторной проверке и наоборот.
Далее что то типа:
МенеджерЗаписиСтатусаДокумента=РегистрыСведений.ТвойРегистр.СоздатьМенеджерЗаписи();
МенеджерЗаписиСтатусаДокумента.Статус=НужныйСтатус;
МенеджерЗаписиСтатусаДокумента.Дата=ТекущаяДата();
МенеджерЗаписиСтатусаДокумента.Пользователь=ПараметрыСеанса.ТекущийПользователь();
МенеджерЗаписиСтатусаДокумента.Документ=Объект.Ссылка;//надо только проверять записан ли документ в базу, если нет, то не давать писать в регистр.

МенеджерЗаписиСтатусаДокумента.Записать();
   Kassern
 
19 - 08.09.21 - 14:22
(18) на форме документа можешь вывести реквизит с текущим статусом, его можешь получать ПриСозданииНаСервере и перезаполнять при нажатии на кнопку смены статуса.
   Alexandt
 
20 - 08.09.21 - 14:22
(17)  Да, все правильно. Еще суть в том, что перезаписывать документ не надо, необходимо сделать так, чтобы при каждом нажатии на кнопке сразу менялся статус документа, без перепроведения.
   Kassern
 
21 - 08.09.21 - 14:23
(20) а тут и нет привязки к проведению. У тебя есть регистр сведений где хранится история по статусам. Ты можешь вывести в Реквизит формы (не путать с реквизитом документа) последний статус, а по кнопке его обновлять и делать новую запись в регистр
   Kassern
 
22 - 08.09.21 - 14:24
(21) проверять есть такая запись, как ты делаешь через набор нет смысла, у тебя каждый раз будет новая строчка создаваться, так как есть реквизит с датой.
   Alexandt
 
23 - 08.09.21 - 14:27
(17) Спасибо, сейчас попробую.
(20) (21) Можно чуть подробнее? Совсем поплыл уже что-то, запутался окончательно
   Kassern
 
24 - 08.09.21 - 14:30
(23) что именно по подробнее? Чем отличается реквизит формы от реквизита документа? Как запросом получить последний статус?
   Alexandt
 
25 - 08.09.21 - 14:36
(24)
У меня уже, вроде, есть такой запрос:
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ЛП_СтатусыПроверкиДокументов.СтатусПроверки КАК СтатусПроверки
        |ИЗ
        |    РегистрСведений.ЛП_СтатусыПроверкиДокументов КАК ЛП_СтатусыПроверкиДокументов
        |ГДЕ
        |    ЛП_СтатусыПроверкиДокументов.Документ = &Документ";
    
    Запрос.УстановитьПараметр("Документ", Объект.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    ВыборкаДетальныеЗаписи.Следующий();
    Если ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Не нажата";
        ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен ;
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Ложь;
        //СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке = Ложь;

    ИначеЕсли ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен  Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
        ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен ;                                                                     
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Истина;
        //СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке = Истина;


    КонецЕсли;    
    
    Если  НЕ РольДоступна("ЛП_ИзменениеСтатусыПроверкиДокументов") Тогда
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Доступность = Ложь;

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

В нем что-то не так?
   Kassern
 
26 - 08.09.21 - 14:38
(25) а теперь своими словами расскажи что твой запрос делает и какую именно запись со статусом ты получаешь при "ВыборкаДетальныеЗаписи.Следующий();". У тебя может быть 20 строк со статусами с разным временем изменения, так какую именно строчку ты получишь?
   Alexandt
 
27 - 08.09.21 - 14:59
Ой, стоп. Он же просто анализирует состоянии кнопки при статусе "проверен" и при статусе "Не проверен", если я правильно понял. А какую запись получаю при "ВыборкаДетальныеЗаписи.Следующий();"уже всё, не понял. У меня каша в голове совсем стала с этими статусами уже просто. Все работало при двух статусах "Проверен" и "Не проверен" и без условия, чтобы статус обновлялся после нажатия кнопки. Но как это все добавилось, то всё, я поплыл совсем
   Kassern
 
28 - 08.09.21 - 15:05
(27) ну вот, погуляй немного, смени обстановку, и если повезет, может к вечеру светлая мысль придет. А по поводу последнего статуса, то в запросе есть возможность сортировки записей. Вместо всяких там бантиков в виде декораций, можно просто заголовок кнопки менять.
   Alexandt
 
29 - 09.09.21 - 10:50
Посидел, попробовал разобраться, все равно не смог. Понимаю, что все перепутано, но разобраться не могу, а время поджимает уже. Ситуация сейчас такая, что запись в регистр идет неправильно, статус отображается неверно. Т.е. при нажатии на кнопку статус "Не проверен" и т.д. В голове каша уже. Можно как-то поэтапно рассказать, как исправить это, чтобы статусы ставились правильно и после нажатия на кнопки, а не после проведения документа? Буду очень благодарен!  
Кусочек кода из (17) написал в обработке кнопки Процедура ИзменениеСтатусаПроверкиДокумента(Команда) после проверки текущего статуса, вышло вот так
Если ЭтаФорма.СтатусДокумента = Истина И Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
     ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
    ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь  И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");                                         
    ИначеЕсли  ЭтаФорма.СтатусДокумента = Неопределено И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");
    КонецЕсли;
    МенеджерЗаписиСтатусаДокумента=РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьМенеджерЗаписи();
    МенеджерЗаписиСтатусаДокумента.СтатусПроверки=ПредопределенноеЗначение("Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен");
    МенеджерЗаписиСтатусаДокумента.Дата=ТекущаяДата();
    МенеджерЗаписиСтатусаДокумента.Пользователь=ПараметрыСеанса.ТекущийПользователь();
    МенеджерЗаписиСтатусаДокумента.Документ=Объект.Ссылка//надо только проверять записан ли документ в базу, если нет, то не давать писать в регистр.

    МенеджерЗаписиСтатусаДокумента.Записать();

Выдает ошибку 

{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(31,33)}: Переменная не определена (РегистрыСведений)
    МенеджерЗаписиСтатусаДокумента=<<?>>РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьМенеджерЗаписи(); (Проверка: Тонкий клиент)
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(34,46)}: Процедура или функция с указанным именем не определена (Пользователь)
    МенеджерЗаписиСтатусаДокумента.Пользователь=<<?>>Пользователь(); (Проверка: Тонкий клиент)
   Kassern
 
30 - 09.09.21 - 10:56
(29) Переменная не определена (РегистрыСведений) на клиенте что ли пытаешься регистр записывать?
 
 
   Kassern
 
31 - 09.09.21 - 10:57
(29) запись объектов должна быть на сервере, создай отдельную процедуру серверную для этого дела
   Kassern
 
32 - 09.09.21 - 10:57
(31) и на будущее смотри методы в синтакс помошнике, там расписана доступность, где можно это дело выполнять
   Alexandt
 
33 - 09.09.21 - 11:06
(30) Добавил в серверную процедуру, ошибок нет, но и ничего не изменилось.
   Kassern
 
34 - 09.09.21 - 11:09
(33) что у тебя за переменная СтатусДокумента? Почему она то Истина то перечисление? Что должно было поменяться? В отладке логика верно отрабатывает в условиях?
   Kassern
 
35 - 09.09.21 - 11:12
(33) "Только созданный документ попадает в регистр со статусом "Не проверен"" где это у тебя отрабатывается?
У тебя должна быть одна процедура которая пишет статусы в регистр, в эту процедуру ты передаешь параметром нужный статус. При создании один статус, при нажатии на кнопку - другой.
   Alexandt
 
36 - 09.09.21 - 11:14
(34) СтатусДокумента - реквизит формы с типом Булево, но на саму форму он не выведен. Смысл его был в хранении статуса документа, но на то время еще было всего 2 статуса, без "КПовторнойПроверке. Почему то истина, то перечисление, я уже сам не понимаю.  Истину или ложь ставил когда было всего 2 статуса, потом начал пробовать добавить третий, где-то прочитал, что надо ставить перечисление и в итоге сам запутался, что надо ставить.  В отладке я еще не разобрался, посмотрел вчера видео, но так и не понял в итоге, как с ней работать.
   Alexandt
 
37 - 09.09.21 - 11:18
(35) Отрабатывается в Процедура ИзменениеСтатусаПроверкиДокумента(Команда) , вроде как...
Я так понимаю, что тут

Если ЭтаФорма.СтатусДокумента = Истина И Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
     ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
    ИначеЕсли ЭтаФорма.СтатусДокумента = Ложь  И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");                                         
    ИначеЕсли  ЭтаФорма.СтатусДокумента = Неопределено И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");
    КонецЕсли;
   Alexandt
 
38 - 09.09.21 - 11:20
Хотя у меня это же и в Процедура ОбработкаПроведения(Отказ, РежимПроведения), где идет запись документа в регистр сведений
   Alexandt
 
39 - 09.09.21 - 11:21
(38)
Если ДополнительныеСвойства.Свойство("СтатусДокумента") Тогда
        РеквизитФормы = ДополнительныеСвойства.СтатусДокумента;
        Сообщить("Проведение: " + РеквизитФормы);
    КонецЕсли;
    
    Если РеквизитФормы = Ложь Тогда
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    КонецЕсли;
    Если РеквизитФормы = Истина Тогда 
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен;
    ИначеЕсли РеквизитФормы = Истина Тогда
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке;
    КонецЕсли;
   Kassern
 
40 - 09.09.21 - 11:26
(38) а зачем при проведении запись в регистр делаешь?
   Kassern
 
41 - 09.09.21 - 11:30
(39) начни с малого, пока создай по кнопке на статус, проверь, что при нажатии статус меняется. А потом начинай объединять кнопки с логикой. Добавь реквизит на форму документа, назови его типа "статус проверки" с типом перечисления. При открытии документа и при нажатии на кнопочки обращайся к функции получения статуса. В ней сделай запрос к последнему статусу и возвращай его в реквизит формы.
   Kassern
 
42 - 09.09.21 - 11:30
(41) и так по шагам от простого к сложному надеюсь решишь эту простенькую задачку
   Alexandt
 
43 - 09.09.21 - 12:29
(40), (41), (42). Спасибо большое! Попробую сделать.
   Alexandt
 
44 - 13.09.21 - 13:08
До  сих пор мучаюсь с этим заданием, правда отвлекался на другие задания, но все же... Исправил одно и сломал другое. Я добился того, чтобы статус документа менялся с "проверен" на "На повторной проверке", но теперь только созданные документы попадают в регистр сведений с пустым статусом, а надо, чтобы было как раньше, чтобы только что созданный документ попадал в регистр со статусом "Не проверен". Может кто подскажет что?

Вот процедура обработки кнопки, если что:



Процедура ИзменениеСтатусаПроверкиДокумента(Команда) 
    Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка;    
    
    Если  Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда          //обработчик событий кнопки

        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
    ИначеЕсли НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
         ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
    ИначеЕсли  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен"); 
    КонецЕсли;
    
     
    Если ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен") И Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
    ИначеЕсли ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен") И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Не нажата";
    ИначеЕсли ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен") И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");    
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
    ИначеЕсли  ЭтаФорма.СтатусДокумента = Неопределено И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
    КонецЕсли;
   Kassern
 
45 - 13.09.21 - 13:27
(44) чтобы создать запись с документом и статусом, необходимо, чтобы документ был записан в базе. Следовательно, вам нужно записать документ, далее уже создать запись регистр со статусом "не проверен".
   Alexandt
 
46 - 13.09.21 - 13:42
(45) Можно чуть точнее? Я не совсем понимаю, что не так, раньше же так и работало.
   Kassern
 
47 - 13.09.21 - 14:11
(46) вот ты скинул портянку со всякими условиями где меняется декорации и бантики на форме. Как этот кусок кода должен записывать статус "Не проверен"?
   Kassern
 
48 - 13.09.21 - 14:15
(47) ты должен при первой записи документа создать запись в регистр статусов с нужным тебе статусом. Далее тебе надо менять статус по кнопке у записанного документа. При нажатии на кнопку делаешь запись с нужным статусом в регистр (тут уже проводить документ не надо). Где все это у тебя?
   Kassern
 
49 - 13.09.21 - 14:16
(48) все что я вижу, это куча условий и изменение элементов формы. Где при открытии документа у тебя идет проверка текущего статуса и установка декорации под статус?
   Alexandt
 
50 - 13.09.21 - 14:18
(48) Это все в модуле объекта документа
Процедура ОбработкаПроведения(Отказ, РежимПроведения) 
    
    НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();// запись документов в регистр сведений

    //НаборЗаписей.Прочитать();

    НаборЗаписей.Отбор.Документ.Установить(Ссылка);
    НоваяЗапись = НаборЗаписей.Добавить();      
    НоваяЗапись.Документ = Ссылка;
    //СтатусДокумента = Ложь;

    
    Если ДополнительныеСвойства.Свойство("СтатусДокумента") Тогда
        РеквизитФормы = ДополнительныеСвойства.СтатусДокумента;
        Сообщить("Проведение: " + РеквизитФормы);
    КонецЕсли;
    
    Если РеквизитФормы = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен") Тогда
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    ИначеЕсли РеквизитФормы = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен")Тогда 
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен;
    ИначеЕсли РеквизитФормы = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке") Тогда
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке;
    КонецЕсли;
    
    Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
    НоваяЗапись.Проверил = Пользователь;
    НоваяЗапись.ДатаПроверки = ТекущаяДатаСеанса();
    НоваяЗапись.Изменил = Пользователь;    
    НоваяЗапись.ДатаИзменения = ТекущаяДатаСеанса();
    НаборЗаписей.Записать(Истина);
 
КонецПроцедуры

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



Только вот со сменой статуса документа при нажатии на кнопку так и не дошел еще.
   Alexandt
 
51 - 13.09.21 - 14:40
(49)

Проверка текущего статуса и установка декорации под статус в модуле формы
Если ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен") И Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен");
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
    ИначеЕсли ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен") И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка  Тогда          
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Не нажата";
    ИначеЕсли ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен") И  НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен");    
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
    ИначеЕсли  ЭтаФорма.СтатусДокумента = Неопределено И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка И НЕ Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка Тогда
        ЭтаФорма.СтатусДокумента = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке");
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + "Не нажата";
   Kassern
 
52 - 13.09.21 - 15:53
(51) где у тебя запрос на получение текущего статуса?
   Alexandt
 
53 - 13.09.21 - 15:55
(52) Вот он:

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

        Если  НЕ РольДоступна("ЛП_ИзменениеСтатусыПроверкиДокументов") Тогда
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Доступность = Ложь;
    КонецЕсли;
 
КонецПроцедуры
   Kassern
 
54 - 13.09.21 - 15:59
(53) ну вот смотри, у тебя есть табличка:
Док1,НеПроверен,Вася,13:30
Док1,Проверен,Вася,13:32
Док1,НаПовторнуюПроверку,Вася,13:40

Твой запрос какую запись вернет? Где у тебя сортировка?
   Kassern
 
55 - 13.09.21 - 16:04
(53) А что будет, если у тебя нет записей еще с регистром?
 Как минимум у тебя должна быть проверка:
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
тут уже логика
КонецЕсли;
   Alexandt
 
56 - 14.09.21 - 07:28
(54), (55). Спасибо, исправил. Но теперь при создании нового документа в регистре создается запись "<Объект не найден> (34:837b00505680d93711ec15136de6cd3a)".
Видимо затупил, не так исправил

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

        Если  НЕ РольДоступна("ЛП_ИзменениеСтатусыПроверкиДокументов") Тогда
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Доступность = Ложь;
    КонецЕсли;
 
КонецПроцедуры
   МимохожийОднако
 
57 - 14.09.21 - 07:31
(56) Где в приведённом коде процедуры записи в регистр?
   Alexandt
 
58 - 14.09.21 - 07:38
(57) Ой, точно же. Сюда как раз можно кусок кода, который скидывали выше, я так понимаю

МенеджерЗаписиСтатусаДокумента.Статус=НужныйСтатус;
МенеджерЗаписиСтатусаДокумента.Дата=ТекущаяДата();
МенеджерЗаписиСтатусаДокумента.Пользователь=ПараметрыСеанса.ТекущийПользователь();
МенеджерЗаписиСтатусаДокумента.Документ=Объект.Ссылка//надо только проверять записан ли документ в базу, если нет, то не давать писать в регистр.


МенеджерЗаписиСтатусаДокумента.Записать();
   Alexandt
 
59 - 14.09.21 - 07:47
Хотя не, бред какой-то...
   МимохожийОднако
 
60 - 14.09.21 - 07:51
(58) Если Объект.Ссылка=Неопределено Тогда
нахрен бежать отсюда
 
 
   Alexandt
 
61 - 14.09.21 - 08:04
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Если Объект.Ссылка=Неопределено Тогда
        ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    КонецЕсли;
    КонецЕсли;
 
Что-то типа такого? Извиняюсь, что совсем туплю(
   Kassern
 
62 - 14.09.21 - 09:00
(61) я уже не однократно писал тебе, если у тебя сам документ не записан в базу, то нет смысла писать запись в регистр. Следовательно нет смысла нажимать на кнопку смены статуса, если документа еще нет в базе.
   Kassern
 
63 - 14.09.21 - 09:00
(62) вот поэтому у тебя и <Объект не найден> (34:837b00505680d93711ec15136de6cd3a)
   Kassern
 
64 - 14.09.21 - 09:01
(56) А зачем ты упорядочил по возрастанию? Получается ты всегда будешь получать самый первый статус...
   Alexandt
 
65 - 14.09.21 - 09:13
(62) Да, но суть то в том, что только созданный документ должен попадать в регистр со статусом "Не проверен". Этого и хочется добиться, помимо того, чтобы статус менялся после нажатия на кнопку, а не после проведения документа.
(56) Точно, исправил, спасибо
   Kassern
 
66 - 14.09.21 - 09:16
(65) еще раз повторю, созданный документ ни в какой регистр не попадет, потому что его еще нет в базе. У тебя была запись при проведении в регистр, в этот момент документ уже записан в базу в транзакции. А если ты тупо создал документ без записи, и начал тыкать кнопку смена статуса, то лови подобные ошибки
   Kassern
 
67 - 14.09.21 - 09:17
(66) вот тут можешь на схеме глянуть, в какой момент документ записывается в базу
https://infostart.ru/1c/articles/1098803/
   Alexandt
 
68 - 14.09.21 - 09:22
(66) Нет, я просто создавал документ и проводил его.Он есть в регистре, но статус у него "пустой", вместо "Не проверен", который раньше был. Это мне и нужно. Забыл указать, что документ провожу и закрываю.
(67) Сейчас прочту, спасибо
   Kassern
 
69 - 14.09.21 - 09:26
(68) так поставь точку останова в отладке в момент записи в регистр и посмотри что там у тебя.
   Alexandt
 
70 - 14.09.21 - 09:33
(69) Я пробовал, но пока не научился им пользоваться. Смотрел видео, читал статьи, в итоге каша в голове
   Kassern
 
71 - 14.09.21 - 09:42
(70) бяда....тебя не обучили пользоваться отладкой? Если база файловая, то просто запускаешь конфигуратор, ставишь точки в нужных местах кода(F9 на нужной строчке) и запускаешь из конфигуратора отладку (F5). Что в этом сложного? Если база серверная, тогда необходимо в ветке регистра с агентом 1с прописать в конце /debug.
   Alexandt
 
72 - 14.09.21 - 09:46
(71) Нет, меня вообще не обучают, по сути. Я сам пытаюсь во всем разобраться. Прошел курсы по 1с, клюнул на вакансию с "обучением", которого по факту не оказалось. База файловая. Я знаю, как ставить точку, запускать саму отладку, но я не понимаю, что она мне дает, как по ней понять, что у меня не так. Умел бы пользоваться, то да, я бы быстро понял, в чем дело, наверное.
   Kassern
 
73 - 14.09.21 - 10:17
вот поставил ты точку останова, 1ска на нее встала, жмякаешь такой Shift+F9 на выделенный кусок, к примеру на МенеждерРегистра, чтобы посмотреть как он заполнился, либо можешь посмотреть какое условие отрабатывает, можешь воспользоваться табло. В него просто куски кода вставляешь и видишь какой результат выполнения данных кусков на текущей точке останова.
   Alexandt
 
74 - 14.09.21 - 10:18
Теперь понял, спасибо. Попробую сейчас.
   Kassern
 
75 - 14.09.21 - 10:20
(72) лучше конечно тебе книжку какую нить умную по 1с почитать, либо видео уроки грамотные найти. В свое время у меня был здоровый "талмуд" по 1с и серия видео уроков с 9ю заданиями вроде. Месяц полтора и уже более менее начинаешь понимать что такое УФ, клиент-серверное взаимодействие, основные объекты конфигурации, простенькие решения и т.д.
   Alexandt
 
76 - 14.09.21 - 10:25
(75) Я смотрю видео всякие, книги читаю. Проблема в том, что я раньше программирование вообще не изучал и у меня часто каша в голове появляется, т.е. я просто путаюсь. Вот я начинаю что-то делать, вроде мысль в голове появляется, а потом все. Мозг отключается и я перестаю вообще понимать всё
   Alexandt
 
77 - 14.09.21 - 11:05
Так, можно еще раз повторить? Смотрите: Проверка уже созданных и проведенных документов в регистре работает правильно, т.е.  нажимаю на кнопку проверки, появляется статус "Проверен", кнопка имеет вид "нажатой", затем при следующем нажатии появляется статус "На повторной проверке", кнопка имеет вид не нажатой. Все отлично. Далее осталось сделать то, что при создании документа при записи (или проведении) документа проверять наличие данного документа в регистре сведений "ЛП_СтатусыПроверкиДокументов", в случае его отсутствия в регистре, записывать данные по документу со статусом "не проверен". Затем уже сделать так, чтобы статус менялся после каждого нажатия на кнопку, без проведения документа
Вы предложили записать следующий кусок кода в отдельную серверную процедуру на модуле формы, все правильно?

МенеджерЗаписиСтатусаДокумента=РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьМенеджерЗаписи();
МенеджерЗаписиСтатусаДокумента.Статус=Проверен;
МенеджерЗаписиСтатусаДокумента.Дата=ТекущаяДата();
МенеджерЗаписиСтатусаДокумента.Пользователь=ПараметрыСеанса.ТекущийПользователь();
МенеджерЗаписиСтатусаДокумента.Документ=Объект.Ссылка//надо только проверять записан ли документ в базу, если нет, то не давать писать в регистр.

МенеджерЗаписиСтатусаДокумента.Записать();

А затем в запросе, где у меня функция Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)  вставить что-то типа такого и это должно помочь?
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Если Объект.Ссылка=Неопределено Тогда
        ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    КонецЕсли;
    КонецЕсли;
   hhhh
 
78 - 14.09.21 - 11:15
попробуйте Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
   Alexandt
 
79 - 14.09.21 - 11:26
(78) Ура, получилось, спасибо! Написал в конце запроса и все работает. Осталось понять, как сделать так, чтобы статус документа менялся без перепроведения документа, а после нажатия на кнопку.
   Kassern
 
80 - 14.09.21 - 11:28
(77) лучше в модуль объекта документа пихнуть экспортную процедуру записи регистра. Тогда вы сможете без проблем и с формы обращаться к ней и в модуле объекта при проведении обратиться. ПриСозданииНаСервере, вы получаете текущий статус, если он есть то заполняете реквизит формы с перечислением, если записи нет, значит документ новый и ничего заполнять не нужно и писать в регистр тоже. А вот при проведении надо просто проверить также, если записи в регистре нет с документом, то сделать запись со статусом НеПроверен.
(79) Если документ записан в базу, то можно при нажатии на кнопку смены статуса просто делать запись в регистр и обновлять реквизит формы со статусом на форме.
   Alexandt
 
81 - 14.09.21 - 12:21
(80) " делать запись в регистр и обновлять реквизит формы со статусом на форме"
А не подскажете, как это сделать? Я гуглил раньше, были попытки сделать такое, но не вышло
   Kassern
 
82 - 14.09.21 - 12:43
(81)
Процедура ТвояКнопка(Команда)
//Смотришь какой сейчас у тебя статус документа и понимаешь какой тебе нужно установить

ОбновитьСтатусДокумента(НужныйСтатус);
СтатусДокумента=НужныйСтатус//Обновили реквизит формы со статусом на новый.
КонецПроцедуры
   Alexandt
 
83 - 14.09.21 - 13:02
Попробовал, выдает ошибку:

{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(20,3)}: Процедура или функция с указанным именем не определена (ОбновитьСтатусДокумента)
        <<?>>ОбновитьСтатусДокумента(ЭтаФорма.СтатусДокумента.ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке")); (Проверка: Тонкий клиент)
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(26,3)}: Процедура или функция с указанным именем не определена (ОбновитьСтатусДокумента)
        <<?>>ОбновитьСтатусДокумента(ЭтаФорма.СтатусДокумента.ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен")); (Проверка: Тонкий клиент)
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(32,3)}: Процедура или функция с указанным именем не определена (ОбновитьСтатусДокумента)
        <<?>>ОбновитьСтатусДокумента(ЭтаФорма.СтатусДокумента.ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен")); (Проверка: Тонкий клиент
   Kassern
 
84 - 14.09.21 - 13:06
(83) а где у тебя процедура ОбновитьСтатусДокумента?
   Kassern
 
85 - 14.09.21 - 13:06
(84) ее же еще написать надо, запихнуть туда кусочек с записью в регистр а статус из параметра процедуры получать.
   Alexandt
 
86 - 14.09.21 - 14:21
(85) "запихнуть туда кусочек с записью в регистр а статус из параметра процедуры получать."

Кусочек с записью в регистр, это какой? Где мы анализируем статусы документа?

Если ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
        ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен ;                                                                     
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Истина;
    ИначеЕсли ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке  Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Нажата";
        ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке ;                                                                     
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Истина;
    ИначеЕсли ВыборкаДетальныеЗаписи.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен Тогда
        ЭтаФорма.Элементы.ДекорацияСтатус.Заголовок = " Статус проверки " + " Не нажата";
        ЭтаФорма.СтатусДокумента = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен ;
        Элементы.КнопкаИзменениеСтатусаПроверкиДокумента.Пометка = Ложь;
    КонецЕсли;


И из какого параметра процедуры статус получать? Не совсем понял
   Kassern
 
87 - 14.09.21 - 14:28
(86) "кусочек с записью в регистр". Где у тебя кусок кода, где запись в регистр производится? Вот выдели его в отдельную процедуру.
   Kassern
 
88 - 14.09.21 - 14:30
(87) Типа:
Процедура ОбновитьСтатусДокумента(НужныйСтатус)
МенеджерЗаписи=регитсры....
МенеджерЗаписи.Поле1=...
МенеджерЗаписи.Статус=НужныйСтатус;
МенеджерЗаписи.Записать()
КонецПроцедуры
   Alexandt
 
89 - 14.09.21 - 14:51
Что-то типа такого?

&НаСервере
Процедура ОбновитьСтатусДокумента(Проверен,КПовторнойПроверке,НеПроверен)
    НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();// 

    НаборЗаписей.Отбор.Документ.Установить(Ссылка);
    НоваяЗапись = НаборЗаписей.Добавить();      
    НоваяЗапись.Документ = Ссылка;    

    Если ДополнительныеСвойства.Свойство("СтатусДокумента") Тогда
        РеквизитФормы = ДополнительныеСвойства.СтатусДокумента;
        Сообщить("Проведение: " + РеквизитФормы);
    КонецЕсли;
    НоваяЗапись.Статус=Проверен;
    
    НаборЗаписей.Записать(Истина);
    

    
КонецПроцедуры


Тогда ошибки сразу:

{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(41,44)}: Переменная не определена (Ссылка)
    НаборЗаписей.Отбор.Документ.Установить(<<?>>Ссылка); (Проверка: Сервер)
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(43,28)}: Переменная не определена (Ссылка)
    НоваяЗапись.Документ = <<?>>Ссылка;     (Проверка: Сервер)
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(45,10)}: Переменная не определена (ДополнительныеСвойства)
    Если <<?>>ДополнительныеСвойства.Свойство("СтатусДокумента") Тогда (Проверка: Сервер)
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(46,25)}: Переменная не определена (ДополнительныеСвойства)
        РеквизитФормы = <<?>>ДополнительныеСвойства.СтатусДокумента; (Проверка: Сервер)
   Kassern
 
90 - 14.09.21 - 15:06
(89) а зачем предавать 3 статуса в параметрах? Тебе же 1 надо установить, вот какой нужен, тот и передавай.
НаборЗаписей = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей();//
Зачем тебе набор? Я же тебе ранее писал, используй менеджер записи. Набор нужен, когда надо модифицировать запись, а в твоем случае, каждая запись будет уникальной.
"Переменная не определена (Ссылка)" еще бы, Используй Объект.Ссылка.
Смену статуса на форме надо делать только после того как запишешь регистр а не "по серединке" записи.
   Kassern
 
91 - 14.09.21 - 15:07
(90) зачем еще к ДополнительныеСвойства обращаешься я хз. К реквизитам формы ты можешь напрямую обращаться, тупо ТвойРеквизитФормы=НужноеЗаполнение;
   Alexandt
 
92 - 14.09.21 - 15:14
(90) Спасибо, сейчас попробую
(91) К дополнительным свойствам пришла необходимость обращаться тогда, когда не могли из модуля объекта обратиться к модулю формы, если мне не изменяет память. Надо было обратиться как раз к реквизиту "СтатусДокумента", а по другому никак не получалось.
   Kassern
 
93 - 14.09.21 - 15:20
(92) дак не стоит к нему лезти. Текущий статус можно получить просто сделав запрос, у тебя он к тому же есть. Тем более при проведении документа нужно лишь 1 раз запись в регистр сделать, далее вообще не надо. В модуле формы обращайся напрямую к реквизиту формы
   Alexandt
 
94 - 14.09.21 - 15:25
(93) Как-то так?
   Alexandt
 
95 - 14.09.21 - 15:25
&НаСервере
Процедура ОбновитьСтатусДокумента(Проверен);
    МенеджерЗаписи = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьНаборЗаписей(); 
      МенеджерЗаписи.Отбор.Документ.Установить(Объект.Ссылка);
    МенеджерЗаписи = МенеджерЗаписи.Добавить();      
    МенеджерЗаписи.Документ = Объект.Ссылка;        
    МенеджерЗаписи.Записать(Истина);
    
Если СтатусДокумента  Тогда
    РеквизитФормы = Проверен    
КонецЕсли;
    МенеджерЗаписи.Статус = Проверен;
КонецПроцедуры
   Kassern
 
96 - 14.09.21 - 15:27
(95) набор зачем создаешь?
Я же тебе писал выше:
МенеджерЗаписи = РегистрыСведений.ЛП_СтатусыПроверкиДокументов.СоздатьМенеджерЗаписей();
   Kassern
 
97 - 14.09.21 - 15:27
(96) так же тебе необходимо все поля этого менеджера заполнить
   Alexandt
 
98 - 14.09.21 - 15:34
(96) Не уследил, точно же, спасибо.
(97) Это как в самом регистре, типа
Если РеквизитФормы = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.НеПроверен") Тогда
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.НеПроверен;
    ИначеЕсли РеквизитФормы = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.Проверен")Тогда 
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.Проверен;
    ИначеЕсли РеквизитФормы = ПредопределенноеЗначение("Перечисление.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке") Тогда
        НоваяЗапись.СтатусПроверки = Перечисления.ЛП_ЭтапыПроверкиДокументов.КПовторнойПроверке;
    КонецЕсли;
    
    Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
    НоваяЗапись.Проверил = Пользователь;
    НоваяЗапись.ДатаПроверки = ТекущаяДатаСеанса();
    НоваяЗапись.Изменил = Пользователь;    
    НоваяЗапись.ДатаИзменения = ТекущаяДатаСеанса();
    НаборЗаписей.Записать(Истина);


Только вместо НоваяЗапись МенеджерЗаписи?
   Kassern
 
99 - 14.09.21 - 15:35
(98) только вот логику вычисления можешь оставить у себя в кнопке, а в процедуре записи статуса уже нужный статус передавай.
   Kassern
 
100 - 14.09.21 - 15:36
(98) и уже убери это гадость " Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя)" Используй либо Пользователи.ТекущийПользователь(), либо ПараметрыСеанса.ТекущийПользователь().
  1  2   

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.