• Ласкаво просимо на Спільнота для обміну досвідом між користувачами програм УкрБланк, УкрСклад, УкрЗарплата.
 

Исправление ошибки с удалением заголовка документа

Автор admin, Липень 19, 2011, 17:39:10

Попередня тема - Наступна тема

0 Користувачі і 2 Гостей дивляться цю тему.

admin

Для тех у кого были проблемы с удалением заголовка документа, а движения остались.

1. ОБЯЗАТЕЛЬНО сделайте резерв.
2. Зайдите в меню Опции : SQL менеджер и выполните след. код:
SELECT
  tm.doc_type_id,
  tm.doc_id,
  dt.name AS doc_name,
  tm.mdate,
  tm.tovar_id,
  tn.kod,
  tn.name AS tovar_name,
  dv.nu,
  dv.date_dok
FROM
  tovar_move tm
    LEFT JOIN view_alldocs dv ON (tm.doc_type_id = dv.doc_type AND tm.doc_id = dv.num),
  tovar_name tn,
  doc_types dt
WHERE
  tm.tovar_id = tn.num AND
  tm.doc_type_id = dt.num AND
  dv.nu IS NULL


Не прерывайте приложение оно не зависает оно работает, бывает и пол часа, а бывает и сутки, если большая база. Обязательно дождитесь результата, не снимайте задачу. Если результат будет пустым т.е. все строки пустые у Вас все нормально и продолжать не надо. Если вывело товары и название документов продолжайте, список сохраните, он вам понадобиться чтобы потом быстрее найти заголовки документов.
3.  В меню Опции : SQL менеджер запустите след. код:
Не прерывайте программу, патч может работать долго, обязательно дождитесь.
EXECUTE BLOCK
AS
  DECLARE VARIABLE doc_type_id INTEGER;
  DECLARE VARIABLE doc_id INTEGER;
  DECLARE VARIABLE mdate DATE;
  DECLARE VARIABLE from_firma_id INTEGER;
  DECLARE VARIABLE from_firma_rah_id INTEGER;
  DECLARE VARIABLE to_firma_id INTEGER;
  DECLARE VARIABLE to_firma_rah_id INTEGER;
  DECLARE VARIABLE from_sklad_id INTEGER;
  DECLARE VARIABLE to_sklad_id INTEGER;
  DECLARE VARIABLE from_firma VARCHAR(300);
  DECLARE VARIABLE to_firma VARCHAR(300);
BEGIN
  FOR
    SELECT
      tm.doc_type_id,
      tm.doc_id,
      tm.mdate,
      tm.from_firma_id,
      tm.from_firma_rah_id,
      tm.to_firma_id,
      tm.to_firma_rah_id,
      -1,
      -1,
      fc.fio AS from_firma,
      tc.fio AS to_firma
    FROM
      tovar_move tm
        LEFT JOIN view_alldocs dv ON (((tm.doc_type_id = dv.doc_type) OR (tm.doc_type_id = -10 AND dv.doc_type = 0)) AND tm.doc_id = dv.num)
        LEFT JOIN client fc ON (tm.from_firma_id = fc.num)
        LEFT JOIN client tc ON (tm.to_firma_id = tc.num),
      doc_types dt
    WHERE
      tm.doc_type_id = dt.num AND
      dv.nu IS NULL
    GROUP BY
      1,2,3,4,5,6,7,8,9,10,11
    INTO
      :doc_type_id,
      :doc_id,
      :mdate,
      :from_firma_id,
      :from_firma_rah_id,
      :to_firma_id,
      :to_firma_rah_id,
      :from_sklad_id,
      :to_sklad_id,
      :from_firma,
      :to_firma
  DO
  BEGIN
    IF (:doc_type_id = -10) THEN
    BEGIN
      INSERT INTO schet
        (num, nu, date_dok, firma_id, afirm_rah_id, client_id, client_rah_id, client, sklad_id, doc_user_id, is_rezerv)
      VALUES
        (:doc_id,'00000',:mdate,:from_firma_id,:from_firma_rah_id,:to_firma_id,:to_firma_rah_id,:to_firma,:to_sklad_id,1,1);
    END
    ELSE
    IF (:doc_type_id = 1) THEN
    BEGIN
      INSERT INTO vnakl
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, client_id, client_rah_id, client, sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:from_firma_id,:from_firma_rah_id,:to_firma_id,:to_firma_rah_id,:to_firma,:to_sklad_id,1);
    END
    ELSE
    IF (:doc_type_id = 18) THEN
    BEGIN
      INSERT INTO vzpnakl
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, client_id, client_rah_id, client, sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:from_firma_id,:from_firma_rah_id,:to_firma_id,:to_firma_rah_id,:to_firma,:to_sklad_id,1);
    END
    ELSE
    IF (:doc_type_id = 6) THEN
    BEGIN
      INSERT INTO actvr
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, client_id, client_rah_id, client, sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:from_firma_id,:from_firma_rah_id,:to_firma_id,:to_firma_rah_id,:to_firma,:to_sklad_id,1);
    END
    ELSE
    IF (:doc_type_id = 11) THEN
    BEGIN
      INSERT INTO snakl
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:from_firma_id,:from_firma_rah_id,:to_sklad_id,1);
    END
    ELSE
    IF (:doc_type_id = 8) THEN
    BEGIN
      INSERT INTO pnakl
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, client_id, client_rah_id, client, sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:to_firma_id,:to_firma_rah_id,:from_firma_id,:from_firma_rah_id,:from_firma,:to_sklad_id,1);
    END
    ELSE
    IF (:doc_type_id = 12) THEN
    BEGIN
      INSERT INTO vznakl
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, client_id, client_rah_id, client, sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:to_firma_id,:to_firma_rah_id,:from_firma_id,:from_firma_rah_id,:from_firma,:to_sklad_id,1);
    END
    ELSE
    IF (:doc_type_id = 9) THEN
    BEGIN
      INSERT INTO znakl
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:to_firma_id,:to_firma_rah_id,:to_sklad_id,1);
    END
    ELSE
    IF (:doc_type_id = 10) THEN
    BEGIN
      INSERT INTO mnakl
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, sklad_id,to_sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:from_firma_id,:from_firma_rah_id,:from_sklad_id,:to_sklad_id,1);
    END
    ELSE
    IF (:doc_type_id = 20) THEN
    BEGIN
      INSERT INTO vyrnakl
        (num, nu, date_dok, is_move, firma_id, afirm_rah_id, sklad_id,to_sklad_id, doc_user_id)
      VALUES
        (:doc_id,'00000',:mdate,1,:from_firma_id,:from_firma_rah_id,:from_sklad_id,:to_sklad_id,1);
    END
  END
END

6. Перезайдите в программу и найдите документы (список которых высвечивался в п.2). Их будет легко найти т.к. у всех созданных новых документов будет номер 00000 (пять нулей). Можете их просмотреть либо распечатать, суммы по документу будут нулевые т.к. заголовок документа был восстановлен частично. Их не исправить редактированием и сохранением, их надо удалить и набрать повторно. Если просто будете удалять ОБЯЗАТЕЛЬНО зайдите в меню Опции : Параметры : Система и нажмите "Пересчет остатков товаров".
7. Если что-то пойдет не так вы всегда можете восстановить базу сделанную в п.1

Все вопросы на поддержку.