Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2012, 14:26   #21
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Да, действительно. Так и сделаю. Всем огромнейшее спасибо за советы.
Хотя с другой стороны, в 1С, реализовано именно так как я хотел сделать. Т.е. там не обязательно сохранять документ, чтобы напечатать.
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 19.09.2012, 14:57   #22
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Vit@L Посмотреть сообщение
Хотя с другой стороны, в 1С, реализовано именно так как я хотел сделать. Т.е. там не обязательно сохранять документ, чтобы напечатать.
и как давно?

Из любопытства полез в 1С - ничего подобного, "Перед печатью документ требуется сохранить!" выдает
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 19.09.2012, 17:06   #23
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
и как давно?

Из любопытства полез в 1С - ничего подобного, "Перед печатью документ требуется сохранить!" выдает
Не знаю в какой Вы 1С пробовали, но вот я в 7.7 открыл реализацию и не сохраняя, даже ничего не забивая в сам документ (ни контрагента, ни товар) пробую вывести на печать что акт, что ТОРГ12, без проблем. Все дает напечатать.

А вот в 8.1 да, и в самом деле не дает. Но вот в 7.7 без проблем можно печатать.

В общем возникает другая проблема. Если изначально не присваивать номер документу, а присваивать его только при сохранении, то как быть тогда с табличными документами. У меня в программе они привязываются по номеру документа. Т.е. записи в табличном документе выбираются из таблицы по номеру документа.
Как быть в таком случае?
Водку мы пьем для запаха - а дури нам своей хватает!

Последний раз редактировалось Stilet; 19.09.2012 в 21:13.
Vit@L вне форума Ответить с цитированием
Старый 20.09.2012, 00:19   #24
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
У меня в программе они привязываются по номеру документа. Т.е. записи в табличном документе выбираются из таблицы по номеру документа.
Как быть в таком случае?
Номер документа как документа, и идентификационный номер записи БД содержащей данный документ это в общем случае ДВА разных номера.
Редакция первого может быть дозволена пользователю (иногда). Его все видят. но БД с ним не работает (кроме как показать пользователю).
Редакция второго дело исключительно БД.(а точнее практически всегда никаких редакций). Его почти никто (кроме программы и программиста) не видит, но БД работает (делает выборки, редакции и т.п.) исключительно по нему.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.09.2012, 04:35   #25
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Так дело в том, что идентификационный номер присвоится ведь только после сохранения документа. А у меня организовано так что при добалении строки в документ, ей сразу же присваивается номер документа.
Как тогда быть в этом случае?
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 20.09.2012, 08:16   #26
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А у меня организовано так что при добалении строки в документ, ей сразу же присваивается номер документа.
переделать. Сделать так, чтобы при добавлении строки в документ ей сразу присваивался УНИКАЛЬНЫЙ код документа (уникальный код == ключевое поле == id ). Ключевое поле к тому номеру документа, который видит пользователь никакого отношения не имеет (например, как Вам было предложено выше, можно сохранять документы (черновики) вообще БЕЗ НОМЕРА. А номер присваивать когда документ будет заполнен полностью и правильно (тогда он перейдёт из статуса черновика в реальные документы).



к слову. Всем разработчикам БД весьма рекомендую ознакомится со статьёй
"Естественные ключи против искусственных ключей" Автор: Анатолий Тенцер

Последний раз редактировалось Serge_Bliznykov; 20.09.2012 в 08:19.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2012, 17:33   #27
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Serge_Bliznykov, ну да, можно и так. Но я немного по другому все сделал. Изначально всем строкам документа присваивается нули, затем, когда документ сохраняется, самому документу присваивается номер и с помощью цикла пробегаюсь по каждой строке документа и изменяю нули на номер документа.
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 20.09.2012, 17:53   #28
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
и с помощью цикла пробегаюсь по каждой строке документа и изменяю нули на номер документа.
Т.е. весь сыр-бор из-за того что некие подчиненные записи (строки документа) хранят внутри себя этот пресловутый номер.

Если просто хранят, то это просто ненормализованные данные.
при сбоях и ошибках от которых ни застрахована ни одна программа есть вероятность получить в строке неверный номер.
довольно легко обнаружить и исправить в полуавтоматическим режиме (с помощью корректирующих запросов).

Если же не только хранят, но еще и связываются с главным по оному, то ошибка проектирования.
При сбоях поможет только кропотливая ручная коррекция.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.09.2012, 19:11   #29
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

evg_m, и что тогда Вы предлагаете?
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 20.09.2012, 19:30   #30
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
evg_m, и что тогда Вы предлагаете?
вам уже сказали
Цитата:
к слову. Всем разработчикам БД весьма рекомендую ознакомится со статьёй
"Естественные ключи против искусственных ключей" Автор: Анатолий Тенцер
1. Исправить ошибки проектрования.
Ввести ID записи (НЕ НОМЕР) в головном документе. Задать его как уникальный индекс (как минимум). А лучше задать как счетчик (автоинкренементное поле).
Главное правило ID задается сразу и никогда ни при каких обстоятельствах НЕ МЕНЯЕТСЯ.

Ввести ref_ID ссылку на ID головного документа в строки документа.
Указать его как внешний ключ к головной таблице. Задать нужные тригеры.
Все построения документов вести через ID и ref_ID.

2. Нормализовать таблицы.
Сам НОМЕР документа хранить только в однм месте (в головной таблице).
Заполнять номер в любое удобное пользователю время.

Цитата:
А номер присваивать когда документ будет заполнен полностью и правильно (тогда он перейдёт из статуса черновика в реальные документы).
Один раз и без цикла.

Цитата:
Номер документа как документа, и идентификационный номер записи БД содержащей данный документ это в общем случае ДВА разных номера.
Редакция первого может быть дозволена пользователю (иногда). Его все видят. но БД с ним не работает (кроме как показать пользователю).
Редакция второго дело исключительно БД.(а точнее практически всегда никаких редакций). Его почти никто (кроме программы и программиста) не видит, но БД работает (делает выборки, редакции и т.п.) исключительно по нему.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.09.2012 в 19:44.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как упорядочить нумерацию в списке caute Microsoft Office Word 4 17.03.2012 08:13
Процедура поиска - необходимо организовать поиск по маске *.txt в папке Test GvR Общие вопросы Delphi 3 04.11.2009 15:31
необходимо сделать несколько документов: акт, счет и т.п. Kisunya2104 Microsoft Office Excel 5 17.05.2009 18:35
нумерацию кнопок на клаве BuT@JL Помощь студентам 4 27.11.2008 22:08