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

Заполнение УПД

Автор Nosferatu112, 22 мар 2023, 17:18

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

Nosferatu112

Всем доброго времени суток, мне нужно на форме списка документа РеализацияТоваровУслуг создать кнопку по нажатию которой все документы с датой > 01.01.23 и Реквизитом ЭтоУниверсальныйДокумент = Ложь поменяют значение реквизита ЭтоУниверсальныйДокумент на Истина, попробовал через запрос найти документы и поменять значение ревизита но кидает ошибку этот объект нельзя изменить пологаю из за того что я получаю ссылку и пытаюсь поменять её. Вроде задача 2ух строчная а я совсем не дорубаю как её сделать. БП3.0

LexaK

Nosferatu112, так вроде все просто,
надо из ссылки получить объект
изменить его
и записать

(вот, три строчки получилось)
если помогло нажмите: Спасибо!

Nosferatu112

LexaK, В том то и дело что да в голове у меня так и сложилось но
&НаСервере
Процедура ЗаполнитьУПДНаСервере()

ТЗ = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.ЭтоУниверсальныйДокумент = ЛОЖЬ";


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

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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


Строка.ЭтоУниверсальныйДокумент = Истина;

КонецЦикла;
Документ.Записать();
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьУПД(Команда)
ЗаполнитьУПДНаСервере();
КонецПроцедуры

Код отрабатывает без ошибок но ничего не изменяется

LexaK

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

Для каждого лкСтр Из лкТЗ Цикл
//вот эти три строчки, которые нужны
лкДок = лкСтр.Ссылка.ПолучитьОбъект();
лкДок.ЭтоУниверсальныйДокумент = Истина;
лкДок.Записать()
КонецЦикла;

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

//    Строка.ЭтоУниверсальныйДокумент = Истина;
//   
//КонецЦикла;
//Документ.Записать();

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

&НаКлиенте
Процедура ЗаполнитьУПД(Команда)
    ЗаполнитьУПДНаСервере();
КонецПроцедуры

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

Nosferatu112

LexaK, Огромное спасибо, уже 3й раз совершаю ошибку с тем что выношу Запись за цикл и ни чего не работает :zebzdr:

Nosferatu112

Сделал кнопку в реализации, попросили сделать кнопку в поступлении, проблема в том что в реализации при проставлении УПД просто меняется УПД да/нет, а в поступлении когда УПД = Истина появляеться гиперссыка которая переносит в общую форму где можно выбрать значение реквизита офбщей формы, как мне собственно программно из формы списка поменять значение в общей форме при проставлении УПД в истину и значение реквизита этой формы поменять на 02

Nosferatu112

LexaK, Может знаешь ответ. Вот код который я прописал в этой теме выше сообщение со скринами реквизиты которые нужно изменить это реквизиты формыДокументаТовары, а код который я изначально прописал в ФормеСписка как мне соединить 2 этих кода что бы они работали потому что пока ФормаДокумента не открыта код не срабатывает а я ведь не буду открывать кучу форм доков
&НаСервере
Процедура ЗаполнитьУПДНаСервере()

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    | ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
    |ИЗ
    | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |ГДЕ
    | ПоступлениеТоваровУслуг.Дата > ДАТАВРЕМЯ(2023, 1, 1)
    | И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
    | И ПоступлениеТоваровУслуг.ЭтоУниверсальныйДокумент = ЛОЖЬ
    | И ПоступлениеТоваровУслуг.Проведен = ИСТИНА";


лкТЗ = Запрос.Выполнить().Выгрузить();

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


КонецЦикла;

КонецПроцедуры
На всякий случай, это код кнопки
// Смена статуса УПД
Процедура КВО() Экспорт

СтрНаим = "Матрешка";
Контр = Справочники.Контрагенты;
НайденыйКонтр = Контр.НайтиПоНаименованию(СтрНаим);

Если Объект.ЭтоУниверсальныйДокумент = Истина И Объект.Контрагент = НайденыйКонтр Тогда
КодВидаОперации = "01";
НДСПредъявленКВычету = Истина;
ИначеЕсли Объект.ЭтоУниверсальныйДокумент = Истина И Объект.Контрагент <> НайденыйКонтр Тогда
КодВидаОперации = "01";
НДСПредъявленКВычету = Ложь;
КонецЕсли;

КонецПроцедуры
А это Код ФормыДокументаТовары

В различные процедуры ФормыДокумента по типу Перед,После,ПриЗаписи эту процедуру вставлял отрабатывает только при интерактивном нажатии в форме

LexaK

Nosferatu112, у вас похоже доработанная база, и эта обработка флага УПД тоже чья-то доработка, кто что у вас напрограммировал отсюда не видно.
просто проверьте код формы по обработке смены этого флажка, аккуратненько вырежте его и вставьте в свою обработку,
и немного доработайте, в форме без формы в конечном счете разницы нет,
все данные хранятся в объектах: в документах, в справочниках, в регистрах и др.
просто код формы что-то куда-то пишет! найдите этот код и используйте!
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск