Задание условий для движений документа по регистрам

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

  1. Neft

    Neft Гость

    Друзья, помогите плиз!

    Имеется документ с двумя реквизитами, пусть будет РЕК1 и РЕК2 оба реквизита со значением БУЛЕВО, документ имеет движения в двух регистрах (РЕГ1 и РЕГ2). Что необходимо прописать в модуле (не считая стандартной записи формирования движений по регистрам) для того чтобы приналичии значения ИСТИНА по РЕК1 документ попадал в первый регистр (РЕГ1), если по двум реквизитам значение ИСТИНА документ попадал только во второй регистр (РЕГ2). Помогите, пожалуйста.
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Код ( (Unknown Language)):
    Синтаксис:
    Если <Логическое выражение> Тогда
    // Операторы
    [ИначеЕсли <Логическое выражение> Тогда]
    // Операторы
    [Иначе]
    // Операторы
    КонецЕсли;

    Англоязычный синтаксис:
    If <Логическое выражение> Then
    // Операторы
    [ElsIf <Логическое выражение> Then]
    // Операторы
    [Else ]
    // Операторы
    EndIf;

    Параметры:
    <Логическое выражение>
    Логическое выражение.

    Тогда
    Операторы, следующие за Тогда выполняются, если результатом логического выражения является значение Истина.

    // Операторы
    Исполняемый оператор или последовательность таких операторов.

    ИначеЕсли
    Логическое выражение, следующее за ключевым словом ИначеЕсли, вычисляется только тогда, когда условия в Если и всех предшествующих ИначеЕсли оказались равны Ложь.
    Операторы, следующие за конструкцией ИначеЕсли — Тогда, выполняются, если результат логического выражения в данном ИначеЕсли равен Истина.

    Иначе
    Операторы, следующие за ключевым словом Иначе, выполняются, если результаты логических выражений в конструкции Если и всех предшествующих конструкцях ИначеЕсли оказались равны Ложь.

    КонецЕсли
    Ключевое слово, которое завершает структуру оператора условного выполнения.

    Описание:
    Оператор Если управляет выполнением программы, основываясь на результате одного или более логических выражений. Оператор может содержать любое количество групп операторов, возглавляемых конструкциями ИначеЕсли — Тогда.
     
  3. Neft

    Neft Гость

    я делаю следующюу процедуру проведения


    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Для Каждого ТекСтрокаСостав Из Состав Цикл
    // регистр ЗаявкаСогласовано Приход
    Движение = Движения.ЗаявкаСогласовано.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Согласовано = Согласовано;
    Движение.Сумма = ТекСтрокаСостав.Сумма;
    КонецЦикла;
    Если Документы.Заявка.Согласовано = Истина Тогда
    Для Каждого ТекСтрокаСостав Из Состав Цикл
    // регистр ЗаявкаУтверждено Приход
    Движение = Движения.ЗаявкаУтверждено.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Утверждено = Утверждено;
    Движение.Сумма = ТекСтрокаСостав.Сумма;
    КонецЦикла;
    КонецЕсли
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры


    Понимаю что это не правильно но как задать условие для реквизита документа я не знаю. Можно было бы поля "Согласовано" и "утверждено" перенести в табличную часть документа- при таком повороте расписать отдельное движение по регистрам вроде бы не проблема. но как сделать условие именно на реквизит документа с типом БУЛЕВО, помогите плиз?
     
  4. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Код ( (Unknown Language)):
    Если Согласовано Тогда
     
  5. Neft

    Neft Гость

    получается следлующая процедура

    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Для Каждого ТекСтрокаСостав Из Состав Цикл
    // регистр ЗаявкаСогласовано Приход
    Движение = Движения.ЗаявкаСогласовано.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Согласовано = Согласовано;
    Движение.Сумма = ТекСтрокаСостав.Сумма;
    КонецЦикла;
    Если Согласовано = Истина Тогда
    Для Каждого ТекСтрокаСостав Из Состав Цикл
    // регистр ЗаявкаУтверждено Приход
    Движение = Движения.ЗаявкаУтверждено.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Утверждено = Утверждено;
    Движение.Сумма = ТекСтрокаСостав.Сумма;
    КонецЦикла;
    КонецЕсли
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры


    но опять документы попадают в оба регисра (((

    Добавлено: unknown181538
    громадное спасибо до перло вот правильная процедура
    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Для Каждого ТекСтрокаСостав Из Состав Цикл
    // регистр ЗаявкаСогласовано Приход
    Движение = Движения.ЗаявкаСогласовано.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Согласовано = Согласовано;
    Движение.Сумма = ТекСтрокаСостав.Сумма;
    КонецЦикла;
    Если Согласовано = Истина Тогда
    Если Утверждено = Истина Тогда
    Для Каждого ТекСтрокаСостав Из Состав Цикл
    // регистр ЗаявкаУтверждено Приход
    Движение = Движения.ЗаявкаУтверждено.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Утверждено = Утверждено;
    Движение.Сумма = ТекСтрокаСостав.Сумма;
    КонецЦикла;
    КонецЕсли
    КонецЕсли
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры


    Один вопрос только остался: то есть если в процедуре проведения указать наименование реквизита (согласовано, утверждено) прграмма сама чтоль понимает что это реквизит именно этого документа ?
     
  6. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Да.
    Точно так же и в модуле формы.
     
  7. Neft

    Neft Гость

    Огромное спасибо! Выручили :ya_lamo:
     
  8. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Маленькое "НО", не надо проверять булевый тип на конкретное значение.

    1) атавизм из 7.7
    2) не красиво читать, закрадываются сомнения о типе переменной

    unknown181538 правильно ответил вам, с точки зрения оптимальности производительности платформы.
     
  9. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Всегда это раздражало в 7.7. Читабельность условий ухудшается.
     
  10. Neft

    Neft Гость

    а как без проверки тогда задать условие на наличие отметки в поле?
     
  11. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    В условия подставляются выражения возвращающие булево.
    Если Реквизит1 Тогда
     
  12. Neft

    Neft Гость

    То есть для реквизита( поля табличной части) с типом булево не обязательно прописывать его значение (истина или ложь) - программа сама понимает что Если Рек1 Тогда // произойдет призначении истина// Иначе // это произойдет для значения ложь//

    Так я понял?
     
  13. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
  14. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Все верно. Также можно проверять заполненность полей других типов, с помощью соответствующих функций:

    для типа "Строка" -
    Код ( (Unknown Language)):
    ПустаяСтрока(Строка)
    для всех остальных, кроме даты и мутабельных типов -
    Код ( (Unknown Language)):
    ЗначениеЗаполнено(Переменная)
    дата проверяется, к сожалению, так
    Код ( (Unknown Language)):
    Переменная = Дата('00010101')
     
  15. Neft

    Neft Гость

    unknown181538- спасибо за разъяснение )

    Darlock- спасибо очень простые полезные вещицы- учту
     
  16. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Darlock , а разве с помощью ЗначениеЗаполнено() строка и дата не проверяются?
    Или ;) ?
     
  17. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Строку можно проверить, а вот с датой - нихт. Прикол платформы пустая дата (в клиентской части все данные это представление данных) - она же заполненая дата только 01.01.0001 и в любом случае будет истина.
     
  18. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    не в любом. если реквизит формы с присоединенным полем ввода - то ЗначениеЗаполнено() работает правильно. а вот если из базы - тогда всегда истина.
     
  19. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Если окончательно вдаваться в подробности, то "ЗначениеЗаполнено" появилась только в 8.1. В 8.0 такой функции не было и каждый разработчик проверял по своему. В типовых была глобальная функция"ЗначениеНеЗаполнено()". С выходом 8.1 было информ. письмо в котором говорилось, что используйте "ЗначениеЗаполнено" т.к. работает быстрее.
     
Загрузка...
Похожие Темы - Задание условий для
  1. Mark
    Ответов:
    0
    Просмотров:
    605
  2. kira95
    Ответов:
    0
    Просмотров:
    949
  3. kira95
    Ответов:
    0
    Просмотров:
    923
  4. studentrtf
    Ответов:
    1
    Просмотров:
    1.569
  5. Ice-ninJa
    Ответов:
    1
    Просмотров:
    1.885

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