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

Тема в разделе "1C и всё что с ней связано", создана пользователем Nastyusha, 25 мар 2010.

Статус темы:
Закрыта.
  1. Nastyusha

    Nastyusha Гость

    Доброго времени суток.

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

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

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Ну так вы же сами и написали: из одной таблицы берем план, из второй факт и рассчитываем по приведенной вами же формуле...
     
  3. Nastyusha

    Nastyusha Гость

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Милая моя, сделайте милость, объясните публике, в чем у вас загвоздка?
     
  5. Nastyusha

    Nastyusha Гость

    например
    ТЗ План:
    иванов 50 м.п.
    петров 100 м.п.
    иванов 100 м.п.

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

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

    Hryv Гость

    Походу Nastyusha не знает 1С вообще, в этом и загвоздка ;)
     
  7. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Задача по арифметике для 6 класса
    ;)
     
  8. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Да хоть на калькуляторе считайте. Хоть убей, не могу понять, в чем проблема??? ;)
    Данные есть, формула есть, подпись "программист" - тоже присутствует.
    В чем проблема? Алгоритм? Да хоть прямой перебор используйте. Хоть слияние двух таблиц и сворачивание.
     
  9. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Nastyusha если у вас есть программист, к нему и обращайтесь
     
  10. Nastyusha

    Nastyusha Гость

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

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

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

    TimeDontWait Well-Known Member

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

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

    Добавлено:
    откуда ? по ходу у вас две таблицы...
     
  12. Nastyusha

    Nastyusha Гость

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

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

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

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Выгружаеш по очереди
    Код (Text):
    План.Выгрузить(ТабДлярезульта, , ,"ФИО, Колво, КолвоГотЭ");
    Факт.Выгрузить(ТабДлярезульта, , ,"ФИО, Колво, КолвоГотЭ");

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

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Открыл тему по просьбе Дайнеко. Оказывается, мы не поняли сути вопроса. Уважаемый Дайнеко, сделайте милость, объясните нам в чем суть. Ну, а поднятие репутации или уровня предупреждений... За нами не заржавеет!
     
  15. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Не знаю как вы, а я с женщинами работаю. Так вот она хочет сказать:
    "Вычисляю выражение для Иванова. Например: Показатель = ТЗПлан.Кол - ТЗФакт.Кол (я упростил выражение, попутно и Nastyusha советую - задавая вопрос, не загромождайте посторонними деталями). Но моя проблема вот в чем: в первой таблице Иванов находится на 3 строке, во второй на 7-ой. Как взять данные с разных строк. У Петрова так же. А еще, наверное, я не знаю как выбирать строки с двух таблиц одновременно.". Всем молчать! Я объясняю, не банальность задачи, а загадочную женскую душу, о том что мы не понимаем ее проблему. Далее автор приводит пример, еще более запутывая задачу:
    Но т.к. я знаю, что женщина говорит одно, а понимает под этим другое (она не обманывает, она просто так говорит), я все-таки полагаю:
    - в каждой таблице сотрудник встречается только 1 раз
    - строки в таблицах идут вразнобой, т.е. не синхронны
    - и вообще количество строк в каждой таблице может быть свое.

    Решение. Вариант 1 "Школьный"
    Код ( (Unknown Language)):
    ТЗФакт.ВыбратьСтроки();
    Пока ТЗФакт.ПолучитьСтроку() = 1 Цикл
    План_Кол = 0;
    ТЗПлан.ВыбратьСтроки();
    Пока ТЗПлан.ПолучитьСтроку() = 1 Цикл
    Если (ТЗПлан.Сотр = ТЗФакт.Сотр) Тогда
    План_Кол = ТЗПлан.Кол;
    Прервать;
    КонецЕсли;
    КонецЦикла;   // ТЗПлан

    //  Вычисление и вывод
    Сообщить("Считаю для: "+ТЗФакт.Сотр);
    Показатель = План_Кол - ТЗФакт.Кол;
    Таб.ВывестиСекцию("Строка");
    КонецЦикла;   // ТЗФакт

    Опытная публика увидит недостаток - если Пиличук получил План, а не выдал "на гора" Факт (его нет в ТЗ), то программа не напечатает его на доску почета. Но если задание - анализ факта, то значит так и надо. 2-ое достоинство - все в рамках существующих данных. 3-е - тупость алгоритма.

    Решение. Вариант 2 "Интегрированный"
    Суть предлагаемого обществом заумного решения в том, чтобы создать третью ТЗ, более пригодную для обработки. Вот никто из улюлюкающей толпы не скажет плачущей девочке, что в результирующей таблице должно быть ДВЕ колонки с количеством. А то все на какой-то мануал посылают. Только не надо: "Так это ж очевидно..". Тому кто спрашивал, не очевидно... Пишет же: "как выгрузить с 2-х ТЗ? как записать 2-ую ТЗ и колонки ТЗ?".
    Код ( (Unknown Language)):
    //  Результирующая
    ТЗИтог = СоздатьОбъект("ТаблицаЗначений");
    ТЗИтог.НоваяКолонка("Сотр",       "Справочник.Сотрудники");
    ТЗИтог.НоваяКолонка("ФактКол", "Число", 14,0); // сюда должно попасть кол-во их ТЗ Факт
    ТЗИтог.НоваяКолонка("ПланКол", "Число", 14,0); // сюда должно попасть кол-во их ТЗ План
    ТЗИтог.НоваяКолонка("ОтклКол", "Число", 14,0); // сюда вычислим результат

    //  1. Вливание, если в обоих исходных колонка называется "Кол"
    ТЗФакт.ВыбратьСтроки();
    Пока ТЗФакт.ПолучитьСтроку() = 1 Цикл
    ТЗИтог.НоваяСтрока();
    ТЗИтог.Сотр       = ТЗФакт.Сотр;
    ТЗИтог.ФактКол = ТЗФакт.Кол;
    КонецЦикла;   // ТЗФакт
    //  ТЗПлан - повторить в точности ....

    //  2. Вливание, если в исходных колонки заранее обозвали по-разному:
    //  в ТЗФакт это "ФактКол", в ТЗПлан это "ПланКол"
    ТЗФакт.Выгрузить(ТЗИтог,,,"Сотр,ФактКол");
    ТЗПлан.Выгрузить(ТЗИтог,,,"Сотр,ПланКол");
    //  кажется имена полей можно опустить

    //  Nastyusha, после обоих вариантов сливания в ТЗИтог будут строки сначала из первой ТЗ
    //  и в них заполнена только колонка ФактКол, затем строки из второй ТЗ. В них заполнено
    // только ПланКол. А Иванов будет находится и в числе первых строк и вторых (2 раза)

    //  Обработка (теперь Иванов будет только в 1 строке)
    ТЗИтог.Свернуть("Сотр", "ФактКол,ПланКол,ОтклКол");

    //  Вычисление и вывод
    ТЗИтог.ВыбратьСтроки();
    Пока ТЗИтог.ПолучитьСтроку() = 1 Цикл
    Сообщить("Считаю для: "+ТЗИтог.Сотр);
    ТЗИтог.ОтклКол = ТЗИтог.ПланКол - ТЗИтог.ФактКол;
    Таб.ВывестиСекцию("Строка");
    КонецЦикла;   // ТЗИтог
    Если кто устал читая - простите. Чего не напишешь в пятницу вечером. А в целом, задевшая меня за душу история маленькой девочки наводит на вопросы:
    * Так в чем суть форума? В освоении инструментов и решении технических тупиков. Или же решение алгоритмических тупиков в головах.
    * Молодзь задавать вопросы не умеет. Это факт. Может завести постоянную тему с советами? Правда будут ли читать и по-прежнему писать
     
  16. Nastyusha

    Nastyusha Гость

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Браво, Дайнеко !
    Может, мы иногда и не очень умеем быть снисходительны к новичкам. Хотя и новичкам при отсутствии ЭЛЕМЕНТАРНЫХ навыков не стоит сразу бежать на форум
    и задавать вопросы, ответы на которые легко почерпнуть из книжек.
    Попытаюсь и я быть терпеливым.


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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Это да !
    Женщина-программист - явление частое,
    а вот Женщина-Хороший программист - штучное, и пусть на меня дамы не обижаются. По половому признаку я таланты пытаюсь не различать, но опыт в предметной области позволяет
    сделать такой вывод.
    Когда дама считает себя "Специалистом в 1С", а я вижу, что ее возможностей хватает только на нарисование выходной таблички, я ее успокаиваю словами :
    "Главное, чтобы была любовь, и не было войны !"
     
  19. vitfil

    vitfil IT-интегратор

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

Поделиться этой страницей