Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Найти все реквизиты документа с ссылкой на объект.

Найти все реквизиты документа с ссылкой на объект.
Я
   xipypg2012
 
23.09.20 - 13:06
Подскажите у меня есть документ в нем в табличной части есть столбец "документ".

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

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

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

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
    Режим = РежимДиалогаВопрос.ДаНет;
    
    Ответ = Вопрос("Вы хотите изменить контрагента?", Режим, 0);
    Если Ответ =КодВозвратаДиалога.Да Тогда
        КонтрагентПриИзмененииНаСервере();
    Иначе
        Объект.Контрагент = ПолучитьСтарогоКонтрагента("Контрагент");
    КонецЕсли;
КонецПроцедуры

Интересует как - перебрать все реквизиты Стр.Документ  , может кто-то чтото подскажет. Дальше будут идти изменения по аналогии с этим.
   Ёпрст
 
1 - 23.09.20 - 13:09
(0)
   Документ = РеквизитФормыВЗначение("Объект");    

это выкинуть из кода в первую очередь
   xipypg2012
 
2 - 23.09.20 - 13:10
//////////ВОТ тут перебрать все реквизиты Док надо

Если Док.Рекв = ПолучитьСтарогоКонтрагента("Контрагент")

Для умников сразу скажу в цикле запроса не будет, это на скорую руку накидан код в блокноте чтоб можно было объяснить что именно хочется сделать.
   xipypg2012
 
3 - 23.09.20 - 13:10
(1) с этим согласен тут это не актуально, можно и выкинуть.
   Ёпрст
 
4 - 23.09.20 - 13:32
вот это переписать:

&НаСервере
Функция ПолучитьСтарогоКонтрагента(РеквизитВозврата)


посмотреть хотя бы , как в типовой глЗначениеРеквизитаОбъекта слеплено
   Ёпрст
 
5 - 23.09.20 - 13:32
получать ссылку, чтоб с неё потом клиентоса тянуть, таща весь объект ?
   Ёпрст
 
6 - 23.09.20 - 13:34
И... всю замену во всех доках, которые торчат в таб части нужно делать хотя бы приЗаписи этого документа, а не в ПриИзменении.
А то. клиентоса поменяешь, а документ не сохраншь
   xipypg2012
 
7 - 23.09.20 - 13:43
(6) Документ записывается при изменение

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