Проблема с созданием документа(

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 20 май 2010.

  1. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Конфигурация 7.7 С помощью обработки нужно создать документ (в конфигураторе указан Журнал для этого документа) при этом проверяя, есть ли уже такой документ по определенным реквизитам СравнФизЛицо, СравнФакультет, СравнУчГруппа . Если есть, то вывести сообщение и продолжить цикл дальше. Документ НЕ содержит табличной части. Данный код содержится внутри цикла Если , т.е. Если мы нашли не нашли человека, то добавляем его в справочник и создаем сразу документ Зачисление по данному человеку. Часть кода приведена снизу:
    Код (Text):
    Док = СоздатьОбъект("Документ.Зачисление");
    Док.ВыбратьДокументы();
    Пока Док.ПолучитьДокумент()=1 Цикл
    Если (Док.ФизЛицо = СравнФизЛицо) и (Док.Факультет = СравнФакультет) Тогда
    Если (Док.УчГруппа.Выбран()=1) и (Док.УчГруппа = СравнУчГруппа) Тогда
    Если Док.Проведен()=1 Тогда
    Сообщить("Документ уже есть и проведен!!!");
    Продолжить;
    Иначе
    //изменяем данные
    ЗаполнениеРеквизитовДокумента(Док, Табл, Табл2); // процедура для заполнения реквизитов документа и его записи
    Сообщить("Документ изменили!!! Документ без Группы");
    КонецЕсли;
    Иначе
    Если Док.Проведен()=1 Тогда
    Сообщить("Документ уже есть и проведен!!!");
    Продолжить;
    Иначе
    //изменяем данные
    ЗаполнениеРеквизитовДокумента(Док, Табл, Табл2);
    КонецЕсли;
    Сообщить("Документ изменили2!!! Документ с Группой");
    КонецЕсли;
    Иначе
    //создаем документ
    Док.Новый();
    ЗаполнениеРеквизитовДокумента(Док, Табл, Табл2);
    Сообщить("Документ записали!!!");
    КонецЕсли;
    КонецЦикла;
    Изначально в журнале я создала один документ. Проблема в том, что в отладчике Док.ВыбратьДокументы()=1, Док.ПолучитьДокумент()=1, а в сам цикл даже не заходит. ставлю точку останова на КонецЦикла;, так даже не становиться и туда, а сразу идет на КонецЕсли (внешний цикл Если). Подскажите пожалуйста, в чем может быть проблема?
     
  2. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    А зачем ставить в конце цикла? Поставьте в условие, или в запись нового документа
     
  3. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Я пробовала, оно вообще сразу после Пока Док.ПолучитьДокумент()=1 Цикл выбивает, даже внутрь не заходит.
     
  4. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Проще после

    Пока Док.ПолучитьДокумент()=1 Цикл

    Вставить
    Сообщить(Док);
     
  5. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Записывает только один документ, а дальше выбивает ошибку:
    Пока Док.ПолучитьДокумент()=1 Цикл
    {Обработка.ЗагрузкаФЛ.Форма.Модуль(399)}: Не выбран документ!
    В журнале уже существует два документа.
     
  6. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Попробуй
    Док.ВыбратьДокументы(Дата1,Дата2);

    И еще - первый документ найден, что с ним произошло ?

    А также можно сделать 2 одинаковых объекта
    Док = СоздатьОбъект("Документ.Зачисление");
    Док1 = СоздатьОбъект("Документ.Зачисление");
    Для Док1 создавать новый и корректировать найденный (Док1 = Док.ТекущийДокумент())
     
  7. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Да в этом-то и проблема. Нельзя одним "Док" перебирать и им же создавать. Аналогия такова: шел человек по лесенке и считал ступеньки. Вдруг его сбросили на землю. Потом командуют: "Перейти на следующую." А он чешет репу. Потому что в голове сбился счетчик: на какой ступеньке от находился? Не сильно почитал, как у Вас происходит. Должно после первого созданного документа слетать.

    Простим товарищу - торопился. :) 1) Поборники красоты рекомендуют так безлико не называть переменные. Хотя бы "ДокВыб", "ДокНов".
    2) А вот для корректировки использовать "Док" можно и нужно. Док задержится на той-же ступеньке.
    Если решим использовать ДокНов и для корректировки то вот так: ДокНов.НайтиДокумент(ДокВыб); Повторяюсь, можно использовать ДокВыб без всякой подготовки.


    Все бы ничего. Да есть еще одна беда. Во всем тексте нет команды Записать()
     
  8. kaa

    kaa Гость

    ЗаполнениеРеквизитовДокумента(Док, Табл, Табл2); - если процедура или функция выглядит так:
    Процедура ЗаполнениеРеквизитовДокумента(Док, ХХХ, ХХХ)
    ......
    КонецПроцедуры

    Поменяй переменную с Док на Док1 допустим
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    вот-вот, именно это я и имел в виду

    А запись у нее, видимо, в процедуре заполнения реквизитов.

    Даты стоит использовать при выборке с тем, чтобы процесс не умер (новый документ, не дай Бог, снова попадет в выборку и т.д.), да и новому документу
    надо присваивать дату вне диапазона
     
Загрузка...

Поделиться этой страницей