LINUX.ORG.RU

Пишу между делом прогу для ведения бюджета предприятия

 , ,


0

0

Вот от нечего делать автоматизирую кусок документооборота предприятия. Программа позволяет создавать планы бюджетов на месяц и неделю, отслеживает счета, приходы, оплаты нал/безнал дабы заказавший позицию не терзал понапрасну телефон. Ведётся также учёт склада предприятия и склада отдела. Пишу всё на Python(PyQt, Sqlalchemy, Elixir), БД - Postgresql, отчёты html+javascript. Как допилю до вменяемого состояния выложу, авось кому ещё пригодится.

PS. Ш наверное Г, но я не фанат.

PS2. Пишу в Eclipse3.5 + PyDev 1.5, на компе Ubuntu 9.10 beta 64bit. Eclipse правда 32 ибо 64 это просто не функционален.

>>> Просмотр (1280x1024, 194 Kb)



Проверено: Shaman007 ()

>Как допилю до вменяемого состояния выложу, авось кому ещё пригодится.

Не пригодится. Хочешь адинэс затмить?

Karapuz ★★★★★
()

Мать перемать! "Строка документа". Вспоминаю ООП в универе.

Ian ★★
()

Не пойму, зачем строку документа выводить в отдельное окно?

Magister2k7
()

а че на питоне то, а не на великом и могучем?! интерпретатор таскать на венду(или неужели "предприятие" не на вендах работает) и подтормаживать на офисных машинах...

unisky ★★
()

Sqlalchemy, Elixir

А зачем?

отчёты html+javascript

xlwt

кусок документооборота предприятия.

А тут мое: http://img199.imageshack.us/img199/7403/kaalinv.png http://img27.imageshack.us/img27/3010/kaawin.jpg http://img178.yfrog.com/img178/2204/emacspysession.png Описывается все примерно такими шаблонами

 {"tblTMPDEPPRECEIPT": { # Имя шаблона
        'ResTitle': 'Расход на склад ГП',  #То, что пишется на вкладке
        'Table' : 'TMPDEPPRECEIPT', #Наименование таблицы из СУБД
        'Fields': {'NDoc': ('N док-та', 3, 'inG', 'inP', 'SK'), #Описание полей из запроса. Формат ниже:
                   'Stamp': ('Дата', 11, 'inG', 'inP', 'SK'),  #'Поле': ('Наименование поля', длина, 'Показывать в таблице', 'И на панели', 'Сортировать или нет'),  
                   'SSum': ('Сумма', 7, 'inG', 'inP', 'SK'),
                   'Quantity': ('Кол-во', 5, 'inG', 'inP', 'nS'),
                   'LastName': ('OTK', 8, 'inG', 'inP', 'SK'),
                   'Sdal': ('Сдал', 8, 'inG', 'inP', 'SK'),
                   'Memo': ('Примечание', 15, 'noG', 'inP', 'SK'),
                   'TMPSTOREHOUSE': ('Пр.Скл.', 2, 'inG', 'inP', 'SK'),
                   'Pname': ('Изделие', 16, 'inG', 'inP', 'nS'),
                   'CtCode': ('ШВИ', 4, 'inG', 'inP', 'nS'),},
        'FieldPosition':('NDoc', 'Stamp', 'SSum', 'Quantity', 'Sdal',  'LastName', 'Pname', 'CtCode', 'Memo', 'TMPSTOREHOUSE'), #Порядок полей. Используется потому, что словари не держат порядка ввода, однако оказался очень полезен для контроля видимости их в рантайме
        'Query':'''select pr.* from v_deppreceipt pr
        join tmpdeppreceipt d on d.id=pr.id
        order by  pr.stamp desc, pr.ndoc desc''', Собственно запрос
        'FilterForm':'fltDepPreceipt', Форма для фильтра
        'ChildLink': ('resDBDepPreceipt', 'IDTMPDEPPRECEIPT',)  #Описание шаблона для связанной конструкции (реализация Master-Detail), которая ниже по вложенности. Текущая конструкция вызывается подобным образом.
    }},
    {'Tasks': ('tskMoveDepPreceipt', 'tskPrintTmpStorehouse', 'tskSeveralInvoices',)} #Перечень задач. Задачи это все то, что невписывается в забивку данных, для которых предназначена таблица.
    ]
#Описание диалога редактирования и фильтрации.:
    'tblTMPDEPPRECEIPT':
       {'NDoc' : ('edit', 'N док-та'), #поле ввода. Вводимые данные контролируются типом поля
        'Stamp' : ('date', 'Дата'), #поле ввода даты (календарик)
        'OTK' : ('combo', 'tblMWorkers1', 'ОТК'), #Поле для ввода данных из списка, видно на рисунке. 'tblMWorkers1' - таблица, с фамилиями, которую видно на рисунке. Ее описание, похоже на шаблон выше
        'ENTEREDBY' : ('combo', 'tblMWorkers', 'Сдал'),
        'TMPSTOREHOUSE' : ('checkbutton', 'Промежуточный склад'), #Есть еще радиобуттон и группа чекбоксов
        'Memo' : ('edit', 'Примечание'),
        'FieldPosition':('OTK', 'NDoc','Stamp', 'ENTEREDBY', 'TMPSTOREHOUSE', 'Memo'),
        '$Actions$':({'Распечатать накладную':'cmPintInvoiceFP'}, #Выполнение неких действий, кроме релактирования прямо на форме редактирования, реализуется командами типа 'cmCondirmRec'.
                     {'Подтвердить поступление на склад':'cmCondirmRec'}),},
На основе приведенного кода генерируется все ГУИ, все нужные SQL-запросы (на модификацию, поиск, сортировку, запросы для master-detail-связей и прочее). Основная задача - напейсать запрос :). Прога на Python. Для гуя используется tkinter+tile+свой биндинг к TableList - http://nemethi.de/ xlwt - для отчетов. СУБД - Firebird

cab ★★★★
()
Ответ на: комментарий от unisky

интерпретатор таскать на венду

py2exe спасет отца русской демократии.

подтормаживать на офисных машинах...

То, что описал постом выше крутится на К62, 350, 64 МБ памяти. Быстрее, чем проги аналогичной направленности на плюсах (билдере)

cab ★★★★
()

Глаза не вылетают?

jcd ★★★★★
()

Нормуль

Deleted
()
Ответ на: комментарий от cab

Sqlalchemy, Elixir

А зачем?

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

отчёты html+javascript

xlwt

Ну я их просто в QWebView показываю и не парюсь.

Как ни странно, контора более чем на половину на Ubuntu, винда стоит только у тех кому нужны спец программы для налоговой, банка. 1С через терминальный сервер. В паре мест есть даже терминалы на LTSP.

LestorN
() автор топика

У, ё. А нормальный MDI интерфейс никак не сделать, а то интерфейсы в стиле 80-х годов это несерьезно.

Alex_A_V ★★
()

> Ед. изм

Такое ощущение, что это сокращение от слова "Едиотизм" :)

Почему после "Ед" точка стоит, а после "изм" её нет?

В остальном - респект.

P.S. Да, я буквоЕд.

UserUnknown ★★★★★
()
Ответ на: комментарий от Alex_A_V

[quote] У, ё. А нормальный MDI интерфейс никак не сделать, а то интерфейсы в стиле 80-х годов это несерьезно. [/quote]

MDI? Нормальный? Позже будут табы.

LestorN
() автор топика
Ответ на: комментарий от UserUnknown

Там ещё веселее встречается, надо вычитывать. А вот видел бы ты что нам в данных!!! Одних бензинов 3 штуки [АИ-80, Аи-80, АИ 80] :)))

LestorN
() автор топика
Ответ на: комментарий от LestorN

Мне важна скорость разработки

А что, ORM дает существенный прирост в скорости разработки, выполнения, и, главное, простоты поддержки по сравнению с SQL? Никогда не мог понять выгоды от применения этого лишнего уровня абстакции, к тому же запрос в ОО виде оченно смахивает на тот же SQL но без читабельности и гибкости, присущих последнему. Очень, очень мало где оправдано применение ORM. А минусов как-то больше. ИМХО.

Ну я их просто в QWebView показываю и не парюсь.

Это тебе сложных отчетов не надо. С подбивкой разных итогов, группировкой и сложным оформлением. Тогда тебе понадобится инструмент типа генератора отчетов или xlwt. Последний, кстати, мне понравился больше, например, FastReport-а, хотя и не умеет некоторых вещей. Для печати очень классно получается, народ доволен немеряно.

cab ★★★★
()
Ответ на: комментарий от cab

А что, ORM дает существенный прирост в скорости разработки, выполнения, и, главное, простоты поддержки по сравнению с SQL?

Да, даёт. Всё перечисленное кроме скорости выполнения. Вот выполнение сливает.

Это тебе сложных отчетов не надо. С подбивкой разных итогов, группировкой и сложным оформлением. Тогда тебе понадобится инструмент типа генератора отчетов или xlwt. Последний, кстати, мне понравился больше, например, FastReport-а, хотя и не умеет некоторых вещей. Для печати очень классно получается, народ доволен немеряно.

Да, пока не надо. Спасибо за наводку, гляну. Если б он его ещё сам показывать мог...

LestorN
() автор топика
Ответ на: комментарий от LestorN

по поводу ORM - сколько ни пробовал как в Python (и алхимию и SQLObject) так и в других ЯП- не дает. Кода, примерно как на SQL, но без использования СУБД-специфичных фич. Поддержка тоже хуже - кроме самого SQL надо знать и фичи используемого ОРМ-ма. Плюс ORM ни фига не отменяет всякого внутреннего хозяйства СУБД типа триггеров, процедур и прочего.

Если б он его ещё сам показывать мог

UNIX-way рулит. В зависимости от показывать должна программа, которая лучше других подходит для выполнения задачи. Например, Gnumeric отлично открывает то, что нагенерировал xlwt. Причем быстро, приблизительно, как тот же Fast Report.

cab ★★★★
()
Ответ на: комментарий от cab

Ну тут можно спорить, но если честно не охота. :) А вообще, чем дальше этим занимаюсь, тем больше убеждён, что для таких задач больше всего подходил бы какой-нибудь декларативный спец язык.

LestorN
() автор топика
Ответ на: комментарий от LestorN

[qoute]для таких задач больше всего подходил бы какой-нибудь декларативный спец язык. [/qoute] Давно использую. См. мой пост с кодом. У меня не поворачивается назвать мои шаблоны миниязыком, но общее направление то.

cab ★★★★
()
Ответ на: комментарий от cab

>Плюс ORM ни фига не отменяет всякого внутреннего хозяйства СУБД типа триггеров, процедур и прочего.

Что-то тут не так

Julio_Petrovich
()

Отлично!!! Но рулят зачастую не те, кто лучше сделал а кто умеет бабло срубать. Хотя может в 1С есть Head Hunter, и пригласят Вас! Я за тех, кто своим умом пытается делать и создавать!

garik05
()
Ответ на: комментарий от opensuse

>неправда, не всегда. я на компиз ушел где-то в 4.2.0, и тогда он еще не умел

В 4.2 точно умел. Только это было выключено по дефолту.

Pavval ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.