Имя: Пароль:
1C
1С v8
Смена статусов для нескольких документов
0 Sergio447
 
31.12.22
01:45
Здравствуйте!

Есть обработка, в которой выбираю несколько документов и устанавливаю им статус.
По кнопке изменить, хотелось бы чтобы статус записался для всех выбранных документов. Подскажите пожалуйста, как это сделать, не совсем понимаю.

Скрин обработки: https://cloud.mail.ru/public/aW6c/3GHe3nBuz


И сам код:

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

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

КонецПроцедуры
1 ejikbeznojek
 
31.12.22
14:31
Запрос по тч товары переделай на запрос по документам.
В параметр ссылка нужно указать что-то вроде массива или списка документов.
После результатзапроса.выбрать напиши цикл.
Пока выборкадетальныезапичи.следующий() цикл
2 ejikbeznojek
 
31.12.22
14:32
П1 это я не туда посмотрел.
3 Sergio447
 
31.12.22
19:03
(2) интересно, но не понятно)
4 vicof
 
01.01.23
14:26
Может уже пора почитать книжки, статью и советы из прошлой темы?
5 Sergio447
 
02.01.23
00:21
(4) ага, вот если это один документ в виде объекта, то код будет такой и он отрабатывает:

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

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

но мне нужно чтобы этот код отработал с типом список значений.
6 vicof
 
02.01.23
00:50
У тебя не список значений в (0) на картинке
7 Мимохожий Однако
 
02.01.23
07:58
(3) Пока Выборка...Следующий() Цикл
ДокОбъект = выборка..ссылка.ПолучитьОбъект();
    ДокОбъект.Статус = Объект.Статус;
    ДокОбъект.Записать();
КонецЦикла;
8 Sergio447
 
02.01.23
21:58
(7) Сделал так и не работает:

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

&НаСервере
Процедура ИзменениеСтатусаНаСервере()
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриходныйОрдерНаТовары.Ссылка КАК Ссылка,
        |    ПриходныйОрдерНаТовары.Статус КАК Статус
        |ИЗ
        |    Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
        |ГДЕ
        |    ПриходныйОрдерНаТовары.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка",Документ.ДоступныеЗначения);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл        
        ДокОбъект = Объект.Документ.ПолучитьОбъект();
           ДокОбъект.Статус = Объект.Статус;
                ДокОбъект.Записать();
    КонецЦикла;
        
КонецПроцедуры
9 AAA
 
03.01.23
07:40
(8)ДокОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
10 D_E_S_131
 
03.01.23
14:39
Запрос, с условием "=" на ссылку вернет только один документ. Для сравнения со списком значений или массивом, нужно использовать условие "В()".
11 Sergio447
 
03.01.23
21:26
(9) так не работает, после ВыборкаДетальныеЗаписи доступны только функции, а не ссылка
12 Sergio447
 
03.01.23
21:30
(10) изменил в запросе на оператор В, но толку мало ничего не поменялось
13 AAA
 
04.01.23
03:34
а зачем вообще запрос, если уже есть выбранные документы?
14 Мимохожий Однако
 
04.01.23
06:33
(11) Стесняюсь спросить. Отладчиком смотрел?
15 Sergio447
 
05.01.23
00:40
(14) да, вот здесь ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); почему-то ошибка доступа
16 AAA
 
05.01.23
08:00
Отладьте сначала саму выборку с выводом ссылок с помощью Сообщить()
Потом решайте вторую часть - изменение статусов
И еще раз - зачем нужен запрос, если все уже есть в списке. Это такая же выборка. Перебирайте список, получайте объекты и меняйте статусы
17 Мимохожий Однако
 
05.01.23
09:40
(15) Если делаешь запрос к одному документу, то проще использовать метод ссылка.ПолучитьОбъект()
PS. Информацию выдаешь кусками и без подробностей. Так дело не пойдёт
18 Sergio447
 
05.01.23
20:06
(16) Вот первая часть которая работает и выводить в Сообщить, все документы указанные в списке значений:


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

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

КонецПроцедуры
19 Мимохожий Однако
 
05.01.23
20:18
(18) Достаточно при данном запросе
Сообщить(ссылка)

))
20 Мимохожий Однако
 
05.01.23
20:18
(19) ссылка = Документ.ДоступныеЗначения
21 Мимохожий Однако
 
05.01.23
20:19
(20) Ох уж эти праздники....
Сообщить (Документ)
22 Sergio447
 
05.01.23
20:23
(21) Все я нашел в чем дело) просто нужно Документ указать без Доступных значений)
23 Sergio447
 
05.01.23
20:23
(21) И не говорите, до сих пор голова гудит)))
AdBlock убивает бесплатный контент. 1Сергей