таблицы значений в 1с 7.7.

  • Автор темы Nastyusha
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Nastyusha

Гость
#1
Доброго времени суток.

у меня есть 2 ТЗ. условно 1-ую можно назвать план, вторую-факт.
Как рассчитать % брака по определенному сотруднику по такой формуле:
100-(100*КолвоФакт)/КолвоПлан)

Данные КолвоФакт- берется из ТЗФАКт., КолвоФакт из ТЗПлан

Может кто может подсказать, как это возможно рассчитать.
Зареннее огромное спасибо за помощь
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#2
Ну так вы же сами и написали: из одной таблицы берем план, из второй факт и рассчитываем по приведенной вами же формуле...
 
N

Nastyusha

Гость
#3
я немного ошиблась.
Данные КолвоФакт- берется из ТЗФАКт., КолвоПлан из ТЗПлан
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#4
Милая моя, сделайте милость, объясните публике, в чем у вас загвоздка?
 
N

Nastyusha

Гость
#5
например
ТЗ План:
иванов 50 м.п.
петров 100 м.п.
иванов 100 м.п.

ТЗ Факт
Иванов 70 м.п.
петров 50 м.п.
иванов 100 м.п.
петров 50 м.п.

Так вот как из ТЗ План и ТЗ факт посчитать, сколько в сумме м.п. сделано только ивановым, только петровым и т.д
и уже дальше по формуле рассчитать % брака Ивановым, петровым и т.д.
100-(100*КолвоФакт)/КолвоПлан)
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#8
Да хоть на калькуляторе считайте. Хоть убей, не могу понять, в чем проблема??? ;)
Данные есть, формула есть, подпись "программист" - тоже присутствует.
В чем проблема? Алгоритм? Да хоть прямой перебор используйте. Хоть слияние двух таблиц и сворачивание.
 
N

Nastyusha

Гость
#10
подскажите плиз, как сделать слияние 2-х Таблиц значений

Добавлено: я конечно понимаю, что мой вопрос показался кому-то очень глупым.
Но ведь у всех не сразу получалось все. И когда человек только начинает программировать, у него действительно очень и очень много подобных вопросов.

Если Вам кажется мой вопрос таким простым, так отчего же никто не может предложить алгоритм решения
Я сворачивала ТЗ- получались итоги. Но на одной вкладке 4 ТЗ, то по- моему это не правильно
 

TimeDontWait

Well-Known Member
04.01.2010
367
0
#11
Создаеш 3 таблицу значений, с первых двух выгружаеш данные в новую методом
Выгрузить(<?>,,,);
Синтаксис:
Выгрузить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>)
Назначение:
Выгрузить соответствующие ячейки таблицы значений.
Параметры:
<Знач> - значение типа ''Таблица значений'' или ''Список значений'', в которое нужно выгрузить данные. Если переданное значение пустое, тогда система сама создаст объект типа ''Таблица значений''.
<НачСтрока> - необязательный параметр. Номер начальной строки, с которой надо начинать выгрузку. Значение по умолчанию 1.
<КонСтрока> - необязательный параметр. Номер последней строки, по которую надо выгружать. Если не указан, то до последней.
<Колонки> - необязательный параметр. Номера или идентификаторы колонок, которые надо выгружать. Если параметр не задан, то выгружаются все колонки.

Потом суммируеш итоги по сотрудникам с помощью
Свернуть(<?>,);
Синтаксис:
Свернуть(<ГруппКолонки>,<СуммКолонки>)
Назначение:
Позволяет свернуть таблицу значений по соответствующим значениям колонок, т.е. заменяет на одну строку все дублирующие (по значениям группировочных колонок) строки, суммируя значения по суммируемым колонкам.
Параметры:
<ГруппКолонки> - группировочные колонки (номера или идентификаторы колонок через запятую), по которым группировать данные.
<СуммКолонки> - суммируемые колонки (номера или идентификаторы колонок через запятую), по которым суммировать данные.

Добавлено:
Но на одной вкладке 4 ТЗ, то по- моему это не правильно
откуда ? по ходу у вас две таблицы...
 
N

Nastyusha

Гость
#12
План.Выгрузить(ТабДлярезульта, , ,"ФИО, Колво, КолвоГотЭ") ;
ТабДлярезульта.Свернуть("ФИО", "Колво, КолвоГотЭ") ;

Создаеш 3 таблицу значений, с первых двух выгружаеш данные в новую методом
Выгрузить(<?>,,,);

как выгрузить с 2-х ТЗ? как записать 2-ую ТЗ и колонки ТЗ?
 

TimeDontWait

Well-Known Member
04.01.2010
367
0
#13
Выгружаеш по очереди
Код:
План.Выгрузить(ТабДлярезульта, , ,"ФИО, Колво, КолвоГотЭ"); 
Факт.Выгрузить(ТабДлярезульта, , ,"ФИО, Колво, КолвоГотЭ");

ТабДлярезульта.Свернуть("ФИО", "Колво, КолвоГотЭ");
Колонки добавляются с помощью метода
НоваяКолонка(<?>,,,,,,,);
Синтаксис:
НоваяКолонка(<Идентификатор>,<Тип>,<Длина>,<Точность>,<Заголовок>,<Ширина>,<Формат>,<Положение>)

А вообще вам бы надо для начала сюда:
http://www.mista.ru/tutor_1c/index.htm
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#14
Открыл тему по просьбе Дайнеко. Оказывается, мы не поняли сути вопроса. Уважаемый Дайнеко, сделайте милость, объясните нам в чем суть. Ну, а поднятие репутации или уровня предупреждений... За нами не заржавеет!
 

Дайнеко

Well-Known Member
19.11.2009
951
0
#15
Уважаемый Дайнеко, сделайте милость, объясните нам в чем суть
Не знаю как вы, а я с женщинами работаю. Так вот она хочет сказать:
"Вычисляю выражение для Иванова. Например: Показатель = ТЗПлан.Кол - ТЗФакт.Кол (я упростил выражение, попутно и 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. Помогитеееее плизЗ!"
 
N

Nastyusha

Гость
#16
Спасибо Вам, Дайнеко огромное за помощь и за комментарии.
Вы очень понятно все объяснили.

НО
в каждой таблице сотрудник может встречается несколько раз (к примеру, может изменится дата или разное колво бумаги- и соответвенно разное ПланКолво), а в остальном Вы правы.
 

vbs

Well-Known Member
18.02.2007
1 708
3
#17
Браво, Дайнеко !
Может, мы иногда и не очень умеем быть снисходительны к новичкам. Хотя и новичкам при отсутствии ЭЛЕМЕНТАРНЫХ навыков не стоит сразу бежать на форум
и задавать вопросы, ответы на которые легко почерпнуть из книжек.
Попытаюсь и я быть терпеливым.


Nastyusha
Если у тебя уже найден такой элемент (используй ТЗ.НайтиЗначение()), то к его НАЙДЕННОМУ плановому (или фактическому) значению количества надо, возможно, добавить новое количество.
(используй ТЗ.НайтиСтрокуПоНомеру(), каковая была определена в ТЗ.НайтиЗначение()).
Подробно не разжевываю, ибо верю, что сама разберешься. В этом ключ к победе.
Уже давно один умный человек заметил, что голодному не надо предлагать рыбы, а надо дать удочку, чтобы он ее сам и наловил.
Успехов, у тебя все получится :)
 

vbs

Well-Known Member
18.02.2007
1 708
3
#18
Не знаю как вы, а я с женщинами работаю. Так вот она хочет сказать:
Это да !
Женщина-программист - явление частое,
а вот Женщина-Хороший программист - штучное, и пусть на меня дамы не обижаются. По половому признаку я таланты пытаюсь не различать, но опыт в предметной области позволяет
сделать такой вывод.
Когда дама считает себя "Специалистом в 1С", а я вижу, что ее возможностей хватает только на нарисование выходной таблички, я ее успокаиваю словами :
"Главное, чтобы была любовь, и не было войны !"
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#19
Дайнеко
Суть форума четко описана в объявлении "Что такое форум?".
Теперь по теме...
В вашем ответе не увидел ничего нового для себя в первом сообщении топика. Задача для первого курса, которая сводится к работе с двумя массивами (таблицами) данных: слияние, сортировка и перебор.
Nastyusha, теперь поясню для вас смысл трех этих сакраментальных слов:
Слияние - добавление в первую таблицу строк из второй. В общем случае делается в цикле.
Сортировка - построение строк таблицы в определенном порядке. Конкретно в 1С есть специальный метод "Сортировать".
Перебор - Перебор строк таблицы (массива данных, выборки данных). Обычно осуществляется в цикле.
И так вам необходимо сделать:
1. Слияние - чтобы получить одну результирующую таблицу.
2. Сортировку - чтобы фамилии шли по порядку (сейчас не надо, но потом потребуется).
3. Перебор - чтобы посчитать коэффициент выполнения.
4. Прочесть какую-нибудь книгу, книжецу, брошюру по алгоритмам.
Ну, а чтобы совсем наступило просветление, открою вам истину непреложную! Алгоритмы решения никак не привязаны к языкам программирования и средствам разработки. Посему, сначала "изобретайте" алгоритм решения задачи, а потом уже думайте, как его реализовать. У вас же, судя по постановке вопроса, возникла проблема именно с алгоритмом.
 
Статус
Закрыто для дальнейших ответов.