Подскажите, пожалуйста, есть ли в программе явно указанная связь между системным сегментом аналитики и файлом *.dbf и как её получить в спец. функции ?
То есть:
Если на счете, указан системный сегмент, например: Партнеры, то спец. функция должна понять, что обращаться нужно к файлу partner.dbf.
Или, если на счёте указан групповой системный сегмент Партнеры+Подразделение, то обращаться нужно сначала к файлу partner.dbf, а потом к файлу struct.dbf
Подскажите, пожалуйста, есть ли в программе явно указанная связь между системным сегментом аналитики и файлом *.dbf и как её получить в спец. функции ?
То есть:
Если на счете, указан системный сегмент, например: Партнеры, то спец. функция должна понять, что обращаться нужно к файлу partner.dbf.
Или, если на счёте указан групповой системный сегмент Партнеры+Подразделение, то обращаться нужно сначала к файлу partner.dbf, а потом к файлу struct.dbf
Добрый день!
Есть много функций которые это понимают.
Поставьте задачу поподробнее: что на входе и что надо получить на выходе?
У клиента в Б4+ было написано автозакрытие счетов затрат на Харборе.
Теперь при переходе на Б5 возникла необходимость автозакрытие переписать, но теперь нужно анализировать какой сегмент аналитики (статьи затрат,подразделения и т.д.) открыт на счете затрат и обращаться к нужному файлу.
Тему перенес сюда, поскольку работа с многосегментной аналитикой , который будут задавать.
Итак, исходя из Ваших данных, я пришел к мысли, что Вам по сути надо вычленять из аналитики проводки интересующее Вас измерение, по нему определять каким оно является сегментом : первым, вторым или третьим и дальше определившись с этим производить автозакрытие счета. И хотите это все рализовать программным способом.
Если задача мной описана правильно, то к этой задаче предоставляю Вашему вниманию следующую информацию :
Существует функция:
Код
// функция найдет информацию о сегментах аналитки на счете
// дополнена запоминанием последнего вызова
//aDimAnl -массив системных измерений для которых
//при использовании признака суффикса-префикса - недоступен справочник
Function SchetSegments(cSchet,cSegment,nGDim_ID,cPref_Suf,aDimAnl)
Воспользоваться функцией в простом виде можно следующим способом :
Дальше предлагаю средствами отладчика ознакомиться с содержимым массива.
Есть основание думать, что его содержимое позволит Вам решить Вашу задачу.
В частности, непосредственно в нкниге хозяйственный операций, когда по проводке мы
видим информацию об аналитиках в нижней части экрана, то из этого массива туда берется
наименование измерения - 5-й элемент массива
код аналитики по измерению - 13-й элемент массива
наименование аналитики - 14-й элемент массива
Если по какой-то причине этого Вам инструмента недостаточно для реализации Вашей задачи, просьба озвучить или расписать более детально.
В связи с появлением многосегментных аналитик появилась необходимость в многосегментных циклах перебора этих аналитик. Вот мой на Хотлайне, на который пока ответа нет. Может у кого-нибудь из партнеров есть свои варианты?
Цитата
Добрый день!
Подскажите, появились ли в БЭСТ-5 новые механизмы для работы с аналитикой (многоуровневой)? Типичная задача: на счете 20 двухуровневая аналитика (заказ/статья). В результате закрытия счета 20 возникает проводка:
Дт 43 Дт 20 (заказ="1"/статья="000000") - заказ "1" уже определен; статья "000000" - нераспределенные расходы.
Наша цель получить проводки:
Дт 43 Дт 20 (заказ="1"/статья="000000") со знаком "минус" и
Дт 43 Дт 20 (заказ="1"/статья="000001")
Дт 43 Дт 20 (заказ="1"/статья="000002") и т.д. пропорционально дебетовому сальдо по каждой статье заказа "1" на счете 20.
По аналогии с БЭСТ-4 используется цикл типа:
СЧ="20"
ПОКА ( ШАУ(СЧ) = 1 )
...
ВСЕ_ПОКА
но этот цикл перебирает все аналитики по сч.20 и нам приходится вставлять проверку на нужный заказ:
ЕСЛИ (ПОД_СТР(СЧ,18,15) = ЗАКАЗ )
...
ИНАЧЕ
ВСЕ_ПОКА
Учитывая, что на счете 50 заказов и 100 статей, процесс получается небыстрый :( Может бы в БЭСТ-5 уже появилась функция перебора аналитик, часть из которых уже жестко задана? Что-то вроде:
nordk пишет:
Алексей а может средствами Харбора ?
Скоб наложить...
Я правильно понимаю что первый сегмент - это номер заказа ?
Да, совершенно верно. Сначала в групповой операции идет выбор проводок через ПОЛ_ПРОВ(СЧ+"*-000000","КТ"), а счета СЧ выбираются по циклу из массива 20-х счетов. Полученная проводка уже несет в себе номер заказа. Если попробовать скобом ... я им пользоваться не очень умею. То есть наложить его могу, типа в зарплатных отчетах, но обороты бухгалтерские никогда считать не пробовал - мне стандартные функции БЭСТа больше нравятся. Как через Харбор надо будет организовать цикл по второму сегменту? Откуда зачитывать справочник статей затрат?
Я наверно либо сильно перегружен либо тупой - не могу никак понять суть проблемы до конца. А Вы можете мне в файлик пусть Excel положить пару десятков проводок, таких чтобы наглядно было видно вот эти проводки а из них я должен получить вот такие и
их список.
А дальше я хочу увидеть желание в двумерном массиве это крутить.
Что касается харбора - то он чудно вызывается в том же самом языке что Вы пишете и результат расчета может положить в переменную по которой Вы и сформируете проводку.
Т.е. харбору только выделяем роль более тонкой настройки выборки и фильтрации данных,
суммирование.
Алексей дайте пример и мы на нем разберем как на харборе сделаем вставку в Вашу групповую операцию абсолютно штатными средствами
nordk пишет:
Алексей дайте пример и мы на нем разберем как на харборе сделаем вставку в Вашу групповую операцию абсолютно штатными средствами
Чтобы не усложнять, выкладываю типичное распределение. Там, конечно, куча тонкостей, но это уже на скорость существенно не влияет. Итак:
Prov1.xls - одна исходная проводка Дт 43 Кт 204 [Заказ 001/Статья затрат 000000]
происходит частичное закрытие заказа для отгрузки заказчику; бухгалтер указывает заказ и "общую" статью
An_spr1.xls - аналитическая справка по счету 204/заказ 001
можем видеть, что заказ в производстве уже несколько месяцев; есть незавершенное производство и текущие затраты
После выполнения групповой операции:
Prov2.xls - исходная проводка Дт 43 Кт 204 [Заказ 001/Статья затрат 000000]; сторнирование её со знаком "минус", чтобы не накручивать обороты по счету; и распределение суммы по имеющимся на заказе статьям затрат
конечная сумма проводки определяется по формуле [Сумма исходной проводки]*[Дебетовое сальдо на начало периода плюс дебетовый оборот по статье на данной заказе]/[Дебетовое сальдо на начало периода плюс дебетовый оборот по данному заказу в целом]
An_spr2.xls - аналитическая справка по счету 204/заказ 001
произошло распределение "общей" суммы по фактическим статьям затрат; сальдо заказа свернулось, показывая незавершенное производство
Суть проблемы: чтобы получить какую-нибудь статью затрат на заказе 001, приходится фактически перебирать все статьи на всех заказах, отбрасывая ненужные.
Примечание: в отличие от примера, данный заказ может закрываться не одной, а несколькими однотипными проводками. различающимися только суммами (в случае сдачи работ по каждому этапу отдельно).
Алексей Макаров пишет:
Учитывая, что на счете 50 заказов и 100 статей, процесс получается небыстрый :( Может бы в БЭСТ-5 уже появилась функция перебора аналитик, часть из которых уже жестко задана? Что-то вроде:
СЧ="20*."+ЗАКАЗ
ПОКА ( ШАУ(СЧ) = 1 )
...
ВСЕ_ПОКА
Да такая появилась в версии 2.2 от 10.02.2004
Если на всех 20-х открыта одна и та же аналитика, то
СЧ="201"
СЧ1="20*."
Внутри функции ДТС() (КТС и т.д.) должна получится строка: "20*.заказ*-код_ан1*"
символы * нужно писать, так как длина сегмента моджет оказать длинее длинее чем Вы указываете заказ.
АНАЛИТ(АП,ИЗМ[2],в)
АП - воврщает код аналитики в аналитическом справочнике, указанном во втором параметре ( нужно обязательно перед вызовом эту переменную объявить и присвоить пустоту, как в примере, тогда работать начет с первого значения вида измерения или присвоить какое-то значение, тогда будет работать со следщуего после указанного).
ИЗМ[2] - возвращает GUID 2 измерения на счете
в - возвращает наименование аналитики.
Еси функция аналитит() исползуется не в цикле, то у нее есть еще 4 параметр, текстовый для запросов
TTT=""
АНАЛИТ(АП,ИЗМ[2],в,TTT)
выйдет запрос
"Код аналитики" и можно по справочнику выбрать значение, указанного вида измерения.
Если в переменной TTT написать свой текст, то взапросе будет он вместо слов "Код аналитики"
Большое спасибо за совет - экспериментирую :) В очередной раз убедился, что в БЭСТе есть всё ... главное знать, где искать.
PS: Еще один в тему:
В ПРО есть такая функция, как "Расчет оборотов по счету". В чем ее смысл: пишем Ф("201",Д0,Д) и программа где-то в глубине себя рассчитывает аналитический оборотно-сальдовый баланс по данному счету, выкидывает из него все нулевые строки и кладет к себе в память. Если я потом запускаю перебор аналитик, корреспондирующих счетов и т.п., то мне не требуется проверять, "живая" это аналитика или нет. То есть если в данном месяце из 100 статей затрат на счете работали только 20, то и цикл прокрутится только 20 раз. Существует ли аналог этого в БЭСТ-5?
Большое спасибо за совет - экспериментирую :) В очередной раз убедился, что в БЭСТе есть всё ... главное знать, где искать.
PS: Еще один в тему:
В ПРО есть такая функция, как "Расчет оборотов по счету". В чем ее смысл: пишем Ф("201",Д0,Д) и программа где-то в глубине себя рассчитывает аналитический оборотно-сальдовый баланс по данному счету, выкидывает из него все нулевые строки и кладет к себе в память. Если я потом запускаю перебор аналитик, корреспондирующих счетов и т.п., то мне не требуется проверять, "живая" это аналитика или нет. То есть если в данном месяце из 100 статей затрат на счете работали только 20, то и цикл прокрутится только 20 раз. Существует ли аналог этого в БЭСТ-5?
Добрый день!
В папке Client\Source\xharbour\common содержатся описания общих функций, в частности:
ФУНКЦИИ РАСЧЕТА ОБОРОТОВ И ОСТАТКОВ ПО СЧЕТАМ
DR(<НомерСчета>, <ФинГод>, <РасчПериод>, <ТипДанных>)
Функция вычисления данных по дебету счета.
- НомерСчета (символьный).Обязательный параметр.Должен быть указан только номер
счета или номер счета и сегментная аналитика счета (через точку).
- ФинГод. Финансовый год (символьный или число) или начальная дата расчета
- РасчПериод.Номер расчетного месяца (число или символьный) или конечная дата
расчета (для остатков равна начальной).
- ТипДанных. Тип данных по счету.Принимает значения 1,2,3,4 (число).
Тип = 1. За текущий период. Функция возвращает оборот по дебету счета за
расчетный период.
Тип = 2. С начала года. Функция возвращает оборот по дебету счета с начала
года и до конца текущего периода.
Тип = 3. Баланс на начало периода. Функция возвращает остаток по дебету счета
на начало периода.
Тип = 4. Баланс на начало года. Функция возвращает остаток по дебету счета на
начало финансового года.
Тип = 5. Баланс на конец периода. Функция возвращает остаток по дебету счета
на конец периода.
CR(<НомерСчета>, <ФинГод>, <РасчПериод>, <ТипДанных>)
Функция вычисления данных по кредиту счета.
DCR(<НомерСчета>, <ФинГод>, <РасчПериод>, <ТипДанных>, <Вид оборота>)
Функция вычисления данных по дебету или кредиту счета.
- <Вид оборота> = 2 - вызывается функция CR(<НомерСчета>, <ФинГод>, <РасчПериод>, <ТипДанных>)
- в других случаях вызывается функция DR(<НомерСчета>, <ФинГод>, <РасчПериод>, <ТипДанных>)
DC(<НомДтСчет>, <НомКтСчет>, <ФинГод>, <РасчПериод>, <ТипДанных>)
Функция вычисления оборота между корреспондирующими счетами.
- НомДтСчет. Обязательный параметр - дебетуемый счет. Должен быть указан только
номер счета или номер счета и сегментная аналитика счета (через точку).
- НомКтСчет. Обязательный параметр - кредитуемый счет.
- ФинГод. Финансовый год (символьный или число) или начальная дата расчета.
- РасчПериод.Номер расчетного месяца (число или символьный) или конечная дата
расчета.
- ТипДанных. Тип данных по счету.Принимает зна-чения 1,2
Тип = 1. За текущий период. Функция возвращает оборот между счетами за
расчетный период.
Тип = 2. С начала года. Функция возвращает оборот между счетами с начала года
и до конца текущего периода.
**********/
nordk пишет:
Дальше предлагаю средствами отладчика ознакомиться с содержимым массива. Есть основание думать, что его содержимое позволит Вам решить Вашу задачу.
В частности, непосредственно в нкниге хозяйственный операций, когда по проводке мы видим информацию об аналитиках в нижней части экрана, то из этого массива туда берется
наименование измерения - 5-й элемент массива код аналитики по измерению - 13-й элемент массива наименование аналитики - 14-й элемент массива
Если по какой-то причине этого Вам инструмента недостаточно для реализации Вашей задачи, просьба озвучить или расписать более детально.
Да, действительно всё так - большое спасибо за консультацию, но попутно возникла задача не только определить сегменты аналитики, но и их значения.
Штатные функции вы менять не можете.
Могу предложить описание кода на базе которого Вы создадите свой, но при изменении идеологии программы штатный код изменится, а Ваш нет.....
Хочется понять чем они Вам мешают, ведь расчет не обязателен вроде как или я не прав ?
Я не хочу менять штатные функции, я спрашиваю про Запрос, который выдаётся при использовании этих функций - можно ли этот запрос отключить.
А мешает этот запрос таким образом: при использовании функций DR и CR неграмотный пользователь может запустить расчёт банка данных случайно или специально, так вот я и хочу избежать этой ситуации, отключив запрос, и расчёт выполнять не по банку данных. Этот банк данных строится сутки если не больше.
Сан Саныч уже пообещал запрос отключить, а вот почему банк данных столько строится ?
Это на базе в 300 тысяч проводок ?
Запускаете задачу локально на сервере?
В это время еще какие-то задачи крутятся ?
Александр Батищев пишет:
Этот банк данных строится сутки если не больше.
После выхода СП21 (надеюсь) попробуйте сделать индексацию и посмотреть время построение банка данных по счетам.
Сутки идет полный перерасчет или за последний месяц? И присоединяюсь к у, расчет банка данных по счетам проходит локально или по сети?
P.S. В будущем видимо будет возможность запускать расчет по рассписанию.
nordk пишет:
Сан Саныч уже пообещал запрос отключить, а вот почему банк данных столько строится ? Это на базе в 300 тысяч проводок ? Запускаете задачу локально на сервере? В это время еще какие-то задачи крутятся ?
В базе данных сейчас 352503 проводки, это соответствует первому полугодию.
Всё расчёты и первичный, и перестроение запускаем на сервере.
Задач на сервере больше нет, сервер специально куплен только для БЭСТ5. Единственная подозрительная задача, это антивирус Касперского, но по идее, он не должен сильно тормозить.
Денис пишет:
После выхода СП21 (надеюсь) попробуйте сделать индексацию и посмотреть время построение банка данных по счетам. Сутки идет полный перерасчет или за последний месяц? И присоединяюсь к у, расчет банка данных по счетам проходит локально или по сети?
Давай так поступим, я сейчас на сервере клиента запущу полный переасчёт и по результаты сообщу позже.
Считаем локально на сервере.
Александр Батищев пишет:
Единственная подозрительная задача, это антивирус Касперского, но по идее, он не должен сильно тормозить.
Для чистоты эксперимента отключите его.
Эти антивирусные программы такой ужас, что теперь и не знаешь пользоваться ими или лучше не пользоваться.....
Достаточно на один компьютер поставить лицензионного Касперского и DR Web и можно наблюдать спектакль их постоянной драки.
Результаты таковы:
БЭСТ5 SP 20, к сожалению не было возможности построить банк данных по счетам на SP21..
Касперский выключен был.
В main.dbf 352503 проводок
Сервер у клиента - 2 процессора Intel Xeon по 4-ре ядра 2.33 Ghz, RAM 4 Gb, зеркало SATA по 500Gb, 2LAN x 1000, OC - Windows Server 2003 Enterprise Edition
Расчёт шёл 1 час 45 минут - достаточно быстро, но 1 час 45 миниут х 53 пользователя = 92,75 часа.
Это больше чем две рабочих недели простоя ...
"Типа сервер" у меня - HP Compaq 1 процессор Intel на два ядра 2.8 Ghz, RAM 4 Gb, SATA, 1 LAN x1000, ОС - Windows XP Prof.
Построение банка данных шло 22 часа 15 минут.
В целом - результатами удовлетворён.
Есть одно обстоятельство - я нигде не нашёл есть ли в SP21 изменения по функциям DR и CR?
Сделали ли параметр отвечающий за расчёт по main.dbf или по банку данных и как его вызывать, если сделали?