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

Подсчет данных из двух полей и помещение результата в другое

Автор DKNY, 15 фев 2024, 14:37

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

DKNY

LexaK, да, открылась. Я оказывается в пятницу не на ту обработку тыкала  :nhsrm: :nhsrm:  :nhsrm: 

DKNY

Обработка работает, но нужно чтобы работало в документе и ввод даты и времени въезда/выезда был через разные окна, так как эти данные вводят разные люди на разных КПП.

На основе Вашей обработки вроде получилось..
&НаКлиенте
Процедура ВремяВыездаПриИзменении(Элемент)
   П1 = 0;
   П2 = 0;
   Объект.КолвоДней = 0;
   Объект.КолвоНочей = 0;
   ДатаСтрВъезд = Формат(Объект.ДатаВъезда, "ДФ=""ггггММдд""");
   ВремяСтрВъезд = Формат (Объект.ВремяВъезда, "ДФ=""ЧЧмм""");
   Дата1 = Дата (ДатаСтрВъезд + ВремяСтрВъезд);
   ДатаСтрВыезд = Формат (Объект.ДатаВыезда, "ДФ=""ггггММдд""");
   ВремяСтрВыезд = Формат (Объект.ВремяВыезда,  "ДФ=""ЧЧмм""");
   Дата2 = Дата (ДатаСтрВыезд + ВремяСтрВыезд);
   ЭтоДень = Ложь;
   Пока П1 = 0 или Дата2 > П2 Цикл
      Если П1 = 0 Тогда
      П1 = НачалоДня (Дата1);
      П2 = П1 + 8 * 3600;
      ЭтоДень = Ложь;
      Если Дата1 < П2 Тогда
      Иначе
         Продолжить;
      КонецЕсли;
   Иначе
      П1 = П2;
      П2 = П1 + 12 * 3600;
      ЭтоДень = Не ЭтоДень;
      Если Дата1 > П2 Тогда
         Продолжить;
      КонецЕсли;
   КонецЕсли;
         
   Если ЭтоДень Тогда
      Объект.КолвоДней = Объект.КолвоДней + 1;
   Иначе
      Объект.КолвоНочей = Объект.КолвоНочей + 1;
   КонецЕсли;
   КонецЦикла;
      
КонецПроцедуры

LexaK

DKNY, это называется подготовкой исходных данных
1.ваши данные из документа Дата и время превращаете в переменную
Дата1 = ВашаДатаЗаезда + ВашеВремяЗаезда; (Тип: Дата и Время)
Дата2 = ВашаДатаВыезда + ВашеВремяВыезда; (Тип: Дата и Время)
и копируете код из обработки (копи пастить умеете?)
вот и все.

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

DKNY

LexaK, Я вот как раз исправила предыдущее сообщение, что получилось)) Спасибо Вам!

DKNY


DKNY

Обнаружила, что при вводе времени выезда раньше, чем время въезда количество дней/ночей все равно считает и пишет как 1. Поправила код:
&НаКлиенте
Процедура ВремяВыездаПриИзменении(Элемент)
    П1 = 0;
    П2 = 0;
    Объект.КолвоДней = 0;
    Объект.КолвоНочей = 0;
    ДатаВъезд = Формат (Объект.ДатаВъезда, "ДФ=""ггггММдд""");
    ВремяВъезд = Формат (Объект.ВремяВъезда, "ДФ=""ЧЧмм""");
    Въезд = Дата (ДатаВъезд + ВремяВъезд);
    ДатаВыезд = Формат (Объект.ДатаВыезда, "ДФ=""ггггММдд""");
    ВремяВыезд = Формат (Объект.ВремяВыезда,  "ДФ=""ЧЧмм""");
    Выезд = Дата (ДатаВыезд + ВремяВыезд);
    ЭтоДень = Ложь;
     
    Пока П1 = 0 или Выезд > П2 Цикл
        Если П1 = 0 Тогда
            П1 = НачалоДня (Въезд);
           
            П2 = П1 + 8 * 3599;
            ЭтоДень = Ложь;
                Если Въезд < П2 Тогда
                Иначе
                    Продолжить;
                КонецЕсли;
        Иначе
            П1 = П2;
       
            П2 = П1 + 12 * 3601;
            ЭтоДень = Не ЭтоДень;
                Если Въезд > П2 Тогда
                    Продолжить;
                КонецЕсли;
        КонецЕсли;
       
            Если Выезд < Въезд Тогда
                Объект.КолвоДней = 0
            Иначе   
                Если ЭтоДень Тогда
                    Объект.КолвоДней = Объект.КолвоДней + 1;
                Иначе
                    Объект.КолвоНочей = Объект.КолвоНочей + 1;
                КонецЕсли;
            КонецЕсли;
    КонецЦикла;
   
    Если Выезд < Въезд Тогда
        Сообщить ("Время выезда не может быть раньше время въезда. Исправьте время!");
    КонецЕсли;

LexaK

DKNY, добавили проверку, замечательно! оказывается их тоже надо правильно добавлять и правильно обрабатывать!
1.Обычно(!) проверки добавляют ДО а не ПОСЛЕ расчетов!
2.если проверка не прошла, выводят Сообщение и прерывают обработку
в вашем примере это выглядело бы так
&НаКлиенте
Процедура ВремяВыездаПриИзменении(Элемент)
    П1 = 0;
    П2 = 0;
    Объект.КолвоДней = 0;
    Объект.КолвоНочей = 0;
    ДатаВъезд = Формат (Объект.ДатаВъезда, "ДФ=""ггггММдд""");
    ВремяВъезд = Формат (Объект.ВремяВъезда, "ДФ=""ЧЧмм""");
    Въезд = Дата (ДатаВъезд + ВремяВъезд);
    ДатаВыезд = Формат (Объект.ДатаВыезда, "ДФ=""ггггММдд""");
    ВремяВыезд = Формат (Объект.ВремяВыезда,  "ДФ=""ЧЧмм""");
    Выезд = Дата (ДатаВыезд + ВремяВыезд);
    ЭтоДень = Ложь;

    Если Выезд < Въезд Тогда
        Сообщить ("Время выезда не может быть раньше время въезда. Исправьте время!");
Возврат;
КонецЕсли;

    Пока П1 = 0 или Выезд > П2 Цикл
        Если П1 = 0 Тогда
            П1 = НачалоДня (Въезд);
           
            П2 = П1 + 8 * 3599;
            ЭтоДень = Ложь;
                Если Въезд < П2 Тогда
                Иначе
                    Продолжить;
                КонецЕсли;
        Иначе
            П1 = П2;
       
            П2 = П1 + 12 * 3601;
            ЭтоДень = Не ЭтоДень;
                Если Въезд > П2 Тогда
                    Продолжить;
                КонецЕсли;
        КонецЕсли;
       
            Если Выезд < Въезд Тогда
                Объект.КолвоДней = 0
            Иначе   
                Если ЭтоДень Тогда
                    Объект.КолвоДней = Объект.КолвоДней + 1;
                Иначе
                    Объект.КолвоНочей = Объект.КолвоНочей + 1;
                КонецЕсли;
            КонецЕсли;
    КонецЦикла;
   
КонецПроцедуры
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск