|
Найти все реквизиты документа с ссылкой на объект. |
☑ |
0
xipypg2012
23.09.20
✎
13:06
|
Подскажите у меня есть документ в нем в табличной части есть столбец "документ".
и в этом документе есть поле контрагент. Подскажите как реализовать теперь чтоб при смене контрагента в документе, Программа пробегала все реквизиты этих документов и если находила реквизит с таким же контрагентом меняла его.
&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()
Документ = РеквизитФормыВЗначение("Объект");
Для каждого стр из Документ.ДокументыЦепочки цикл
Док = Стр.Документ.ПолучитьОбъект();
//////////ВОТ тут перебрать все реквизиты Док надо
Если Док.Рекв = ПолучитьСтарогоКонтрагента("Контрагент")
тогда Док.Рекв = Документ.Контрагент
КонецЕсли;
///////////КонецПеребора
КонецЦикла;
Записать();
// Вставить содержимое обработчика.
КонецПроцедуры
&НаСервере
Функция ПолучитьСтарогоКонтрагента(РеквизитВозврата)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦепочкиДокументов.Ссылка КАК Ссылка
|ИЗ
| Документ.ЦепочкиДокументов КАК ЦепочкиДокументов
|ГДЕ
| ЦепочкиДокументов.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если выборка.Количество()>0 тогда
Выборка.Следующий();
Если РеквизитВозврата = "Контрагент" тогда
Возврат Выборка.Ссылка.Контрагент;
КонецЕсли;
КонецЕсли;;
КонецФункции
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
Режим = РежимДиалогаВопрос.ДаНет;
Ответ = Вопрос("Вы хотите изменить контрагента?", Режим, 0);
Если Ответ =КодВозвратаДиалога.Да Тогда
КонтрагентПриИзмененииНаСервере();
Иначе
Объект.Контрагент = ПолучитьСтарогоКонтрагента("Контрагент");
КонецЕсли;
КонецПроцедуры
Интересует как - перебрать все реквизиты Стр.Документ , может кто-то чтото подскажет. Дальше будут идти изменения по аналогии с этим.
|
|
1
Ёпрст
гуру
23.09.20
✎
13:09
|
(0)
Документ = РеквизитФормыВЗначение("Объект");
это выкинуть из кода в первую очередь
|
|
2
xipypg2012
23.09.20
✎
13:10
|
//////////ВОТ тут перебрать все реквизиты Док надо
Если Док.Рекв = ПолучитьСтарогоКонтрагента("Контрагент")
Для умников сразу скажу в цикле запроса не будет, это на скорую руку накидан код в блокноте чтоб можно было объяснить что именно хочется сделать.
|
|
3
xipypg2012
23.09.20
✎
13:10
|
(1) с этим согласен тут это не актуально, можно и выкинуть.
|
|
4
Ёпрст
гуру
23.09.20
✎
13:32
|
вот это переписать:
&НаСервере
Функция ПолучитьСтарогоКонтрагента(РеквизитВозврата)
посмотреть хотя бы , как в типовой глЗначениеРеквизитаОбъекта слеплено
|
|
5
Ёпрст
гуру
23.09.20
✎
13:32
|
получать ссылку, чтоб с неё потом клиентоса тянуть, таща весь объект ?
|
|
6
Ёпрст
гуру
23.09.20
✎
13:34
|
И... всю замену во всех доках, которые торчат в таб части нужно делать хотя бы приЗаписи этого документа, а не в ПриИзменении.
А то. клиентоса поменяешь, а документ не сохраншь
|
|
7
xipypg2012
23.09.20
✎
13:43
|
(6) Документ записывается при изменение
|
|
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой