Обычные формы и Список документов

1. denis-sqluev 05.08.19 16:17 Сейчас в теме
Здравствуйте!

Обычные формы

Нужно на форму списка документов реализации товаров добавить колонку Оплачено. Она заполняется значением "Истина", если в связанных документах есть Банковская выписка или ПКО, иначе значение "Ложь". Или через "галочку".

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

Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
дкСписокПриВыводеСтроки(ЭтаФорма, Элемент, ОформлениеСтроки,
ОформлениеСтроки.ДанныеСтроки);
КонецЦикла;

Подскажите, пожалуйста, как можно более оптимально решить задачу?

Спасибо!
По теме из базы знаний
Найденные решения
6. independ 1521 05.08.19 17:01 Сейчас в теме
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. alex-l19041 8 05.08.19 16:53 Сейчас в теме
(1) для обычных форм для избежания тормозов лучше добавить реквизит в документ. Дописать код заполнения этого реквизита и на форме списка просто вывести...
triviumfan; +1 Ответить
4. RustamZz 05.08.19 16:56 Сейчас в теме
(1) Первым циклом собираем информацию по документам. Делаем запрос по результату заполняем соответствие информацией по оплате. Вторым циклом отображаем значения на форме. В типовых можно посмотреть на процедуру ЭДО_ФормаСпискаДокумента_ПриПолученииДанных, общего модуля ЭлектронныеДокументыПереопределяемый. Как пишет (3) ни в коем случае не делать.
8. triviumfan 93 05.08.19 20:18 Сейчас в теме
(4)
В типовых можно посмотреть на процедуру ЭДО_ФормаСпискаДокумента_ПриПолученииДанных, общего модуля ЭлектронныеДокументыПереопределяемый. Как пишет (3) ни в коем случае не делать.

А вы её хотя бы смотрели?
Да, реализовано как везде рекомендуют - через соответствие...
Процедура ЭДО_ФормаСпискаДокумента_ПриПолученииДанных(Элемент, ОформленияСтрок, мИспользоватьОбменЭД, ЭтоСчетФактура = Ложь) Экспорт

	Если ЭтоСчетФактура Тогда
		ВидимостьКолонок = Элемент.Колонки.СостояниеЭД.Видимость
	  		ИЛИ Элемент.Колонки.ДействияСНашейСтороны.Видимость
	  		ИЛИ Элемент.Колонки.ДействияСоСтороныДругогоУчастника.Видимость;
	Иначе
		ВидимостьКолонок = Элемент.Колонки.СостояниеЭД.Видимость;
	КонецЕсли;
	
	Если Не мИспользоватьОбменЭД ИЛИ Не ВидимостьКолонок Тогда
		Возврат;
	КонецЕсли;
	
	// Сформируем массив документов для получения состояния 
	ДокументыДляПолученияСостояния = Новый Массив();
	Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
		ДокументыДляПолученияСостояния.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
	КонецЦикла;
	
	СостоянияЭД = ЭлектронныеДокументы.ПолучитьТекстСостоянияЭДПоВладельцам(ДокументыДляПолученияСостояния, ЭтоСчетФактура);
	
	Если ЭтоСчетФактура Тогда
		Для Каждого оформлениеСтроки Из ОформленияСтрок Цикл
			ОформлениеСтроки.Ячейки.СостояниеЭД.Видимость = Ложь;
			
			СостояниеЭД = СостоянияЭД[ОформлениеСтроки.ДанныеСтроки.Ссылка];
			ДействияСНашейСтороны 			  = ?(СостояниеЭД = Неопределено, "", СостояниеЭД.ДействияСНашейСтороны);
			ДействияСоСтороныДругогоУчастника = ?(СостояниеЭД = Неопределено, "", СостояниеЭД.ДействияСоСтороныДругогоУчастника);
			
			ОформлениеСтроки.Ячейки.ДействияСНашейСтороны.УстановитьТекст(ДействияСНашейСтороны);
			ОформлениеСтроки.Ячейки.ДействияСоСтороныДругогоУчастника.УстановитьТекст(ДействияСоСтороныДругогоУчастника);
			
		КонецЦикла
	Иначе
		Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
			ОформлениеСтроки.Ячейки.СостояниеЭД.УстановитьТекст(СостоянияЭД[ОформлениеСтроки.ДанныеСтроки.Ссылка]);
		КонецЦикла;
	КонецЕсли;

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

Показать


Функция ПолучитьТекстСостоянияЭДПоВладельцам(МассивСсылокНаВладельцев, ПомещатьВСтруктуру = Ложь) Экспорт
		
	ТаблицаДанных = ЭлектронныеДокументыСлужебныйВызовСервера.ПолучитьДанныеЭДПоВладельцам(МассивСсылокНаВладельцев);
	Соответствие = Новый Соответствие;
	Для Каждого ТекСтрока Из ТаблицаДанных Цикл
		
		Если ПомещатьВСтруктуру Тогда
			СостояниеВерсииЭД = Новый Структура("СостояниеВерсииЭД, ДействияСНашейСтороны, ДействияСоСтороныДругогоУчастника");
			ЗаполнитьЗначенияСвойств(СостояниеВерсииЭД, ТекСтрока);
		Иначе
			СостояниеВерсииЭД = Строка(ТекСтрока.СостояниеВерсииЭД);
		КонецЕсли;
		Соответствие.Вставить(ТекСтрока.ВладелецЭД, СостояниеВерсииЭД);
	КонецЦикла;
	
	Возврат Соответствие;
	
КонецФункции
Показать


правда запрос к специальному регистру, где уже все вычислено и подготовлено к выводу, что в корне все меняет:)

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


Попробуйте посложнее запрос написать и задержка в десятые секунды будет так сильно напрягать глаз...
9. RustamZz 06.08.19 09:02 Сейчас в теме
(8) Ты не поверишь я ее использую, что бы не снимать с поддержки формы поступлений и реализаций, а выводить допполя кодом. А как записать этот реквизит, если оплата произойдет через год, а глав. бух уже закрыл период?
6. independ 1521 05.08.19 17:01 Сейчас в теме
7. triviumfan 93 05.08.19 20:05 Сейчас в теме
(1)
Она заполняется значением "Истина", если в связанных документах есть Банковская выписка или ПКО, иначе значение "Ложь". Или через "галочку"

При такой постановке задачи и решении в ПриПолученииДанных() скроллинг будет фризить всегда.
Я за отдельный реквизит.
2. VmvLer 05.08.19 16:22 Сейчас в теме
оптимизировать запрос в ПриПолученииДанных

или левым соединением сразу в запрос списка.

если подзапрос получения связанных получает данные способом "все по всем", то любой способ будет дирижаблем.
5. WalterMort 242 05.08.19 16:57 Сейчас в теме
При получении данных
1) обойти список оформления и собрать соответствие документ - оформление строки
2) сделать один запрос по документам в строках. При обходе результата получать нужное оформление из соответствия
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот