Порождающий запрос

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

Разработка - Практика программирования

271
Иногда в запросе необходимо получить искусственную таблицу заданного размера, не связанную с данными информационной базы. Эта получаемая «из воздуха» таблица может быть заполнена, например, числами натурального ряда или функционально связанными с ними значениями. Такая таблица может пригодится как временная таблица в запросе для соединения с реальными таблицами. Другой вариант – быстрое получение таблиц значений заданного размера, списков, массивов и прочее. В последних версиях MS-SQL есть возможности непроцедурной генерации таблиц посредством специального «итеративного» описания. Ну а для 1С пригодится следующее решение:

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

Для примера приведен запрос, формирующий таблицу из чуть более миллиона строк.

ВЫБРАТЬ 0 КАК Х
ПОМЕСТИТЬ Регистр1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ Младшие.Х + 2 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр2
ИЗ Регистр1 КАК Младшие, Регистр1 КАК Старшие
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ Младшие.Х + 4 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр4
ИЗ Регистр2 КАК Младшие, Регистр2 КАК Старшие
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ Младшие.Х + 16 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр8
ИЗ Регистр4 КАК Младшие, Регистр4 КАК Старшие
;
///////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ Младшие.Х + 256 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр16
ИЗ Регистр8 КАК Младшие, Регистр8 КАК Старшие
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ Младшие.Х + 65536 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр20
ИЗ Регистр16 КАК Младшие, Регистр4 КАК Старшие

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

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

Текст и его длина передаются в запрос как параметры. Для примера считаем, что длина текста ограничена миллионом символов. Вот текст концовки этого запроса. 

 

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПОДСТРОКА(&Текст, Х, 1) Символ, КОЛИЧЕСТВО(Х) КАК Частота
ИЗ Регистр20
ГДЕ Х МЕЖДУ 1 И &ДлинаТекста
СГРУППИРОВАТЬ ПО ПОДСТРОКА(&Текст, Х, 1)

Его начало такое же как на предыдущем рисунке. Интересно то, что этот метод работает быстрее, чем обработка в оперативной памяти. И сразу дает табличный результат! Например, первый мегабайт романа "Война и мир" обрабатывается в памяти 8,2 сек, а запросом - 4 секунды!

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

Определение частоты слов запросом оказалось совсем не тривиальной задачей. Вот решение:

 

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ Младшие.Х + 256 * 256 * Средние.Х + 256 * 256 * 2 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр21
ИЗ Регистр16 КАК Младшие, Регистр4 КАК Средние, Регистр1 КАК Старшие
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ Х КАК У
ПОМЕСТИТЬ Разделители
ИЗ Регистр21
ГДЕ (НЕ ПОДСТРОКА(&Текст, Х, 1) ПОДОБНО "[а-я]") И Х МЕЖДУ 1 И &ДлинаТекста
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ Х, ВЫБОР КОГДА Х = 0 ТОГДА ИСТИНА КОНЕЦ КАК Нулевой, ВЫБОР КОГДА Х > 0 ТОГДА Х КОНЕЦ КАК Длина
ПОМЕСТИТЬ Интервалы
ИЗ Регистр4
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ У - Х КАК Начало, МИНИМУМ(Длина) КАК Длина
ПОМЕСТИТЬ УказателиСлов
ИЗ Разделители, Интервалы
СГРУППИРОВАТЬ ПО У - Х
ИМЕЮЩИЕ МАКСИМУМ(Нулевой) = ИСТИНА И МИНИМУМ(Длина) > 1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПОДСТРОКА(ПОДСТРОКА(&Текст, Начало + 1, Длина - 1), 1, 15) КАК Слово, КОЛИЧЕСТВО(Начало) КАК Частота
ИЗ УказателиСлов
СГРУППИРОВАТЬ ПО ПОДСТРОКА(ПОДСТРОКА(&Текст, Начало + 1, Длина - 1), 1, 15)

К статье прилагается файл отчета, содержащий этот запрос. С его помощью в тексте первой части "Войны и мира" была определена частота слов за 24 секунды! А это примерно 1,5 миллиона символов! Правда, если использовать "кодинг", на чистом 1С можно решить ту же задачу примерно в два раза быстрее.

В качестве неочевидного применения предложенного запроса приводится пример расчета в запросе квадратного корня от числа в диапазоне 0 - 1 048 576. Вернее, целой части этого корня.

 

////////// создается таблица с числами от 0 до 1024 ////////////////////////////
ВЫБРАТЬ 0 КАК Х ПОМЕСТИТЬ Регистр1 ОБЪЕДИНИТЬ ВЫБРАТЬ 1
;
ВЫБРАТЬ Младшие.Х + 2 * Старшие.Х КАК Х ПОМЕСТИТЬ Регистр2
ИЗ  Регистр1 КАК Младшие,   Регистр1 КАК Старшие
;
ВЫБРАТЬ Младшие.Х + 4 * Старшие.Х КАК Х ПОМЕСТИТЬ Регистр4
ИЗ  Регистр2 КАК Младшие, Регистр2 КАК Старшие
;
ВЫБРАТЬ Младшие.Х + 16 * Старшие.Х КАК Х ПОМЕСТИТЬ Регистр8
ИЗ  Регистр4 КАК Младшие, Регистр4 КАК Старшие
;
ВЫБРАТЬ Младшие.Х + 256 * Старшие.Х КАК Х ПОМЕСТИТЬ Регистр10
ИЗ  Регистр8 КАК Младшие, Регистр2 КАК Старшие
;
////////// для проверки создается таблица с различными значениями аргумента ////
ВЫБРАТЬ 123456 КАК У ПОМЕСТИТЬ Аргументы
ОБЪЕДИНИТЬ ВЫБРАТЬ 555555
ОБЪЕДИНИТЬ ВЫБРАТЬ 987654
;
////////// формируется таблица, содержащая аргумент и значение функции /////////
ВЫБРАТЬ У, МАКСИМУМ(Х) КАК Квадратный_корень_Х
ИЗ Аргументы ЛЕВОЕ СОЕДИНЕНИЕ Регистр10 ПО (Х * Х < У)
СГРУППИРОВАТЬ ПО
У

 Аналогичным или похожим путем можно рассчитать и другие обратные функции. 

Похожим приемом в запросе можно получить "таблицу хаоса" - таблицу, которая содержит случайные числа. Например, следующая функция возвращает таблицу с заданным числом строк, содержащую случайные числа, равномерно распределенные в диапазоне 0 - 1.


function ChaosTable(N, Name = "СлучайноеЧисло") export

g = new RandomNumberGenerator();

q = new Query("select &r1 as r into t1 union select &r2;

             | select &k * a.r + b.r - cast((&k * a.r + b.r) / &M - 0.5 as number(10,0)) * &M as r into t2 from t1 as a, t1 as b;

             | select &k * a.r + b.r - cast((&k * a.r + b.r) / &M - 0.5 as number(10,0)) * &M as r into t4 from t2 as a, t2 as b;

             | select &k * a.r + b.r - cast((&k * a.r + b.r) / &M - 0.5 as number(10,0)) * &M as r into t8 from t4 as a, t4 as b;

             | select &k * a.r + b.r - cast((&k * a.r + b.r) / &M - 0.5 as number(10,0)) * &M as r into t16 from t8 as a, t8 as b;

             | select top "
+ Format(N, "NG=") + "

             | (&k * a.r + b.r) / &M - cast((&k * a.r + b.r) / &M - 0.5 as number(10,0)) as "
+ Name + " from t16 as a, t4 as b");

q.SetParameter("r1", g.RandomNumber()); q.SetParameter("r2", g.RandomNumber());

q.SetParameter("k", 1664525); q.SetParameter("M", 4294967295);

return
q.Execute().Unload()

endfunction

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

Конечно, для использования в ответственных применениях потребуется проверка результата тестами NIST. Также было бы интересно исследовать использование для решения той же задачи метода Блюма-Блюма-Шуба. Запись запроса при этом будет еще короче.

 

Для удобства применения предложенного подхода на практике предлагается функция, которая формирует ТЕКСТ ЗАПРОСА или фрагмент пакетного запроса, выполнение которого приводит к получению временной таблицы, содержащей натуральный ряд чисел заданного размера. Вот текст этой функции


function ProtoText(N, M = 1000000000) export

    return ?(
N > 2

   
, ProtoText(M - Int(M - Sqrt(N)))

    +
strreplace(strreplace(";select top #2 a.X * #1 + b.X X into r#2 from r#1 a, r#1 b; drop r#1", "#2", format(N, "NG=")), "#1", format(M - Int(M - Sqrt(N)), "NG="))

    ,
"select 0 X into r2 union select 1")

endfunction

Функция рекурсивная, параметр M - служебный (используется для сокращения записи функции). Результирующая временная таблица имеет имя r{ЗаданныйРазмер}.

271

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

Наименование Файл Версия Размер
Текст запроса
.txt 1,06Kb
01.11.19
71
.txt 1,06Kb 71 Скачать
Текст запроса для определения частоты символов заданного текста
.txt 1,36Kb
01.11.19
28
.txt 1,36Kb 28 Скачать
Отчет разбора текста на слова запросом
.erf 6,96Kb
01.11.19
31
.erf 6,96Kb 31 Скачать
Текст запроса квадратного корня
.txt 0,95Kb
01.11.19
19
.txt 0,95Kb 19 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо
0. ildarovich 6793 15.09.11 02:40 Сейчас в теме
Иногда в запросе необходимо получить искусственную таблицу заданного размера, не связанную с данными информационной базы. Эта получаемая «из воздуха» таблица может быть заполнена, например, числами натурального ряда или функционально связанными с ними значениями. Такая таблица может пригодится как временная таблица в запросе для соединения с реальными таблицами. Другой вариант – быстрое получение таблиц значений заданного размера, списков, массивов и прочее. В последних версиях MS-SQL есть возможности непроцедурной генерации таблиц посредством специального «итеративного» описания. Ну а для 1С пригодится следующее решение:


Перейти к публикации

1. O-Planet 6985 15.09.11 02:40 Сейчас в теме
Впечатлила аватарка. Уже сразу решил плюсануть, не читая. Но почитал. Задача такая возникала. Про таблицу с битами не додумался тогда. Зачет.
2. Jogeedae 38 15.09.11 03:52 Сейчас в теме
это очень сильное колдунство! :)
3000чертей!
повторил запрос, 1с-серв всю память сьел и подавился, а предприятие зависло... предупреждать надо!! :(((
кстати, для создания ТЗ определённого размера можно использовать COMSafeArray
wowik; orfos; WKBAPKA; sleakers; palsergeich; адуырщдв; cool.vlad4; ildarovich; support; +9 Ответить
6. ildarovich 6793 15.09.11 11:55 Сейчас в теме
(2) Видимо, было мало оперативки, в таком случае ожидаемы и проблемы с формированием ТЗ из миллиона строк.
Важен принцип, а конкретный запрос приведен для примера и оценки скорости (замеры делались на ноутбуке в файловом варианте базы).
По аналогии можно формировать и меньшие таблицы.
Если их размер не равен степеням двойки, используем условие ГДЕ X < &ЗаданныйРазмер.
За напоминание о COMSafeArray спасибо!
(4) Запрос из http://infostart.ru/public/68269/ я видел,
хотя за основу брал свое же решение из http://forum.infostart.ru/forum14/topic35991/message400742/#message400742 (внешнего сходства немного, но общая "математика").
Отличие от http://infostart.ru/public/68269/ я вижу в том, что:
1) оно нацелено не только на даты (кроме того, что уже сказано, например, на основе этого запроса можно подбором находить обратные функции, не вычисляемые в запросе, типа квадратного корня и прочих);
2) оптимизировано по времени выполнения за счет соединения таблицы с собой (различные варианты сравнивались).
(5) Цикл из миллиона повторений сразу сделает этот прием неконкурентоспособным, а вот если все время удваивать подстроку - может и получиться...
10. cool.vlad4 45 15.09.11 17:39 Сейчас в теме
(6)
Цикл из миллиона повторений сразу сделает этот прием неконкурентоспособным, а вот если все время удваивать подстроку - может и получиться..
А там можно Формат использовать, для получения строки
3. IgorI 15.09.11 10:17 Сейчас в теме
Хоть идея и совершенно простая, но реализовать это в запросе... Спасибо за наводку!
15. IgorI 16.09.11 10:18 Сейчас в теме
(4) А я и не предполагал, что это что-то уникальное. Но вот попалась на глаза именно эта статья.
А Вам спасибо за "подборку" тематических статей. Обязательно посмотрю.
5. i132 115 15.09.11 10:56 Сейчас в теме
Если создавать таблицу занчений с одинаковыми строками, можно поигратьса со ЗначениемИзСтрокиВнутр(),
Например Сохранить в строку таблицу значений с одной строкой а потом в цикле вставлять перед окончанием эту строку...
9. cool.vlad4 45 15.09.11 17:38 Сейчас в теме
(5) Ага, я также и массив заполняю, изменяю.(0) +++ :D
7. Oleg_nsk 15.09.11 13:23 Сейчас в теме
Я подобное так делал:

Запрос.Текст = "ВЫБРАТЬ
	|	0 КАК Бит
	|ПОМЕСТИТЬ Регистр
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	1
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Н10.Бит + 2 * Н9.Бит + 4 * Н8.Бит + 8 * Н7.Бит + 16 * Н6.Бит + 32 * Н5.Бит + 64 * Н4.Бит + 128 * Н3.Бит + 256 * Н2.Бит + 512 * Н1.Бит + 1024 * Н0.Бит + 2048 * Н11.Бит КАК Сумма
	|ИЗ
	|	Регистр КАК Н11,
	|	Регистр КАК Н10,
	|	Регистр КАК Н9,
	|	Регистр КАК Н8,
	|	Регистр КАК Н7,
	|	Регистр КАК Н6,
	|	Регистр КАК Н5,
	|	Регистр КАК Н4,
	|	Регистр КАК Н3,
	|	Регистр КАК Н2,
	|	Регистр КАК Н1,
	|	Регистр КАК Н0"
Показать
8. ildarovich 6793 15.09.11 13:57 Сейчас в теме
(7) Проверял, работает медленнее, кроме того, удобнее писать

Н10.Бит + 2 *(Н9.Бит + 2 * (Н8.Бит + 2 * (Н7.Бит + 2 * (Н6.Бит + 2 * (Н5.Бит + 2 * (Н4.Бит + 2 * (Н3.Бит + 2 * ( Н2.Бит + 2 * (Н1.Бит + 2 * (Н0.Бит + 2 * Н11.Бит)))))))))) 
uncle_Vasya; +1 Ответить
38. alexk-is 6427 22.09.11 11:08 Сейчас в теме
Потестировал немного.
Получил следующие результаты.

Запросы типа (7), (17), (19) проигрывают (0) в файловом варианте как на 8.1, так и на 8.2.
А вот в SQL варианте они работают быстрее как на 8.1, так и на 8.2. MS SQL 2005 Standart.

Возможно, что на других SQL серверах будут другие результаты.

Запрос, который участвовал в тестировании:

выбрать 0 как х поместить х0 объединить все выбрать 1
объединить все выбрать 2 объединить все выбрать 3 объединить все выбрать 4
объединить все выбрать 5 объединить все выбрать 6 объединить все выбрать 7
объединить все выбрать 8 объединить все выбрать 9
;
выбрать х1.х + х2.х * 10 + х3.х * 100 + х4.х * 1000 + х5.х * 10000 + х6.х * 100000 как х
из х0 как х1, х0 как х2, х0 как х3, х0 как х4, х0 как х5, х0 как х6
40. ildarovich 6793 22.09.11 13:43 Сейчас в теме
(38) Очень интересно! - Если можете, приведите численные результаты замеров для SQL.

Потом, возможно, стоит посмотреть:

0) результаты для (7) и (19), то есть с использованием основания 2;
1) диапазоны до 65536 и более миллиона;
2) вариант с (0), когда начальная таблица - это Регистр4 (выбрать 0 - 15 поместить регистр4).

Это для того, чтобы понять, что влияет больше: число соединений (у (0) и (38) оно одинаково! и, думаю, это главное) или время трансляции запроса в SQL или необходимость фиксации временных таблиц.
Тогда и можно будет сделать выводы о сравнительной применимости (0) и (38) как подходов к формированию искусственных таблиц.
41. alexk-is 6427 22.09.11 14:18 Сейчас в теме
(40) Время замеров в секундах. Результат запросов 1000000 записей.
Платформы 8.1.15.14 и 8.2.14.533.

(0)
    8.1   8.2
Ф   2.4   1.3
С   3.4   2.1


(38)
    8.1   8.2
Ф   3.8   2.0
С   2.9   1.9


(0) + оптимизация
    8.1   8.2
Ф   1.9   1.2
С   3.1   2.1


(38) + оптимизация
    8.1   8.2
Ф   2.9   1.9
С   2.7   1.7
serg1983; Redokov; ildarovich; +3 Ответить
42. ildarovich 6793 22.09.11 14:56 Сейчас в теме
(41) Большое спасибо! - А что такое "+ оптимизация"?

Также уточню гипотезу из (40): Кажется, что подход (38) выигрывает у подхода (0) только в узком диапазоне условий, когда число соединений в запросах получается одинаковым. Под подходами я имел ввиду формирование искусственной таблицы любого заданного размера "взрывным" способом "порождающего запроса" (0), либо линейно-нарастающим числом соединений как в (38).
43. alexk-is 6427 22.09.11 16:37 Сейчас в теме
(42) Ничего особенного. Поправил запрос, чтобы при тех же результатах он работал быстрее.
11. Famza 82 15.09.11 23:34 Сейчас в теме
Любопытно...А в каком практическом решении такое использовалось? :-)
12. dkprim 5 16.09.11 08:59 Сейчас в теме
13. dkprim 5 16.09.11 09:00 Сейчас в теме
(11)присоединяюсь :)
а вообще, понравилась идея и реализация. всегда нравится разбираться с такими задачами. интересно и занятно :)
спасибо за предоставленное решение :)
16. ildarovich 6793 16.09.11 10:24 Сейчас в теме
(11) Если Ваш вопрос к тому, что не хватает нескольких не абстрактных, а "приземленных" примеров использования, то я постараюсь привести еще несколько. Все же посмотрите внимательно на пример про извлечение квадратного корня. Как иначе вычислить расстояние в запросе? (вообще то есть еще один способ - быстрый, но не такой компактный).

(14) Видимо, Вы что-то пропустили. Речь как раз идет о
создали какую надо таблицу
. Решается именно проблема быстрого создания (из ничего) какой надо таблицы, а не передачи ее в запрос. Таблица может создаваться в другом запросе и передаваться в текущий через менеджер - суть не в этом, а в том, как быстро изначально создать таблицу.
22. ildarovich 6793 17.09.11 14:15 Сейчас в теме
(11) (12) Добавил пример использования предложенного подхода в задачах обработки текста - показал, как можно одним запросом очень быстро получить частоту символов заданного текста.
14. Unstappoble 16.09.11 09:36 Сейчас в теме
ухаха))) бред) для этого придумали менеджер временных таблиц, создали какую надо таблицу и используйте
17. Angeros 16.09.11 11:28 Сейчас в теме
Ну и что... есть почти уже стандартный запрос для получения последовательности дат. А в чем у вас свежесть идеи???


ВЫБРАТЬ
	0 КАК Цифра
ПОМЕСТИТЬ ВсеЦифры

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	9
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&ДатаНач, ДЕНЬ, ВсеЦифры4.Цифра * 1000 + ВсеЦифры3.Цифра * 100 + ВсеЦифры2.Цифра * 10 + ВсеЦифры1.Цифра * 1) КАК ДатаДень
ПОМЕСТИТЬ ВсеДни
ИЗ
	ВсеЦифры КАК ВсеЦифры1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦифры КАК ВсеЦифры2
		ПО (ВсеЦифры2.Цифра * 10 + ВсеЦифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНач, КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), ДЕНЬ))
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦифры КАК ВсеЦифры3
		ПО (ВсеЦифры3.Цифра * 100 + ВсеЦифры2.Цифра * 10 + ВсеЦифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНач, КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), ДЕНЬ))
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеЦифры КАК ВсеЦифры4
		ПО (ВсеЦифры4.Цифра * 1000 + ВсеЦифры3.Цифра * 100 + ВсеЦифры2.Цифра * 10 + ВсеЦифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&ДатаНач, КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), ДЕНЬ))
Показать
18. ildarovich 6793 16.09.11 12:38 Сейчас в теме
В (17) и (7) делается примерно одно и то же. Создается исходная таблица из 10-ти или 2-х строк и во вторм запросе пакета производится 2 или 9 соединений для получения таблицы из 1000 строк.

"Первая свежесть" идеи (0) в том, чтобы минимизировать число соединений на всех этапах получения искусственной таблицы любого заданного размера и, таким образом, ускорить ее построение. Для этого обеспечивается квадратичный рост размера получаемой таблицы 2 - 4 - 16 - 256 - 65536 - ... На каждом этапе размер возводится в квадрат за одно соединение. Это похожий, но другой, более быстрый принцип (проверял, сравнивал)!
Во-вторых, я предлагаю использовать получаемые таблицы не только для генерации дат в заданном диапазоне, но и для быстрого (проверено!) формирования больших таблиц значений, массивов, списков; для вычисления обратных функций, которых нет в языке запросов; для решения других задач, примеры которых я еще приведу. То есть "вторая свежесть идеи" заключается в обобщении подхода с использованием искусственно-порожденных таблиц, в использовании его для решения других задач.
81. skyadmin 86 29.01.16 12:55 Сейчас в теме
(17) Angeros, Не проще ли в цикле заполнить таблицу дат и передать ее в запрос?
82. ildarovich 6793 29.01.16 13:31 Сейчас в теме
(81) skyadmin, то, что вы предлагаете реально сложнее и дольше по времени. "Я этого еще не знаю и не умею" не равно "сложнее".
cleaner_it; +1 Ответить
19. Fragster 940 16.09.11 13:11 Сейчас в теме
Делал подобное через таблицу из чисел от 0 до 9 и соединением ее самой с собой с множителем "10" несколько раз (кстати, последоватеьлное соединеине не нужно, можно все в одном:

ВЫБРАТЬ
	0 КАК б
ПОМЕСТИТЬ Т

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Т0.б + 2 * Т1.б + 4 * Т2.б + 8 * Т3.б + 16 * Т4.б + 32 * Т5.б + 64 * Т6.б + 128 * Т7.б КАК Числа
ИЗ
	Т КАК Т0,
	Т КАК Т1,
	Т КАК Т2,
	Т КАК Т3,
	Т КАК Т4,
	Т КАК Т5,
	Т КАК Т6,
	Т КАК Т7

УПОРЯДОЧИТЬ ПО
	Числа
Показать


)
20. ildarovich 6793 16.09.11 14:44 Сейчас в теме
(19) Это такое же по сути решение, как в (7) и (17). Я предлагаю другое решение, потому что метод "все в одном" работает медленнее (проверял, пробовал)! У него ("все в одном") больше соединений! В этом вся суть!
В Вашем варианте для получения таблицы из миллиона записей потребуется 19 соединений (число волшебно совпадает с номером Вашего поста), а в моем - 5! 19 и 5 - есть разница? То есть это не просто разная запись, это другой принцип. И, как вижу, все же не очевидный, поскольку столько людей не увидели разницы.
Кстати, в моем варианте (19) используется запись, не требующая знания ряда степеней двойки:
Т0.б + 2 * (Т1.б + 2 * (Т2.б + 2 * (Т3.б + 2 * (Т4.б + 2 * (Т5.б + 2 * (Т6.б + 2 * Т7.б)))))).
Извините, что вынужден повторятся. Вижу, что предыдущие комментарии не читаются.
21. sinichkas 16.09.11 16:47 Сейчас в теме
очень удобная весч,спасибо
23. dimanich70 202 17.09.11 15:38 Сейчас в теме
Побольше бы примеров, как это можно использовать в повседневной работе. А так за не тривиальность плюсую. Раньше про такой метод не читал.
24. sound 529 17.09.11 15:51 Сейчас в теме
25. hogik 430 18.09.11 21:19 Сейчас в теме
(0)
"Например, первый мегабайт романа "Война и мир" обрабатывается в памяти 8,2 сек, а запросом - 4 секунды!"©
Сергей.
И это не "запрос" молодец, а интерпретатор/компилятор 1С-а бяка. ;-)
Проверил алгоритм в памяти на "1С 7.7".
Если исходные данные в строке - 1249 сек.
Если данные в массиве - 2 сек.
Ну, а перегон из строки в массив занял 1215 сек.
Любопытно, что строка в 100000 символов обрабатывается за 12 сек.
А на С++ алгоритм выполняется - 0,00253 сек.
29. ildarovich 6793 18.09.11 21:59 Сейчас в теме
(25) Конечно, это так. Все, что можно сделать одной инструкцией, 1С делает гораздо быстрее. И тут фактически мы заставляем выполнить (через запрос и язык запросов) некоторые сложные действия одной инструкцией Запрос.Выполнить(). Получается быстрее. Это стандартный прем оптимизации - найти одну инструкцию.
Правда, меня удивляют приведенные Вами данные. Разбор строки (определение частот) из миллиона символов в оперативной памяти занимает в 8-ке 8,2 секунды (использовал соответствия, запись в одну строку, отключенный отладчик). Неужели 7-ка настолько медленнее? Как-то не верится.
31. hogik 430 18.09.11 22:17 Сейчас в теме
(29)
"Неужели 7-ка настолько медленнее? Как-то не верится."(с)
Сергей.
Я тщательно проверял свой текст алгоритма. ;-)
Думаю, время со строкой в 1000000 - это, типа, глюк.
Скорости для строк:
1 000 000 байт - 1249 сек.
100 000 байт - 12 сек.
10 000 байт - 0.157 сек.
1 000 байт - 0.005 сек.
И, вообще, в семерке много подобных "странностей"... :-)
33. hogik 430 19.09.11 19:31 Сейчас в теме
(29)
Сергей.
Я напоминаю себе, возней с "семеркой", персонажа:
"Неуловимый Джо — персонаж известного анекдота; обозначает человека или явление, всем известного, но при этом никому не нужного."(с)
Я выяснил. :-)
В "семерке" время выполнения функции Сред(Строка,Позиция,1) линейно зависит от длины исходной строки (первого аргумента). Т.е. эта функция, как бы принимает не адрес строки, а - значение. Блеск... :-) Интересно, а как в "восьмерке" работает такая функция?
34. ildarovich 6793 19.09.11 23:45 Сейчас в теме
(33) В восьмерке эта функция работает достаточно быстро. Вот такой цикл
Цикл Для ё = 1 По 1048576 Цикл ж = Сред(Текст, ё, 1); Частота[ж] = ?(Частота[ж] = Неопределено, 0, Частота[ж] + 1) КонецЦикла

выполняется 8,2 секунды, а в нем есть еще чтение и запись соответствия.
Про трудности работы с длинными строками в 77 говорилось в одной из здешних публикаций по оптимизации кода в 77. Там предлагалось разбивать строки перед обработкой.
35. hogik 430 20.09.11 00:27 Сейчас в теме
(34)
Сергей.
Рекомендации, типа, разбить строки - интересно. :-)
А разбивать строки - функцией Сред(), как это у меня сделано, например, в массив? ;-)
Времена см. в (25) сообщении. Суммарное время выполнения останется прежним. Нет - это не выход. Печально, еще и то, что если написать подобные функции на ВК, то очень большие накладные расходы на вызов методов. Например, метод Х=Lib.DeleteStr("*",1,1) для 100000 вызовов выполняется 160 секунд. А этот метод, всего, что и делает - из строки в один байт удаляет первый символ и возвращает строку нулевой длины. Еще смешней. Время просмотра таблицы в 2700000 циклом - 30 секунд. Но, если в этом цикле выполнять присвоение полей таблицы в рабочие переменные (15 штук, средняя длина поля - 10 байт), то время становится - 140 секунд. А ведь все поля, после чтения записи, уже лежат в оперативной памяти. Вот такая жесть в "семерке"... :-( Я давно пишу "боевые" куски алгоритмов на С++ с минимальным количеством вызовов методов ВК. Т.е. "максимально-целиком" загоняю алгоритм в С++.
Вот... (с)
26. Поручик 4332 18.09.11 21:36 Сейчас в теме
(0) А нельзя ли текст запросов текстом публиковать, а не рисунками.
27. ildarovich 6793 18.09.11 21:49 Сейчас в теме
(26) Тексты запросов в файлах, прилагаемых к публикации.
Я пробовал "разукрашивать" тексты, но у меня потом форматирование разъезжается, решил, что рисунки проще.
28. Поручик 4332 18.09.11 21:52 Сейчас в теме
(27) Разукрашивал этим http://infostart.ru/public/19856/ ? Люди пользуются, ничего не разъезжается.
30. ildarovich 6793 18.09.11 22:00 Сейчас в теме
32. onyx 24 19.09.11 05:25 Сейчас в теме
Понравилась идея и реализация. всегда нравится разбираться с такими задачами. интересно и занятно :)
спасибо за предоставленное решение :)
36. jjinn 21.09.11 10:29 Сейчас в теме
37. zhleonid8 21.09.11 14:46 Сейчас в теме
39. vec435 15 22.09.11 13:38 Сейчас в теме
44. ildarovich 6793 10.10.11 20:41 Сейчас в теме
Добавлен пример запроса, разбивающего текст на слова и определяющего частоту слов текста. Для обработки 1,5 миллиона символов текста романа "Война и мир" запросом понадобилось 24 секунды!
45. alexk-is 6427 11.10.11 00:48 Сейчас в теме
(0) Код картинками - ну, это со зла, со зла...
46. ildarovich 6793 11.10.11 08:46 Сейчас в теме
(45) Уже обещал - переделаю в ближайшее время.
47. ildarovich 6793 15.10.11 01:33 Сейчас в теме
(45)(46) Переделал тексты запросов из картинок в раскрашенный текст
48. qwerty_3 18.11.11 21:32 Сейчас в теме
Очень интересно, спасибо.
50. logos 147 24.09.12 00:26 Сейчас в теме
Огромное спасибо за полезную информацию
51. ildarovich 6793 21.11.12 15:04 Сейчас в теме
Добавил пример получения в запросе "таблицы хаоса" - таблицы, которая содержит случайные числа
52. andrewks 1271 21.11.12 16:28 Сейчас в теме
(51)
Сложное выражение внутри запроса является ничем иным как нахождением остатка от деления на &M

RandomNumber(), как известно, может вернуть 0. и вот если так случится, что и в r1, и в r2 придут нули - тогда ой. конструкция &N-cast(&N/&M-0.5 as number(10,0))*&M даст при N = 0 не N % M, а -M
чтобы не городить case внутри запроса, думаю, проще "поднять" нижнюю границу через вызов RandomNumber(1)
53. ildarovich 6793 21.11.12 19:33 Сейчас в теме
(52) Спасибо! - Вы очень внимательны. Согласен. Хотя вероятность такого события и составляет 1 / (4294967295 * 4294967295), то есть меньше одной квинтиллионной, но подстраховаться предложенным Вами способом ничего не стоит, я сделаю это, когда в очередной раз буду обновлять статью.
54. ildarovich 6793 07.12.12 23:50 Сейчас в теме
Добавил функцию, формирующую ТЕКСТ ЗАПРОСА (может быть фрагментом пакетного запроса), формирующего искусственную таблицу заданного размера. Это должно быть очень практично: теперь не нужно заранее знать 31, 365 или больше дат (например) нужно получить в таблице - функция сформирует фрагмент запроса для любого заданного количества строк искусственной таблицы. Способ в целом тот же, но немного упрощен: например, таблица из 1000 строк получается перемножением таблиц из 34 строк, таблица из 34 строк - перемножением таблиц из 6 строк, таблица из 6 строк - перемножением таблиц из 3 строк, а она - перемножением таблиц из двух строк. То есть каждый раз вычисляется квадратный корень и ближайшее целое сверху к этому корню число - это и есть размер умножаемой таблицы.
55. catena 102 12.12.12 12:49 Сейчас в теме
У вас подсчет частоты слов пропускает первое слово, если строка начинается не с пробела или другого символа. Надо в разделители добавить 0.
А так с интересом прочитала. В третий раз, как оказалось :)
ildarovich; +1 Ответить
56. ildarovich 6793 12.12.12 14:02 Сейчас в теме
(55) Спасибо! Вы очень внимательны. Чтобы первое слово не пропускалось, к таблице разделителей нужно добавить строку, содержащую 0. В результате этот фрагмент запроса будет выглядеть так:
ВЫБРАТЬ Х КАК У
ПОМЕСТИТЬ Разделители
ИЗ Регистр21
ГДЕ (НЕ ПОДСТРОКА(&Текст, Х, 1) ПОДОБНО "[а-я]") И Х МЕЖДУ 1 И &ДлинаТекста ИЛИ Регистр21.Х = 0
;
При очередном обновлении поправлю в статье. Приятно вести обсуждение на уровне сути вопроса. А то иногда кажется, что в содержательной части некоторых статей никто разбираться и не старается. А так я бы добавил, что основной хитростью данного запроса является ограничение длины слов (в примере взято ограничение 16 знаков, хотя можно и больше). Именно это позволяет уйти от квадратичной зависимости времени работы запроса от длины текста.
57. catena 102 12.12.12 14:11 Сейчас в теме
(56)Я просто люблю играться с запросами и всегда разбираю, если нахожу что-то интересное. Сохраняя этот запрос из консоли, увидела, что он у меня уже сохранен, да и плюс я оказывается уже ставила :)
58. Al-X 20.06.13 13:13 Сейчас в теме
Спасибо за предоставленные алгоритмы! Убраю их в свою коллекцию....
59. Synoecium 662 26.08.13 11:56 Сейчас в теме
По поводу алгоритма Блюм-Блюм-Шуба (BBS), автор по-видимому имеет ввиду подобный следующему запрос получения последовательности СЧ:
ВЫБРАТЬ
    &x01 КАК x
ПОМЕСТИТЬ t1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    &x02
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    (a.x + 2 * b.x) * (a.x + 2 * b.x) - (ВЫРАЗИТЬ((a.x + 2 * b.x) * (a.x + 2 * b.x) / &M - 0.5 КАК ЧИСЛО(10, 0))) * &M КАК x
ПОМЕСТИТЬ t2
ИЗ
    t1 КАК a,
    t1 КАК b
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    (a.x + 2 * b.x) * (a.x + 2 * b.x) - (ВЫРАЗИТЬ((a.x + 2 * b.x) * (a.x + 2 * b.x) / &M - 0.5 КАК ЧИСЛО(10, 0))) * &M КАК x
ПОМЕСТИТЬ t4
ИЗ
    t2 КАК a,
    t2 КАК b
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    (a.x + 2 * b.x) * (a.x + 2 * b.x) - (ВЫРАЗИТЬ((a.x + 2 * b.x) * (a.x + 2 * b.x) / &M - 0.5 КАК ЧИСЛО(10, 0))) * &M КАК x
ПОМЕСТИТЬ t8
ИЗ
    t4 КАК a,
    t4 КАК b
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    (a.x + 2 * b.x) * (a.x + 2 * b.x) - (ВЫРАЗИТЬ((a.x + 2 * b.x) * (a.x + 2 * b.x) / &M - 0.5 КАК ЧИСЛО(10, 0))) * &M КАК x
ПОМЕСТИТЬ t16
ИЗ
    t8 КАК a,
    t8 КАК b
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ ПЕРВЫЕ 100
    (a.x + 2 * b.x) * (a.x + 2 * b.x) / &M - (ВЫРАЗИТЬ((a.x + 2 * b.x) * (a.x + 2 * b.x) / &M - 0.5 КАК ЧИСЛО(10, 0))) КАК Результат
ИЗ
    t16 КАК a,
    t4 КАК b
Показать
60. ildarovich 6793 26.08.13 13:30 Сейчас в теме
(59) Спасибо за проявленный интерес к данной теме. Для меня применение BBS осталось на уровне идеи - я ее не проверял - тогда казалось, что данный алгоритм даст более компактные выражениям в запросе. Однако были сомнения по поводу симметричности алгоритма - не приведет ли это к очевидной зависимости элементов в последовательности? В любом случае результат нужно тестировать специальными тестами. Запрос, приведенный в статье, дает в исходном виде не очень хорошие результаты. Поэтому на практике следует еще выбирать из полученных чисел только младшие разряды.
61. Synoecium 662 26.08.13 15:15 Сейчас в теме
(60) я тоже сомневаюсь в качестве такой генерации, но такие же сомнения возникают по поводу вашего примера с линейным конгруэнтным методом. Там ведь также расходятся цепочки зависимостей от пар a,a;a,b;b,a;b,b. Сам алгоритм я делал как-то на с++, там это делается довольно просто и качество генерации высокое, поэтому стало интересно, как вы это представляете на языке запросов :)
62. ildarovich 6793 26.08.13 17:31 Сейчас в теме
(61) Вообще генерация случайных чисел - слишком большая тема, чтобы ее касаться так просто и мимоходом. Можно вспомнить и главы из "Исскуство программирования" Дональда Кнута и ERNIE 1 из лондонского музея науки. Данный запрос я написал под впечатлением от Keccak. Из его описания я понял, что еще есть место для проб и ошибок в данной области. Это - проба, а насколько это ошибка покажут практика и тесты.
Прикрепленные файлы:
63. Synoecium 662 26.08.13 17:37 Сейчас в теме
Прошу меня извинить, но уж очень тема интересная :)
Накидал запрос, который из находит значения корней из заданной таблицы аргументов. При x <= 1 млн, точность 3 знака после запятой. Работает довольно шустро, на ноутбуке 1000 значений считает за 0.2 сек:

ВЫБРАТЬ
	&x
ПОМЕСТИТЬ источник
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	источник.x / 2 КАК а,
	источник.x
ПОМЕСТИТЬ т1
ИЗ
	источник КАК источник
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	(((т1.а + т1.x / т1.а) / 2 + т1.x / ((т1.а + т1.x / т1.а) / 2))/2 + x/(((т1.а + т1.x / т1.а) / 2 + т1.x / ((т1.а + т1.x / т1.а) / 2))/2))/2 КАК а,
	т1.x
ПОМЕСТИТЬ т2
ИЗ
	т1 КАК т1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	(((т2.а + т2.x / т2.а) / 2 + т2.x / ((т2.а + т2.x / т2.а) / 2))/2 +x/(((т2.а + т2.x / т2.а) / 2 + т2.x / ((т2.а + т2.x / т2.а) / 2))/2))/2 КАК а,
	т2.x
ПОМЕСТИТЬ т3
ИЗ
	т2 КАК т2
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	(((т3.а + т3.x / т3.а) / 2 + т3.x / ((т3.а + т3.x / т3.а) / 2))/2 +x/(((т3.а + т3.x / т3.а) / 2 + т3.x / ((т3.а + т3.x / т3.а) / 2))/2))/2 КАК а,
	т3.x
ПОМЕСТИТЬ т4
ИЗ
	т3 КАК т3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	(((т4.а + т4.x / т4.а) / 2 + т4.x / ((т4.а + т4.x / т4.а) / 2))/2 + x/(((т4.а + т4.x / т4.а) / 2 + т4.x / ((т4.а + т4.x / т4.а) / 2))/2))/2 КАК а,
	т4.x
ПОМЕСТИТЬ т5
ИЗ
	т4 КАК т4
Показать
Ёпрст; ildarovich; +2 Ответить
64. ildarovich 6793 26.08.13 18:03 Сейчас в теме
(63) Все правильно. Формула Герона. Мне пришлось применить ее в обработке к статье "Как нарисовать граф на 1С". Там вышло очень удачно, что итерации по уточнению корня можно делать ПАРАЛЛЕЛЬНО с работой основного алгоритма расчета перемещений. Поэтому хватило простой формулы (а + б/а)/2. До того, как я до этого додумался, приходилось, как и Вам, подставлять результаты итераций друг в друга. Но мне хватало трех итераций, поскольку в качестве начального приближения я брал сумму катетов. Так как задача была конкретная - рассчитать гипотенузу. Максимальная погрешность при таком подходе была 0,197 процента. За три итерации! Поэтому могу предложить в дополнение к Вашему безусловно правильному подходу, еще исходя из характера задачи выбирать начальное приближение. Тогда можно сэкономить итерации. Также в плане обмена опытом могу сказать, что при упрощении получающихся громоздких выражений полезно пользоваться сайтом http://www.wolframalpha.com/. Ну а подход, показанный в данной статье, конечно не быстрый, но зато универсальный.
65. Synoecium 662 27.08.13 07:27 Сейчас в теме
(64) под формулой Герона вы наверное имеете ввиду формулу вида y=(c^2+a^2-b^2)/2c, но что-то не улавливаю связи между ней и вычислением корня числа. А вообще в моем запросе используется частный случай метода Ньютона (еще известный как метод касательных Ньютона-Рафсона)
x_(n+1)=x_(n)-f(x)/f'(x)
в случае квадратного корня: x_(n+1)=0.5(x_(n)+N/x_(n)), полагаем что f(x)=x^2-N
66. ildarovich 6793 27.08.13 09:28 Сейчас в теме
(65) Я имел ввиду 'http://en.wikipedia.org/wiki/Methods_of_computing_square_roots'
. В русской википедии тоже есть статья, но ссылку на нее не могу вставить, так как подчеркивание в названии обрезает ссылку - поищите поиском "Итерационная формула Герона". Получается, что это одно и тоже, поскольку в этой статье написано, что эту же формулу можно получить, применяя метод Ньютона к решению уравнения а - х^2 = 0.
67. Elisy 924 25.10.13 07:48 Сейчас в теме
(63) Пересмотрите, пожалуйста, вычисление начального значения источник.x / 2. К данной задаче подойдет метод грубой оценки. Можно посмотреть здесь: http://infostart.ru/public/204916/
68. for_sale 24.04.14 18:57 Сейчас в теме
простите за глупый вопрос - а зачем нужна пустая таблица заданного размера? какой-то пример из жизни есть?
69. ildarovich 6793 24.04.14 22:39 Сейчас в теме
(68) Вообще-то таблица не совсем пустая, а с числами в заданном диапазоне.

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

В статье Будни автоматизации или "мне нужна программка для 3D упаковки" с помощью таких таблиц генерируются варианты расположения коробок в коробе при 3D упаковке.

В статье Выразить строку как число и строку как дату в запросе с помощью таких таблиц получаются веса позиций.

В статье Агрегатное суммирование строк в запросе – сложно, но не невозможно эта таблица позволяет разбивать строки на символы.

Ну а чаще всего такие таблицы вспоминают, когда нужно сформировать "календарь" - множество дат в заданном диапазоне.

Все это реальные практические задачи.
70. chmv 01.07.14 10:19 Сейчас в теме
71. ildarovich 6793 06.11.14 20:15 Сейчас в теме
Нашлось еще одно применение для порождающего запроса. С его помощью можно получать готовый массив любого заданного размера N, содержащий последовательность чисел от 0 до N - 1. Этот массив затем, например, можно загрузить в нужную колонку таблицы значений, чтобы перенумеровать ее строки, не используя цикл. Такой способ всего примерно в 3 раза медленнее нумерации в цикле (для файловой базы).
Все необходимые для решения этой задачи функции (prototext, ЧисловаяПоследовательностьТаблицей, ЧисловаяПоследовательностьМассивом) в силу их компактности приведены в статье Минимализмы.
72. eugeniezheludkov 32 14.01.15 05:07 Сейчас в теме
я как то использовал подобные трюки на высоконагруженной системе, ммммалюсенький запрос который ничего не выбирал из таблиц ИБД, а только порождал данные быстрей чем в коде .... доооолго же мы не могли понять куда девается вся память, проц и канал связи на сервере с 16 гигами оперативы и 48 ядрами (точно не помню количество) при работе всего 40 пользователей, а вы представьте что ваш запрос запустят одновременно 40 человек, а не вы один в песочнице..... перенес все на клиентскую сторону (в код) и сервер вздохнул свободной грудью :) данные у всех генерились разные уникальные исходя из входного параметра, с тех пор в 1с я никогда не юзаю запросы для длинных вычислений или генераций данных ... нужно распределять нагрузку ! но если есть деньги на хороший сервер или это файловый вариант то конечно можно и побаловаться, в крайнем случае если нужно сгенерить много данных и быстрей чем позволяет 1С то можно через JS на клиенте через комобъекты, а если и этого не достаточно то GLPK.exe в макет (типа МАТЛАБ только Опенсорсный и работает как внешний интерпретатор с командной строки или файла, может вести расчеты на видеокарте) на клиенте
73. ildarovich 6793 14.01.15 12:35 Сейчас в теме
(72) eugeniezheludkov, "подобные трюки" - интересно было бы на них посмотреть (малюсенький запрос), чтобы оценить степень подобия. В данном случае ни на одном шаге данных не больше, чем нужно будет в итоге, поэтому вряд ли будет перегрузка по-сравнению с другими решениями.

Но все же основное назначение данного метода - это не формирование таблиц для последующего использования вне запроса, а формирование таблиц для использования внутри запроса. Оказалось, что сформировать пустую таблицу значений с заданным числом строк или пронумерованную таблицу в коде все же несколько быстрее (если делать это правильно).
74. eugeniezheludkov 32 20.01.15 07:39 Сейчас в теме
(73) сегодня постараюсь в истории хранилища откопать старые варианты функций, но вот навскидку нашел в коде одну из вешающих сервер в запросном варианте:
на складе применяется адресное хранение, адреса вида Б01-01-1, задача оптимизировать хронометраж сотрудников т.е найти ближайшую секцию для него чтобы при этом он шел в одном направлении, равномерно выполняя свою работу



это не порождающая функция, а анализирующая к сожалению , функция элементарная но именно она съедала кучу памяти и процессора пока выполнялась в виде запроса.. но у нас были и порождающие тоже постараюсь вспомнить как они выглядели и где применялись ранее (помню что по их результатам диаграмма ганта рисовалась нехилая ), чтоб не быть голословным ... да и код я все-же удалю позже т.к подписывал "неразглашение" и все такое
75. ildarovich 6793 20.01.15 13:21 Сейчас в теме
(74) eugeniezheludkov, как я понял, запрос был в функции "получить секции". То есть типа того, что там генерировались все соседние секции и отсекались не пройденные? Но разве структура секций не хранится в справочнике "топология"? Зачем генерировать секции?
Без самого запроса вникнуть тяжело.
Вообще задача интересная... Можно было бы покопаться, если бы было больше исходных данных.
77. eugeniezheludkov 32 20.01.15 15:01 Сейчас в теме
(75) нееет в "получить секции" запрос из самопального регистра а не справочника, да неважно там не сильная нагрузка идет её вообще из кода можно убрать. загружающим запросом была реализована лишь вот эта логика:
 
    НомерПервойСекции = Число(Сред(НачальнаяСекция,5,2));
    НомерПоследнейСекции = Число(Сред(КонечнаяСекция,5,2));
    НомерТекущейСекции = Число(Сред(Секция,5,2));
    dx = НомерТекущейСекции - НомерПервойСекции; dx = ?(dx<0,-dx,dx);
    dy = НомерПоследнейСекции - НомерТекущейСекции; dy = ?(dy<0,-dy,dy);
    Если dx>dy Тогда
        Возврат КонечнаяСекция;
    Иначе                       
        Возврат НачальнаяСекция;
Показать

вообщем просмотрел конфигурацию аж до июня 14 года , но там уже было исправлено, а еще раньше нет , только по памяти пытаться
но смысл запроса был таков, что на вход подаются строки типа 01 и 56 и текущая позиция тоже строка к примеру 10 нужно запросом выяснить к чему 10 ближе к 01 или к 56 выдать ответ 01 .. да это тоже не важно , а важно то что в профайлере скуля этот запрос был на первом месте по заниманию ресурсов несмотря на то что он не выбирал данные, временные таблицы уничтожались
78. ildarovich 6793 20.01.15 16:43 Сейчас в теме
(77) eugeniezheludkov, задачу понял, у меня есть вариант преобразования строки в число в запросе. На взгляд затраты в нем мизерные. Никто пока не жаловался.
Вообще меня эта тема довольно сильно интересует. Иногда из любви к изобретательству стараюсь делать запросами даже то, что, возможно, лучше делать кодом. Поэтому обращаю внимание на границы применимости запросной техники и возможные проблемы.
76. DrZombi 35 20.01.15 13:58 Сейчас в теме
Народ, шот не пойму, все начиная от первого, Хвалят запрос. А ссылки на запрос Нет :(
Дайте хоть, кто ссыль?
79. ildarovich 6793 20.01.15 16:48 Сейчас в теме
(76) DrZombi, запрос в начале статьи http://infostart.ru/public/90367/
Вот он
ВЫБРАТЬ 0 КАК Х
ПОМЕСТИТЬ Регистр1
ОБЪЕДИНИТЬ
ВЫБРАТЬ 1
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ Младшие.Х + 2 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр2
ИЗ Регистр1 КАК Младшие, Регистр1 КАК Старшие
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ Младшие.Х + 4 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр4
ИЗ Регистр2 КАК Младшие, Регистр2 КАК Старшие
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ Младшие.Х + 16 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр8
ИЗ Регистр4 КАК Младшие, Регистр4 КАК Старшие
;
////////////////////////////////////////////////////////////­///////////////////
ВЫБРАТЬ Младшие.Х + 256 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр16
ИЗ Регистр8 КАК Младшие, Регистр8 КАК Старшие
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ Младшие.Х + 65536 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр20
ИЗ Регистр16 КАК Младшие, Регистр4 КАК Старшие
Показать
В самой статье приведены примеры применения этой таблицы. В конце статьи еще есть функция, которая строит ТЕКСТ запроса по заданному количеству чисел.
80. ildarovich 6793 09.12.15 12:26 Сейчас в теме
Для применений, связанных с генерацией дат в заданном диапазоне, удобнее применять основание 3. Тогда получается три каскада: на выходе первого - 9, второго - 81, третьего - 6551 чисел, то есть примерно 8 лет. А если взять основание 2, то три каскада будет мало - 256 чисел, на год не хватит, а четыре много - 65536, то есть примерно 80 лет.
Для основания 3 и дат запрос будет иметь вид:
ВЫБРАТЬ 0 КАК Х
ПОМЕСТИТЬ Х_3
ОБЪЕДИНИТЬ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВЫБРАТЬ 2
;
ВЫБРАТЬ 3 * Инь.Х + Янь.Х КАК Х
ПОМЕСТИТЬ Х_9
ИЗ Х_3 КАК Инь, Х_3 КАК Янь
;
ВЫБРАТЬ 9 * Инь.Х + Янь.Х КАК Х
ПОМЕСТИТЬ Х_81
ИЗ Х_9 КАК Инь, Х_9 КАК Янь
;
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&Х1, ДЕНЬ, 81 * Инь.Х + Янь.Х) КАК Х
ИЗ Х_81 КАК Инь, Х_81 КАК Янь
ГДЕ ДОБАВИТЬКДАТЕ(&Х1, ДЕНЬ, 81 * Инь.Х + Янь.Х) <= &Х2
Показать
А если сразу работать с датами, то вид:
ВЫБРАТЬ	&Х1 КАК Х
ПОМЕСТИТЬ Х2
ОБЪЕДИНИТЬ ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&Х1, ДЕНЬ, 81 * 27)
ОБЪЕДИНИТЬ ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&Х1, ДЕНЬ, 81 * 54)
;
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(Инь.Х, ДЕНЬ, РАЗНОСТЬДАТ(&Х1, Янь.Х, ДЕНЬ) / 3) КАК Х
ПОМЕСТИТЬ Х4
ИЗ Х2 КАК Инь, Х2 КАК Янь
;
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(Инь.Х, ДЕНЬ, РАЗНОСТЬДАТ(&Х1, Янь.Х, ДЕНЬ) / 9) КАК Х
ПОМЕСТИТЬ Х16
ИЗ Х4 КАК Инь, Х4 КАК Янь
;
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(Инь.Х, ДЕНЬ, РАЗНОСТЬДАТ(&Х1, Янь.Х, ДЕНЬ) / 81) КАК Х
ИЗ Х16 КАК Инь, Х16 КАК Янь
ГДЕ ДОБАВИТЬКДАТЕ(Инь.Х, ДЕНЬ, РАЗНОСТЬДАТ(&Х1, Янь.Х, ДЕНЬ) / 81) <= &Х2
Показать
84. bintape 17.11.16 07:56 Сейчас в теме
(80)

Подскажите, как будет выглядеть запрос по работе с датами по основанию 4 ?
85. ildarovich 6793 17.11.16 09:28 Сейчас в теме
(84) batan,
ВЫБРАТЬ 0 КАК Х
ПОМЕСТИТЬ Х_4
ОБЪЕДИНИТЬ ВЫБРАТЬ 1
ОБЪЕДИНИТЬ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВЫБРАТЬ 3
;
ВЫБРАТЬ 4 * Инь.Х + Янь.Х КАК Х
ПОМЕСТИТЬ Х_16
ИЗ Х_4 КАК Инь, Х_4 КАК Янь
;
ВЫБРАТЬ 16 * Инь.Х + Янь.Х КАК Х
ПОМЕСТИТЬ Х_256
ИЗ Х_16 КАК Инь, Х_16 КАК Янь
;
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&Х1, ДЕНЬ, 256 * Инь.Х + Янь.Х) КАК Х
ИЗ Х_256 КАК Инь, Х_256 КАК Янь
ГДЕ ДОБАВИТЬКДАТЕ(&Х1, ДЕНЬ, 256 * Инь.Х + Янь.Х) <= &Х2
Показать
Ibrogim; bintape; +2 Ответить
86. Ibrogim 1122 25.03.19 20:27 Сейчас в теме
После прочтения только один вопрос остался у меня. Как поставить автору больше одного плюса ...
87. PerlAmutor 47 07.07.19 20:31 Сейчас в теме
ВЫБРАТЬ Младшие.Х + 65536 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр20
ИЗ Регистр16 КАК Младшие, Регистр4 КАК Старшие


А тут вместо "Регистр4" не должно быть "Регистр16"?
88. ildarovich 6793 08.07.19 11:33 Сейчас в теме
(87) Регистр4, Регистр16 - это названия таблиц, хранящих всевозможные комбинации бит в соответствующем количестве разрядов. Регистр4 - четырехбитный регистр, в нем всего 16 разных битовых комбинаций или, что тоже самое, чисел от 0 до 15., Регистр16 - 16-ти разрядный. Комбинируя эти регистры, получаем 20-ти разрядный регистр Регистр20, в котором всего 2^20 битовых комбинаций - примерно миллион.
Если скомбинировать два 16-ти разрядных регистра, то получится 32-х разрядный регистр. Там слишком большая таблица на выходе - 3,6 миллиарда строк. Для временных таблиц это запредельные величины, вряд ли нужные на практике.
89. trumanl 11 31.10.19 15:02 Сейчас в теме
(0) ildarovich, добрый день
Видимо из-за изменения форматирования текста на сайте пропал знак "<" В выражении "ИЗ Аргументы ЛЕВОЕ СОЕДИНЕНИЕ Регистр10 ПО (Х * Х У)"
90. ildarovich 6793 01.11.19 14:56 Сейчас в теме
Оставьте свое сообщение

См. также

Описание формата внутреннего представления данных 1С в контексте обмена данными 153

Статья Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных Разработка

Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на "внутреннюю кухню" платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа. Так, именно на использовании внутреннего представления был построен алгоритм "быстрого массива", который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно "на лету" программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.

1 стартмани

06.09.2019    6798    6    Dementor    27       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Вам нравятся запросы в 1С? 14

Инструменты и обработки Программист Конфигурация (md, cf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования Разработка

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

1 стартмани

03.07.2019    11303    1    m-rv    79       

1С:Ассемблер. Немного летнего веселья! 313

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Разработка

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

1 стартмани

21.06.2019    15887    49    Evil Beaver    116       

Онлайн-интенсив "Бизнес-процессы для подготовки к экзамену 1С:Специалист по платформе" 12 декабря 2019 г. Промо

На интенсиве будут рассмотрены все теоретические вопросы, связанные с устройством механизма бизнес-процессов – это необходимо для успешной сдачи экзамена 1С:Специалист по платформе. Также, в качестве практического примера, будет решена задача, аналогичная экзаменационной.

777 рублей

Простые примеры сложных отчетов на СКД 270

Статья Программист Архив с данными v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Подписи в отчете. Особенности соединения наборов: как соединить несоединяемое. Остатки на дату и обороты по месяцам в одном отчете. Курс валюты на каждую дату без группировок и соединений в запросе. Отчет с произвольными колонками и с произвольной последовательностью. "Неадекватный отчет".

1 стартмани

12.06.2019    15652    11    Hatson    22       

Безопасная работа с транзакциями во встроенном языке 190

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

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    17533    8    tormozit    44       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Баг или фича? Неожиданное поведение платформы 172

Статья Системный администратор Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Тестирование и исправление Разработка

Рассмотрим несколько случаев неожиданного поведения платформы 1С, а также что с этим можно cделать.

18.02.2019    13887    32    YPermitin    88       

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 561

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

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

1 стартмани

31.01.2019    31023    279    bonv    117       

Перенос данных УТ 10.3 => УТ 11 / КА 2 / ERP 2 (ЕРП 2) (документы, остатки и справочная информация из "1С:Управление торговлей, ред. 10.3" в УТ 11 / КА 2 / ERP 2). Обновлен до УТ 10.3.56.х, УТ 11.4.10.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

Уже более 100 компаний приобрели перенос и выполнили переход на УТ 11 / КА 2 / ERP 2 с помощью нашей разработки! Обработка перехода с УТ 10.3 на УТ 11 / КА 2 / ERP 2 позволяет перенести не только остатки на указанную дату (как типовой перенос), но и все возможные документы за выбранный период. При выходе новых релизов этих программ оперативно выпускаем обновление обработки. Предоставляем техническую поддержку. Можем сделать бесплатный тестовый перенос!

29700 руб.

HTML в новой версии 8.3.14 на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX 172

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные обработки Практика программирования Разработка

Тестируем возможности HTML в новой версии 8.3.14 платформы на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX.

1 стартмани

29.01.2019    15856    66    Synoecium    37       

Отладка сложных отчетов на СКД 140

Отчеты и формы Программист Расширение (cfe) v8 v8::СКД 1cv8.cf Россия Абонемент ($m) Практика программирования

Расширение для отладки сложных отчетов на СКД (в т.ч. для собираемых программно "на лету") и быстрого перехода к отладке таких отчетов в консоли запросов и отчетов на СКД.

1 стартмани

28.12.2018    15681    61    maxx    56       

Онлайн-курс "Технология выполнения проектов ERP-класса – процессный подход". Третий поток. Курс проходит с 21 января по 18 марта 2020 года. Промо

Курс разработан Внедренческим центром «Раздолье». Курс предназначен для подготовки аналитиков, архитекторов и руководителей проектов автоматизации процессов управления с использованием комплексных ИТ-систем (1С:ERP, 1С:УХ, 1С:КА, 1С:УТ). В основе курса лежит методика применения процессного подхода.

9000 рублей

Реализация простого http-сервиса "Просмотр карточки номенклатуры(товара) в браузере" 144

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

Практический пример реализации простого http-сервиса средствами 1С Предприятие 8.3. Обеспечивает просмотр списка товаров и просмотр данных товара в браузере.

1 стартмани

07.12.2018    14791    10    dmitry1975    31       

Использование подсистемы БСП "Заполнение объектов" 135

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

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

1 стартмани

23.11.2018    15110    8    ids79    22       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Работа с публикациями "Инфостарт" 14

Инструменты и обработки Программист Архив с данными v8 УУ Абонемент ($m) Практика программирования О сообществе WEB

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    10701    10    RocKeR_13    16       

HTTP Сервисы: Путь к своему сервису. Часть 3 138

Инструменты и обработки Системный администратор Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Практика программирования

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.

1 стартмани

27.08.2018    18386    32    dsdred    13       

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

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

29700 руб.

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции 65

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    17327    23    informa1555    26       

Работа с данными выбора 41

Инструменты и обработки Программист Архив с данными v8 Россия Абонемент ($m) Практика программирования Работа с интерфейсом

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

1 стартмани

17.07.2018    24191    14    kalyaka    15       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

HTTP Сервисы: Путь к своему сервису. Часть 1 287

Статья Системный администратор Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Практика программирования WEB

Уже много было написано про http-сервисы, но то и дело всплывают «Новые» статьи по обмену между базами V8 по COM, что «Немножко» удивляет. Решил внести свои 5 копеек, поработаем с http-сервисом.

1 стартмани

15.07.2018    42854    17    dsdred    22       

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") 105

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    20966    86    m-rv    57       

Перенос данных БП 2.0 => УТ 11 / КА 2 / ERP 2 (перенос остатков, документов и справочников из "1С:Бухгалтерия предприятия 8", ред. 2.0 в "1С:Управление торговлей 8", ред.11 / КА 2 / ERP 2). Обновлено до УТ 11.4.10.х, КА 2.4.10.х, ERP 2.4.10.х! Промо

Перенос позволяет загрузить в УТ 11 / КА 2 / ERP 2 документы за выбранный период, справочную информацию и остатки по счетам бух. учета. Переносятся остатки денежных средств, взаиморасчетов, остатки товаров и материалов на складах. Переносятся девятнадцать основных видов документов за выбранный период и вся нормативно-справочная информация. Есть фильтр по организации. Если нужно переносить что-то дополнительно, то обычно бесплатно дорабатываю правила (перед покупкой согласуйте необходимые доработки).

29700 руб.

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному 242

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования БСП (Библиотека стандартных подсистем)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    29459    28    dsdred    34       

Очный семинар по регулярному менеджменту Александра Фридмана "Вы или Хаос", 12 декабря 2019 г. , Санкт-Петербург Промо

Семинар по регулярному менеджменту от Александра Фридмана для собственников, первых лиц и топов. Технология управленческого планирования, комплексного управления временем и другими ресурсами, выполнением поручений, делами, информацией, контактами (встречи-звонки-почта).

от 11000 до 29000 рублей

Как выполнить отчет на СКД через COM и получить данные отчета? 86

Статья Программист Архив с данными v8 УПП1 Россия Windows Абонемент ($m) Практика программирования

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    19070    10    wowik    3       

Работа со схемой запроса 176

Статья Программист Конфигурация (md, cf) v8 v8::Запросы Абонемент ($m) Инструментарий разработчика Практика программирования

Стандартом взаимодействия с реляционной базой данных стал язык SQL. Приемником SQL в 1С является язык запросов. Язык запросов, также как и SQL, является структурированным. Составляющие структуры запроса отвечают на разные вопросы о том, какие данные требуется получить и какие манипуляции с множествами данных необходимо произвести при получении. В простых случаях текст запроса можно написать вручную, однако в сложных случаях, а также при программном формировании, - лучше воспользоваться объектной моделью запроса и использовать объект "Схема запроса". В статье дается описание объектной модели и особенностей работы с ней, а также приводится решение, упрощающее взаимодействие с объектом "Схема запроса".

1 стартмани

24.04.2018    30290    75    kalyaka    34       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

Асинхронная запись и чтение файла без использования модальных методов и временных файлов 134

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

10.04.2018    20036    18    Alxby    23       

Минимализмы 3 359

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    38769    ildarovich    44       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.10.х и УТ 11.4.10.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

Заполняем по шаблону (по умолчанию) 69

Инструменты и обработки Программист Архив с данными v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

08.02.2018    18849    20    mvxyz    17       

Бесплатная проверка контрагентов в ФНС (общий модуль с алгоритмом). На примере выводим статус в список справочника контрагентов 124

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

Если вам интересно проверить контрагенте в ФНС, вам поможет данная публикация. Весь алгоритм работы строится на основе данных, полученных с сервиса http://npchk.nalog.ru совершенно бесплатно.

1 стартмани

01.02.2018    26538    62    rpgshnik    46