Уважаемый Дайнеко, сделайте милость, объясните нам в чем суть
Не знаю как вы, а я с женщинами работаю. Так вот она хочет сказать:
"Вычисляю выражение для Иванова. Например:
Показатель = ТЗПлан.Кол - ТЗФакт.Кол (я упростил выражение, попутно и
Nastyusha советую - задавая вопрос, не загромождайте посторонними деталями). Но моя проблема вот в чем: в первой таблице Иванов находится на 3 строке, во второй на 7-ой. Как взять данные с разных строк. У Петрова так же. А еще, наверное, я не знаю как выбирать строки с двух таблиц одновременно.". Всем молчать! Я объясняю, не банальность задачи, а загадочную женскую душу, о том что мы не понимаем ее проблему. Далее автор приводит пример, еще более запутывая задачу:
ТЗ План:
иванов 50 м.п.
петров 100 м.п.
иванов 100 м.п.
ТЗ Факт
Иванов 70 м.п.
петров 50 м.п.
иванов 100 м.п.
петров 50 м.п.
Но т.к. я знаю, что женщина говорит одно, а понимает под этим другое (она не обманывает, она просто так говорит), я все-таки полагаю:
- в каждой таблице сотрудник встречается только 1 раз
- строки в таблицах идут вразнобой, т.е. не синхронны
- и вообще количество строк в каждой таблице может быть свое.
Решение. Вариант 1 "Школьный"
Код:
ТЗФакт.ВыбратьСтроки();
Пока ТЗФакт.ПолучитьСтроку() = 1 Цикл
План_Кол = 0;
ТЗПлан.ВыбратьСтроки();
Пока ТЗПлан.ПолучитьСтроку() = 1 Цикл
Если (ТЗПлан.Сотр = ТЗФакт.Сотр) Тогда
План_Кол = ТЗПлан.Кол;
Прервать;
КонецЕсли;
КонецЦикла; // ТЗПлан
// Вычисление и вывод
Сообщить("Считаю для: "+ТЗФакт.Сотр);
Показатель = План_Кол - ТЗФакт.Кол;
Таб.ВывестиСекцию("Строка");
КонецЦикла; // ТЗФакт
Опытная публика увидит недостаток - если Пиличук получил План, а не выдал "на гора" Факт (его нет в ТЗ), то программа не напечатает его на доску почета. Но если задание - анализ факта, то значит так и надо. 2-ое достоинство - все в рамках существующих данных. 3-е - тупость алгоритма.
Решение. Вариант 2 "Интегрированный"
Суть предлагаемого обществом заумного решения в том, чтобы создать третью ТЗ, более пригодную для обработки. Вот никто из улюлюкающей толпы не скажет плачущей девочке, что в результирующей таблице должно быть
ДВЕ колонки с количеством. А то все на какой-то мануал посылают. Только не надо: "Так это ж очевидно..". Тому кто спрашивал, не очевидно... Пишет же: "как выгрузить с 2-х ТЗ? как записать 2-ую ТЗ и колонки ТЗ?".
Код:
// Результирующая
ТЗИтог = СоздатьОбъект("ТаблицаЗначений");
ТЗИтог.НоваяКолонка("Сотр", "Справочник.Сотрудники");
ТЗИтог.НоваяКолонка("ФактКол", "Число", 14,0); // сюда должно попасть кол-во их ТЗ Факт
ТЗИтог.НоваяКолонка("ПланКол", "Число", 14,0); // сюда должно попасть кол-во их ТЗ План
ТЗИтог.НоваяКолонка("ОтклКол", "Число", 14,0); // сюда вычислим результат
// 1. Вливание, если в обоих исходных колонка называется "Кол"
ТЗФакт.ВыбратьСтроки();
Пока ТЗФакт.ПолучитьСтроку() = 1 Цикл
ТЗИтог.НоваяСтрока();
ТЗИтог.Сотр = ТЗФакт.Сотр;
ТЗИтог.ФактКол = ТЗФакт.Кол;
КонецЦикла; // ТЗФакт
// ТЗПлан - повторить в точности ....
// 2. Вливание, если в исходных колонки заранее обозвали по-разному:
// в ТЗФакт это "ФактКол", в ТЗПлан это "ПланКол"
ТЗФакт.Выгрузить(ТЗИтог,,,"Сотр,ФактКол");
ТЗПлан.Выгрузить(ТЗИтог,,,"Сотр,ПланКол");
// кажется имена полей можно опустить
// Nastyusha, после обоих вариантов сливания в ТЗИтог будут строки сначала из первой ТЗ
// и в них заполнена только колонка ФактКол, затем строки из второй ТЗ. В них заполнено
// только ПланКол. А Иванов будет находится и в числе первых строк и вторых (2 раза)
// Обработка (теперь Иванов будет только в 1 строке)
ТЗИтог.Свернуть("Сотр", "ФактКол,ПланКол,ОтклКол");
// Вычисление и вывод
ТЗИтог.ВыбратьСтроки();
Пока ТЗИтог.ПолучитьСтроку() = 1 Цикл
Сообщить("Считаю для: "+ТЗИтог.Сотр);
ТЗИтог.ОтклКол = ТЗИтог.ПланКол - ТЗИтог.ФактКол;
Таб.ВывестиСекцию("Строка");
КонецЦикла; // ТЗИтог
Если кто устал читая - простите. Чего не напишешь в пятницу вечером. А в целом, задевшая меня за душу история маленькой девочки наводит на вопросы:
* Так в чем суть форума? В освоении инструментов и решении технических тупиков. Или же решение алгоритмических тупиков в головах.
* Молодзь задавать вопросы не умеет. Это факт. Может завести постоянную тему с советами? Правда будут ли читать и по-прежнему писать
"1С:Предприятие в.7. Помогитеееее плизЗ!"