Помогите облагородить. Нужно: 1.Как-нибуть создать баз...

Автор ForumOOo (бот), 5 февраля 2014, 23:24

0 Пользователи и 1 гость просматривают эту тему.

ForumOOo (бот)

Компонент: Calc
Версия продукта: 4.1.x
Сборка: Apache OpenOffice
ОС: Win7 Ma[

Помогите облагородить.
Нужно:
1.Как-нибуть создать базу-год,месяц,сутка.(открыл файл и возможность выбора)
2.Именя листов-Дата (при создании нового автоматом следующая)
3.Выборка-период дат-ячейка->результат.

Не пинайте,новик я.3-й день с ОО.табличку состряпал и сам удивился как)))
Может упростить кто поможет формулы или грамотнее это все предоставить.
За раннее благодарен


Тестовый файл: http://forumooo.ru/attachments/upload/lyutiy.ods (241.52 КБ)

--
Подпись: Саша_Я)
Эл. почта: almytcka@gmail.com

JohnSUN

#1
Пароль скажешь? Или перевыложишь без пароля?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

popkorn


kompilainenn

Цитата: ForumOOo (бот) от  5 февраля 2014, 23:24
Подпись: Мумба_Я)
простите, не удержался, ибо сломал моск, пытаясь понять ЧТО он хочет сделать
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

popkorn

есть просто файл (1 месяц) хочу,как-то что бы было их 12,как в сказке))
учет на производстве по месячно

popkorn

Ребят,не пинайте
3 сутки сижу,башка не варит.ОО за 3 дня усвоить многовато для меня,если что-уточню что надо.По формулам видно кое-что.
Сделал что смог сам,дабы не придти сюда,задач нарезать и ждать когда за меня сделают.
сори за офтоп)
с уважением

JohnSUN

#6
Цитата: popkorn от  5 февраля 2014, 23:53
Ребят,не пинайте
Расслабься, Саша, никто намеренно тебя не пинал. Просто книга действительно ошарашивает:"Коэффициент полезного действия - гора родила мышь". Так что это был наезд не на тебя персонально, а именно на выбранный вариант решения простой, в общем-то, задачи.
Цитата: popkorn от  5 февраля 2014, 23:533 сутки сижу,башка не варит.ОО за 3 дня усвоить многовато для меня,если что-уточню что надо.
За три дня наколбасил данные за весь февраль? 29 листов (с учетом суммарного)? Круто... Жаль, что всё это нужно переделывать.
Ты вот что скажи, ты ни одного дня не пропустил - цех действительно работает без выходных и праздников?
Цитата: popkorn от  5 февраля 2014, 23:53По формулам видно кое-что.
Сделал что смог сам,дабы не придти сюда,задач нарезать и ждать когда за меня сделают.
Кое-что действительно видно. Хотя многое и не понятно. Например, формулу =SUM(D39-E32)+E6 прочитать можно, но понять - сложно: что там вообще делает SUM()?
Почему не задал язык текста? Это в Формат-Ячейки-Шрифт. Тогда включил бы проверку орфографии и не повторил бы 29 раз "Картон з оворами", а подчеркнутое слово "Приход" подтолкнуло бы к использованию слова "Надходження".

Насколько я понял смысл книги, тебе нужны данные за каждый день. Часть из них - фактические данные, которые вносятся руками, а часть - вычисляемые значения. Раскраска страницы, видимо, нацелена на то, чтобы показать ячейки в которые надо вносить данные. Общая задача - посчитать итоговые данные за месяц и вывести почти в том же виде, в котором вносились данные за день.

Сейчас я скажу одну вещь, только ты не обижайся: это всё тебе не нужно.
Я пока не стану агитировать за использование баз данных и объяснять почему Calc не лучший инструмент именно для этой задачи. Ты выбрал Calc, значит попробуем облагородить именно Calc'овскую книгу. В конце концов, ты не первый и, наверняка, не последний, кто именно так пытается решать учетные задачи.

Начнем с данных.
Ежедневная таблица занимает 56 строк. Это со строками заголовков, поясняющими надписями и прочим, что хранить не обязательно.
На листе Calc'овской книги 1048576 строк. Если твои ежедневные таблицы не разбивать по листам, а писать сверху вниз друг под другом, то этого хватило бы на 1048576/56=18724 дней = 51 год. То есть для хранения данных тебе хватило бы одной длинной "портянки", а не 28-31 листов за месяц.
С "портянкой" работать не очень-то удобно, захекаешься мотать её вверх-вниз в поисках нужных данных. Поэтому форма за день нужна. Она займёт еще один лист. При выборе даты в заголовке таблицы (той, что у тебя в A2:G2), Calc в состоянии выдернуть из "портянки" данные на нужный день и подставить их в форму. А в случае, если в ячейки формы вносятся изменения, Calc в состоянии вернуть новые значения на их место в "портянке".
Третий лист, который может быть нужным - итоговый. Скорее всего, он почти полностью будет защищен от изменений - только две ячейки останутся доступными: "дата с" и "дата по". В самом деле, почему ты должен ограничивать отчетную форму только одним месяцем? Ты ведь можешь захотеть данные за любой промежуток времени: за неделю, за декаду, за квартал, за полугодие...
Представляешь, что может получится? Книга из трёх (всего трёх!) листов, один из которых даже может быть скрытым.
На этом скрытом листе хранятся только данные - никакого особого форматирования и украшательства не требуется. А значит книга резко уменьшится в размере (честное слово, для формата ODF 242 килобайта - это очень и очень много, нормальная книга обычно умещается в 100-120 Кб)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

popkorn

#7
Прежде,хочу поблагодарить за помощь и поддержку - JohnSUN  :beer:
Цитироватьцех действительно работает без выходных и праздников?
- да
ЦитироватьНапример, формулу =SUM(D39-E32)+E6 прочитать можно, но понять - сложно: что там вообще делает SUM()?
-говорю же,когда начинал,я вообще не имел понятия,что такое ОО и как оно работает)) Думал сложить данные можно только через -SUM
ЦитироватьПочему не задал язык текста?
-ядерная физика для меня)))
ЦитироватьЧасть из них - фактические данные, которые вносятся руками, а часть - вычисляемые значения
- совершенно верно,вводится руками только количество фасованных мешков и в левой таблице синие и коричневые строки,остальное- вычисления

Теперь еще раз о том,что мне нужно:
1.Учет нафасованого брикета и угля по сменах (4 смены+4 мастера) (количество и виды)
2.Расход материала по видам продукции
3.Учет перефасовки из центрального склада и покупного угля в смену,за минусом брикета и угля из реторты (основной уголь)
4.Брикет-это рецептурный материал,мелкий уголь +мука+натри+опилки либо -мелкий уголь +крохмал+натрий+опилки.От рецептуры зависят коэффициенты списания материалов.При крохмале 0,9185 а при муке-0,776 по формулам видно

При МУКА,покупной уголь /1,028*0,76   -строка пок.уголь
             покупной уголь/1,028*0,24*0,776- строка пок.брикет

При Крохмал,покупной уголь /1,028*0,76   -строка пок.уголь
             покупной уголь/1,028*0,24*0,9185 - строка пок.брикет





[вложение удалено Администратором]

JohnSUN

Кто на основании кого вычисляется было не сложно понять - есть такой забавный инструмент Сервис-Зависимости... Но если руками нарисовал - спасибо! Всем полезно, и тебе тоже - лучше взаимосвязи данных понять можно.

Давай сделаем так: сильно кастрируем первоначальную книгу - снесём пароль, удалим все листы кроме первых двух и самого последнего. Опубликуем этот вариант, вычитаем формулы (и тексты), чтобы в "маленькой" книге уже всё-всё было как надо. А уже потом вернёмся к подбору вариантов решения
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

JohnSUN

Набросал книжку, о которой писал в прошлом сообщении ("кастрированную")

Будь добр, просмотри второй лист. Ячейки, в которых не было ни формул, ни текстов, я вставил их адреса с "решеткой" перед ним.
То есть, предполагается, что это именно те ячейки, в которые по ходу работы будут вписываться числа.
Сейчас их, кажется, 183. Возможно, какую-то ячейку пропустил, возможно, какую-то пометил лишнюю.
Нужно пересмотреть их и удалить лишние или вписать адреса в пропущенные в том же формате.
Перебрать их проще всего через Поиск строки #.+ с включенными Регулярными выражениями.
Это облегчит дальнейшую работу над облагораживанием книги.


[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

popkorn

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

прикрепил про всяк таблицу с которой мы щас работаем,там без защиты ячейки в которые вписываються даные
 
Нужно еще,что бы была возможность добавлять новые виды продукции и соответственно материалы под них,а также была возможность изменять коэффициенты по периодах.


пароль на файл-1103
на листы -03
не снял пароль дабы наглядней было видно ячейки для ввода в ручную

[вложение удалено Администратором]

JohnSUN

Цитата: popkorn от 11 февраля 2014, 20:29
Нужно еще,что бы была возможность добавлять новые виды продукции и соответственно материалы под них,а также была возможность изменять коэффициенты по периодах.
Жаль, но, кажется, на этом месте идея сделать всё в Calc'е накрылась медным тазом.
Можем, конечно, вернуться к самым первым вопросам - вставить новый лист и сразу присвоить ему имя в виде следующей даты. Это не сложно, это можно простеньким макросом сделать. Это по второму вопросу. А по первому и третьему - расшифруй подробнее.

Хоть и разглядываю таблицы не первый день, все-таки не берусь утверждать, что знаю где там "виды продукции" и "коэффициенты по периодах"
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

popkorn

Цитата: JohnSUN от 11 февраля 2014, 19:48"виды продукции"
- правая таблица прикрутил файлик

Цитата: JohnSUN от 11 февраля 2014, 19:48"коэффициенты по периодах"
например с 1 числа по 12 коэффициент мелочи 0,776.а с 13-го по 28 -0,832


[вложение удалено Администратором]

JohnSUN

Предполагалось, что после того как в укороченной книге Test_00.ods на втором листе будут отмечены ячейки для ввода данных, можно будет приступить к написанию нескольких макросов по обслуживанию данных книги.
Для этого нужно было бы установить расширение MRI - мощный инструмент для работы с OpenOffice и LibreOffice.
Что нужно было бы сделать? Открыть книгу Test_00.ods, выбрать из меню Сервис-Дополнения-MRI.
В открывшемся окне MRI переключиться на вкладку Methods и двойными щелчками на методах объектов пройти цепочку действий:
getSheets() - получить все листы текущей книги
getByIndex() с параметром 1 - получить второй лист книги (нумерация идёт с нуля), тот лист, где ячейки для ввода размечены "решётка+адрес ячейки"
createCursor(),gotoEndOfUsedArea() с параметром True - создать курсор для выбранного листа и растянуть его до самой последней используемой ячейки
getFormulaArray() - считать в массив все формулы всех ячеек, попавших в курсор.
После этого вкладка Methods будет пустой, у массива методов нет, есть только значения ("свойства", Properties) - переключаемся во вкладку Properties и видим содержимое всех ячеек нашего второго листа, вытянутое по вертикали ячейка за ячейкой. Как-то так:
(005,023) =
(006,000) = 3
(006,001) = ПІДДОНИ     800*1200
(006,002) = шт.
(006,003) = #D7
(006,004) = #E7
(006,005) = #F7
(006,006) = =SUM(D7+E7+F7)
(006,007) =
Из всех этих значений ячеек нас интересуют только те, которые начинаются с "решётки" (ячейки для ввода значений) и со знака равенства (формулы, которые что-то считают). Остальные ячейки или пустые, или содержат постоянный текст (заголовки, единицы измерения и т.п.).
Теперь можно было бы скопировать эти значения (у меня получилось 1344 ячейки) в новую Calc'овскую книгу, сразу же разделив значения на три позиции - номер строки, номер колонки и значение формулы. Это очень просто сделать, если вставлять содержимое буфера обмена как текст без форматирования с полями фиксированной ширины - установить разделители в позиции 1, 4, 5, 8 и 12, скрыть ненужные колонки (1,3 и 5) и задать для последней колонки тип столбца Текст.
Какая-нибудь простая формула в четвертой колонке вида
=(LEFT(C1;1)="#")*1+(LEFT(C1;1)="=")*2 позволит легко рассортировать ячейки на "нужные", "полезные" и "лишние".
У меня по имеющейся книге получилось "полезных" (вычисляемых) 339 ячеек, а "нужных" (вводимых) - 183. Но я не анализировал формулы, понадеялся, что ты лучше знаешь, что именно и как должно считаться. Возможно, этих ячеек будет меньше чем 522.
Дальше предполагалось:
- выбросить строки с типом 0 (это только оформление, хранить их нет смысла)
- преобразовать оставшиеся значения из этой таблицы в операторы присваивания с помощью формул вида
="arr("&(ROW()-1)&") = aData("&A2&")("&B2&")" (результаты формул должны были бы получился вроде такого arr(1) = aData(4)(3) и наоборот aData(4)(3) = arr(1))

Эти операторы послужили бы основой для макросов "прочитать вводимые значения из нужной строки с листа данных и вписать их в ячейки формы ввода" и "прочитать все значения из формы ввода и некоторые из них вписать в нужную строку листа данных".
Осталось бы совсем немного - написать и отладить эти макросы и повесить их на событие листа "Содержимое изменено".
Меняешь дату в заголовке формы - макрос пытается отыскать нужный день (строку с такой датой) в листе данных (если не находит - создаёт новую), вводимые значения из этой строки перекидывает в соответствующие ячейки формы и заставляет все формулы на листе пересчитаться. Меняешь какое-то вводимое значение в форме ввода - макрос считывает все значения из ячеек формы и записывает их в лист данных.

Если бы формулы не ссылались на значения предыдущих периодов, можно было бы их и не хранить.
Можно было бы дополнить каждую строку автоматически вставляемым значением текущей даты-времени (датой последнего изменения). Это позволило бы пересчитывать все накопленные данные день за днём в случае внесения правок задним числом...
И все твои данные удобно разместились бы на трёх листах книги, как я и писал чуть раньше.

В общем, так это всё и можно было бы реализовать...
Но твоя забаганка насчет "добавлять новые виды продукции и соответственно материалы под них" всю эту идею угробила...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне