Страница 1 из 1

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

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

Добавлено: 28 июл 2006, 07:37
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
    ));
для новичка связать таблицы пожалуй самое сложное, далее уже дело техники, выбирай нужнуе тебе данные в нужном ракурсе и пиши отчет

Добавлено: 28 июл 2006, 08:52
Saltava
Hmyrii
>^_^< СПАСИБО!!! Буду разбираться. Только вот через что мне выдернуть 1111111111 == GroupParty.Kod?
Я предполагаю, что GropeParty.nrec == KatMC.CGroupMC
-============???============-

Добавлено: 28 июл 2006, 09:53
edward_K
Можно понять так.
Включить журнализацию на все таблы(впрочем здесь справочники, а на них уж точно должна быть). Перезайти в галку, выполнить привязку - посмотреть в сапорте какие таблы менялись и какие поля под вами.
Второй вариант найти dict.opi - там не все, но в основном все связки прописаны.
привязка на данную таблу такая
KatParty.cGroupParty == GroupParty.NRec
могет быть GroupParty.сMc == Katmc.nrec но эт вроде Мц по умолчанию.
Или вы не ту таблу берете за основу - есть еше GroupMc.

Добавлено: 28 июл 2006, 10:24
Saltava
Я так понял, что раз мне надо взять движение МЦ только по группе партий с кодом 1111111111, то и плясать надо от подцепки 1111111111 == GroupParty.Kod? А далее может GroupParty.nRec == KatParty.cGroupParty и далее цеплять TmpSaldo1... Эээээ :???: ..... Ыыыыы :? .. Бред наверное ;)

Добавлено: 28 июл 2006, 10:45
edward_K
почему же бред
далее бежите по katparty и для каждой вызываете
Store_Run(data_, 0, 0, 0, Katparty.nrec, true, true, true);
и потом обработку по TmpSaldo1.
можно конечно добавить все нужные Katparty в Pick и вызвать Store_Run один раз, но это уже не для вас 8-)

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

Добавлено: 29 июл 2006, 09:52
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_
насчет последних трех не помню, видно лажа какая то и можно оставлять без изменений :),

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

есть похожий отчет, могу поделиться исходниками, думаю он тебе подойдет, ну или на крайняк что то подправишь

Добавлено: 31 июл 2006, 05:54
Saltava
Спасибо за уделенное время! :-) За исходник был бы крайне признателен. Если хотите - можно на мыло кинуть или как вам будет удобнее... Насичет исходников Галки, то их полно, да еще куча специфичных разработок и доработок в придачу, поэтому учится мне - непереучится :grin: . Меня бесит то, что я , вроде в инстетуте считался неплохим программером, уже 4-ю неделю не могу разобраться с ВИПом. Очень хочется побыстрее стать максимально полезным.
Еще проблема - в моем случае пересчет сальдовых остатков очен ьспецифичен, поэтому стандартные исходники мне сказали не трогаь - ничего не получится. У них тут написана какая то спец функция на этот счет. С ней я и парюсь.

Добавлено: 01 авг 2006, 08:58
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

Добавлено: 01 авг 2006, 08:59
Saltava
???

Добавлено: 01 авг 2006, 08:59
Saltava
???

Добавлено: 01 авг 2006, 12:19
Saltava
Еще вопрос. Чтобы вывести движение по каждой МЦ, надо сначала вробежатся по таблице sporder, посчитать весь приход ии весь расход в разрезе этой МЦ и потом записать в другую таблицу для вывода. Так чтоли?

Добавлено: 02 авг 2006, 07:06
Saltava
Есть у кого-нибудь простенький пример прототипа формирования движения мат ценностей, ато у нас одна оборотная ведомость, а в ней столько наворочено, что я никак не могу разобраться.