Базовый курс. МГ сессия от 12.02.2011
Продолжаем МГ базового курса.
1. Проектирование базы данных.
Есть Детали Д1 и Д2.Они входят в сборку Cб1 и Cб2
А сборки и детали могут входить в Готовую продукцию и вложенность может быть многоуровневая.
С нового месяца в связи с заменой оборудования какая-то из деталей стала производиться быстрее (или медленнее).
Как быть в этом случае при перерасчете производства готовой продукции…. вложенность может быть большой?!
2. Работа со справочниками.
Во многих случаях не могу понять как обратиться к тому или иному объекту.
Например, возьмем справочник. В синтаксис помощнике есть “СправочникМенеджер ” “Справочник Ссылка” “СправочникОбъект«
Но мне хотелось бы пойти наоборот от объекта системы к Сылкам.
Например, есть справочник “Номеклатура” чтобы обратиться к данному справочнику можно через команду “Справочник.Номенклатура” Как обратиться
к элементу справочника
к группе справочника
табличной части справочника
реквизиту
Не знаю к чему еще можно обратиться или могут быть какие-либо ссылки
3. Кэширование возвращаемых значений.
…
Не понял утверждения «Первый раз будет выполнен серверный вызов, во всех остальных случаях обращение к серверу не будет выполняться».
Где располагается кэш серверного модуля? – на сервере или на клиенте? Я понимаю так – при первом вызове с клиента значение функции будет вычислено и помещено в серверный кэш, при последующих – возвращаться из серверного кэша без выполнения кода функции на сервере.
Функция не должна содержать параметров, или кэшируются значения с учетом параметоров?
Пример: ПолучитьКонтрагента(ИНН, КПП) – в теле функции запрос – может ли такая функция кэшироваться?
4. Передача параметров по ссылке.
Интересный момент с передачей параметров всерверную процедуру.
При передаче переменной-объекта в качестве параметра в процедуру, выполняемую на сервере, обратно возвращается другой объект.
Можете прокомментировать такое наблюдение?
По п.4.
Видимо, после возвращения из серверного вызова для клиентских переменных, измененных на стороне сервера, выделяется новая область памяти и их значения загружаются туда.
Интересны возможные последствия показанного в уроке “эффекта”:
1. Не очищается ли область памяти, выделенная под Б, сразу после возвращения с сервера, а в отладчике видим структуру до вызова только потому, что эта область еще не затерлась другими данными?
2. Если память под Б не очищается, то очищается ли она после окончания процедуры или происходит утечка памяти?
3. Дальнейшее изменение А на клиенте после возврата из серверного вызова, видимо, уже не повлияет на Б, поскольку это будут указатели на совершенно разные области памяти.
На самом деле показанное в уроке поведение является задуманным (это не баг).
И дело здесь в том, что передача по ссылке между клиентом и сервером невозможно.
В любом случае данные будут скопирована на сервер.
А при окончании серверного вызова происходит создание нового объекта (выделение новой области памяти).
Ну а память очищается, с этим проблем быть не должно.
При отсутствии циклов в графе спецификаций разузлование можно сразу расчитать для всего каталога. Для этого достаточно посчитать разузлование от листов конечных комплектующих вверх к готовой продукции выполнив обход узлов по графу.
В случае изменения вариантов комплектации полуфабрикатов можно пересчитать зависимую от измененных узлов часть графа. Зависимость узлов можно хранить в текстовом поле иерархии построенном как Код1.Код2. … .КодН для позиций каталога фиксирующем для узла зависимость от спецификации составляющих узлов с кодами (КодЗависимого)=(Код1), … , (КодН)
Наличие такого поля зависимости преобразует порядок хранения зависимости узлов из реккурсивного в комулятивный.
т.е. я в любой структуре хранения комбинаций структурных единиц каталога смогу выделить например подграф зафисимый от узла (Код1) или нескольких узлов _одним запросом_ вместо реккурсии которая может иметь много уровней.
Хорошая идея, подробно с ней поработаем в курсе продвинутом.
А возможно ли немного подробнее об реализации первого вопроса?
Я имею ввиду про реализацию изменения какого нить из параметров вследствие изменения времени на производство той или иной детали.
Каким образом можно проверять, в каких сборках нужно изменить время?!
Проверять никаким образом не нужно.
Идея, которую я предлагаю – всегда иметь одну активную спецификацию, именно ее использовать при разузловании.
тогда я не понял идею о спецификации… хотя может пока не дошел до изучения, того что нужно.
Здесь я порекомендую попробовать составить простейшую конфигурацию, понимание должно прийти.
Вот этим я и пытаюсь заниматься!