Опять даты или "пятая нога" для стандартной платформы.

Публикация № 308429

Разработка - Универсальные функции

даты операции с датами сложение дат разница между датами

Функции для работы с датами, которые почему-то забыли перенести из языка запросов в язык 1С.

С недавних пор в свои проекты я начал добавлять общий модуль для работы с датами. Не то чтобы без него было никак не обойтись, но с ним стало удобнее. Тот кто танцевал с бубном вокруг операций с датами на 8-й платформе меня, надеюсь, понимает.

Раскладывание дат по частям, а потом сборка после обработки напильником меня, признаться, не сильно утомляла, до тех пор пока не понадобилось в больших количествах складывать даты и время, находить разности и проверять настали ли заветные моменты. Стал писать запросы, а потом, когда сложность запросов превысила мои скромные способности взял и перенес две безусловно полезные функции языка запросов в прикладной функционал обычного языка. И, признаться, сразу полегчало.

ДОБАВИТЬКДАТЕ и РАЗНОСТЬДАТ по какой-то неведомой для меня причине забыли включить в обычный язык, то ли по недосмотру, то ли для того, чтобы побыстрее заставить переучиться на новый язык запросов. И хотя с момента рождения 8-ки минуло уже уйма лет (в минутах и секундах тоже можно узнать:) адекватная работа с датами так и осталась уделом запросов.

Я не хочу критиковать разработчиков платформы, и не хочу косить стартмани за добрые дела поэтому просто выкладываю содержимое своего стандартного модуля, который я традиционно называю РаботаСДатами. Клиент-серверные настройки модуля за вами, надеюсь только, что все помнят про то, что запросы на стороне клиента не доступны. У меня как правило он строго на сервере. Заветные 10 000 знаков в статье мне тоже не очень то нужны поэтому к делу (или к телу модуля):

Функция РазностьДат(НачальнаяДата,КонечнаяДата,Размерность) Экспорт
   Запрос = Новый ("Запрос");
   Если ВРег(Размерность) = "СЕКУНДА" Тогда
	   Запрос.Текст = 
	   "ВЫБРАТЬ
	   |	РАЗНОСТЬДАТ(&НачальнаяДата, &КонечнаяДата, МИНУТА)*60 +
	   |	(СЕКУНДА(&КонечнаяДата) - СЕКУНДА(&НачальнаяДата)) КАК Разность";
   Иначе
	   Запрос.Текст = 
	   "ВЫБРАТЬ
	   |	РАЗНОСТЬДАТ(&НачальнаяДата, &КонечнаяДата, " + Размерность + ") КАК Разность";
   КонецЕсли;
   Запрос.УстановитьПараметр("НачальнаяДата",НачальнаяДата);
   Запрос.УстановитьПараметр("КонечнаяДата",КонечнаяДата);
   Возврат Запрос.Выполнить().Выгрузить()[0].Разность;
КонецФункции

Функция ДобавитьКДате(НачальнаяДата,Количество,Размерность) Экспорт
   Запрос = Новый ("Запрос");
   Запрос.Текст = 
   "ВЫБРАТЬ
   |	ДОБАВИТЬКДАТЕ(&НачальнаяДата, " + Размерность + ",&Количество) КАК НоваяДата";
   Запрос.УстановитьПараметр("НачальнаяДата",НачальнаяДата);
   Запрос.УстановитьПараметр("Количество",Количество);
   Возврат Запрос.Выполнить().Выгрузить()[0].НоваяДата;
КонецФункции

Функция ДатаВЕдиницыВремени(НужнаяДата, Размерность) Экспорт
   Запрос = Новый ("Запрос");
   Если НЕ ВРег(Размерность) = "СЕКУНДА" Тогда
	   Запрос.Текст = 
	   "ВЫБРАТЬ
	   |	РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1,0,0,0), &КонечнаяДата, " + Размерность + ") КАК ДатаЧислом";
   Иначе
	   Запрос.Текст = 
	   "ВЫБРАТЬ
	   |	РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1,1,1,0,0,0), НАЧАЛОПЕРИОДА(&КонечнаяДата,МЕСЯЦ), МИНУТА)*60 + 
	   |    РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&КонечнаяДата,МЕСЯЦ), &КонечнаяДата, " + Размерность + ") КАК ДатаЧислом";
   КонецЕсли;
   
   Запрос.УстановитьПараметр("КонечнаяДата",НужнаяДата);
   Возврат Запрос.Выполнить().Выгрузить()[0].ДатаЧислом;
КонецФункции

Функция ЕдиницыВремениВДату(Количество,Размерность) Экспорт
	Запрос = Новый ("Запрос");
	Если ВРег(Размерность) = "СЕКУНДА" Тогда
	   Запрос.Текст = 
	   "ВЫБРАТЬ
	   |	ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0), МИНУТА,&КоличествоМ), " + Размерность + ", &КоличествоС) КАК НоваяДата";
	   КоличествоМ = Цел(Количество/60);
	   Запрос.УстановитьПараметр("КоличествоМ",КоличествоМ);
	   Запрос.УстановитьПараметр("КоличествоС",Количество - КоличествоМ*60);
	Иначе
		Запрос.Текст = 
	   "ВЫБРАТЬ
	   |	ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0), " + Размерность + ",&Количество) КАК НоваяДата";
	   Запрос.УстановитьПараметр("Количество",Количество);
   КонецЕсли;
   Попытка
    	Возврат Запрос.Выполнить().Выгрузить()[0].НоваяДата;
	Исключение
		Возврат Дата(1,1,1,0,0,0);
	КонецПопытки;	
КонецФункции

Функция СуммаДатЧислом(Дата1, Дата2, Размерность) Экспорт
   Возврат ДатаВЕдиницыВремени(Дата1,Размерность) + ДатаВЕдиницыВремени(Дата2, Размерность);
КонецФункции

Функция СуммаДатДатой(Дата1,Дата2) Экспорт
	СуммаЧислом = СуммаДатЧислом(Дата1,Дата2,"СЕКУНДА");
	Возврат ЕдиницыВремениВДату(СуммаЧислом,"СЕКУНДА");
КонецФункции

Теперь немного пояснений и все. Потерпите еще пару минут. 

По назначению функций я думаю все понятно, но если нет прошу писать в комменты или личку. Размерность времени стандартная для запросов: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ и ГОД

По немного странному виду функций. Дело в том, что при обработке дат в размерности СЕКУНДА выяснилось, что ядро исполнителя запросов переполняется когда секунд становится немножко больше чем дофига. Пришлось менять основные отрезки на минутную размерность, добавляя потом секундные хвостики. А то иначе 1С пишет много страшных букв, призывая даже SQL в оправдание своей беспомощности перед столь грандиозным количеством разрядов.

А еще есть один интересный эффект, связанный со сложением дат. Внезапно (а как же еще) выяснилось, что 1С не знает, что бывают даты больше 4000 года от Р.Х. Ни в секундах, ни в минутах, ни даже в годах пояснить ему (или ей... я не знаю какого у Вас 1С рода) феномен бесконечности времени и пространства не удалось, поэтому если уж Вы начнете складывать что-то выходящее суммой за рамки то получите 01.01.01 00:00:00. Не обижайтесь и не расстраивайтесь, а лучше представьте, что когда нибудь спустя почти 2000 лет ученые будущего найдут винтажную систему учета 1С и вдруг выяснят, что 4000 годом заканчивается ее календарь и картина мира. В мире восцарится шок и паника - "Древние мудрецы предсказали конец света в 4000 году! Спасайтесь кто может!"Laughing

Вот такие любопытные параллели с 2012 годом, когда закончился календарь майя, заложили создатели 1С в свое детище. Может быть всего лишь 1986 лет спуся мир снова сойдет с ума от зловещих предсказаний господина Нуралиева?

Для желающих обязательно что-нибудь скачать и одарить меня $m набросал обработку-демонстратор возможностей. Извините, только управляемая форма.

Ну шутки шутками, а на этом прощаюсь и желаю всем хороших и интересных разработок.

Скачать файлы

Наименование Файл Версия Размер
DemoDates.epf

.epf 8,17Kb
21.10.14
14
.epf 8,17Kb 14 Скачать

Специальные предложения

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. МихаилМ 21.10.14 12:55 Сейчас в теме
использование для подобных мелко вычислительных задач субд - вандализм.
все эти методы пишутся без использования запросов.



sashocq; Allexe8.1; Sitex; alexsi; monkbest; JohnyDeath; svvinks; zqzq; CatMix; awk; theshadowco; desunya; BigB; PowerBoy; ildarovich; +15 Ответить
2. dusha0020 926 21.10.14 13:57 Сейчас в теме
(1) МихаилМ, Возразить нечего. Ну кроме того, что никто еще подобные функции не написал и не сравнил с этими по простоте реализации, точности вычислений и времени работы. Думаете у меня такой мысли не было?:)
CITRUM; ojiojiowka; +2 Ответить
3. kapustinag 22.10.14 10:46 Сейчас в теме
(1) МихаилМ, (2)
Да, появилась точно такая же мысль при первом прочтении текста модуля. Потому что - совершенно точно - на стороне СУБД, например, разность дат вычисляется в конечном итоге какой-нибудь функцией на Си или ассемблере.

Но, по крайней мере, такая реализация этих функций гарантирует, что результат будет в точности таким же, как без них. Поэтому я бы не стал сильно камнями кидаться.
И насчет производительности:
- Ну конечно, если вызывать эти функции в цикле обработки 10000 строк результата запроса, то производительность будет гораздо хуже по сравнению с вычислением этих величин непосредственно в самом запросе. А если использовать их "штучно", то проигрыш не может быть большим.

Поэтому, считаю, вполне нормальный вариант, если применять с умом.
7. PiccaHut001 23.10.14 18:16 Сейчас в теме
(1) МихаилМ, вандализм, это когда криворукие студенты "погромисты" платформы "забыли" добавить эти функции во встроенный язык. Всё делают наполовину. Сколько процессорного времени можно было бы сэкономить...
evillit; Shooroopik111; +2 3 Ответить
21. ildarovich 7120 24.10.14 14:12 Сейчас в теме
(7) PiccaHut001, есть такое слово - "невежество", которое (здесь это совершенно очевидно для многих) вы этим постом демонстрируете, ничего не зная как устроена разработка в 1С.

Есть такой анекдот: бежит по лесу муравей - радуется. Говорит: там на поляне звери слона пинали - я тоже два раза пнул. Не смешите людей - не будьте в роли этого муравья..
dj_serega; +1 Ответить
22. PiccaHut001 24.10.14 15:28 Сейчас в теме
(21) ildarovich, мне всё равно как у "них" устроена разработка, о чём можна говорить, если на сайте 1с висят нерассмотренные ошибки с 2012 года. Т.е. письмо приняли, номер присвоили и всё. Тестировщикам "влом" зайти в 1С и воспроизвести ошибку. И я должнен на это молиться? Или постить свой очереднойовнокод мегашедевр в 200 символов без переносов строк, скобок и абзацев?
4. DAnry 7 22.10.14 14:58 Сейчас в теме
Поддерживаю автора. Мне тоже кажется, что отсутствие подобных функций в "обычном" языке 1С мягко говоря "оплошность" разработчиков. С критикой не согласен. Представленные функции предназначены не для пользователей, а для программиста, т.е. человека думающего. Ну и никто не заставляет их использовать, можно написать свои.
5. МихаилМ 23.10.14 09:38 Сейчас в теме
(4) DAnry,

программисты 1с - не программисты. т.к. не думающие. естественно в общей массе, усредненно.

но в долгую полемику в этой ветке вступать не хочется. тк получается флуд.
6. PiccaHut001 23.10.14 18:14 Сейчас в теме
Дело в том, что при обработке дат в размерности СЕКУНДА выяснилось, что ядро исполнителя запросов переполняется когда секунд становится немножко больше чем дофига
- другого мы от 1С и не ожидали.
8. Fragster 1025 23.10.14 22:09 Сейчас в теме
Спорно. Например следует учесть, что в языке запросов просто сравнивается соответствующие "левые" части даты в формате ГГГГММДДччммсс, соответственно, можно не дергать сервер СУБД по сети, а просто сравнить Формат(Дата1,) и Формат(Дата1,) подставив соответствующий формат. Или Кгод*Год(Дата1) + Кмесяц*Месяц(Дата1) + Кдень*День(Дата1)... - .... Задержка будет СИЛЬНО меньше.


Также если нужно сравнить, допустим, "количество полных месяцев абонентской платы, которая начисляется в соответствующее число месяца", то всё усложняется.
9. awk 722 23.10.14 22:15 Сейчас в теме
Функция РазностьДат(НачальнаяДата,КонечнаяДата,Размерность) Экспорт
   Запрос = Новый ("Запрос");
   Если ВРег(Размерность) = "СЕКУНДА" Тогда
       Запрос.Текст = 
       "ВЫБРАТЬ
       |    РАЗНОСТЬДАТ(&НачальнаяДата, &КонечнаяДата, МИНУТА)*60 +
       |    (СЕКУНДА(&КонечнаяДата) - СЕКУНДА(&НачальнаяДата)) КАК Разность";
   Иначе
       Запрос.Текст = 
       "ВЫБРАТЬ
       |    РАЗНОСТЬДАТ(&НачальнаяДата, &КонечнаяДата, " + Размерность + ") КАК Разность";
   КонецЕсли;
   Запрос.УстановитьПараметр("НачальнаяДата",НачальнаяДата);
   Запрос.УстановитьПараметр("КонечнаяДата",КонечнаяДата);
   Возврат Запрос.Выполнить().Выгрузить()[0].Разность;
КонецФункции
Показать


Первое приближение

Функция РазностьДат(НачальнаяДата,КонечнаяДата,Размерность) Экспорт
   Если ВРег(Размерность) = "СЕКУНДА" Тогда
       Возврат КонечнаяДата - НачальнаяДата;
   ИначеЕсли ВРег(Размерность) = "МИНУТА" Тогда
       Возврат ЦЕЛ((КонечнаяДата - НачальнаяДата) /60);
   ИначеЕсли ВРег(Размерность) = "ЧАС" Тогда
       Возврат ЦЕЛ((КонечнаяДата - НачальнаяДата )/3600);
   ИначеЕсли ВРег(Размерность) = "ДЕНЬ" Тогда
       Возврат ЦЕЛ((КонечнаяДата - НачальнаяДата) /86400);
   ИначеЕсли ВРег(Размерность) = "НЕДЕЛЯ" Тогда
       Возврат ЦЕЛ((КонечнаяДата - НачальнаяДата) /(86400*7));
   ИначеЕсли ВРег(Размерность) = "ДЕКАДА" Тогда
       Возврат ЦЕЛ((КонечнаяДата - НачальнаяДата) /(86400*10));
   ИначеЕсли ВРег(Размерность) = "МЕСЯЦ" Тогда
       Возврат ГОД(КонечнаяДата)*12 + Месяц(КонечнаяДата) - ГОД(НачальнаяДата)*12 - Месяц(НачальнаяДата);
   ИначеЕсли ВРег(Размерность) = "КВРТАЛ" Тогда
       Возврат ЦЕЛ((ГОД(КонечнаяДата)*12 + Месяц(КонечнаяДата) - ГОД(НачальнаяДата)*12 - Месяц(НачальнаяДата))/3);
   ИначеЕсли ВРег(Размерность) = "ПОЛУГОДИЕ" Тогда
       Возврат ЦЕЛ((ГОД(КонечнаяДата)*12 + Месяц(КонечнаяДата) - ГОД(НачальнаяДата)*12 - Месяц(НачальнаяДата))/6);
   ИначеЕсли ВРег(Размерность) = "ГОД" Тогда
       Возврат ГОД(КонечнаяДата) - ГОД(НачальнаяДата);
   Иначе
       ВызватьИсключение "Не правильная размерность";
   КонецЕсли;
КонецФункции
Показать
evillit; sashocq; monkbest; +3 Ответить
10. Rustig 1591 23.10.14 23:40 Сейчас в теме
(0) у меня тоже нашлись разработки методов анализа дат, отдельный модуль под это отвел, выкладываю самое адекватное из найденного :)

Функция ПолучитьКвартал(ДатаВступления) Экспорт  
	
	Если Не ЗначениеЗаполнено(ДатаВступления) Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	НомерМесяца = Число(Формат(ДатаВступления, "ДФ=М"));
	Если НомерМесяца = 1 Или НомерМесяца = 2 Или НомерМесяца = 3 Тогда
		Квартал = 1;
	ИначеЕсли НомерМесяца = 4 Или НомерМесяца = 5 Или НомерМесяца = 6 Тогда
		Квартал = 2;
	ИначеЕсли НомерМесяца = 7 Или НомерМесяца = 8 Или НомерМесяца = 9 Тогда
		Квартал = 3;
	ИначеЕсли НомерМесяца = 10 Или НомерМесяца = 11 Или НомерМесяца = 12 Тогда
		Квартал = 4;
	КонецЕсли;  		
	
	Возврат Квартал;
	
КонецФункции
Показать
16. PiccaHut001 24.10.14 10:14 Сейчас в теме
(10) Rustig, браво, это шедевр. Абсолютно всё понятно, не то что творения (12) очередных рукоблудов виртуозов. В ваших разработках случайно нет таблицы с названиями месяцев по русски, например таб[1]= "январь"; таб[2]= "февраль"; ... ? Выложите, пожалуйста, если есть.
17. awk 722 24.10.14 10:59 Сейчас в теме
(16) PiccaHut001, Сергей конечно не образец форматирования кода, но крайне сильный алгоритмист. А некоторые и F=m*a или F(1-2)=-F(2-1) не понимают.
26. ildarovich 7120 24.10.14 22:47 Сейчас в теме
(16) PiccaHut001, таблица с названием месяцев по русски не потребуется, если знать, что
Формат(Дата(1, НомерМесяца, 1), "ДФ=MMММ")
возвращает как раз такие названия.
27. ildarovich 7120 24.10.14 23:02 Сейчас в теме
(10) Rustig, в приведенном коде явная избыточность, так как игнорируется наличие очевидной закономерности: квартал - это номер тройки месяцев, то есть целое от деления номера месяца на три. В итоге лучше (как мне кажется) писать так
Функция ПолучитьКвартал(ДатаВступления) Экспорт  
    
    Если Не ЗначениеЗаполнено(ДатаВступления) Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    НомерМесяца = Месяц(ДатаВступления) - 1;
              
    Квартал = Цел(НомерМесяца / 3);

    Возврат Квартал;
    
КонецФункции
Показать


Ну а я бы сразу сделал подстановку
Функция ПолучитьКвартал(ДатаВступления) Экспорт  
    Возврат ?(ЗначениеЗаполнено(ДатаВступления), Цел((Месяц(ДатаВступления) - 1) / 3), Неопределено)
КонецФункции
alexscamp; androgin; EmpireSer; awk; Поручик; karpik666; +6 Ответить
11. Rustig 1591 23.10.14 23:44 Сейчас в теме
(0) я однажды задумался почему же разработчики не прописали методы работы с датами, так вот , мне кажется их настолько много, что под каждую задачу разработчик сам напишет алгоритм. помню в универе целая книжка была по программистским задачам: отдельная глава на разработку алгоритмов для строк, отдельная глава для разработки алгоритмов для дат и т.д.
всем не угодишь
monkbest; awk; +2 Ответить
19. awk 722 24.10.14 11:01 Сейчас в теме
(11) Rustig, Про "недопрограммистов", которые "забыли написать", может говорить только человек не написавший ни одного коммерческого приложения...
20. PiccaHut001 24.10.14 13:31 Сейчас в теме
(19) awk, не обязательно быть поваром, чтобы на скверно приготовленный протухший Доширак сказать "*овно".
12. ildarovich 7120 24.10.14 02:54 Сейчас в теме
(0) Вот навскидку ДобавитьКДате
Функция ДобавитьКДате(НачальнаяДата, Количество, Размерность) Экспорт
	Шаг = Новый Структура("Год, Квартал, Месяц, Неделя, День, Час, Минута, Секунда", 12, 3, 1, -604800, -86400, -3600, -60, -1);
	Возврат ?(Шаг[Размерность] > 0, ДобавитьМесяц(НачальнаяДата, Количество * Шаг[Размерность]), НачальнаяДата - Количество * Шаг[Размерность])
КонецФункции
Структура "Шаг" - вещь постоянная. Ее можно и вне функции инициализировать для повышения быстродействия.
Насчет разности дат нужно еще подумать.
dj_serega; Артано; evillit; alexscamp; alexsi; tormozit; JohnyDeath; Evil Beaver; orenair; DrAku1a; borda4ev; dusha0020; DoctorRoza; Dach; AllexSoft; kote; zqzq; awk; +18 Ответить
28. ildarovich 7120 26.10.14 11:00 Сейчас в теме
Поставил статье плюс не только за привлечение внимание к теме и отличное оформление, но и за идею использовать приведенные функции языка запросов как эталонные для таких вычислений в коде. Без этого программирование разности дат может превратиться в отсебятину, не учитывающую множество нюансов работы с датами.
Например, все ли обращали внимание на то, что
РазностьДат('20131231235959', '20140101', "Год") = 1 или РазностьДат('20141026115959','20141026120000',"Час") = 1
А тем не менее, это так. И приведенные в комментариях (12) и (14) реализации это учитывают.
Найденные в процессе этого обсуждения решения приведены теперь также в статье Минимализмы.
13. zqzq 21 24.10.14 08:36 Сейчас в теме
Переполнение разрядности секунд и 4000 год - это баг не 1С, а MS SQL. Ещё один аргумент, чтобы эти функции переписать с запросов на встроенный язык 1С.
14. ildarovich 7120 24.10.14 09:57 Сейчас в теме
(0) Вот РазностьДат
Функция РазностьДат(Дата1, Дата2, Период) Экспорт
	Шаг = Новый Структура("Год, Квартал, Месяц, Неделя, День, Час, Минута, Секунда", 1, 4, 12, -604800, -86400, -3600, -60, -1);
	Ход = Новый Структура("Год, Квартал, Месяц", 0, Цел((Месяц(Дата2) - 1) / 3) - Цел((Месяц(Дата1) - 1) / 3), Месяц(Дата2)- Месяц(Дата1));
	Возврат ?(Шаг[Период] > 0, (Год(Дата2) - Год(Дата1)) * Шаг[Период] + Ход[Период], Цел(('00010101' - Дата2) / Шаг[Период]) - Цел(('00010101' - Дата1) / Шаг[Период]))
КонецФункции
На первый взгляд, работает. Бонусом является размерность "Неделя". Нужно еще попытаться отрефакторить - менее громоздко переписать (вместо структуры Ход и части Шаг Если или ? применить). Быстродействие сравнить.
Вот вариант после рефакторинга
Функция РазностьДат(Дата1, Дата2, Период) Экспорт
	Если ВРег(Период) = "ГОД" Тогда
		Возврат Год(Дата2) - Год(Дата1)
	ИначеЕсли ВРег(Период) = "КВАРТАЛ" Тогда
		Возврат (Год(Дата2) - Год(Дата1)) * 4 + Цел((Месяц(Дата2) - 1) / 3) - Цел((Месяц(Дата1) - 1) / 3)
	ИначеЕсли ВРег(Период) = "МЕСЯЦ" Тогда
		Возврат (Год(Дата2) - Год(Дата1)) * 12 + Месяц(Дата2) - Месяц(Дата1)
	Иначе
		Шаг = Новый Структура("Неделя, День, Час, Минута, Секунда", 604800, 86400, 3600, 60, 1);
		Возврат Цел((Дата2 - '00010101') / Шаг[Период]) - Цел((Дата1 - '00010101') / Шаг[Период])
	КонецЕсли
КонецФункции
Показать
Протестировал быстродействие. Тысяча вызовов выполняется для ДобавитьКДате и РазностьДат запросом за 2,90 и 3,04 секунды соответственно. То же самое приведенным кодом за 0,275 и 0,254 секунды соответственно. То есть выигрыш в 10 - 12 раз!

Когда тестировал на совпадение результатов, обратил внимание, что запрос часто вываливался с ошибкой, не переваривая больших значений секунд, минут, часов, и так далее. Код эти значения обрабатывал.

Оказалось, существует еще более короткий и только чуть более медленный вариант. Вот он:
Функция РазностьДат(Дата1, Дата2, Период) Экспорт
	Шаг = Новый Структура("Год, Квартал, Месяц, Неделя, День, Час, Минута, Секунда", 12, 3, 1, -604800, -86400, -3600, -60, -1);
	Возврат Цел(?(Шаг[Период] > 0, Год(Дата2) * 12 + Месяц(Дата2) - 1, '00010101' - Дата2) / Шаг[Период]) 
		  - Цел(?(Шаг[Период] > 0, Год(Дата1) * 12 + Месяц(Дата1) - 1, '00010101' - Дата1) / Шаг[Период])
КонецФункции
Теперь 0,275 и 0,322 секунды.
А если вынести инициализацию структуры Шаг из функции, то получается 0,1212 и 0,1639. То есть итоговое ускорение в 20-25 раз.
AndrewVVS; kote; +2 Ответить
15. ildarovich 7120 24.10.14 09:59 Сейчас в теме
А зачем остальные функции, кроме РазностьДат и ДобавитьКДате, я не понял.
1cprogr_nsk; alek-sand-er; alexsi; awk; +4 Ответить
18. burlakov 83 24.10.14 11:00 Сейчас в теме
давно для себя похожие фишки сделал. реально помогают. особенно учитывая, что у нас на предприятии есть свои сутки, по которым оно живет. с 08:00:00 по 07:59:59, да еще могут ограничиваться концом декады, месяца, года. в декаде тоже не всегда 10 дней, в месяце может быть 2 декады... в общем свои извраты, но такой подход реально помогает.
23. SemenovaMarinaV 24.10.14 17:25 Сейчас в теме
Очень полезно.
А как в запросе соединить ФИзЛицо.наменование+ФизЛицо.ДатаРождения
25. PiccaHut001 24.10.14 18:07 Сейчас в теме
(23) SemenovaMarinaV, в запросе можна, но очень очень гемморойно(спасибо 1С), лучше ячейке, где выводится, поставить тип шаблон и слепить там. Или в скд сделать вычисляемое поле.
24. SemenovaMarinaV 24.10.14 17:26 Сейчас в теме
29. webester 33 27.10.14 04:11 Сейчас в теме
Прошу прощения за тупой вопрос, видимо мне одному непонятно, чем же вас не устраивает вариант Дата2 - Дата1 с последующим анализом результата? Когда надо прибавить к дате какое то количество дней, или часов или еще чего почему нельзя использовать, что то вроде этого: Дата1 = Дата1 + 3 * 86400; На вид это элементарно, работает на клиенте, анализировать можно как угодно гибко и наверняка у вас какие то причины не использовать этот подход, но какие, никак не могу понять.
monkbest; +1 Ответить
35. awk 722 27.10.14 10:31 Сейчас в теме
(29) webester, Можно. Так и делаю. Вопрос встает когда период добавления вариативен. Да и наглядность РазностьДат(А,Б, "день") выше ЦЕЛ((Б-А)/86400); Смотри антипаттерн "магические числа".
46. webester 33 28.10.14 14:57 Сейчас в теме
(35)Нарисуй обертку, и будет тебе такая наглядность какая нужно.
30. monkbest 110 27.10.14 08:46 Сейчас в теме
Свои 5 копеек.
Бред лазить с клиента на сервер, чтобы посчитать дни.
Встроенные функции не нужны, т.к. единственная засада в этих задачах это разность дат в месяцах, у неё есть разные алгоритмы решения, некоторые из них регламентированы трудовым кодексом.

Самый простой пример - сколько дней отпуска у человека осталось, если в месяц ему накапливается 2.33 дня, а период работы с 12.01.2010 по 18.11.2010?
Вот тут ни запрос, ни мат.формулы не помогут, тут надо анализировать в какую половину месяца попадает первая дата, в какую вторая.
32. PiccaHut001 27.10.14 10:06 Сейчас в теме
(30) monkbest,
Бред лазить с клиента на сервер, чтобы посчитать дни
Вы замеряли? У Вас тормозит?
33. monkbest 110 27.10.14 10:19 Сейчас в теме
(32) PiccaHut001, да тормозит:)
превосходство в 4 471 раз!!!
проверял, вот замеры:
34. monkbest 110 27.10.14 10:23 Сейчас в теме
(32) PiccaHut001,
усложняем задачу, разность в минутах, тут надо поделить на 60 и округлить
превосходство все равно огромное в 3 027 раз
36. PiccaHut001 27.10.14 13:32 Сейчас в теме
(34) monkbest, в случае "массовых" вычислений проще весь цикл вынести на сервер. Думаю, разница будет не такая существенная.
37. monkbest 110 27.10.14 13:45 Сейчас в теме
(36) PiccaHut001, массовость была использована для точного вычисления соотношения времени. В единичном вычислении соотношение остается прежним. Конечно, +/- микросекунда - никто не заметит, но если там 5000 строк кода и все они написаны в таком мягко говоря неоптимальном стиле?

Пусть документ заполняется обработкой за 2 секунды.
Путь в нем 1% кода станет таким ужасным.
Пусть вычисления сложные и мы не в 3000 раз, а всего в 1000 раз проигрываем
1,98сек + 0,02 * 1000 = 39,6 сек

а это уже не моргнул глазом, а успел выпить заранее налитый кофе :)
38. awk 722 27.10.14 14:48 Сейчас в теме
(37) monkbest, Для "велосипедоизобретателей" см. сюда: http://algolist.manual.ru/misc/o_n.php
39. monkbest 110 27.10.14 15:40 Сейчас в теме
(38) awk, посмотрел, спасибо, я в институте уже это слушал на лекциях. Это теория для оценки более сложных задач. Мне же требовалось человеку наглядно на "пальцах" показать, что код из статьи, как он говорит, "тормозит".
Так что не понимаю, к чему Вы меня отправили "читать мат.часть"
40. awk 722 27.10.14 16:00 Сейчас в теме
(39) monkbest, На пальцах вы показали пальцы - не более... :))) Что мерили, зачем - непонятно.
41. monkbest 110 27.10.14 16:36 Сейчас в теме
(40) awk, задача:
количественно сравнить производительность метода №1 и №2
решение:
выбираем критерий сравнения - время выполнения кода
пишем код, для точности выполняем код многократно
производим замер
результат:
получена количественная оценка двух методов, позволяющая их сравнить, берем соотношение оценок

Давай зачетку - пять

если Вы хотели, чтобы я написал пару "умных" формул в своих постах, то Вам к еврейским авторам учебников по высшей математике, они любят лить воду значками и буковками, чтобы обычным людям непонятно было. Чем непонятнее, тем умней - это не про меня
42. awk 722 27.10.14 17:22 Сейчас в теме
(41) monkbest, Как говорил профессор Барилович: "Плохо. Двойка вам.".
43. monkbest 110 27.10.14 17:30 Сейчас в теме
(42) awk, плохие педагоги ставят оценки, хорошие объясняю что не так и как надо было.
Вы же хороший?
44. awk 722 27.10.14 17:48 Сейчас в теме
(43) monkbest, Почитал бы по ссылке и понял сам. Ну раз вы ленивы привожу цитату:

алгоритм со временем O(n2) может работать значительно быстрее алгоритма O(n) при малых n... За счет того, что реальное количество операций первого алгоритма может быть n2 + 10n + 6, а второго - 1000000n + 5. Впрочем, второй алгоритм рано или поздно обгонит первый... n2 растет куда быстрее 1000000n.
Поэтому:
1. Замер твой показал, что алгоритм А работает быстрее алгоритма Б, на N входящих данных.
2. Что такое многократно? Больше чем до..уя или меньше чем до..уя? Что ты этим измеряешь? Статистическое отклонение задержек?
48. monkbest 110 30.10.14 08:53 Сейчас в теме
(44) awk, Вы думаете, что на одном вычислении соотношение будет другое? Нет, там будут микросекунды, но соотношение будет тем же.
наверное мы не понимаем друг друга. Я исходно считал не увеличение времени в секундах, а соотношение времени выполнения. В этом случае количество повторов не играет значение, количество повторов = количеству экспериментов, что снижает воздействие случайных событий (а они есть в работе компьютера) на результат.
Далее мне сказали, что нех внутри цикла вызывать сервер. Я в ответ попытался сказать (36), что данный код возможно в коде используется и один раз, и потери может и незаметны, но если кода много и весь остальной код хотя бы на 1% также ужасно написан, то результат будет плачевным.
49. awk 722 30.10.14 17:17 Сейчас в теме
(48) monkbest, На результат влияет все: ресурсы, состав данных и т.д. Так что ваш многократный замер ничего не показывает. Изменились данные и ...
50. monkbest 110 31.10.14 08:26 Сейчас в теме
(49) awk, ну Вам мой замер ничего не говорит. А мне говорит, что посчитать самому на клиенте - быстрее, чем обратиться к серверу, а с сервера к субд. Это и так было очевидно, просто я получил реальные цифры, чтобы не разводить демагогию.

собственно, если Вам мой эксперимент ни о чем не говорит, я ставлю под сомнение Ваше образование и квалификацию
51. awk 722 31.10.14 11:32 Сейчас в теме
(50) monkbest, Да быдло-кодер я.. Даже среднего нет... А вы где и почем покупали, может я то же прикуплю?
45. awk 722 27.10.14 17:52 Сейчас в теме
(43) monkbest, В среде профессиональных юмористов, все анекдоты давно перенумерованы и в целях экономии времени ржут над цифрами... Когда же очередной поручик Ржевский входит и называет номер, то обычно получает пощечину от дам - за пошлость.
dj_serega; +1 Ответить
47. ildarovich 7120 28.10.14 15:14 Сейчас в теме
(45) awk, как говорится, Платон мне друг, но истина дороже: профессиональные юмористы ржут над числами, а не над цифрами.
31. monkbest 110 27.10.14 08:48 Сейчас в теме
Еще пример - посчитать стаж. Вся хрень, в разном количестве дней в месяце, поэтому при подсчете в зависимости от алгоритма может быть +/- 1 день. И реально, у разных разработчиков почти всегда отличается результат при равных исходных данных!
52. dusha0020 926 31.10.14 12:17 Сейчас в теме
Ребята, извините, но мне не нравится тон и предмет текущего обсуждения. Ваши замечания я принял, удачные решения и мысли отметил. Спасибо большое всем за дискуссию. Но сейчас пошел какой-то троллинг. Я закрываю тему. Меряться понтами и профессионализмами прошу в личку или OFF. Прошу не обижаться. Еще раз повторяю - мне интересны и полезны все Ваши мысли и все выводы и советы, но до тех пор, пока они относятся к обсуждаемому вопросу.
evillit; alexscamp; kote; +3 Ответить
Оставьте свое сообщение

См. также

[Расширение] Контроль отрицательных остатков по регистру бухгалтерии при проведении Промо

Универсальные функции Инструментарий разработчика Учет ТМЦ Учет ТМЦ v8 1cv8.cf Россия БУ Абонемент ($m)

Расширение позволяет без изменений конфигурации проверять остатки по регистру бухгалтерии при проведении каждого документа и запрещает проведение при появлении отрицательных остатков после проведения.

1 стартмани

17.08.2015    47212    156    ekaruk    32    

Парсинг Excel-файла

Загрузка и выгрузка в Excel Универсальные функции v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Шаблон внешней обработки для парсинга Excel без использования COM-объектов, с учетом клиент-серверного взаимодействия, на толстом, тонком и веб-клиенте. С учетом требований безопасности и отображением длительных операций.

1 стартмани

15.09.2020    2479    11    LamerSoft    0    

Дружелюбный интерфейс итогов в диалоге табличных частей, для Управляемых форм.

Работа с интерфейсом Адаптация типовых решений Универсальные функции v8 Абонемент ($m)

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

1 стартмани

14.09.2020    810    1    DrZombi    0    

Таблица значений в табличный документ (СКД)

Универсальные функции v8 Абонемент ($m)

Иногда бывает необходимость получить табличный документ по какому то набору данных. Например, требуется вывести какие то проверочные таблички пользователям или отправить результат запроса почтой. Для таких надобностей создавать специальные отчеты, хранить где-то схему, настройки, не имеет смысла. Получить табличный документ с группировкой из таблицы значений с помощью механизма СКД можно применив эту функцию.

1 стартмани

12.08.2020    5134    3    markivkin    2    

Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом Промо

Печатные формы документов Универсальные функции Email v8 КА1 БП2.0 УТ10 УПП1 Абонемент ($m)

Решение для интерактивной (нажал-отредактировал) отправки электронных писем и печатных форм через почтовый клиент (Thunderbird, Outlook) находящийся на локальном компьютере, из конфигурации 1С, развернутой под удаленным рабочим столом (RDP, remote-app). Подходит также для локального развертывания 1С. Представлен пример быстрой интеграции с конфигурациями "Управление торговлей 10.3", "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1", "Бухгалтерия предприятия 2.0".

1 стартмани

21.09.2018    24485    17    stvorl    0    

Нормализация адреса с помощью API Почты России

WEB Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Почта России предоставляет доступ к сервису нормализации адресов по API. Данная обработка, используя сервис Почты России, демонстрирует возможность нормализации адреса из произвольной строки. Предназначена в большей степени для программистов, т.к. не связана ни с какой конфигурацией.

2 стартмани

11.08.2020    2401    5    Cerberdm    4    

Обработка чтения табличного документа (УФ)

Загрузка и выгрузка в Excel Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Обработка чтения табличного документа (с возможностью чтения из файла без использования офисных приложений) и перевода данных в таблицу значений.

1 стартмани

07.08.2020    1502    2    chum1roma    4    

Выполнение кода и получение данных запросов через HTTP сервис

Обмен данными 1С Универсальные функции Расширения v8 1cv8.cf Абонемент ($m)

Универсальное расширение, которое предоставляет доступ к конфигурации через запросы. Позволяет выполнять любой код в конфигурации и получать данные запросов 1С. Код и запросы 1С либо вводятся прямо в базе, либо передаются в запросе http. Для того, чтобы включить возможность выполнять любой код извне, необходимо включить настройку в расширении. Поддерживаются как управляемые, так и обычные формы!

2 стартмани

19.07.2020    2420    3    vladnet    7    

Лучшие методы сравнения таблиц значений Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Задача сравнения таблиц значений встречается на практике довольно часто и может решаться по-разному. Недавняя дискуссия на форуме показала, что до сих пор не сложилось единого мнения о том, какой метод сравнения лучше. В этой статье описываются поиски ответа на данный вопрос, и делается субъективная попытка обобщить и подвести итоги дискуссии.

1 стартмани

02.02.2015    109698    39    ildarovich    59    

Универсальная функция получения дополнительных реквизитов и пример на форме

Универсальные функции v8 1cv8.cf Абонемент ($m)

Решаем следующую задачу. Например, в справочнике «Номенклатура» — 10 дополнительных реквизитов: "Материал", "Наименование на английском", "Наименование на французском" и т.д., и 20 дополнительных реквизитов в справочнике «Характеристики номенклатуры». Необходимо вывести все характеристики по ТЧ "Товары", так называемую «Спецификацию» по «Заказу клиента» или «Заказу поставщика».

2 стартмани

05.05.2020    1835    1    papche    7    

Универсальное хранилище настроек

Универсальные функции v8 Абонемент ($m)

Универсальная константа для хранения любых настроек, например интеграции с API. Легко вносить новые настройки без "ломания" выполнения кода в модулях.

1 стартмани

10.03.2020    5474    1    v.krivenko    17    

Шаблоны внешних обработок (БСП, управляемые формы)

Обработки Печать Универсальные функции БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Набор из шаблонов для создания внешних обработок вида: Внешняя печатная форма, Отчет на СКД, Схема СКД для сегмента, Внешняя обработка (Самостоятельная, Заполнение объектов, Создание связанных объектов). Предварительно наполнены базовым функционалом и некоторыми механизмами для отладки.

1 стартмани

01.03.2020    3626    26    riposte    2    

Генерация QR-кода программная и интерактивная (код открыт, управляемая форма, обычное и управляемое приложение, API) Промо

Универсальные функции Универсальные обработки v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработку можно быстро и легко интегрировать в любую конфигурацию с и без БСП (Библиотека Стандартных Подсистем).

3 стартмани

04.02.2016    48161    173    TuneSoft    30    

Выгрузка любого запроса или таблицы значений в текст JSON, разбор JSON в таблицу

Обработка справочников WEB Универсальные функции Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Отчет позволяет выгрузить любые данные из 1С в JSON текст, выполнив произвольный запрос к данным, в том числе со вложенными таблицами. Параметр для запроса можно задать на форме. Есть возможность использовать конструктор запросов прямо в отчете, а так же разбор несложного JSON текста в таблицу и вывод в табличный документ.

1 стартмани

07.02.2020    9158    36    user796054    23    

Подпись PDF в новой версии 8.3.16

Универсальные функции v8 1cv8.cf Абонемент ($m)

Проверяем новую возможность платформы 1С:Предприятие 8 по формированию подписей в PDF.

1 стартмани

23.12.2019    5222    13    kolya_tlt    8    

Простой способ загрузить файл Excel на тонком клиенте.

Загрузка и выгрузка в Excel Универсальные функции v8 1cv8.cf Абонемент ($m)

Самый простой способ загрузить файл Excel на тонком клиенте - это скопировать лист Excel в "табличный документ" на форме обработки и обрабатывать уже поля "табличного документа".

1 стартмани

30.10.2019    8005    2    John_d    16    

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7 Промо

Универсальные функции Практика программирования v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    28133    3    Serginio    1    

Версионирование объеков УТ 10 с возможностью перехода к сохраненной версии

Журнал регистрации Универсальные функции v8 УТ10 Абонемент ($m)

Версионирование объектов УТ 10.3 с возможностью перехода к сохраненной версии. Взята стандартная система версионирования УПП, добавлена возможность восстановления ранее сохраненной версии.

1 стартмани

28.10.2019    7298    30    art.prm    8    

Картинка вместо кнопки без html

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Вариант замены стандартных кнопок на форме для тех, кого не устраивают кнопки 1С и нет особых возможностей делать все с использованием html. Тестировал работу на платформах 8.3.10, 8.3.13, 8.3.14

1 стартмани

23.10.2019    5802    4    zatoichi    3    

Выгрузка данных из дерева значений 1С в формат JSON иерархический список (Сериализация ДереваЗначений в JSON)

Обмен через XML Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Тема: Иерархические списки при обмене данными. В интернете не удалось найти подобного решения. Обнаружена реализация только обратной операции JSON в дерево значений 1С или рассматриваются линейные списки (таблицы).

1 стартмани

22.10.2019    6238    7    mwoleg    8    

Автоматическая подстановка уничтожений временных таблиц в текст запроса Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Функция, которая сама подставляет в текст запроса "УНИЧТОЖИТЬ" в местах последнего использования ВТ.

1 стартмани

14.11.2015    20249    0    SeiOkami    3    

Универсальная подсистема ДМ

Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

ДМ — дополнительные модули Это не альтернатива или дополнение БСП. Данная подсистема призвана быстро получить множество нужных функций в любой конфигурации. Для использования подсистемы изменения в конфигурацию вносить не надо. Обычные формы поддерживаются частично, т.к. с каждым годом таких конфигураций попадается всё реже. Разработка ведётся с 2009 года, но именно этот релиз был подготовлен на платформе 8.3.16.1063 и применяется на 8.3.15 с включенной совместимостью 8.2

1 стартмани

22.10.2019    4344    4    strange2007    10    

Вывод QR-кода типовыми средствами.

Универсальные печатные формы Сканер штрих-кода Универсальные функции v8 КА1 УТ10 УПП1 Абонемент ($m)

Вывод QR-кода типовыми средствами. На данный момент очень часто нужно вывести в печатную форму QR-код. Показываю как на примере типового кода из УТ11 это сделать. Можно использовать в любых конфигурациях с обычными формами.

1 стартмани

21.10.2019    17870    31    Емельянов Алексей    47    

Генерация QR кода для любых конфигураций 1С (обычные и управляемые формы)

Универсальные обработки Универсальные функции v8 v8::УФ 1cv8.cf Абонемент ($m)

Для генерации используется компонента типовой конфигурации УТ11, встроенная в общий макет "КомпонентаПечатиQRКода". Ниже приведены процедуры, чтобы сделать обработку самостоятельно (только для УФ).

1 стартмани

11.10.2019    11613    53    dm1try    0    

Библиотека математических функций 1.1 Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

18.12.2014    25913    11    alex271    67    

Универсальное удаление движений регистров накопления по всем непроведенным документам

Универсальные функции Чистка базы v8 1cv8.cf Абонемент ($m)

Попалась база КА 2.4 с движениями по регистрам, у которых регистратор был непроведен или помечен на удаление. Написал небольшую обработку по удалению таких записей из регистров.

1 стартмани

27.09.2019    9442    14    John_d    16    

1С REST API клиент. Обмен из 1С с сайтом/магазином WordPress/WooCommerce с помощью REST API

Универсальные обработки WEB Универсальные функции Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 1cv8.cf УУ Абонемент ($m)

Обмен 1С с сайтом на WordPress и магазином Woocommerce. Внешняя обработка сделана как REST API клиент сайта WordPress, позволяет разработчику публиковать/изменять/удалять/просматривать посты/страницы/товары/фотографии (в связке с товаром/страницей) на сайте/магазине WordPress/Woocommerce. Обработки сделаны с использованием обычных форм, демо-формы использования в комплекте.

10 стартмани

29.07.2019    8238    11    osivv    14    

Экспортные процедуры и функции общих модулей БП 3.0, ЗУП 3.1, УТ 11

Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Таблицы экспортных процедур и функций общих модулей конфигураций БП КОРП 3.0, ЗУП КОРП 3.1, УТ 11 + обработка по формированию такой таблицы из любой конфигурации.

14.06.2019    9655    22    SanchoD    29    

Полезные функции БСП Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Список часто востребованных, по моему мнению, функций из состава Библиотеки стандартных подсистем 2.2.

1 стартмани

01.02.2015    64658    26    spec8s    31    

Создание и запуск скрипта для ввода текста на базе AutoHotkey

Универсальные функции v8 1cv8.cf Абонемент ($m)

Механизм для ввода текста в поля данных, в случаях, когда нет возможности использовать буфер обмена. Полезен в тех случаях, когда необходимо ввести пароль в заблокированный сеанс RDP или когда надо передать какую-либо текстовую информацию в удаленный сеанс, а буфер обмена не доступен или отключен администратором.

1 стартмани

28.01.2019    6020    1    Wezoowy    1    

Поиск свободного штрихкода одним запросом по оригинальной методике

Универсальные функции Розничная торговля Розничная торговля v8 1cv8.cf УУ Абонемент ($m)

Поиск свободного кода для создания штрих-кода, одним запросом по оригинальной методике, с возможностью выбора границ для разграничения кодов ( например для распределенных баз или подразделений. Принцип поиска состоит в создании таблицы свободных кодов и ее клона сдвинутого на 1.

1 стартмани

19.06.2018    5356    0    BackHand001    4    

Подписка на события, преобразование объекта в JSONAPI, отправка в RabbitMQ

Внешние источники данных Универсальные функции v8 1cv8.cf Абонемент ($m)

Обработка содержит функции: - сериализация объекта 1с в JSONAPI - отправка в RabbitMQ по HTTP

1 стартмани

26.02.2018    11730    21    yaxinr    4    

Регулярные выражения без COM объектов и внешних компонент Промо

Универсальные функции Практика программирования v8 1cv8.cf Абонемент ($m)

Платформа до сих пор не поддерживает регулярные выражения, хотя они уже стали довольно востребованной возможностью в разных языках программирования. Использование COM объектов и внешних компонент имеет ограничения, поэтому предлагается вариант реализации ограниченного функционала на встроенном языке 1С.

1 стартмани

09.02.2015    24752    8    boogie    38    

Свертка таблицы значений. С блэкджеком и всем остальным

Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

Функция свертки таблицы значений. Умеет в отличие от стандартного метода все, что можно делать на языке запросов.

1 стартмани

22.01.2018    11122    2    dusha0020    10    

Определение MIME-типа файла

Универсальные функции v8 1cv8.cf Абонемент ($m)

Небольшая, но полезная функция для определения MIME-типа файла по его расширению. Сэкономит время разработчикам.

1 стартмани

12.01.2018    10798    8    o.nikolaev    4    

Запуск приложений на клиенте из RDP-сессии

Универсальные функции v8 1cv8.cf Абонемент ($m)

Часто на терминальном сервере, где работает 1С, закрыт или ограничен запуск сторонних приложений, интернет и т.д. Такая ситуация часто встречается в облаках. В данной статье описан простой вариант выхода из ситуации, когда все необходимое стороннее ПО запускается на клиенте. Обработки содержат код, приведенный в статье, и могут быть доработаны под конкретную инфраструктуру.

1 стартмани

30.10.2017    12043    6    GusevNA    4    

daСклонение: склонение ФИО, должностей, чисел, прилагательных, существительных на языке 1С + ТестЦентр Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Функция предназначена для склонения выражений, которые часто требуется при формировании печатных форм договоров и прочих печатных форм. Функция склоняет по падежам ФИО, должности, числительные, валюты, единицы измерения, предметы. Также функция склоняет глаголы и прилагательные по числам и родам и существительные по числам. Имеется режим определения рода переданного выражения. Поддержка форматной строки для вывода результата. Функция не использует внешние библиотеки и веб-сервисы, написана на чистом языке 1С, и поэтому легко встраивается в любую конфигурацию или внешнюю обработку. Правила склонения оформлены в виде таблицы и могут быть легко изменены при необходимости.

1 стартмани

14.02.2015    104645    98    daMaster    90    

Простые подсистемы: Библиотека подсистем

Инструментарий разработчика Универсальные обработки Универсальные функции v8 Абонемент ($m)

Библиотека простых подсистем и наработок, облегчающих жизнь разработчика и внедренца, предоставляя относительно готовые решения. Логическое развитие линейки публикаций "Простые подсистемы". Базируются на БСП. Вошли часть ранее опубликованных подсистем и новые. Всего 5 штук (будет больше).

1 стартмани

26.10.2017    11411    9    pbabincev    1    

Шаблон внешней обработки регламентного задания с формой настройки параметров выполнения

Инструментарий разработчика Универсальные функции v8 v8::УФ 1cv8.cf Абонемент ($m)

Шаблон внешней обработки призван упростить программисту процесс реализации внешнего регламентного задания. Пригоден к использованию во всех конфигурациях на управляемых формах, в которых присутствует подсистема "Дополнительные отчеты и обработки" из состава библиотеки стандартных подсистем (БСП) версии 2.1 и выше.

1 стартмани

28.05.2017    25840    184    Bassgood    10    

Универсальная процедура по загрузке файла из интернета

Практика программирования WEB Универсальные функции v8 v8::УФ 1cv8.cf Абонемент ($m)

Передаем в процедуру всего два параметра: откуда взять и куда положить. Остальное она сделает сама

1 стартмани

17.05.2017    16872    12    json    3    

Универсальная функция получения таблицы дат за период. С любым интервалом (день, неделя, месяц, квартал и т.д.) Промо

Универсальные функции Практика программирования v8 1cv8.cf Абонемент ($m)

Небольшая функция, возвращающая таблицу значений со всеми датами за период. Интервал дат можно задать любой: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Полугодие, Год.

1 стартмани

14.06.2014    38692    18    mtv:)    7    

Правильный вопрос

Универсальные функции v8 1cv8.cf Абонемент ($m)

Заметили, что пользователи бездумно кликают по первой попавшейся кнопке, не удосужившись прочитать текст предупреждения или вопроса? Данная функция призвана решить данную проблему!

1 стартмани

15.05.2017    11688    0    SvoyakMartin    15    

Web сервис 1С

Практика программирования Универсальные функции WEB v8 1cv8.cf Россия Абонемент ($m)

Пример реализации простого web сервиса. Особенность: не используются XDTO пакеты, определяемые в дереве конфигураций; возможность передачи любых структур данных: списки значений, таблицы значений, табличные документы и т.п.

1 стартмани

21.03.2017    31499    94    hiduk    34    

Набор математических функций

Универсальные функции v8 1cv8.cf Абонемент ($m)

Небольшой набор математических функций для работы с массивами чисел.

1 стартмани

12.01.2017    14487    4    SvoyakMartin    17    

Сравнение строк с выводом различий Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Обработка созданная с целью представить реализованный мной алгоритм сравнения строк. Реализована на 1С 8.1, однако будет работать и на более поздних версиях.

1 стартмани

15.05.2014    22475    21    bahbah    16    

Сравнение строк. Наибольшая общая последовательность

Универсальные функции v8 1cv8.cf Россия Абонемент ($m)

Заданы две строки Строка1 и Строка2. Требуется найти наибольшую общую подпоследовательность (НОП) этих строк.

1 стартмани

14.11.2016    10072    2    Alex_YAM    4    

Набор процедур для парсера консоли запросов

Инструментарий разработчика Универсальные функции v8 1cv8.cf Абонемент ($m)

Данный набор функций и процедур необходимо вставить в Консоль запросов для управляемого приложения 1С 8.2 - 8.3 (Такси) http://infostart.ru/public/64522/, и вы получите возможность разбирать сложные запросы на вложенные, вносить необходимые правки и собирать измененные подзапросы в запрос. Данный модуль не содержит консоли!!! Ее придется отдельно скачать по ссылке http://infostart.ru/public/64522/

1 стартмани

09.11.2016    10077    4    blockcode    5    

Организация выбора месяца из списка (универсально + НЕ модально )

Работа с интерфейсом Универсальные функции v8 1cv8.cf Абонемент ($m)

Пришлось столкнуться с такой проблемой, как выбор месяца из ниспадающего списка (с элементами вида "НазваниеМесяца Год") с возможностью изменения года. Хочу предложить универсальный вариант реализации данного механизма на основе механизма http://infostart.ru/public/167549/ ЗЫ: основные отличия: - вместо "НачалоВыбораИзСписка" работаем с "ОбработкаВыбора" без модальности - Обратное преобразование в дату не только на русском - Универсальность процедур. Одна функция выбирается в нескольких полях.

1 стартмани

09.11.2016    14291    13    igorkosmos    5    

Включаем звук в 1С. Доступно и всерьез. Промо

Математика и алгоритмы Универсальные функции v8 1cv8.cf Абонемент ($m)

Как сделать воспроизведение звука в 1С без внешних компонентов? Решаем средствами интернета. Для тонкого, толстого и web-клиента.

1 стартмани

30.12.2013    81562    151    sikuda    37    

Отладка/доработка модуля менеджера "на лету"

Инструментарий разработчика Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

Данный прием позволяет отлаживать и дорабатывать модуль менеджера во внешней обработке без необходимости пересохранять конфигурацию и перезапускать базу

1 стартмани

23.10.2016    30065    20    json    22    

Автоматическое разбиение строки на подстроки по ширине колонки / ячейки или по количеству символов

Универсальные обработки Универсальные функции v8 1cv8.cf Абонемент ($m)

Длинный адрес контрагента или нестандартная фамилия не входит в одну строку, а РазмещениеТекста = Переносить по какой-либо причине не устраивает? Что можно сделать? Вот пара полезных функций для решения данного вопроса с примерами применения.

1 стартмани

21.10.2016    15937    3    SvoyakMartin    3    

Сверка таблиц при разработке через тестирование

Инструментарий разработчика Практика программирования Универсальные функции v8 Абонемент ($m)

Данная статья про инструмент, который я использую уже продолжительное время, и который, по моему мнению, заслуживает внимания. Также опишу несколько примеров его применения.

1 стартмани

09.10.2016    15817    10    json    1