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

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

Человек вводит с клавитуры дату следующего медосмотра, а вы тут же эту дату стираете и подсовываете ему свою дату.
9 Novichok2020
 
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
И не забудь серверную функцию сделать экспортный, а общий модуль должен иметь признак вызова.
13 Novichok2020
 
13.06.20
21:01
Попробывал так:
&НаКлиенте
Процедура МедосмотрДатаСледующегоМедосмотраАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
  Дата1 = ПолучитьДатуНаСервере(ПроведениеМедосмотра);
  Дата2 = ДобавитьМесяц(Дата1,12);
  Объект.Медосмотр.ДатаСледующегоМедосмотра = Дата2;
КонецПроцедуры
&НаСервере
Функция ПолучитьДатуНаСервере(ПроведениеМедосмотра)
Возврат  ПроведениеМедосмотра.Медосмотр.ДатаМедосмотра;
КонецФункции
Но пишет, что не удается присвоить переменную. Опять же, я очень зеленый и не знаю всех тонкостей.
14 Ёпрст
 
13.06.20
21:33
(13)Объект.Медосмотр.ДатаСледующегоМедосмотра = Дата2

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


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


Функция ВернутьКоличествоМесяцев(Сотрудник)
   Запрос=Новый Запрос("
|ВЫБРАТЬ ПЕРВЫЕ 1
|    Табличка.КоличествоЧасов КАК КоличествоЧасов
|ИЗ
|    (ВЫБРАТЬ
|        6 КАК КоличествоЧасов
|    ИЗ
|        Справочник.Сотрудники.Должности КАК СправочникСотрудникиДолжности
|    ГДЕ
|        СправочникСотрудникиДолжности.Должность= ЗНАЧЕНИЕ(Справочник.Должности.Водитель)// если нет предопределенного значения, подставишь параметром в текст запроса
|    
|    ОБЪЕДИНИТЬ ВСЕ
|    
|    ВЫБРАТЬ
|        12) КАК Табличка
|
|УПОРЯДОЧИТЬ ПО
|    КоличествоЧасов
|");
Выбора = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Возврат Выборка.КоличествоЧасов;
КонецФункции
29 D_E_S_131
 
15.06.20
11:51
+ к (27) - ИМХО лучше добавить в таблицу на форме реквизит для хранения КолМесяцев, а заполнять его при изменении реквизита ФИО (при пустой ссылке в ФИО - обнулять). И тогда уже при расчете следующей даты осмотра брать данные из текущей строки.
30 maxipunchik
 
15.06.20
12:31
(23) Поддерживаю. Миха с катушек слетел
AdBlock убивает бесплатный контент. 1Сергей