Выразить строку как число и строку как дату в запросе

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

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

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

1. Преобразование таблицы строк в таблицу целых чисел. 

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


    "ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
    |ПОМЕСТИТЬ Дано
    |ИЗ &Дано КАК Дано
    |;
    |ВЫБРАТЬ 0 С,    1 КАК П
    |ПОМЕСТИТЬ Р16
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  1, 10
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  2, 100
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  3, 1000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  4, 10000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  5, 100000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  6, 1000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  7, 10000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  8, 100000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  9, 1000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 10, 10000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 11, 100000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 12, 1000000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 13, 10000000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 14, 100000000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 15, 1000000000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 16, 10000000000000000
    |;
    |ВЫБРАТЬ СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК Ответ
    |ИЗ Дано, Р16 КАК А, Р16 КАК Б
    |ГДЕ    Б.С < 10 И ПОДСТРОКА(Дано.Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1)
    |СГРУППИРОВАТЬ ПО Дано.НомерСтроки"

В пакете всего три запроса.

Первый запрос пакета выполняет загрузку таблицы значений, содержащей исходные строковые представления чисел, и помещает ее в таблицу «Дано» с колонками «НомерСтроки» и "Строка". Второй запрос пакета формирует искусственную таблицу, содержащую номера позиций и их вес в десятичной позиционной системе счисления. Счет позиций идет справа налево.

Вся основная работа по преобразованию строки в число выполняется в последнем, третьем запросе пакета. В этом запросе таблица «Дано» умножается на таблицу весов позиций Р16 (КАК А) и еще раз на таблицу Р16 (КАК Б). В последней используется только первые десять строк первой колонки  для прохода по номерам всех цифр строки «0123456789». Условие «ГДЕ» отбирает записи, в которых цифры в исходной строке и строке «0123456789» совпадают в позиции, определяемой для исходной строки строкой таблицы весов А и для строки цифр – строкой таблицы номеров цифр Б. Это дает возможность определить искомое число как сумму произведений веса позиции на номер цифры. При этом группировка идет  по строкам таблицы «Дано».

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

Работа данного запроса иллюстрируется схемой на фиг.1, где показано преобразование в число строки «4957379257».

Схема работы последнего запроса пакета 

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

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

2. Преобразование таблицы строк в таблицу дробных чисел.

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

    "ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
    |ПОМЕСТИТЬ Дано
    |ИЗ &Дано КАК Дано
    |;
    |ВЫБРАТЬ 0 С,    1 КАК П
    |ПОМЕСТИТЬ Р16
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  1, 10
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  2, 100
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  3, 1000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  4, 10000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  5, 100000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  6, 1000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  7, 10000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  8, 100000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ  9, 1000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 10, 10000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 11, 100000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 12, 1000000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 13, 10000000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 14, 100000000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 15, 1000000000000000
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 16, 10000000000000000
    |;
    |ВЫБРАТЬ СУММА(А.П * Б.С * ВЫБОР КОГДА ПОДСТРОКА(Строка, 1, 17 - А.С) ПОДОБНО ""%.%"" ТОГДА 10 ИНАЧЕ 1 КОНЕЦ)
    |/ МИНИМУМ(ВЫБОР КОГДА НЕ ПОДСТРОКА(Строка, 1, 17 - А.С) ПОДОБНО ""%.%"" ТОГДА А.П ИНАЧЕ 100000000000000000 КОНЕЦ) КАК Ответ
    |ИЗ Дано КАК Дано, Р16 КАК А, Р16 КАК Б
    |ГДЕ    Б.С < 10 И ПОДСТРОКА(Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1)
    |СГРУППИРОВАТЬ ПО Дано.НомерСтроки"


Данный пакетный запрос отличается от предыдущего особой обработкой позиций, находящихся справа от первой десятичной точки. Такие позиции выделяются с использованием оператора ПОДОБНО. Проверяется подобие подстроки, заканчивающейся в данной позиции и шаблона "%.%". Для позиций, находящихся правее точки, применяется дополнительный множитель 10. Также меняется определение нормализующего делителя, который находится как минимум веса позиций, не находящихся правее первой точки.

3. Преобразование таблицы строк в таблицу целых чисел с "выращиванием" таблицы весов.

В данном варианте первого запроса вместо громоздкого текста, который непосредственно определяет строки таблицы весов, используется прием выращивания (порождения) этой таблицы.


    "ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
    |ПОМЕСТИТЬ Дано
    |ИЗ &Дано КАК Дано
    |;
    |ВЫБРАТЬ 0 КАК С, 1 КАК П
    |ПОМЕСТИТЬ Р1
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 1, 10
    |;
    |ВЫБРАТЬ    А.С + Б.С КАК С, МАКСИМУМ(А.П * Б.П) КАК П
    |ПОМЕСТИТЬ Р2
    |ИЗ Р1 КАК А, Р1 КАК Б
    |СГРУППИРОВАТЬ ПО А.С + Б.С
    |;
    |ВЫБРАТЬ    А.С + Б.С КАК С, МАКСИМУМ(А.П * Б.П) КАК П
    |ПОМЕСТИТЬ Р4
    |ИЗ Р2 КАК А, Р2 КАК Б
    |СГРУППИРОВАТЬ ПО А.С + Б.С
    |;
    |ВЫБРАТЬ    А.С + Б.С КАК С, МАКСИМУМ(А.П * Б.П) КАК П
    |ПОМЕСТИТЬ Р8
    |ИЗ Р4 КАК А, Р4 КАК Б
    |СГРУППИРОВАТЬ ПО А.С + Б.С
    |;
    |ВЫБРАТЬ    А.С + Б.С КАК С, МАКСИМУМ(А.П * Б.П) КАК П
    |ПОМЕСТИТЬ Р16
    |ИЗ Р8 КАК А, Р8 КАК Б
    |СГРУППИРОВАТЬ ПО А.С + Б.С
    |;
    |ВЫБРАТЬ СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК Ответ
    |ИЗ Дано, Р16 КАК А, Р16 КАК Б
    |ГДЕ    Б.С < 10 И ПОДСТРОКА(Дано.Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1)
    |СГРУППИРОВАТЬ ПО Дано.НомерСтроки"


В этом пакетном запросе семь подзапросов.

Первый запрос, как всегда, осуществляет ввод данных.

Во втором запросе пакета определяется таблица Р1 для позиций 0 и 1 с весом 1 и 10. Затем в третьем запросе перемножением Р1 на себя получается таблица Р2, содержащая позиции 0, 1 и 2 с весом 1, 10 и 100. В четвертом запросе перемножением Р2 на себя получается  таблица Р4. Схема этого умножения показана на фиг.2. В пятом запросе пакета Р4 умножается на себя и получается Р8, в шестом Р8 умножается на себя и получается Р16. При перемножении используется группировка по сумме номера позиции с агрегацией в виде максимума произведения весов позиций. Поскольку число позиций каждый раз увеличивается вдвое,  для выращивания итоговой таблицы из 17 строк понадобилось всего четыре запроса. Похожая «математика» используется в статье "Транзитивное замыкание запросом" [//infostart.ru/public/158512/]. Все получаемые таблицы изображены на фиг.3.

Схема умножения таблиц при выращивании таблицы весов

Рост таблиц весов

4. Преобразование таблицы строк в таблицу дат. 

Преобразование таблицы строк вида «ГГГГММДД» в таблицу дат можно выполнить следующим пакетным запросом.

    "ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
    |ПОМЕСТИТЬ Дано
    |ИЗ &Дано КАК Дано
    |;
    |ВЫБРАТЬ 0 Х, 0 Д, 0 М, 1000 Г
    |ПОМЕСТИТЬ Формат
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 1, 0, 0, 100
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 2, 0, 0, 10
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 3, 0, 0, 1
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 4, 0, 10, 0
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 5, 0, 1, 0
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 6, 10, 0, 0
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 7, 1, 0, 0
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 8, 0, 0, 0
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 9, 0, 0, 0
    |;
    |ВЫБРАТЬ ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1,1,1,0,0,0),ДЕНЬ,СУММА(А.Д*Б.Х)-1),МЕСЯЦ,СУММА(А.М*Б.Х)-1),ГОД,СУММА(А.Г*Б.Х)-1) КАК Ответ
    |ИЗ Дано, Формат КАК А, Формат КАК Б
    |ГДЕ    А.Х < 8 И Б.Х < 10 И ПОДСТРОКА(Дано.Строка, А.Х + 1, 1) = ПОДСТРОКА(""0123456789"", Б.Х + 1, 1)
    |СГРУППИРОВАТЬ ПО Дано.НомерСтроки"

 

 

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

Во втором запросе определяется временная таблица "Формат" с четырьмя колонками. В колонке "Х" записывается номер позиции в строке, начиная с нуля слева направо, в колонке "Д" - вес позиции при подсчете числа дней, "М" - месяцев, "Г" - лет. В последнем запросе вычисляется сумма произведений каждой колонки на номер цифры, находящейся в соответствующей позиции. Далее эти суммы произведений как число лет, месяцев и дней добавляются функцией добавить к дате сначала к "нулевому дню" '00010101', потом к результату первого добавления, а затем к результату второго. Это и дает в итоге искомую дату.

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

 

5. Преобразование таблицы строк в таблицу дат с "выращиванием" таблицы позиций.

Текст данного запроса выглядит следующим образом. 


    "ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка
    |ПОМЕСТИТЬ Дано
    |ИЗ &Дано КАК Дано
    |;
    |ВЫБРАТЬ    0 КАК Х
    |ПОМЕСТИТЬ Р1
    |ОБЪЕДИНИТЬ ВЫБРАТЬ 1
    |;
    |ВЫБРАТЬ    А.Х + 2 * Б.Х КАК Х
    |ПОМЕСТИТЬ Р2
    |ИЗ Р1 КАК А, Р1 КАК Б
    |;
    |ВЫБРАТЬ    А.Х + 4 * Б.Х КАК Х
    |ПОМЕСТИТЬ Р4
    |ИЗ Р2 КАК А, Р2 КАК Б
    |;
    |ВЫБРАТЬ ДОБАВИТЬКДАТЕ(
    |           ДОБАВИТЬКДАТЕ(
    |               ДОБАВИТЬКДАТЕ(
    |                   ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |                   , ДЕНЬ
    |                   , СУММА(ВЫБОР А.Х КОГДА 7 ТОГДА 1 КОГДА 6 ТОГДА 10 КОНЕЦ * Б.Х) - 1
    |               )
    |               , МЕСЯЦ
    |               , СУММА(ВЫБОР А.Х КОГДА 5 ТОГДА 1 КОГДА 4 ТОГДА 10 КОНЕЦ * Б.Х) - 1
    |           )
    |           , ГОД
    |           , СУММА(ВЫБОР А.Х КОГДА 3 ТОГДА 1 КОГДА 2 ТОГДА 10 КОГДА 1 ТОГДА 100 КОГДА 0 ТОГДА 1000 КОНЕЦ * Б.Х) - 1
    |       ) КАК Ответ
    |ИЗ Дано, Р4 КАК А, Р4 КАК Б
    |ГДЕ    А.Х < 8 И Б.Х < 10 И ПОДСТРОКА(Дано.Строка, А.Х + 1, 1) = ПОДСТРОКА(""0123456789"", Б.Х + 1, 1)
    |СГРУППИРОВАТЬ ПО Дано.НомерСтроки"


В отличие от предыдущих запросов, здесь не используется определение веса позиций заранее. Веса позиций определяются в ходе суммирования. Поэтому заранее достаточно вырастить таблицу позиций цифр Р16. Это делается также как в статье "Порождающий запрос" [//infostart.ru/public/90367/] из таблицы Р2, содержащей 0 и 1, задаваемой вторым запросом пакета. Сначала Р2 умножается на себя и без группировок получается Р4 из четырех строк 0, 1, 2 и 3 (третий запрос), затем Р4 умножается на себя и получается Р16 из 16-ти строк 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 и 15 (четвертый запрос пакета). Умножение матрицы Р4 на себя в четвертом запросе показано в виде схемы фиг.4.

Схема умножения таблиц при выращивании таблицы позиций

Вся основная работа выполняется в пятом запросе. Год в виде числа, месяц в виде числа и день в виде числа получаются как сумма произведений номера цифры на вес позиции. Вес позиций определяется для каждого элемента даты отдельно при помощи оператора «ВЫБОР». Определенные год, месяц и день подставляются в функции «ДОБАВИТЬКДАТЕ», что и дает в итоге искомую дату.

6. Преобразование таблицы строк в таблицу дат со временем по формату, задаваемом параметром запроса. 


При анализе запроса 4 можно увидеть, что формат даты задается таблицей весов позиций года, месяца и дня «Формат». Эту таблицу можно дополнить колонками для часов, минут и секунд. При различном заполнении этой таблицы можно анализировать даты, представленные в самом различном формате. Примеры заполнения таблицы "Формат" для различных форматов даты приведены на фиг.5.

Содержание таблицы  

В связи с эти возникает идея: А если вообще не задавать таблицу "Формат" заранее, а построить ее внутри запроса путем анализа текстового параметра "&Формат", передаваемого в запрос и определяющего формат даты. Тогда запрос станет чрезвычайно гибким и универсальным. На этой идее построен шестой запрос.

Текст данного запроса, отличающейся универсальностью за счет управления преобразованием с помощью строкового параметра "&Формат", можно посмотреть в прилагаемой к статье обработке. Дополнительным бонусом, скачавшим обработку, будут примеры очень уместного использования (как кажется) функции "НовыйЗапрос" [//infostart.ru/public/163853/] в модуле обработки. На скриншотах, прилагаемых к статье,  приведены примеры преобразований при задании различных форматов даты. В определении формата использованы русские букы "Г", "М", "Д", "Ч", "Н" и "С". Важно, что позиции минут обозначены не маленькой русской "м", а русской "н", поскольку в запросе нет возможности различить регистр символов. Для заполнения незначащих позиций можно использовать любые другие символы. Примеры задания формата: "ГГГГММДДЧЧННСС", "ДД_ММ_ГГГГ_ЧЧ:НН:СС", "ССССС - тоже работает". 

Заключение.

 

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

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

Наименование Файл Версия Размер
Обработка для тестирования запросов

.erf 11,28Kb
93
.erf 11,28Kb 93 Скачать

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

Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Ёпрст 1046 24.01.13 10:47 Сейчас в теме
До чего только 1с-ина не доводит, всего лишь не реализовав простейший cast и convert в текстах запроса.
Сплошное извращение.
sergathome; vladimirmatancev; oninfostart; TankO_o; KazanKokos; websamson; NN2P; Восьмой; Lem0n; Arsen1986; корум; igo1; madonov; Varsaavius; Nelli_A86; Spacer; PhoenixAOD; EMelihoff; maljaev; sstas007; Serg3141; evillit; Sanario; zqzq; baton_pk; CratosX; AllexSoft; JohnyDeath; logos; yuraos; OVladius; sh4d0w; Hany; _also; andrewks; +35 Ответить
3. Поручик 4471 24.01.13 11:51 Сейчас в теме
(1) Может вам ещё replace и insert с пивом подать?
crismar24; TankO_o; +2 1 Ответить
5. Ёпрст 1046 24.01.13 12:44 Сейчас в теме
(3) а что в этом плохого ?
Всё жлу, мот кто сподобится хотя бы под скуль написать вк для прямой записи в таблички с метапарсером и типизацией, как в клюшках. (вилдфайре не предлагать)
28. yuraos 977 28.03.13 08:44 Сейчас в теме
(1) Ёпрст,
много что не реализовали...
например хотя бы простейшие строковые функции
LTRIM() и RTRIM()
---
не будем грузить разработчиков платформы
функцией ALLTRIM()
которой почему-то в T-SQL у Микрософта нет.
29. andrewks 1304 28.03.13 08:52 Сейчас в теме
(28) yuraos, я думаю, разработчики платформы и так не слишком загрузились ))
AllexSoft; yuraos; +2 Ответить
30. yuraos 977 28.03.13 18:57 Сейчас в теме
(29) andrewks,
ну думаю они даже очень загрузились в последнее время ...
...
только не тем, что нас простых смертых
(и довольно грешных) интересует.

Все в каких-то ОБЛАКАХ ВИТАЮТЬ !!!
:)
Rabot; tindir; +2 Ответить
47. pavlinuh 29.01.15 16:36 Сейчас в теме
(1)(1)(39) В учебниках "Алгебра и начала анализа" конца 80-х - начала 90-х для 10/11 классов этот раздел назывался "комбинаторика". В современных учебных пособиях, в зависимости от издания/автора, он называется "введение в теорию вероятности", "теория вероятности", "логические задачи" и т.п.
Что там в институтах - не в курсе.
2. Поручик 4471 24.01.13 11:46 Сейчас в теме
(0) Почему-то мне нравятся твои работы. Что-то уже применял в рабочих проектах.
4. wunderland 201 24.01.13 12:27 Сейчас в теме
да, некоторых функций SQL иногда не хватает, и за такие вот статьи большой (+)
6. Созинов 25.01.13 11:56 Сейчас в теме
Может вопрос глупый, но все же. Не ткнете носом, что необходимо освежить в памяти из области математики, чтобы лучше понимать такие запросы?
7. andrewks 1304 25.01.13 13:34 Сейчас в теме
(6) EfiopReal, из математики - почти ничего. ну, разве только матрицы и операции над ними
8. Hany 25.01.13 13:39 Сейчас в теме
(6) EfiopReal, дискретная математика, что-то из мат. анализа. Диф. ур. не надо.
Созинов; +1 Ответить
9. andrewks 1304 25.01.13 13:42 Сейчас в теме
(8) Hany, не расскажете поподробнее про мат.анализ?
11. ildarovich 7204 25.01.13 16:04 Сейчас в теме
(6) Основой описанных преобразований является небанальная арифметика (то есть раздел математики, изучающий числа, их отношения и свойства). В школе такую «арифметику» проходят на информатике. Тема называется «системы счисления». В Вузе предмет, включающий эту тему, может называться «Арифметические и логические основы вычислительной техники».
Также хорошо бы уметь работать с матрицами и векторами. Тогда будут более понятны суммы произведений. В школьной программе матриц вроде бы нет (возможно, их изучают в математических классах). В Вузе матрицы встречаются во многих курсах, но раньше всего, наверное, в курсе «Линейная алгебра».
Не пропустите комбинаторику. Научитесь считать варианты. Не знаю, насколько часто этот раздел изучается отдельно, но он наверняка есть в «теории вероятностей», а это самый «практичный» (на мой взгляд) раздел математики. В рамках теории вероятностей можно познакомиться с необходимой частью теории множеств.
От теории множеств недалеко до реляционной алгебры – это основа табличных (реляционных) баз данных. Хотя, возможно, сама теория на каждый день не так уж и нужна.
Ну и еще одна смежная дисциплина – «теория графов». Это очень популярная абстрактная модель, на основе которой можно формулировать и решать многие практические задачи.
user622032_iif1992; Dain; NittenRenegade; AzagTot; mairon; Zabava_; user597574_avarius007; andreyparmuzin; xsazar; Dozkni; adva; CratosX; SeiOkami; SirYozha; Созинов; +15 Ответить
19. Созинов 28.01.13 18:22 Сейчас в теме
(11) Спасибо большое, с первой половиной более менее могу разобраться, а вот вторую придется подтянуть.
12. bogdan_sukonnov 57 28.01.13 10:49 Сейчас в теме
в тексте описания примера упоминается строка "4957379257", а в примере разбирается 4957379252
13. ildarovich 7204 28.01.13 10:57 Сейчас в теме
(12) Спасибо! Вы очень внимательны. Поправлю поясняющий рисунок, когда буду обновлять статью.
14. bogdan_sukonnov 57 28.01.13 14:11 Сейчас в теме
тогда заодно поправьте подписи к колонкам в поясняющей таблице - насколько я понял, перепутаны местами А.П и А.С. Это, конечно, мелочи - статья замечательная, спасибо! Никак не могу понять как это работает, а самое главное, научиться самому писать такие запросы :(
Гриффин; ildarovich; +2 Ответить
15. bogdan_sukonnov 57 28.01.13 14:19 Сейчас в теме
интересно, что "1а2а3" преобразует к 10203 - как-то не очень хорошо
16. ildarovich 7204 28.01.13 14:32 Сейчас в теме
(15) Интерпретация ошибочных данных (здесь в запись числа вкрался не цифровой символ) требует до-определения правил преобразования. Их нетрудно внести в запрос, сделав это по примеру запроса №2. Реализованная интерпретация как кажется, имеет право на жизнь. Например, если столбик чисел Вы получили сканированием текста. Не распознанные цифры заменяются "0". В этом есть своя логика. Можно вообще отказываться от преобразования, обнаружив не цифровой символ. Но это уже детали.
17. bogdan_sukonnov 57 28.01.13 14:45 Сейчас в теме
наконец, осилил первый пример! Не стоит ли в целях облегчения понимания сделать отдельную таблицу "Б" с цифрами от 1 до 9? Плюс это поможет тем, кто будет преобразовывать строки длиной <10 (а я пытался переписать запрос на строку 3 символа - без отдельной таблицы "Б" никак). К тому же это, наверное, сократит количество комбинаций "А" и "Б", особенно для длинных строк "А". Ну и совсем было бы по 1С-овски дать осмысленные названия этим таблицам. Я понимаю, что программисты должны знать математику и т.д. Но почему бы не сделать людям понятнее?
18. ildarovich 7204 28.01.13 15:21 Сейчас в теме
(17) Отдельную таблицу заводить не хочется из эстетических соображений. Текст запроса в этом случае неминуемо станет длиннее. Предупредить о том, что таблица позиций и их весов должна иметь минимум ДЕСЯТЬ записей (таблица Б должна быть позволять пробегать и цифру "0"! Это важно), наверное, нужно . Проигрыш по времени из-за использования одной таблицы заключается в проверке ГДЕ, выполняемой ПЕРЕД соединением. Поэтому он НЕЗНАЧИТЕЛЕН. Над осмысленными именами таблиц я подумаю. Они нужны, согласен. С другой стороны, мне в другой публикации в качестве идеального решения приводили текст запроса для Postgre. Там имена таблиц и полей все состояли из одной латинской буквы и выглядело это действительно кратко и ясно. Так что тут одно из двух - либо математически коротко, чтобы запрос можно охватить одним взглядом, либо содержательные названия полей и таблиц.
20. akomar 441 29.01.13 18:07 Сейчас в теме
Но согласитесь запросы красиво смотрятся, пирамиды Хеопса)
21. Crush 30.01.13 11:13 Сейчас в теме
Замечательная статья! Спасибо большое!
Распечатал и добавил в избранное:)
22. It-developer 20 30.01.13 16:41 Сейчас в теме
Жесть. Сложно представить что это можно использовать. Типа сделать процедуру, а в нее передавать строковые числа? Не знаю, это может быть актуально для запроса, но передавать таблицу, а потом ее откуда-то получать не очень удобно
23. ildarovich 7204 30.01.13 18:18 Сейчас в теме
(22) Конечно,
это может быть актуально для запроса
. Вне запроса никаких проблем преобразования, конечно же, нет. Вас, видимо, смутил первый запрос в пакете. Он нужен ИСКЛЮЧИТЕЛЬНО ДЛЯ ТЕСТИРОВАНИЯ этих методов. Считается, что в реальных задачах строки, которые нужно преобразовать в числа или даты, берутся НЕПОСРЕДСТВЕННО из информационной базы. Возможно, нужно было подчеркнуть этот момент в самой статье.
24. ADirks 184 01.02.13 10:37 Сейчас в теме
Возможно, нужно было подчеркнуть этот момент в самой статье.

Если человек хотя бы примерно понимает, как это работает, то наверное поймёт и как использовать :)
25. ilov_boris 161 01.02.13 15:40 Сейчас в теме
Полезные сведения. Спасибо
26. alxbzm 06.02.13 18:23 Сейчас в теме
На Postgre 9 не работает к сожалению. Запрос падает с ошибкой function substr(...) does not exist. Именно на вычислении выражения ПОДТСТРОКА(...). Жаль, но сама идея запроса отличная.
31. a-novoselov 1122 04.06.13 18:27 Сейчас в теме
(26) Возможно у вас Postgre под 1С не патченый? Есть специальные сборки от EterSoft, в которых таких ошибок не возникает. Либо официальный патч от 1С (на официальном сайте выложен), но ни кто не дает гарантии что вы все правильно пропатчите... И патч, обычно, не для самых последних версий Postgre.
27. Andry.Boris 58 22.02.13 02:39 Сейчас в теме
32. Al-X 20.06.13 13:23 Сейчас в теме
Спасибо за статью. Тоже недавно надо было в запросе преобразовывать строки в числа. Теперь буду знать, КАК ПРАВИЛЬНО ДЕЛАТЬ.
33. Synoecium 712 28.08.13 11:11 Сейчас в теме
Качественная подача материала, спасибо.
34. Kesr 11.09.13 11:40 Сейчас в теме
Отличная идея. У меня как раз возникла задача, где придется реализовать 1 вариант.
36. ronhard 20.01.14 16:55 Сейчас в теме
Есть все-таки на свете умные люди.
Это, конечно, мелочи - статья замечательная, спасибо! Никак не могу понять как это работает, а самое главное, научиться самому писать такие запросы :(

Поддерживаю на 100%
37. yura1960 13.06.14 19:12 Сейчас в теме
Хм... С этой стороны я не догадался рассматривать эту проблему. Хотя у меня функции короче и проще, но кое в чем они проигрывают.
Автору спасибо. Попробую поизвращаться. Если реально поможет, то будет огромный СЕНКС!!!
38. Lama12-1 8 09.07.14 13:55 Сейчас в теме
А по какому национальному стандарту происходит преобразование?
39. ildarovich 7204 09.07.14 17:30 Сейчас в теме
(38) Lama12-1, если речь о "национальном стандарте", то, видимо, имеется ввиду преобразование строка -> дата.
Это преобразование задается ФОРМАТНОЙ СТРОКОЙ, которую в примере 6 можно задавать.
В примерах 4 и 5 форматная строка фиксирована. Она имеет вид ГГГГММДД. Например, сегодняшняя дата в этом формате "20140709".
Если вы чуть-чуть разбираетесь в запросах, то сможете составить преобразование под любой формат даты, ну или под тот национальный стандарт, который нужен.
40. chmv 07.08.14 08:37 Сейчас в теме
На самом деле это большая проблема.
До сих пор не могу написать
Выбрать Сотрудник.Наименование+Сотрдуник.ДатаРождения как СотрудникСДатойРождения
Подскажите как это сделать?
41. ildarovich 7204 07.08.14 09:12 Сейчас в теме
(40) chmv, то, что вы хотите, требует преобразования из даты в строку, а в данной статье рассматривается обратное преобразование - из строки в дату. Так, что приемы, описанные в данной статье, напрямую вам не помогут.
42. luic 17.08.14 09:42 Сейчас в теме
Спасибо, очень помогло))
43. evillit 22.10.14 19:56 Сейчас в теме
Полезная статья. В мемориз.
44. chmv 01.12.14 10:40 Сейчас в теме
Спасибо. А попроще нельзя?
45. ildarovich 7204 01.12.14 13:47 Сейчас в теме
(44) chmv, попроще пока не получилось
46. SemenovaMarinaV 27.01.15 14:00 Сейчас в теме
жаль что 1с это не предусмотрела, а то приходится извращаться
48. adva 44 08.06.15 08:58 Сейчас в теме
Иногда для практических целей нужно наоборот получить в запросе вместо числа строку. Имеется ли такое же красивое решение?
49. ildarovich 7204 08.06.15 09:48 Сейчас в теме
50. adva 44 08.06.15 12:38 Сейчас в теме
(49) спасибо, не попадалось ранее, а еще может быть есть статья о том, как пронумеровать в запросе строки (иногда нет номеров строк, а очень хочется, чтобы дальше в запросе использовать, не выгружая в ТЗ)?
51. ildarovich 7204 08.06.15 13:34 Сейчас в теме
(50) adva, это слишком простая задача для статьи. Вот в задаче 14 из статьи Минимализмы для нумерации таблицы дат используется подзапрос
ВЫБРАТЬ 
    Даты.Дата, 
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДатыДо.Дата) КАК Номер 
ПОМЕСТИТЬ НомераДат 
ИЗ 
    ВТДаты КАК Даты 
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДаты КАК ДатыДо 
        ПО (ДатыДо.Дата < = Даты.Дата) 
СГРУППИРОВАТЬ ПО 
    Даты.Дата 
Показать

Аналогично может быть пронумерована любая другая таблица, в которой есть поле, определяющее порядок строк для нумерации. Если такого поля (набора полей) нет, то задача в запросе не может быть решена. Это принципиальный момент.
Соединение таблицы с собой довольно затратная по времени операция. В некоторых случаях нумерацию можно ускорить за счет того, что нумерация - это тот же нарастающий итог и его можно ускорить как показано в статье Баттерфляй - метод быстрого расчета нарастающего итога в запросе. Но это имеет смысл, только если строк больше 2000 (для SQL).
52. YuriFm 07.07.17 23:22 Сейчас в теме
статья однозначно крутая. использовал запрос для преобразования таблицу строк в таблицу целых чисел, с небольшим изменением. в числе были пробелы, нужно было от них избавиться. однозначно +
53. German_Tagil 26 13.03.20 14:22 Сейчас в теме
54. zabaluev 374 25.09.20 14:20 Сейчас в теме
Вопрос к авторитетам в 1С, почему не поднимаются вопросы о развитии языка запросов в 1С. Ничего нового за много лет. Например очень не хватает функции преобразования типов. Нужна функция, аналогичная функции CAST (1.1 AS VARCHAR(10))
, LTRIM(), RTRIM()
Данная функция описана в стандарте ISO SQL и странно, что в запросах 1С нет аналога.
56. ildarovich 7204 29.09.20 13:58 Сейчас в теме
(54) Интересный вопрос. Уже задавал его разработчикам.

Позавчера задал еще раз. Главному по запросам. Ответ понятный и одинаковый. Нужна обоснованная потребность. То есть описанные "сценарии" применения нужной именно вам фичи. Если этот сценарий будет частотным, то фича будет реализована. Лично я не смог с ходу назвать более одного сценария применения данной фичи. Конечно, можно потратить время и постараться еще, но если в типовых такая потребность практически не встречается, то вероятность мала.

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

В партнерской конференции данная потребность (преобразование типов) мне не встречалась.

Просто так реализовывать весь стандарт SQL никто не будет. Затраты не отобьются. Разработка стоит времени (и денег), а изменения в языке запросов примерно в 10 раз более трудоемки, чем добавления в сам язык, так как требуется переработать стык с каждой поддерживаемой СУБД, файловый вариант, несколько конструкторов, СКД и прочее.
Fox-trot; +1 Ответить
55. slasher777 28.09.20 07:45 Сейчас в теме
Полезная статья, спасибо большое сохранил
Оставьте свое сообщение

См. также

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

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

25.03.2019    38388    tormozit    54    

Динамическая расшифровка СКД (на примере отчета)

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

Предлагаю Вашему неподкупному вниманию вариант более-менее унифицированной реализации динамически формирующейся расшифровки СКД на примере простейшего отчета для конфигурации УТ 11.

1 стартмани

08.12.2020    534    mr_sav    2    

СКД: все, что вы хотели знать о подмене схемы компоновки данных в отчетах и обработках

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

Довольно часто на различных тематических форумах задается вопрос, можно ли использовать в отчете/обработке несколько схем компоновки данных, подменяя одну другой по мере надобности? При этом желательно, чтобы и пользовательские настройки при смене схемы менялись соответственно.

1 стартмани

07.12.2020    2058    user1502278    16    

Cбор и анализ ошибок при помощи Sentry, или как упростить жизнь себе и пользователям

Практика программирования Интеграция v8 Абонемент ($m)

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

1 стартмани

09.10.2020    3943    hexhoc    12    

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

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

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

2 стартмани

08.05.2018    27606    wowik    3    

Программная корректировка при выводе отчета СКД

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

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

1 стартмани

08.10.2020    5271    dabu-dabu    10    

Загрузка, скачивание, удаление файлов с помощью НачатьПомещениеФайлаНаСервер() и НачатьПолучениеФайлаССервера()

Практика программирования v8 1cv8.cf Абонемент ($m)

В платформе 8.3.15 появились новые методы НачатьПомещениеФайлаНаСервер() и НачатьПолучениеФайлаССервера(). В данной статье рассмотрено готовое решение проверенное и прекрасно работающее на тонком и веб-клиенте.

1 стартмани

25.07.2020    5958    Flashill    10    

Параллельные вычисления расчета факториала числа N

Практика программирования v8 1cv8.cf Абонемент ($m)

Распараллеливание алгоритма с помощью фоновых заданий (асинхронные вычисления)

1 стартмани

29.06.2020    3269    Rustig    17    

Как нарисовать граф на 1С Промо

Практика программирования v8 Абонемент ($m)

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

1 стартмани

09.08.2013    71424    ildarovich    117    

Универсальная печатная форма Приказа/Договора с возможностью настройки макета в пользовательском режиме

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

В данной статье я опишу реализацию универсальной (в кавычках) печати Приказа (Договора или чего пожелаете) с возможностью настройки выводимого текста с параметрами из пользовательского режима

1 стартмани

24.06.2020    1704    BuriyLesha    0    

Методика обновления формы объекта данных при изменении объекта

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

В формах объектов данных часто встречаются элементы, косвенно связанные с объектом. Логику обновления этих элементов при изменении объекта обычно вызывают из обработчиков ПриСозданнииНаСервере и ПриОткрытии, забывая про наличие других способов изменения объекта. В статье предложена методика для обычных и управляемых форм, учитывающая все способы.

1 стартмани

09.03.2020    11426    tormozit    14    

Отправка уведомлений с помощью командной строки, Оповещения с сервера на клиент с помощью командной строки

Практика программирования v8 1cv8.cf Россия Абонемент ($m)

Отправка уведомлений с помощью команды командной строки msg. Оповестить пользователей из серверного модуля или регламентного задания, с помощью командной строки msg.

1 стартмани

05.03.2020    6509    user5300    3    

Выразить число как строку и дату как строку в запросе Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

22.02.2015    123267    ildarovich    68    

Вывод сообщений в HTML поле средствами 1С

Практика программирования v8 v8::УФ Абонемент ($m)

Пример использования вывода большого количества сообщений в поле HTML. С возможностью открывать ссылочные объекты и создавать новые объекты передавая параметры прямо из HTML поля. Протестировано на релизах 8.3.12 и 8.3.15+

2 стартмани

31.01.2020    6588    burni4    16    

Краткое руководство по внесению изменений в конфигурацию

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

13.01.2020    19243    sapervodichka    41    

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

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

Процедуры и функции раскладывают произвольную строку адрес в структуру по ключевым словам.

1 стартмани

30.12.2019    4483    vik070777    10    

Простой способ индексирования интервалов Промо

Практика программирования v8 Абонемент ($m)

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

1 стартмани

28.09.2016    40423    ildarovich    22    

"Живые" картинки со Snap.SVG

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

В статье рассмотрен пример использования http-сервисов для визуализации данных

1 стартмани

24.10.2019    14172    blackhole321    7    

RLS - дубли условий в запросах к СУБД

Практика программирования Роли и права v8 v8::Права 1cv8.cf Абонемент ($m)

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

1 стартмани

07.10.2019    8906    geron4    4    

Полное копирование одной формы в другую

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

Однажды я столкнулся с необходимостью открыть форму ЛЮБОГО документа с определенными изменениями, не зависящими от структуры объекта (например, заблокировать все кнопки). В интернете решения я не нашел. Обычно на форумах на запросы подобного рода отвечают чем-то вроде "покажи первоначальную задачу, а не спрашивай как реализовать то, что ты придумал". Тем не менее, мне стало интересно, как это можно сделать.

1 стартмани

03.10.2019    6042    nekit_rdx    24    

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

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

01.02.2018    35951    rpgshnik    49    

Многопоточная обработка данных на примере перепроведения документов

Обработка документов Практика программирования v8 ERP2 УТ11 КА2 Абонемент ($m)

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

1 стартмани

17.09.2019    10219    ids79    46    

Отображение истории выполнения по всем задачам комплексного процесса в документообороте

Документооборот и делопроизводство Практика программирования v8 ДО Абонемент ($m)

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

1 стартмани

15.09.2019    7475    pavelpribytkin96    8    

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

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

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

1 стартмани

06.09.2019    20376    Dementor    30    

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

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

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

1 стартмани

10.05.2018    47353    dsdred    43    

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

Практика программирования v8 Абонемент ($m)

Если Вам часто приходится просматривать в отладчике сложные пакетные запросы с большим количеством временных таблиц, то эта статья для Вас.

1 стартмани

27.08.2019    11516    ids79    22    

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

Практика программирования v8 1cv8.cf Абонемент ($m)

Как запустить фоновое задание из модуля внешней обработки используя БСП. Как отключить безопасный режим и сообщения защиты от опасных действий независимо от профиля безопасности пользователя в фоновом задании во внешней обработке.

2 стартмани

24.08.2019    12789    BenGunn    22    

Изменяющееся контекстное меню в 1С 8.3

Практика программирования Работа с интерфейсом Разработка v8 v8::УФ Абонемент ($m)

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

1 стартмани

06.08.2019    17905    signum2009    16    

Некоторая работа с данными через COM Промо

Практика программирования v8 Абонемент ($m)

В статье приведены примеры работы с Платформой 8.X через COM (точнее, через объект COMConnector). Примеры кода были использованы при реализации прикладных задач в процессе трудовой деятельности.

2 стартмани

05.12.2012    58509    wowik    32    

Процедура ПриКомпоновкеРезультата

Практика программирования v8 1cv8.cf Абонемент ($m)

Коллекция кода

1 стартмани

26.07.2019    45815    vasilev2015    64    

10 способов получить модуль числа (а может, и больше)

Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

Пишем функцию вычисления модуля числа. Сколько способов существует? Давайте посчитаем!

1 стартмани

11.07.2019    10202    sam441    29    

Ловец дедлоков СУБД

Производительность и оптимизация (HighLoad) Практика программирования Разработка v8 Россия Абонемент ($m)

Анализ простейшего дедлока СУБД в рабочей базе с использованием ЦУП (центра управления производительностью) и profiler MS SQL (Microsoft SQL Server). Эта статья будет полезна людям, изучающим вопросы оптимизации работы 1С, или тем, у кого возникают дедлоки в рабочей базе. UPD 09.07.2019 добавлено воспроизведение блокировки в случае установки управляемой блокировки перед чтением набора записей регистра сведений. UPD 10.07.2019 добавлена тестовая база с примером.

1 стартмани

08.07.2019    11709    azazana    79    

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

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

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

1 стартмани

24.04.2018    46310    kalyaka    35    

Мониторинг производительности и искусственный интеллект

Производительность и оптимизация (HighLoad) Практика программирования Разработка v8 Абонемент ($m)

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

1 стартмани

01.07.2019    9704    ivanov660    28    

"Убер на складе": динамический расчет маршрутов с учетом реальных расстояний

Учет ТМЦ Практика программирования Учет ТМЦ v8 УУ Абонемент ($m)

Представляю методику и инструмент для динамического расчета маршрутов отбора на высоконагруженных складах для максимального повышения эффективности склада, ускорения проходимости и, как следствие, экономии денег. Это методика и обработка для интеграции в WMS решения. Тестировалось на 1С 8.3.14.1565.

3 стартмани

24.06.2019    17683    informa1555    17    

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

Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

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

1 стартмани

21.06.2019    30984    Evil Beaver    143    

Многопоточность. Универсальный «Менеджер потоков» (фреймворк) с отслеживанием зависимости объектов Промо

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

Восстановление партий, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

26.05.2017    50053    DarkAn    86    

Еще раз о рабочих днях. Быстрый способ расчета в запросах

Практика программирования Математика и алгоритмы Разработка v8 Абонемент ($m)

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

1 стартмани

20.06.2019    9500    Alxby    11    

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

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

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

1 стартмани

12.06.2019    32105    Hatson    31    

Графики работы из БСП

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

Не очень давно на канале 1С:БСП была опубликована заметка по использованию Графиков работы и Календарных графиков.

1 стартмани

23.05.2019    3560    fenixnow    0    

Новый запрос и новая таблица значений как функции Промо

Практика программирования v8 Абонемент ($m)

Предлагается две простые функции, использование которых уменьшает объем кода в конфигурациях на платформе «1С:Предприятие 8». Эти функции можно добавлять к своему общему модулю, что сделает процесс программирования более эффективным.

1 стартмани

27.11.2012    45631    ildarovich    46    

Создание внешней печатной формы в формате документа Word

Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

В статье написано, как создать внешнюю печатную форму (для конфигураций с БСП) в формате Word.

1 стартмани

17.05.2019    17121    ВикторП    22    

Поле адреса в своем справочнике на примере 1С:Бухгалтерия 3

Практика программирования Разработка v8 v8::БУ БП3.0 Россия Абонемент ($m)

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

1 стартмани

17.05.2019    6414    vasilievil    4    

Пример настройки шаблонов и реализации печати отчетов в документ MS Word используя функциональную часть "Библиотеки Стандартных Подсистем 1С" (БСП)

Практика программирования Разработка v8 Россия Абонемент ($m)

В конфигурации выбраны и использованы только необходимые объекты библиотеки стандартных подсистем для реализации вывода отчёта, с табличными частями, в документ MS Word. Показан пример создания необходимых областей в шаблоне для вывода параметров в отчёт.

1 стартмани

23.04.2019    7153    olegpkc    11    

Уровни, глубина, прародители, циклы и аналоги запросом Промо

Практика программирования v8 1cv8.cf Абонемент ($m)

В продолжение публикации «Транзитивное замыкание запросом» [http://infostart.ru/public/158512/] добавлены другие варианты использования того же приема. Приведены запросы для быстрого определения уровней всех элементов справочника, максимальной глубины справочника, прародителей произвольных элементов справочника, запрос для быстрого определения циклов (на примере справочника спецификаций «1С:Управление производственным предприятием») и определения множеств аналогов номенклатуры (также на примере конфигурации «1С:Управление производственным предприятием»).

1 стартмани

13.11.2012    114856    ildarovich    98    

Ops средствами 1С:Предприятие

Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

В статье описан программный пакет "Автоматизация ИТ-процессов" (АИТП), позволяющий автоматизировать задачи по администрированию, управлению и обслуживанию ИТ-инфраструктуры.

1 стартмани

23.04.2019    17844    blackhole321    28    

1C + Python + Django Rest Framework + Vue.js. Опыт несложной full-stack разработки

Практика программирования Внешние источники данных Обмен через XML WEB Разработка v8 1cv8.cf Абонемент ($m)

В этой статье мы рассмотрим путь и основные моменты создания небольшого вэб-сервиса, который мы называем "Онлайн Прайс-лист". Выгрузка из 1С, бэкенд, фронтенд, получение заказов в 1С.

1 стартмани

22.04.2019    36073    riposte    66    

Вывод вариантов СКД в таблицы на управляемой форме

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

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

05.04.2019    11928    artkor    1    

Неоплаченные долги при распределении оплаты по правилу ФИФО одним запросом и намного быстрее, чем Вы думали Промо

Практика программирования Дебиторская и кредиторская задолженность Дебиторская и кредиторская задолженность v8 v8::СКД КА1 УТ10 УПП1 УУ Абонемент ($m)

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

1 стартмани

28.02.2014    69234    ildarovich    129    

[EnterpriseData] Антисвертка характеристик номенклатуры при выгрузке в Бухгалтерию

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 v8::ПВХ КД УНФ БП3.0 Россия БУ Абонемент ($m)

Рассмотрена выгрузка каждой пары значений Номенклатура - Характерстика из УНФ 1.6 в отдельную номенклатуру в Бухгалтерию 3.0 путём доработки правил обмена в формате EnterpriseData.

1 стартмани

27.03.2019    5190    nforce    6    

Интеграция 1С и SharePoint

Практика программирования Разработка v8 УНФ ДО ERP2 БП3.0 УТ11 УХ КА2 Россия Абонемент ($m)

Заказчики поставили задачу автоматизации согласования заявок на оплату в программе 1С:Бухгалтерия предприятия 3.0. Согласно ТЗ, данные должны подтягиваться из действующей электронной системы документаоборота на MS SharePoint (в дальнейшем СЭД MS SP).

1 стартмани

22.03.2019    5970    -I-    5    

Легкий "тюнинг" УТ 10.3

Практика программирования Разработка v8 v8::ОУ УТ10 Россия УУ Абонемент ($m)

Вариант программной реализации изменения форм типовых объектов для конфигурации Управление торговлей 10.3.

1 стартмани

15.03.2019    4672    pm74    6