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

Пересечение периодов

Автор Тари, 06 июл 2020, 12:58

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

Тари

Добрый день.

Хочу сделать проверку на пересечение дат при окончании редактирования, использую такую процедуру:
&НаКлиенте
Процедура РасчетСтажаПриОкончанииРедактирования(Элемент)
ТекСтрока = Элементы.РасчетСтажа.ТекущиеДанные;
Если (ТекСтрока.ДатаНачала > ТекСтрока.ДатаОкончания) ИЛИ (ТекСтрока.ДатаОкончания > ТекСтрока.ДатаНачала)
Тогда Предупреждение("Пересечение периодов!", 0, "Изменить")
КонецЕсли;
КонецПроцедуры

Вожу следующие данные (рисунок), сообщение о пересечении периодов не выходит.
В чем может быть ошибка.
Версия: 1С:Предприятие 8.3 (8.3.14.1976)

antoneus

То есть предупреждение не будет выскакивать только когда ДатаНачала = ДатаОкончания? В одной и той же строке? Чето смысла не уловлю) В процедуру-то заходит?

DmitriyF

Цитата: Тари от 06 июл 2020, 12:58
Добрый день.

Хочу сделать проверку на пересечение дат при окончании редактирования, использую такую процедуру:
&НаКлиенте
Процедура РасчетСтажаПриОкончанииРедактирования(Элемент)
ТекСтрока = Элементы.РасчетСтажа.ТекущиеДанные;
Если (ТекСтрока.ДатаНачала > ТекСтрока.ДатаОкончания) ИЛИ (ТекСтрока.ДатаОкончания > ТекСтрока.ДатаНачала)
Тогда Предупреждение("Пересечение периодов!", 0, "Изменить")
КонецЕсли;
КонецПроцедуры

Вожу следующие данные (рисунок), сообщение о пересечении периодов не выходит.
В чем может быть ошибка.
Версия: 1С:Предприятие 8.3 (8.3.14.1976)
Откуда вызываете процедуру? Если не нужна запись то Отказ где то должен быть.

LexaK

Тари, этой командой вы проверяете данные ТОЛЬКО одного периода, правильность периода,
что бы проверить ПЕРЕСЕЧЕНИЕ периодов, вам надо перебрать все строчки из ТЧ
что-то примерно такое вам надо написать

&НаКлиенте
Процедура РасчетСтажаПриОкончанииРедактирования(Элемент)

ТекСтрока = Элементы.РасчетСтажа.ТекущиеДанные;

//проверка заполненности дат
Если ЗначениеЗаполнено(ТекСтрока.ДатаНачала)
и ЗначениеЗаполнено(ТекСтрока.ДатаОкончания) Тогда

//проверка текущего, отредактированного периода
Если ТекСтрока.ДатаНачала > ТекСтрока.ДатаОкончания Тогда
Сообщить("Не верно задан период.");
Возврат;
КонецЕсли;
Иначе
//не все введено,выходим продолжаем ввод
Возврат;
КонецЕсли;

//проверка с пересечениями и/или включениями с другими периодами
Для каждого лкСтр Из Объект.РасчетСтажа Цикл //или где там ТЧ
Если лкСтр.НомерСтроки <> ТекСтрока.НомерСтроки Тогда //кроме самой себя
Если ЗначениеЗаполнено(лкСтр.ДатаНачала)
и ЗначениеЗаполнено(лкСтр.ДатаОкончания) Тогда
//период заполнен, проверяем пересечение
Если ТекСтрока.ДатаНачала >= лкСтр.ДатаНачала и ТекСтрока.ДатаНачала <= лкСтр.ДатаОкончания Тогда
или лкСтр.ДатаНачала >= ТекСтрока.ДатаНачала и лкСтр.ДатаНачала <= ТекСтрока.ДатаОкончания Тогда
Сообщить("Пересечение с периодом: " + лкСтр.ДатаНачала);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры
если помогло нажмите: Спасибо!

Тари

Цитата: LexaK от 06 июл 2020, 15:08
Тари, этой командой вы проверяете данные ТОЛЬКО одного периода, правильность периода,
что бы проверить ПЕРЕСЕЧЕНИЕ периодов, вам надо перебрать все строчки из ТЧ
что-то примерно такое вам надо написать

&НаКлиенте
Процедура РасчетСтажаПриОкончанииРедактирования(Элемент)

ТекСтрока = Элементы.РасчетСтажа.ТекущиеДанные;

//проверка заполненности дат
Если ЗначениеЗаполнено(ТекСтрока.ДатаНачала)
и ЗначениеЗаполнено(ТекСтрока.ДатаОкончания) Тогда

//проверка текущего, отредактированного периода
Если ТекСтрока.ДатаНачала > ТекСтрока.ДатаОкончания Тогда
Сообщить("Не верно задан период.");
Возврат;
КонецЕсли;
Иначе
//не все введено,выходим продолжаем ввод
Возврат;
КонецЕсли;

//проверка с пересечениями и/или включениями с другими периодами
Для каждого лкСтр Из Объект.РасчетСтажа Цикл //или где там ТЧ
Если лкСтр.НомерСтроки <> ТекСтрока.НомерСтроки Тогда //кроме самой себя
Если ЗначениеЗаполнено(лкСтр.ДатаНачала)
и ЗначениеЗаполнено(лкСтр.ДатаОкончания) Тогда
//период заполнен, проверяем пересечение
Если ТекСтрока.ДатаНачала >= лкСтр.ДатаНачала и ТекСтрока.ДатаНачала <= лкСтр.ДатаОкончания Тогда
или лкСтр.ДатаНачала >= ТекСтрока.ДатаНачала и лкСтр.ДатаНачала <= ТекСтрока.ДатаОкончания Тогда
Сообщить("Пересечение с периодом: " + лкСтр.ДатаНачала);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры


Спасибо за помощь.
Но такой вопрос (скорее всего очень глупый): когда я начинаю писать даты, выходит такая ошибка
Поле объекта не обнаружено (РасчетСтажа)
    Для каждого лкСтр Из Объект.РасчетСтажа Цикл

Хотя ТЧ называется РасчетСтажа

LexaK

по вашей картинке РасчетСтажа это не ТЧ, что там в пути к данным написано?
попробуйте заменить это
Цитировать
   Для каждого лкСтр Из Объект.РасчетСтажа Цикл //или где там ТЧ
        Если лкСтр.НомерСтроки <> ТекСтрока.НомерСтроки Тогда //кроме самой себя

на это


   Для каждого лкСтр Из РасчетСтажа Цикл //из таблицы формы
        Если лкСтр <> ТекСтрока Тогда //кроме самой себя

если помогло нажмите: Спасибо!

Тари

Цитата: LexaK от 08 июл 2020, 12:15
по вашей картинке РасчетСтажа это не ТЧ, что там в пути к данным написано?
попробуйте заменить это
Цитировать
   Для каждого лкСтр Из Объект.РасчетСтажа Цикл //или где там ТЧ
        Если лкСтр.НомерСтроки <> ТекСтрока.НомерСтроки Тогда //кроме самой себя

на это


   Для каждого лкСтр Из РасчетСтажа Цикл //из таблицы формы
        Если лкСтр <> ТекСтрока Тогда //кроме самой себя


По пути к данным написано следующее: Расчёт (картинку прикрепила)
Если использую данный код,

   Для каждого лкСтр Из РасчетСтажа Цикл //из таблицы формы
        Если лкСтр <> ТекСтрока Тогда //кроме самой себя

то появляется такая ошибка
{Обработка.Проба1.Форма.Форма.Форма(21,25)}: Переменная не определена (РасчетСтажа)
   Для каждого лкСтр Из <<?>>РасчетСтажа Цикл //из таблицы формы (Проверка: Толстый клиент (обычное приложение))

antoneus

Обращаться надо к реквизиту формы по имени реквизита, то есть

Для каждого лкСтр Из Расчет Цикл

Тари

Цитата: antoneus от 09 июл 2020, 12:02
Обращаться надо к реквизиту формы по имени реквизита, то есть

Для каждого лкСтр Из Расчет Цикл
Спасибо большое.

Теги:

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

Рейтинг@Mail.ru

Поиск