Шаг 407 - Отбор по нескольким субконто – очень не явная ошибка

В продолжение шагов:

В данных шагах мы рассмотрели общие принципы выборки по нескольким субконто. Но в реализации шага есть одна не точность, а точнее ошибка. Она возникнет, если один и тот же материал (одно и то же субконто, один и тот же элемент справочника будет числиться у двух сотрудников). Уточню, как это может произойти. Вы купили два одинаковых телевизора и дали их по одному в подотчет двум сотрудникам. Так вот, если вы воспользуетесь кодом из шага "Шаг 389 - Отбор по нескольким субконто – дальше", то увидите только один телевизор у одного сотрудника, хотя на карточке счета все будет в порядке. Смотрите:

Итог.ВыбратьСубконто(1);

Пока Итог.ПолучитьСубконто(1) = 1 цикл 
	Если  МестоХранения.Выбран()=1 Тогда                      
		Если Итог.Субконто(2)= МестоХранения Тогда
			Т.ВывестиСекцию("Секция_2");
		КонецЕсли;     
	Иначе
		Т.ВывестиСекцию("Секция_2");
	КонецЕсли;
КонецЦикла;      

Первое субконто у нас материала. Мы смотрим второе субконто и сравниваем его с заданными параметрами(то есть сотрудником). Мы получим первого сотрудника и пойдем дальше. Но к нему есть и второй. Но вы ничего не увидите когда будет второй. Для того, чтобы убедиться, что второго сотрудника нет нужно перебрать все субконто.

Итог.ВыбратьСубконто(2);
Пока Итог.ПолучитьСубконто(2) = 1 цикл
	Если Сотрудник=Итог.Субконто(2) Тогда
		ПечатьСекции();	                     
	КонецЕсли;
КонецЦикла;		

Видите разницу? Нужно перебрать все субконто второго уровня. То есть общая схема такая.

407_1.gif (4027 b)

Выбирая субконто первого уровня мы можем пройти по конкретным именам. Получив конкретное субконто мы опять можем выбраться все субконто связанные с ним, но уже второго уровня. И опять нужно будет идти по ним. То есть: Связь между субконтами разного уровня – один ко многим.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 18.02.2003