• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы lira89
  • Дата начала
L

lira89

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

gorlanovmax

А зачем ставить в конце цикла? Поставьте в условие, или в запись нового документа
 
V

vbs

Проще после

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

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

lira89

Проще после

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

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

vbs

Попробуй
Док.ВыбратьДокументы(Дата1,Дата2);

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

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

Дайнеко

А также можно сделать 2 одинаковых объекта

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

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


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

kaa

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

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

vbs

ДокНов.НайтиДокумент(ДокВыб);
вот-вот, именно это я и имел в виду

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!