Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 01:51

Проверка справочника и проведение документа

Автор AlexKag, 26 сен 2012, 16:58

0 Пользователей и 1 гость просматривают эту тему.

AlexKag

Здравствуйте!
Застрял на таком вопросе. Есть документ "ПереводВДругуюГруппу", где есть реквизиты "Группа", "ГруппаПеревода", также есть табличная часть "Студенты" с реквизитом "Студенты", а также поле флажка "ПеревестиГруппу", который является отдельным реквизитом. Допустим есть две группы 2СП и 3СП. Как сделать так, чтобы, если мы начнем сначала переводить группу 2СП в 3СП, то выходила бы ошибка "Переведите сначала группу 3СП", и когда мы уже группу "3СП" переведем, то смогли бы легко перевести и группу 2СП. Я пытался сделать так, чтобы система проверяла в справочнике всех студентов, и искала, если у кого-то есть группа "3СП", то выходила бы ошибка.. но не получается ничего.. Подскажите может в коде ошибка или как это можно организовать?

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если ПеревестиВГруппу Тогда
  Если Группа = Справочники.Группы.НайтиПоНаименованию("2СП") Тогда
   Если Справочники.Группы.НайтиПоНаименованию("3СП") Тогда
    Отказ=Истина;
    Сообщить("Переведите сначала группу 3СП!");
   Иначе
Для каждого СтрокаТЧ Из Студенты Цикл
    СтудентОбъект = СтрокаТЧ.Студент.ПолучитьОбъект();
    СтудентОбъект.СтатусСтудента = Перечисления.СтатусСтудента.УчитсяПереведенВГруппу;
СтудентОбъект.Группа=ГруппаПеревода;
    СтудентОбъект.Записать();
  КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

mixqn

вот на этой строке:
Если Справочники.Группы.НайтиПоНаименованию("3СП") Тогда
разве ошибка не выдается?
там тип не Булево должен получаться и должна быть ошибка.
вообще, в целом приведенный код очень странный.

mixqn

вообще, если хотите в будущем профессионально заниматься разработкой, совет: конструкции НайтиПоНаименованию и НайтиПоКоду - это как минимум дурной тон. Используйте предопределенные элементы или константы, если нужно в коде обратиться к каким-то данным.

AlexKag

Хорошо.. а вот этой строчкой он проверяет все мои записи в справочнике?
Если Справочники.Группы.НайтиПоНаименованию("3СП") Тогда

mixqn

Следующее замечание по коду: вы упорно продолжаете попытки в обработке проведения изменять справочники, хотя это не принято. Обработка проведения изменяет регистры. А точнее, добавляет в них записи - движения документа. Вашу задачу нужно решать на регистре сведений с измерением Студент и Ресурсом Группа, регистр периодический.

Цитата: AlexKagа вот этой строчкой он проверяет все мои записи в справочнике?
Если Справочники.Группы.НайтиПоНаименованию("3СП") Тогда
в этой строке должна быть ошибка.

AlexKag

Вот, воспользовался советом, создал регистр... Основывая на том, что по запросу срез последних можно будет посмотреть есть ли какое-то количество студентов в группе или нет.. Подскажите это правильно?

mixqn

Нет, не правильно. Количество студентов вы можете получить запросом - есть там агрегатная функция КОЛИЧЕСТВО. В вашем случае ресурс "Количество" в регистре смысла не имеет. Делать Группу измерением так же смысла нет никакого, правильнее сделать ее ресурсом (1 студент не может же одновременно быть в 2-ух группах или все таки может?)

AlexKag

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

mixqn


AlexKag

а надо ли ресурсом делать ГруппаПеревода (это название группы в которую вновь переводится студент)??

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск