Если нечем занять мозги - плиз! помогите ;))

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Если нечем занять мозги - плиз! помогите ;))

Сообщение Saltava »

Господа профессианалы и просот образованые люди!
Мине, значидь, поставили задачу, а я в ВИПе ни бум-бум. Все говоряд, что проще осваивать на конкретном примере - может поможите. Дела такое: необходимо сформировать отчет, содержащий движение ТМЦ, полученых в результате инвентаризации\демонтажа (GroupParty.Kode='1111111111'). А также остатки на начало и конец задаваемого периода. Я даже выборку построить не могу!
Есть похожие протатипы, но если их брать, то формироваться отчет будет вечность. ХЕЛБ ПЛИЗ!
Viva la resistans
Hmyrii
Постоянный гость
Сообщения: 62
Зарегистрирован: 07 июн 2006, 08:23

Сообщение Hmyrii »

ну если я правельно понял задачу то тема примерно такая

вот звязка таблиц

Код: Выделить всё

where
((
     TmpSaldo1.cMc       == KatMc.Nrec
 and KatMc.cEd           == Kated.Nrec
 and TmpSaldo1.cMc       == KatParty.cMC
 and TmpSaldo1.cMol      == KatMol.Nrec
 and TmpSaldo1.cPodr     == KatPodr.Nrec
 and TmpSaldo1.cGroupMc  == GroupMc.Nrec

 and TmpSaldo1.cMC       == SpOrder.cMC(NoIndex)
 and TmpSaldo1.cParty    == SpOrder.cParty(NoIndex)
 and TmpSaldo1.cMOl      == SpOrder.ccMOl(NoIndex)
 and TmpSaldo1.cPodr     == SpOrder.ccPodr(NoIndex)
)); 
из нее ты можешь выдернуть все мц, все текущие остатки по этим МЦ, все партии, при этом есть инфа по МОЛ-у, подразделению и групп МЦ.

пере работой надо заполнить таблицу TmpSaldo1

Код: Выделить всё

Store_Init;
Store_ReInit;
Store_Run(data_, mc_, podr_, mol_, party_, true, true, true);
Store_Done;
для того чтоб поиметь по каждому МЦ и каждой ее партии сопроводительный документ со спецификацией можно заюзать такую связочку

Код: Выделить всё

create view ViewSklOrder
    var 
      CurMC    : comp;
      CurParty : comp;
    as select * 
    from
      synonym SpOrder  SpOrder111
     ,synonym SklOrder SklOrder111
     ,synonym KatSopr  KatSopr111
    where
    ((
         CurMC                == SpOrder111.cMC(NoIndex)
     and CurParty             == SpOrder111.cParty(NoIndex)
     and SpOrder111.cSklOrder == SklOrder111.NRec
     and SklOrder111.cSopr    == KatSopr111.Nrec
    ));
для новичка связать таблицы пожалуй самое сложное, далее уже дело техники, выбирай нужнуе тебе данные в нужном ракурсе и пиши отчет
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Hmyrii
>^_^< СПАСИБО!!! Буду разбираться. Только вот через что мне выдернуть 1111111111 == GroupParty.Kod?
Я предполагаю, что GropeParty.nrec == KatMC.CGroupMC
-============???============-
Viva la resistans
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

Можно понять так.
Включить журнализацию на все таблы(впрочем здесь справочники, а на них уж точно должна быть). Перезайти в галку, выполнить привязку - посмотреть в сапорте какие таблы менялись и какие поля под вами.
Второй вариант найти dict.opi - там не все, но в основном все связки прописаны.
привязка на данную таблу такая
KatParty.cGroupParty == GroupParty.NRec
могет быть GroupParty.сMc == Katmc.nrec но эт вроде Мц по умолчанию.
Или вы не ту таблу берете за основу - есть еше GroupMc.
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Я так понял, что раз мне надо взять движение МЦ только по группе партий с кодом 1111111111, то и плясать надо от подцепки 1111111111 == GroupParty.Kod? А далее может GroupParty.nRec == KatParty.cGroupParty и далее цеплять TmpSaldo1... Эээээ :???: ..... Ыыыыы :? .. Бред наверное ;)
Viva la resistans
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

почему же бред
далее бежите по katparty и для каждой вызываете
Store_Run(data_, 0, 0, 0, Katparty.nrec, true, true, true);
и потом обработку по TmpSaldo1.
можно конечно добавить все нужные Katparty в Pick и вызвать Store_Run один раз, но это уже не для вас 8-)
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Богом моль, не ругайтесь, но ..... зачем эти строки
Store_Init;
Store_ReInit;
Store_Run(data_, mc_, podr_, mol_, party_, true, true, true);
Store_Done;
и для чего они вообще нуны. Похоже на какую-то функцию, но нигде не могу найти ее описание :eek:
Я вообще пока синтаксиса ВИПовского не знаю толком
МЛЯТЬ, КАК ЖЕ Я НЕНАВИЖУ СВОЮ ТУПУЮ БАШКУ !! :(
Viva la resistans
Hmyrii
Постоянный гость
Сообщения: 62
Зарегистрирован: 07 июн 2006, 08:23

Сообщение Hmyrii »

не надо трагедий
а описание ты где ишешь? в хелпе? их там нет
это библиотечные ф-ции, если у вашей конторы есть исходники галактики то можешь их там посмотреть, хотя толку от того скорее всего не будет, по крайней мере мне это не чего не дало
а общая суть этих ф-ций в том чтоб пересчитать остатки по псем позициям МЦ

ладно, время есть попишу малость
есть таблица Pick, она служебная, то есть когда тебе надо фильтрации пометить пометить какието записи из каталога, например МОЛ или МЦ, то Nrec-и этих записей заганяют в таблицу Pick. Чтоб потом не путать, чей же это Nrec, для каждой записи идентифицирующий ее код
итак, Pick.cRec - это пемеченный Nrec, а Pick.wList - это код, если wList = 11 то это подразделение, если 7 - МЦ, если 10 - партия, если 27 - МОЛ .............
это то что касается таблицы Pick. Так вот теперь можно вернуться к параметрам ф-ции Store_Run();
data - на какую дату произвести расчет остатков МЦ
mc_ - если устоновил фильтр по МЦ и в Pick-е у тебя есть помеченные записи с кодом 7 то передаешь в качестве паратера -2, в противном случае 0
по аналогии и параметры podr_, mol_, party_
насчет последних трех не помню, видно лажа какая то и можно оставлять без изменений :),

вобще хочу сказать что если у вас нет исходников галки то постижение будет не излегких, а вот если есть то читай их как мусульманин каран читает, там есть ответы на ВСЕ вопросы, я хелпом почти не пользуюсь, надо что делать, я ищу похожий интерфейс в галке, потом беру его исходники и разбираюсь, лично мне так проще и быстрее

есть похожий отчет, могу поделиться исходниками, думаю он тебе подойдет, ну или на крайняк что то подправишь
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Спасибо за уделенное время! :-) За исходник был бы крайне признателен. Если хотите - можно на мыло кинуть или как вам будет удобнее... Насичет исходников Галки, то их полно, да еще куча специфичных разработок и доработок в придачу, поэтому учится мне - непереучится :grin: . Меня бесит то, что я , вроде в инстетуте считался неплохим программером, уже 4-ю неделю не могу разобраться с ВИПом. Очень хочется побыстрее стать максимально полезным.
Еще проблема - в моем случае пересчет сальдовых остатков очен ьспецифичен, поэтому стандартные исходники мне сказали не трогаь - ничего не получится. У них тут написана какая то спец функция на этот счет. С ней я и парюсь.
Viva la resistans
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Что за чьёр - при компиляции выдает ошибку "Необходим ключ CPARTY+DORD+DORD", если раскоменчиваю ограничения на дату:

Код: Выделить всё

Interface TMCmove 'Параметры отчета';
Show at (1,1,40,10);
Create view TMCmoveview 
var
 Begdate,EndDate: Date;
as select *
from 
  GroupParty, Katparty, SpOrder,KatSopr, SklOrder
where((
         1111111111        == GroupParty.Kod and 
         GroupParty.nRec   == Katparty.cGroupParty and 
         KatParty.nRec     == SpOrder.cParty and 
         SpOrder.cSklOrder == SklOrder.nRec and 
         SklOrder.cSopr    == KatSopr.nrec and
         KatMc.nRec        == SpOrder.cMc
        // begdate          <<= sporder.dord and
        // enddate          >>= sporder.dord
          
     ));

Form frm_TMCmove ('TMCmove.out','TMCmove');
Screen TMCmove;
Fields
  begdate ('Введите начальную дату'): [,'DD/MM/YYYY'],noprotect;
  enddate ('Введите конечную дату'): [,'DD/MM/YYYY'],noprotect;
Buttons
  cmOk, default,,'OK';
  cmCancel,,,'Отмена';
  <<

  Начало периода .@@@@@@@@@@

  Конец периода  .@@@@@@@@@@

  <.Принять.>      <.Выход.>   
  
  >>
end;// Screen
Viva la resistans
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

???
Последний раз редактировалось Saltava 02 авг 2006, 07:09, всего редактировалось 1 раз.
Viva la resistans
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

???
Последний раз редактировалось Saltava 02 авг 2006, 07:08, всего редактировалось 1 раз.
Viva la resistans
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Еще вопрос. Чтобы вывести движение по каждой МЦ, надо сначала вробежатся по таблице sporder, посчитать весь приход ии весь расход в разрезе этой МЦ и потом записать в другую таблицу для вывода. Так чтоли?
Viva la resistans
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Есть у кого-нибудь простенький пример прототипа формирования движения мат ценностей, ато у нас одна оборотная ведомость, а в ней столько наворочено, что я никак не могу разобраться.
Viva la resistans
Ответить