nordk пишет:
Все так, но следует помнить что цифра сводной карточки может быть ошибочной. Вспоминая Вашу любовь к точности и дотошность - сразу предупреждаю. Цифра легко уточняется утилитой пересчета остатков.
С таким же успехом можно и банк данных пересчитывать....
Об этом в курсе и помню :) Данные не смертельны...
Цитата
nordk пишет:
На 200-300 думаю что расчет банка данных будет оптимальным подходом,как предлагал Евгений.
Банк данных отдельно покупается, кроме всего прочего...
А, к стати по поводу общей задачи. Думаю, есть смысл её озвучитиь.
Попробую её кратенько обрисовать...
Ситуация:
У нас есть НЕСКОЛЬКО заказов на продукцию от ОДНОГО заказчика.
Как узнать какие позиции этих заказов уже готовы?
Т.е. приехала машина от нашего партнера, её загрузили чем планировали, но, допустим на месте решили еще чем-нибудь её набить. Чтобы узнать чем набить, надо знать что есть в наличии на складе именно для этого заказчика...
(Заказы в данном случае сводные...)
nordk пишет:
Тогда у Вас как я понял ы не по БЭСТ а по OO Calc
Хех, ну само собой! Я, собственно, в начале это и обрисовал...
По Excel, к стати есть и доп описания по его классам. (Помимо того, что в 2007м офисе справки за глаза хватает).
У ОО, к сожалению такой справки нет. Мне почти все удалось сделать, кроме задания ширины столбика и переноса слов...
Пара примеров по Calc есть на этом форуме, но совсем не то, что надо. Меня интересует сего несколько команд.
Если кому-нибудь не трудно...
"Создать приложение" я так понял можно так:
Код
oApp := OleCreateObject("com.sun.star.ServiceManager")
//(Хотя как я понял там еще что-то требуется, чтобы "создать" CAlc)
А вот дальше...
Код
oWorkBook:=oApp:WorkBooks:Add() //добавление рабочей книги
oAS:=oWorkBook:Worksheets():Add() //добавление таблицы
oAS:Name:="Имя табл" //присвоение имени таблице
oRange:=oAS:Range("A1:F1") //определение интервала ячеек
oRange:font:bold:=.T. //выдленный шрифт на этом интервале
oRange:MergeCells:=.T. //объединение ячеек в интервале
oRange:value:="Готовые изделия на складе для организации " //запись текста
oAS:columns(1):ColumnWidth:=7 //ширина 1-й колонки
oAS:Range("A2"):formula:="Группа"//"Дт счет" //Запись заголовов столбцов
oRange:=oAS:Range("A1:F2") //определение интервала ячеек
oRange:font:bold:=.T. //выдленный шрифт на этом интервале
oRange:HorizontalAlignment:=xlCenter // по горизонтали - в центре
oRange:VerticalAlignment:=xlTop //по вертикали - у верхнего края
oAS:Cells(nLine,2):NumberFormat:="@" //текстовой формат
oAS:Cells(nLine,2):Value:=(AllTrim(TempF->NNUM))
oAS:Range("C"+Var2Char(nLine)):WrapText:=.T. //свойство ячеек -перенос текста
oRange:Borders(11):LineStyle:=xlContinuous //снизу - граница сплошной линией
oRange:Borders(xlEdgeBottom):Weight:=xlThin //ширина линии - обычная
nordk пишет:
Вот тут выложено описание реализованной задачи.
ссылка
Посмотрите что мы натворили и можно начинать разбирать интерфейс на примере.
Бегло посмотрел. Половиу документа можно и урезать, наверное (заархивировать тоже есть смысл, имхо).
Готов скромно предположить, что саму утилитку, конечно не посмотреть ввиду ее платности... Хотя без исходников особого смысла она не представляет.
nordk пишет:
Цитата Саак Шахламджян пишет:
считать" остаток по данной номенклатуре. При большом количестве н.ед. такой алгоритм будет долго работать...
Повторюсь - вот это заявление не есть факт.
На 2 Гб таблице у меня расчет меньше сек. на локальном компе.
Если задача сводится к расчету только по одной позиции, то
это не может составлять проблему.
Недостаточно информации по контексту задачи
Имелось ввиду получить данные по 100-200 номенклатурным единицам (не более 500).
Так, а Вы что же это считате разве? (суммируете все партии между собой)
Я уже написал плагин. Использовал то, что дал Евгений. Обращаюсь сразу к "сводной карточке", всё довольно быстро делается... Т.е. считать ничего не надо... (Я так написал, т.к. думал, что придётся суммировать все партии на складах, не зная еще о "сводной карточке")
Алексей Новиков пишет:
На самом деле я, лично, не знаю, как это реализовано в драйвере dbf/cdx. Может и так, может иначе. Но результат от реализации не зависит.
Э... Но как же не зависит еще и как зависит!!!!
Само собой речи о том, что изменяться отображаемые записи речи нет...
Речь о производительности, скорости работы кода....
Сначала фильтровать, а затем "одним махом обрубать" будет много много медленнее, чем сначала "одним махом обрубать". а затем в обрубленном каждую запись смотреть....
Согласитесь разница огромная.... Да и этот не к драйверу dbf, а к работе DbPush
Алексей Новиков пишет:
Тогда представляйте себе, что на базу установлен скоп, а затем для каждой записи выполняется выражение фильтра. Если выражение возвращает .T., то запись показывается, если .F., то пропускается.
Вот! тогда исходя из моих представлений ответ все-таки - сначала ставиться скоп, а потом фильтр ... И вот это вот сравнение идет уже после "обрубания" (скорее игнорирования остальных записей)...
Евгений Плешивцев пишет:
Я использую индекс MKART и в строке фильтра прописываю "Empty(Partia) .And. !Empty(NNum)"
А вообще то, крутые пацаны, уже давно остатки по банку данных собирают
Ну, мне еще до крутых пацанов далеко...
Мне бы простенькую инфу выуживать по движению изделий...
Банк даныых!???
А что это? Нововведение в СП?
Очень важный - что ставиться раньше скоп или фильтр, при использовании DbPush?
Евгений Плешивцев пишет:
Саак, вы обнаружили запись сводной карточки! Конечно ей пользоваться можно, однако нужно иметь ввиду:
-- это остатки на данный момент а не на произвольную дату
-- при нарушении правильности значений в сводных карточках можно воспользоваться пересчетом остатков по картотеки [Alt-F10]
А как к ней обратиться, собственно... Зная н\н (и группу тоже)...
Чем принципиально данная запись отличается от остальных? Единственное, что заметил - это отсутствие инф о партии...
Какой индексный ключ использовать?
И еще я так понимаю, эта карточка не содержит в себе сумму остатков на разных складах?
Обнаружил некую "сводную запись" в картотеке, которая точно показывает сумму остатка даннойго Н\Н. Хотелось бы услышать что-либо по поводу этого момента... Можноли этой записью пользоваться и как?
Всю задачу рассказывать не буду, расскажу кусочек (если потребуется обрисую все сразу).
Мне нужно по н\н узнать остаток номенклатуры на складе (это продукция).
Желательно бы поуниверсальнее решение, вне зависимости от партионности. И по всем складам...
Пути решения?
Само собой интересует что-нибудь более просто, чем "шерстить" картотеку складского учета и "считать" остаток по данной номенклатуре. При большом количестве н.ед. такой алгоритм будет долго работать...
Я просто себе представляю, что необходимо суммировать все партии (смотреть каждую)...
А с тем каким образом формируется список у разработчиков остается:
в памяти\или временный файл...
Поковырялся я недавно "поближе" с этим вопросом. Верменный файл не используется...
Цитата
nordk пишет:
В БЭСТ-4 это был массив.
В БЭСТ-5 возможно перевели на временный файл, хотя принцип остался тотже - класс tbrowse
А нельзя ли поподробнее. А то, в общем-то, довльно скудноватая информация в хелпе.
Напомню суть дела.
При создании/редактировании заказов строки этого заказа должны где-либо храниться. Они могут быть в памяти, а могут быть во временном файле.
Для отображения этих самых строк используется QBROWSE (или initList, хотя скорее первое), других средств, как я понимаю, нет.
А теперь, , уважаемые знатоки ...
Каким образом "запихать" массив в QBrowse или InitList?
P.S. Я пытался найти временный файл где могли бы храниться эти строки, но не нашёл. А искал я тщательно...
Вопрос, думается, довольно простой. Но ввиду того, что я только "вскользь" слышал об этом, я ничего не знаю. Моя задача:
1. Новое меню в Б-5.
2. В нем необходимо реализовать распечатку документов шаблоны которых уже есть в Б-5 (*.FRF файлы). Как это происходит? (Собственно и "вызов" на печать с целью выбора шаблона)
Если честно не искал информацию на эту тему (я даже не знаю, что делать ключем поиска). Подскажите, как пользоваться этим механизмом или дайте ссылку или "ключ" к поиску...
Может кто-либо помочь с данной проблемой???
У нас н\н является инвентарным номером, а их нельзя пропускать, поэтому обязательно нужно удалить данную номенклатуру!
nordk пишет:
Саак у меня к Вам персональный .
Есть мысль поднять тему уроков программирования в новых окнах.
За это время удалось наработать достаточно опыта, чтобы уже более-
менее предметно разговаривать.
Но без собеседников тема не получится
Прделагаю поучаствовать в дискуссии
Да, побеседовать можно. А то что-то в последнее время затишье...
Речь о плагинах в "синих" окнах или о написании самих "синих" окон, собственно?
Хотя, в общем-то и то и то интересно. Но я разочаровался в этих самых "синих" окошках и их "рисовании" в дизайнере приложений. "Рисую" только серые!!!
nordk пишет:
Саак требуется множетсво уточнений.
В первую очередь не используйте никогда открытый алиас.
По нему элементарно может быть установлен скоп и поиск работать не будет.
Приведите кусок кода или сделайте тестовый пример с поиском.
И мы рассмотрим почему он не работает.
Но только на Вашем коде.
Потому что не индекс не работает а Вы где-то ошибку допускаете
Большое спасибо! Элементарно стоял скоп (даже не подумал о нём)! Все работает!
Имущество->Справочники->Классификаторы->Архив номенклатуры
Там нахожиться одна номенклатура. Её никак не получается удалить. При попытке удаления: "Номенклатура используется в комплектах учетных объектов".
Таблица Real\Rbook
Индекс 01 Rbook0.
Индексный ключ: UPPER(DOPCODE)+NNOPER.
Создаю сводный заказ с номером <"Номер один">.
Set order to TAG Rbook0
DbSeek(Upper(<"Номер один">))
Ничего не находит:(. Эту "ошибку" (пока непонятно что) видел еще давным давно, но воспользовался другим индексом, сейчас очень нужен этот.
Помогите, пожалуйста.
Желательно, чтобы кто-нибудь еще проверил. Делов на пару минут. Может, я где чего не так делаю или не понимаю, объясните, пожалуйста! Заранее спасибо!!!
P.S. Даже так не работает:
Set order to TAG Rbook0
DbGoBottom() //Выходит За границы, оба св-ва EoF и BoF - .T.