BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
Программирование в БЭСТ 5, Связь между системным сегментом и файлом dbf
 
Уважаемые партнеры.

Подскажите, пожалуйста, есть ли в программе явно указанная связь между системным сегментом аналитики и файлом *.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)


Воспользоваться функцией в простом виде можно следующим способом :

Код
aSegments:=SchetSegments([FIELD->SCHET],[FIELD->CODE])


Дальше предлагаю средствами отладчика ознакомиться с содержимым массива.
Есть основание думать, что его содержимое позволит Вам решить Вашу задачу.

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

наименование измерения - 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 уже появилась функция перебора аналитик, часть из которых уже жестко задана? Что-то вроде:

СЧ="20*."+ЗАКАЗ
ПОКА ( ШАУ(СЧ) = 1 )
...
ВСЕ_ПОКА

И тогда цикл резко убыстряется :)
 
Алексей а может средствами Харбора ?
Скоб наложить...
Я правильно понимаю что первый сегмент - это номер заказа ?
 
Цитата
nordk пишет:
Алексей а может средствами Харбора ?
Скоб наложить...
Я правильно понимаю что первый сегмент - это номер заказа ?


Да, совершенно верно. Сначала в групповой операции идет выбор проводок через ПОЛ_ПРОВ(СЧ+"*-000000","КТ"), а счета СЧ выбираются по циклу из массива 20-х счетов. Полученная проводка уже несет в себе номер заказа. Если попробовать скобом ... я им пользоваться не очень умею. То есть наложить его могу, типа в зарплатных отчетах, но обороты бухгалтерские никогда считать не пробовал - мне стандартные функции БЭСТа больше нравятся. Как через Харбор надо будет организовать цикл по второму сегменту? Откуда зачитывать справочник статей затрат?
 
Я наверно либо сильно перегружен либо тупой - не могу никак понять суть проблемы до конца. А Вы можете мне в файлик пусть Excel положить пару десятков проводок, таких чтобы наглядно было видно вот эти проводки а из них я должен получить вот такие и
их список.
А дальше я хочу увидеть желание в двумерном массиве это крутить.

Что касается харбора - то он чудно вызывается в том же самом языке что Вы пишете и результат расчета может положить в переменную по которой Вы и сформируете проводку.
Т.е. харбору только выделяем роль более тонкой настройки выборки и фильтрации данных,
суммирование.
Алексей дайте пример и мы на нем разберем как на харборе сделаем вставку в Вашу групповую операцию абсолютно штатными средствами :lol:
 
Цитата
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*."

СЧЕТ_ИЗМЕРЕНИЯ(СЧ,ИЗМ)
в=""
АП=""
ПОКА(АНАЛИТ(АП,ИЗМ[2],в)=1)
аа=ДТС(СЧ1+заказ+"*-"+АП+"*")
ВСЕ_ПОКА

Внутри функции ДТС() (КТС и т.д.) должна получится строка: "20*.заказ*-код_ан1*"
символы * нужно писать, так как длина сегмента моджет оказать длинее длинее чем Вы указываете заказ.

АНАЛИТ(АП,ИЗМ[2],в)

АП - воврщает код аналитики в аналитическом справочнике, указанном во втором параметре ( нужно обязательно перед вызовом эту переменную объявить и присвоить пустоту, как в примере, тогда работать начет с первого значения вида измерения или присвоить какое-то значение, тогда будет работать со следщуего после указанного).
ИЗМ[2] - возвращает GUID 2 измерения на счете
в - возвращает наименование аналитики.

Еси функция аналитит() исползуется не в цикле, то у нее есть еще 4 параметр, текстовый для запросов
TTT=""
АНАЛИТ(АП,ИЗМ[2],в,TTT)
выйдет запрос
"Код аналитики" и можно по справочнику выбрать значение, указанного вида измерения.
Если в переменной TTT написать свой текст, то взапросе будет он вместо слов "Код аналитики"


В HL ответ дан

Глухова Ирина
Отдел разработки
Компания "БЭСТ"
 
Добрый день, Ирина!

Большое спасибо за совет - экспериментирую :) В очередной раз убедился, что в БЭСТе есть всё ... главное знать, где искать.

PS: Еще один Вопрос в тему:

В ПРО есть такая функция, как "Расчет оборотов по счету". В чем ее смысл: пишем Ф("201",Д0,Д) и программа где-то в глубине себя рассчитывает аналитический оборотно-сальдовый баланс по данному счету, выкидывает из него все нулевые строки и кладет к себе в память. Если я потом запускаю перебор аналитик, корреспондирующих счетов и т.п., то мне не требуется проверять, "живая" это аналитика или нет. То есть если в данном месяце из 100 статей затрат на счете работали только 20, то и цикл прокрутится только 20 раз. Существует ли аналог этого в БЭСТ-5?
Изменено: Алексей Макаров - 29.06.2009 10:56:38
 
Цитата
Алексей Макаров пишет:
Добрый день, Ирина!



Большое спасибо за совет - экспериментирую :) В очередной раз убедился, что в БЭСТе есть всё ... главное знать, где искать.



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...

Есть ли возможность, при вызове этих функций из скрипта на Харборе, отключить запрос по расчёту банка данных?
Счастливый бухгалтер
 
Штатные функции вы менять не можете.
Могу предложить описание кода на базе которого Вы создадите свой, но при изменении идеологии программы штатный код изменится, а Ваш нет.....
Хочется понять чем они Вам мешают, ведь расчет не обязателен вроде как или я не прав ?
 
Я не хочу менять штатные функции, я спрашиваю про Запрос, который выдаётся при использовании этих функций - можно ли этот запрос отключить.

А мешает этот запрос таким образом: при использовании функций DR и CR неграмотный пользователь может запустить расчёт банка данных случайно или специально, так вот я и хочу избежать этой ситуации, отключив запрос, и расчёт выполнять не по банку данных. Этот банк данных строится сутки если не больше.
Счастливый бухгалтер
 
Сан Саныч уже пообещал запрос отключить, а вот почему банк данных столько строится ?
Это на базе в 300 тысяч проводок ?
Запускаете задачу локально на сервере?
В это время еще какие-то задачи крутятся ?
 
Цитата
Александр Батищев пишет:
Этот банк данных строится сутки если не больше.


После выхода СП21 (надеюсь) попробуйте сделать индексацию и посмотреть время построение банка данных по счетам.
Сутки идет полный перерасчет или за последний месяц? И присоединяюсь к Вопросу, расчет банка данных по счетам проходит локально или по сети?

P.S. В будущем видимо будет возможность запускать расчет по рассписанию.
 
При количестве проводок 80 000 пересчет банка данных на сервере у меня занимает часа 3.
С уважением,
Ильин Евгений
 
Цитата
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 или по банку данных и как его вызывать, если сделали?
Счастливый бухгалтер
 
Цитата
Александр Батищев пишет:

Есть одно обстоятельство - я нигде не нашёл есть ли в SP21 изменения по функциям DR и CR?

Сделали ли параметр отвечающий за расчёт по main.dbf или по банку данных и как его вызывать, если сделали?

Не успели в SP21. Как сделаем, я выложу bdll.
Страницы: 1 2 След.
Читают тему (гостей: 2)