0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 26
1

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

31.05.2010, 20:45. Показов 25266. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, помогите плиз!

Имеется документ с двумя реквизитами, пусть будет РЕК1 и РЕК2 оба реквизита со значением БУЛЕВО, документ имеет движения в двух регистрах (РЕГ1 и РЕГ2). Что необходимо прописать в модуле (не считая стандартной записи формирования движений по регистрам) для того чтобы приналичии значения ИСТИНА по РЕК1 документ попадал в первый регистр (РЕГ1), если по двум реквизитам значение ИСТИНА документ попадал только во второй регистр (РЕГ2). Помогите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2010, 20:45
Ответы с готовыми решениями:

Розница 2.2 РИБ Нет движений по регистрам для документа перемещение в подчиненном узле
Добрый день уважаемые форумчане !!! Прошу помощи у гуру ... может кто нибудь сталкивался ... ...

Обработка проведения документа: движения по регистрам накопления.
Добрый день! Просьба посмотреть код и отредактировать правильно, или сказать что больше...

Проведение документа «Оказание услуги» по двум регистрам
Указав стоимость материала и в файле оказание услуги и проведя его выводится странная стоимость в...

Ошибки при записи движений документа в регистр накопления
Здравствуйте. Есть собственная конфигурация 1С 8.3 по планированию и учету проектов. В Конфигурации...

18
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
31.05.2010, 22:56 2
Код ( (Unknown Language)):
Синтаксис:
Если <Логическое выражение> Тогда
// Операторы
[ИначеЕсли <Логическое выражение> Тогда]
// Операторы
[Иначе]
// Операторы
КонецЕсли;

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

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

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

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

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

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

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

Описание:
Оператор Если управляет выполнением программы, основываясь на результате одного или более логических выражений. Оператор может содержать любое количество групп операторов, возглавляемых конструкциями ИначеЕсли — Тогда.
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 26
31.05.2010, 23:17 3
я делаю следующюу процедуру проведения


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


Понимаю что это не правильно но как задать условие для реквизита документа я не знаю. Можно было бы поля "Согласовано" и "утверждено" перенести в табличную часть документа- при таком повороте расписать отдельное движение по регистрам вроде бы не проблема. но как сделать условие именно на реквизит документа с типом БУЛЕВО, помогите плиз?
0
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
31.05.2010, 23:31 4
Код ( (Unknown Language)):
Если Согласовано Тогда
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 26
31.05.2010, 23:43 5
получается следлующая процедура

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


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

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


Один вопрос только остался: то есть если в процедуре проведения указать наименование реквизита (согласовано, утверждено) прграмма сама чтоль понимает что это реквизит именно этого документа ?
0
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
01.06.2010, 00:07 6
Цитата Сообщение от Neft
Один вопрос только остался: то есть если в процедуре проведения указать наименование реквизита (согласовано, утверждено) прграмма сама чтоль понимает что это реквизит именно этого документа
Да.
Точно так же и в модуле формы.
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 26
01.06.2010, 07:19 7
Огромное спасибо! Выручили :ya_lamo:
0
0 / 0 / 0
Регистрация: 23.04.2010
Сообщений: 553
01.06.2010, 11:06 8
Маленькое "НО", не надо проверять булевый тип на конкретное значение.



Цитата Сообщение от Neft
Если Согласовано = Истина Тогда
1) атавизм из 7.7
2) не красиво читать, закрадываются сомнения о типе переменной

unknown181538 правильно ответил вам, с точки зрения оптимальности производительности платформы.
0
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
01.06.2010, 20:34 9
Цитата Сообщение от Darlock
1) атавизм из 7.7
Всегда это раздражало в 7.7. Читабельность условий ухудшается.
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 26
01.06.2010, 22:07 10
Цитата Сообщение от Darlock
Маленькое "НО", не надо проверять булевый тип на конкретное значение.
а как без проверки тогда задать условие на наличие отметки в поле?
0
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
01.06.2010, 22:09 11
В условия подставляются выражения возвращающие булево.
Если Реквизит1 Тогда
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 26
01.06.2010, 22:25 12
То есть для реквизита( поля табличной части) с типом булево не обязательно прописывать его значение (истина или ложь) - программа сама понимает что Если Рек1 Тогда // произойдет призначении истина// Иначе // это произойдет для значения ложь//

Так я понял?
0
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
01.06.2010, 22:35 13
Точно
;)
0
0 / 0 / 0
Регистрация: 23.04.2010
Сообщений: 553
01.06.2010, 22:38 14
Цитата Сообщение от Neft
То есть для реквизита( поля табличной части) с типом булево не обязательно прописывать его значение (истина или ложь) - программа сама понимает что Если Рек1 Тогда // произойдет призначении истина// Иначе // это произойдет для значения ложь//

Так я понял?
Все верно. Также можно проверять заполненность полей других типов, с помощью соответствующих функций:

для типа "Строка" -

Код ( (Unknown Language)):
ПустаяСтрока(Строка)
для всех остальных, кроме даты и мутабельных типов -

Код ( (Unknown Language)):
ЗначениеЗаполнено(Переменная)
дата проверяется, к сожалению, так

Код ( (Unknown Language)):
Переменная = Дата(00010101)
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 26
01.06.2010, 22:38 15
unknown181538- спасибо за разъяснение )

Darlock- спасибо очень простые полезные вещицы- учту
0
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
01.06.2010, 23:24 16
Darlock , а разве с помощью ЗначениеЗаполнено() строка и дата не проверяются?
Или ;) ?
0
0 / 0 / 0
Регистрация: 23.04.2010
Сообщений: 553
01.06.2010, 23:34 17
Цитата Сообщение от unknown181538
Darlock , а разве с помощью ЗначениеЗаполнено() строка и дата не проверяются?
Или ;) ?
Строку можно проверить, а вот с датой - нихт. Прикол платформы пустая дата (в клиентской части все данные это представление данных) - она же заполненая дата только 01.01.0001 и в любом случае будет истина.
0
0 / 0 / 0
Регистрация: 15.02.2008
Сообщений: 173
01.06.2010, 23:51 18
не в любом. если реквизит формы с присоединенным полем ввода - то ЗначениеЗаполнено() работает правильно. а вот если из базы - тогда всегда истина.
0
0 / 0 / 0
Регистрация: 23.04.2010
Сообщений: 553
02.06.2010, 00:55 19
Цитата Сообщение от evgenyatam
не в любом. если реквизит формы с присоединенным полем ввода - то ЗначениеЗаполнено() работает правильно. а вот если из базы - тогда всегда истина.
Если окончательно вдаваться в подробности, то "ЗначениеЗаполнено" появилась только в 8.1. В 8.0 такой функции не было и каждый разработчик проверял по своему. В типовых была глобальная функция"ЗначениеНеЗаполнено()". С выходом 8.1 было информ. письмо в котором говорилось, что используйте "ЗначениеЗаполнено" т.к. работает быстрее.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2010, 00:55
Помогаю со студенческими работами здесь

Как получить актуальные остатки по регистру накопления в обработке провед документа с учетом его движений
Народ, подскажите как при проведении документа через ОбработкуПроведения (процедура проведения в...

Задание нескольких условий
Здравствуйте! Подскажите, пожалуйста какой комбинацией клавиш или в меню можно задать такое...

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

Задание граничных условий
как запрограммировать в C# x=0 T(x)=100 x=a T(x)=0 ? всё задаю в теле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru