gifts2017

[ОБУЧАЛОВКА] Финт ушами с временем документа.

Опубликовал Сергей (Che) Коцюра (CheBurator) в раздел Программирование - Практика программирования

Маленькое наблюдение, облегчающее программную расстановку документов по оси времени.
Финт с чебурашечными ушами будет показан на примере. Простая задача: расставить документы ''накладная'' и ''счет-фактура'' на оси времени с интервалом в полторы минуты. Делаем примерно так:
//получаем исходное время
ЧЧ=0;
ММ=0;
СС=0;
ДокРН.ПолучитьВремя(ЧЧ,ММ,СС);
//формируем новое время
СС=СС+90;
ДокСФ.УстановитьВремя(ЧЧ,ММ,СС);
ДокСФ.Записать();

Как видно из примера, наращиваем только счетчик секунд, при записи документа движок 1С сам произведет ''адекватный'' пересчет секунд, минут, часов. Такаим образом можно наращивать любой из счетчиков времени в приведенном выше примере, наращивание производится должно в единицах увеличиваемого счетчика. Т.е. ничто не мешает для сдвига на 1 час написать
 CC=CC+60*60; 

или
 ММ=ММ+60; 

или
 ЧЧ=ЧЧ+1; 

Описанным выше способом можно двигать счетчики и вперед по (+), и назад по (-). Такой нехитрый прием существенно облегчает оперирование со временем документа.
При этом надо учитывать только то, что сдвижка производится только в пределах одних суток! Т.е. макисмально позднее(раннее) время, которое получится у документа: 23:59:59 (00:00:01) - прибавив к 23:59:10 больше 50 секунд в другой день ''перескочить'' не удастся ;-).
В этом случае надо действовать уже в зависимости от лично ваших нужд, как пример - можно так:
//формируем новое время
СС=СС+90;
ДокСФ.УстановитьВремя(ЧЧ,ММ,СС);
ДокСФ.Записать();
Если СтрЗаменить(ДокСФ.ПолучитьВремя(),'':'','''')=''235959'' Тогда
//тут обрабатываем ''исключительную ситуацию''
    //перехода на новую дату
ДокСФ.ДатаДок = ДокСФ.ДатаДок+1;
   ДокСФ.УстановитьВремя(00,00,01);
   ДокСФ.Записать();
КонецЕсли;


Вот такие вот чебурашки.

Разведал эту шнягу, когда забодался плюсовать секунды-минуты-секунды - неэстетично это, однозначно! А если попробовать прибавить много секунд - что будет? Попробовал - получилось...

PS: если эта статья помогла вам узнать нечто новое - плюсуй рейтинг! Не ленись...

См. также

Подписаться Добавить вознаграждение
Комментарии
1. АЛьФ (АЛьФ) 12.07.06 11:59
2. VasilyKushnir (vasilykushnir) 12.07.06 12:16
Плюсую. Буду пробовать поюзать. Идейка весьма интересная.
3. Павел Чистов (GROOVY) 12.07.06 14:15
Документы располагать относительно друг друга надо не изменением времени а правильным созданием и записью самих документов. только в этом случае мы избежим ограничения 86400 документов в сутки!
4. Сhe Burashka (CheBurator) 12.07.06 22:26
Согласен.
Данный код - и служит целям "правильного" программного создания/модификации документов. ;-)
А про то, что документы интерактивно нужно правильно создавать/модифицировать - это да, возражений нет.
Если знаешь как программно создать и расположить реализацию после заявки не оперируя временем документа - поделись, будет интересно не только мне...
5. Павел Чистов (GROOVY) 13.07.06 00:32
6. VasilyKushnir (vasilykushnir) 14.07.06 11:35
>GROOVY
>Ок. Скоро будет!

Будем ждать...
В дополнение к замечанию Сhe: расхождение по времени с заявкой и расходной еще пол-беды. У нас цепочка из трех документов ЗаявкаПокупателя-Отборочная-Расходная. Если с заявкой и расходной все понятно, то чуть уточню, что за зверь Отборочная. Этот документ представляет собой обычное перемещение с отдела хранения в отдел экспедиции, где на их основании создается расходная. При этом не обязательно все товары из заявки попадают в отборочные и расходные, ну это к делу не относится. Так вот временная последовательность должна четко соблюдатся для пары Отборочная-Расходная - ну не может экспедиция выписать товар, который еще не поступил со складов. Но наши крендели умудряются иногда шурануть расходную более ранним временем (а иногда и датой!), чем отборочная. Так что если у GROOVY есть идеи как это блокировать на этапе создания расходной - воздадим хвалу этому достойному человеку!
7. Сhe Burashka (CheBurator) 14.07.06 19:39
Не к теме публикации, а по обсуждению... у меня еще лучше... у меня из неподтвержденки дерево документов может быть листов на 8-10 (неподтвержденка-заявки-заказы-поступления-расходы)
8. Олег Пономаренко (O-Planet) 14.07.06 22:33
Надо воспользоваться этим, чтобы рейтинг выпрашивать :)
Токо где финт-то? Обычное преобразование типов...
9. Сhe Burashka (CheBurator) 14.07.06 23:41
Просвети, плиз, неграмотного - где здесь преобразование типов?
10. Олег Пономаренко (O-Planet) 15.07.06 02:25
Да все просто. Для тебя время - это минуты, секунды и часы, а во внутреннем представлении 1С - это число типа long. Поэтому, ты мог с таким же успехом не секунды прибавлять, а, скажем, минуты. Она все равно бы преобразовала бы все к формату времени.

Кстати, если хошь знать, какими бывают финты, то читай мою статью последнюю :)
11. Сhe Burashka (CheBurator) 15.07.06 15:15
будь спок. минуты тоже прибавляем... ;-)
статью - ща посмотрим...
12. Mey (Mey) 29.08.06 07:53
13. Skylark 01.09.06 15:44
Спасибо, открыл для себя: движок 1С сам произведет ''адекватный'' пересчет секунд, минут, часов. А то я совсем недавно решал такую проблему, так накрутил там пересчеты все самостоятельно :-). Оказывается можно было не заморачиваться.
14. Drock (d.snissarenko) 06.09.06 18:18
15. Сhe Burashka (CheBurator) 07.09.06 01:07
А чего пробовать? Юзать надо ;-)
17. Сhe Burashka (CheBurator) 27.11.06 11:43
Может кто еще знает некоторые неочевидные хитрости?
18. Item (item) 01.12.06 12:05
Была такая фишка до 14-го релиза:
для дополнительных числовых реквизитов проводки
(напр. "количество2" с конф."Сельхоз.предприятие" от Рарус)
v77 поддерживала функции ДО() и КО() в запросе.
Жаль, что эту вещь выкосили в поздних релизах.
19. Плюшкин Плюшкин (Плюшкин_) 01.12.06 20:36
у меня(как у пита) такое давно реализовано:)Правда не мучался,сразу получилось.Это когда из ТиС в Бухию переброску и если изменения,то меняем и в бухии.Соотв. и время нужно точно расставить.
20. Сhe Burashka (CheBurator) 11.12.06 16:15
Boj мелкая хитрость: бывает надо на экран вывести ТЗ (типа в отладочных целях), причем с нумерацией строк. Чтобы не заморачиваться, пишем: [code]
ТЗ.ВидимостьКолонки("НомерСтроки",1);
ТЗ.ВыбратьСтроку(," типа отладка");
Zab; Altez; Pari; mishau; +4 Ответить
21. Сhe Burashka (CheBurator) 29.03.07 01:03
Не понял.. читать - читаем, ума-разума набираемся.. а кто рейтинг статьи плюсовать будет, а???
22. (das) Афанасьева Светлана (das) 22.09.07 04:51
Бесценный опыт - в нашу копилку ;-)))
23. Владимир Паникаровских (Voldemar) 15.10.07 07:53
Не так давно была задача "раскидать" по дню загруженные документы, так тщательно прописывал ЧЧ,ММ,СС. А оказывается, можно было всё гораздо проще сделать. Спасибо за ценный опыт.
24. Сhe Burashka (CheBurator) 16.10.07 12:35
Пожалуйста! Приходите и читатйе другие мои "жизненные" статьи!
25. Вадим 1С911.BY (Вадимко) 24.11.07 03:41
Позволю себе дополнить...
Управлять временем можно гораздо точнее нежели в переделах секунды... мы-то с вами знаем :)
86400 - это для пионэров
Есть у меня два документа с одинаковым временем 12.00.01
Если я поменяю время документа с '757H1S' на '757H1T', то документы что сделают?
Правильно, поменяются местами в журнале
А время какое мы продолжаем видеть в 1С? Правильно, 12.00.01 :)
ЗЫ. Чучундеру ПЛЮС за упорство в написании полезных программ и статей
26. Сhe Burashka (CheBurator) 25.11.07 00:26
(25) И вот сколько документов "влазит" в одну секунду - это и определяется "емкостью" приведенного ниже идентификатора...
27. valent (valent) 03.08.08 06:35
Бывает нелишним перед всем этим вставить "АвтоВремяОтключить()"
+
alevnev; Svopper; hate; +3 Ответить
28. Hate (hate) 16.08.08 13:06
конечно не решило всех проблем, но все равно спасибо, подталкнуло в нужном направлении, поэтому однозначно +!
29. Alexander Nick (nickkey) 29.09.11 05:18
согласен все гениальное просто спасибо за идею :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа