Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Автоматический подсчет даты.

Автоматический подсчет даты.
Я
   Novichok2020
 
13.06.20 - 19:05
Здравствуйте. 1С начал изучать сравнительно недавно, и поэтому нуждаюсь в помощи) Имеется документ проведение медосмотра. В нем есть табличная часть медосмотр, а в ней соответственно реквизиты ФИО, Дата медосмотра, Дата следующего медосмотра. Мне необходимо, чтобы при заполнении реквизита Дата медосмотра, реквизит Дата Следующего медосмотра заполнялся автоматически и прибавлял еще год. Т.е.  Дата следующего медосмотра = Дата медосмотра + год. (Оба реквизита имеют тип Дата)
   МихаилМ
 
1 - 13.06.20 - 19:11
почему в сентябре и июне нашествие дебилов в этот форум ?
   Novichok2020
 
2 - 13.06.20 - 19:13
Извиняюсь конечно, если я дебил, но мои текущие знания не позволяют это сделать.
   NorthWind
 
3 - 13.06.20 - 19:18
(2) с такими вопросами проще всего гуглить. Например, "добавить год к дате 1С". И оно вам моментально найдет
Дата2 = ДобавитьМесяц (Дата1, 12)
   МихаилМ
 
4 - 13.06.20 - 19:30
(2) "Извиняюсь" - когда ВЫ себя извиняете. учите русский. пригодится.
   Novichok2020
 
5 - 13.06.20 - 19:38
Ну так я себя и извинил за дебила. Извиняюсь = Извиняю себя, правильно. Извинил себя за то, что по вашим словам я дебил. Я задал вопрос, получил оскорбление, если так хочется, идите оскорбляйте родных и близких, и не обращайте внимание, на так называемых дебилов. (4)
   Novichok2020
 
6 - 13.06.20 - 19:43
(3) Я Гуглил получилось вот такое.
&НаКлиенте
Процедура МедосмотрДатаСледующегоМедосмотраПриИзменении(Элемент)
     Дата1 = Объект.Медосмотр.ДатаМедосмотра;
     Дата2 = ДобавитьМесяц(Дата1,12);
     Объект.Медосмотр.ДатаСледующегоМедосмотра = Дата2;
КонецПроцедуры
Но так как я совсем зеленый в этом вопросе, при попытке изменить дату следующего, мне пишет что поле объекта ДатаМедосмотра не найдено. Возможно я обратился как-то неправильно?
   hhhh
 
7 - 13.06.20 - 20:01
(6) да, на клиенте через 2 точки невозможно получить. Поэтому сделайте еще одну функцию на сервере, которая вытаскивает этк дату.
   hhhh
 
8 - 13.06.20 - 20:06
(6) и вот тут у вас невероятная хрень.

Процедура МедосмотрДатаСледующегоМедосмотраПриИзменении(Элемент)

Человек вводит с клавитуры дату следующего медосмотра, а вы тут же эту дату стираете и подсовываете ему свою дату.
   Novichok2020
 
9 - 13.06.20 - 20:25
(8) Это я для тестирования работы процедуры. А так сделал на АвтоПодбор, так ведь лучше?
&НаКлиенте
Процедура МедосмотрДатаСледующегоМедосмотраАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
  Дата1 = Объект.Медосмотр.ДатаМедосмотра;
  Дата2 = ДобавитьМесяц(Дата1,12);
  Объект.Медосмотр.ДатаСледующегоМедосмотра = Дата2;
КонецПроцедуры
Не могли бы Вы подсказать, как получить через функцию на сервере эту дату?
   Злопчинский
 
10 - 13.06.20 - 20:30
(9) написать серверную функцию. и из клиента обратиться к ней. функция выполнится на сервер, выдернет данные нужные и вернет нужный результат на клиент.
   Злопчинский
 
11 - 13.06.20 - 20:30
функция выполнится на серверЕ
   МимохожийОднако
 
12 - 13.06.20 - 20:31
И не забудь серверную функцию сделать экспортный, а общий модуль должен иметь признак вызова.
   Novichok2020
 
13 - 13.06.20 - 21:01
Попробывал так:
&НаКлиенте
Процедура МедосмотрДатаСледующегоМедосмотраАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
  Дата1 = ПолучитьДатуНаСервере(ПроведениеМедосмотра);
  Дата2 = ДобавитьМесяц(Дата1,12);
  Объект.Медосмотр.ДатаСледующегоМедосмотра = Дата2;
КонецПроцедуры
&НаСервере
Функция ПолучитьДатуНаСервере(ПроведениеМедосмотра)
Возврат  ПроведениеМедосмотра.Медосмотр.ДатаМедосмотра;
КонецФункции
Но пишет, что не удается присвоить переменную. Опять же, я очень зеленый и не знаю всех тонкостей.
   Ёпрст
 
14 - 13.06.20 - 21:33
(13)Объект.Медосмотр.ДатаСледующегоМедосмотра = Дата2

Эту хрень перенеси на сервер и усё
   Ёпрст
 
15 - 13.06.20 - 21:35
И это..один хрен не заработает. Ты не совсем верно обращаешься к реквизитам табличной части
   Novichok2020
 
16 - 13.06.20 - 23:29
(14) Зачем мне эту "хрень" переносить на сервер, что она в таком случае будет считывать?
Мне нужно получить данные из ДатаМедосмотра, как я понял с сервера, а затем внести их в ДатуСледующегоМедсмотра. Но махинация с сервером не работает.
Процедура МедосмотрДатаСледующегоМедосмотраАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
  Дата1 = ПолучитьДатуНаСервере(ПроведениеМедосмотра);
  Дата2 = ДобавитьМесяц(Дата1,12);
  Объект.Медосмотр.ДатаСледующегоМедосмотра = Дата2;
КонецПроцедуры
&НаСервере
Функция ПолучитьДатуНаСервере(ПроведениеМедосмотра)// Данный способ получения информации из реквизита табл части я где-то загуглил, но он не работает. 

Возврат  ПроведениеМедосмотра.Медосмотр.ДатаМедосмотра//Тут я как понял должно вернутся значение реквизита табл. части

Ругается в первую очередь сюда Дата1 = ПолучитьДатуНаСервере(ПроведениеМедосмотра) Пишет что переменная не определена.
   Ёпрст
 
17 - 13.06.20 - 23:54
(16) короче, у колонки с твоей датой назначь обработчик ПриИзменении .. в нём ужо пропиши

&НаКлиенте
Процедура  ДатаМедосмотраПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Медосмотр.ТекущиеДанные;
    СтрокаТабличнойЧасти.ДатаСледующегоМедосмотра = ДобавитьМесяц(СтрокаТабличнойЧасти.ДатаМедосмотра,12);
КонецПроцедуры

   Novichok2020
 
18 - 13.06.20 - 23:58
(17) Сработало. Премного благодарен)
   Novichok2020
 
19 - 14.06.20 - 00:02
Еще такой вопрос, а если у меня допустим есть справочник Должности. И если предположим должность водитель то +6 месяцев, а если все остальные +12 месяцев. Как это можно вклинить туда?(17) 
Что-то вроде 
&НаКлиенте
Процедура  ДатаМедосмотраПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Медосмотр.ТекущиеДанные;
Если Справочники.Должность.Реквизит = Водитель То
    СтрокаТабличнойЧасти.ДатаСледующегоМедосмотра = ДобавитьМесяц(СтрокаТабличнойЧасти.ДатаМедосмотра,6);
Если Справочники.Должность.Реквизит = Все кроме Водитель То
    СтрокаТабличнойЧасти.ДатаСледующегоМедосмотра = ДобавитьМесяц(СтрокаТабличнойЧасти.ДатаМедосмотра,12);
КонецПроцедуры
   Novichok2020
 
20 - 14.06.20 - 00:11
Хотя я даже неправильно поставил вопрос. Есть Справочник Сотрудники, в нем у каждого сотрудника есть реквизит табличной часть должность. И есть этот документ проведение медосмотра. В нем реквизит ФИО связан с этим справочником.
   Ёпрст
 
21 - 14.06.20 - 07:49
(20) ФИО - тип какой? Справочник.Сотрудники ?
Если реквизит должность в табличной части, то если их несколько, какую братьтдля условия твоего?
   hhhh
 
22 - 14.06.20 - 08:48
(21) так он и выполняет процедуру для конкретной строки табличной части. С этим всё в порядке у него.
   ЕслиЧе
 
23 - 14.06.20 - 14:35
(1) Ай маладэц!!!!
Самоутвердился? Что, на работе старшие товарищи задолбали, забегался кофе с печенюшками им подносить да ИТС развозить и решил таким образом ЧСВ свое приподнять на спичечный коробок?
Хотел что-то умное сотворить, а получилось как обычно - гуано.
Кажется что ТС неадекват - так пройди мимо, ничего не пиши. Сам когда начинал все знал? Вспомни себя!
   Novichok2020
 
24 - 14.06.20 - 16:21
(21) ФИО - СправочникСсылка.Сотрудники. Мне необходимо чтобы по этой получается связи происходил поиск фамилии в самом справочнике, и считывал из него данные т.е Табличная часть - ДолжностиСотрудников, реквизит табличной части - должность, а затем вот та часть, через если.
   Ёпрст
 
25 - 14.06.20 - 17:58
(24) если должностей несколько, какую брать для услоыия?
   Novichok2020
 
26 - 14.06.20 - 18:06
Водитель. (25) Только он проходит допустим 2 раза в год,а остальные раз в год
   Ёпрст
 
27 - 14.06.20 - 20:38
&НаКлиенте
Процедура  ДатаМедосмотраПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Медосмотр.ТекущиеДанные;
    СтрокаТабличнойЧасти.ДатаСледующегоМедосмотра = ДобавитьМесяц(СтрокаТабличнойЧасти.ДатаМедосмотра,ВернутьКоличествоМесяцев(СтрокаТабличнойЧасти.ФИО));
КонецПроцедуры
&НаСервере
Функция ВернутьКоличествоМесяцев(Сотрудник)
   Запрос=Новый Запрос("
|Выбрать
   Ёпрст
 
28 - 14.06.20 - 22:57

Функция ВернутьКоличествоМесяцев(Сотрудник)
   Запрос=Новый Запрос("
|ВЫБРАТЬ ПЕРВЫЕ 1
|    Табличка.КоличествоЧасов КАК КоличествоЧасов
|ИЗ
|    (ВЫБРАТЬ
|        6 КАК КоличествоЧасов
|    ИЗ
|        Справочник.Сотрудники.Должности КАК СправочникСотрудникиДолжности
|    ГДЕ
|        СправочникСотрудникиДолжности.Должность= ЗНАЧЕНИЕ(Справочник.Должности.Водитель// если нет предопределенного значения, подставишь параметром в текст запроса

|    
|    ОБЪЕДИНИТЬ ВСЕ
|    
|    ВЫБРАТЬ
|        12) КАК Табличка
|
|УПОРЯДОЧИТЬ ПО
|    КоличествоЧасов
|");
Выбора = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Возврат Выборка.КоличествоЧасов;
КонецФункции

   D_E_S_131
 
29 - 15.06.20 - 11:51
+ к (27) - ИМХО лучше добавить в таблицу на форме реквизит для хранения КолМесяцев, а заполнять его при изменении реквизита ФИО (при пустой ссылке в ФИО - обнулять). И тогда уже при расчете следующей даты осмотра брать данные из текущей строки.
   maxipunchik
 
30 - 15.06.20 - 12:31
(23) Поддерживаю. Миха с катушек слетел
 
 Рекламное место пустует


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.