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

lira89

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

gorlanovmax

Well-known member
19.06.2008
286
0
#2
А зачем ставить в конце цикла? Поставьте в условие, или в запись нового документа
 

vbs

Well-known member
18.02.2007
1 708
1
#4
Проще после

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

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

lira89

Well-known member
12.03.2010
154
0
#5
Проще после

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

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

vbs

Well-known member
18.02.2007
1 708
1
#6
Попробуй
Док.ВыбратьДокументы(Дата1,Дата2);

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

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

Дайнеко

Well-known member
19.11.2009
951
0
#7
А также можно сделать 2 одинаковых объекта
Да в этом-то и проблема. Нельзя одним "Док" перебирать и им же создавать. Аналогия такова: шел человек по лесенке и считал ступеньки. Вдруг его сбросили на землю. Потом командуют: "Перейти на следующую." А он чешет репу. Потому что в голове сбился счетчик: на какой ступеньке от находился? Не сильно почитал, как у Вас происходит. Должно после первого созданного документа слетать.

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


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

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

vbs

Well-known member
18.02.2007
1 708
1
#9
ДокНов.НайтиДокумент(ДокВыб);
вот-вот, именно это я и имел в виду

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

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