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

Публикация № 1087149 03.07.19

Приемы и методы разработки

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

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

  1. Сам язык запросов и его рекомендуемый стиль слишком громоздкий для "простых случаев". Если наплевать на рекомендуемое оформление, то запрос можно упростить до чего-то вроде "Запрос = Новый Запрос("Выбрать Ссылка Из Справочник.Номенклатура Где ВидНоменклатуры = &МойВид")", что вместе с добавлением параметра и получением результата уложится в три строки, но, на секундочку, в рекомендуемом оформлении - это 10 (десять, Карл!) строк кода.
  2. Нет запросов на изменение данных. Что мешало сделать простое и удобное платформенное средство непонятно: поверх платформы запросы на изменение сделать можно, значит и в слое платформы тоже было можно.
  3. Обвязка языка (установка параметров, работа с результатом) хоть и хорошо вписываются в стиль процедурного языка 1С, но также заставляют писать много лишних букв. Для "Запрос.УстановитьПараметр(" уже можно отдельную кнопку на клавиатуре делать
  4. Текст запроса имеет совершенно отвратительный вид: нет подсветки синтаксиса, необходимость в избыточном оформлении (символ | в каждой строке) делают его сложным для восприятия. Да, подсветку синтаксиса можно получить в конструкторе, но это дополнительно усложняет чтение кода, а на очистку комментариев в этом случае не матерился только ленивый.
  5. В "сложных" случаях длинный запрос затрудняет чтение процедурного модуля (привет ЗУПу). Частично это решают выносом текста запроса в отдельную процедуру. Так делать начали в типовых, что можно считать официальным признанием наличия проблемы.

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

При этом "простые" случаи являются наиболее востребованными. Например, в типовой УТ слово ВЫБРАТЬ встречается 22 тысячи раз, а слово СОЕДИНЕНИЕ 11 тысяч раз. Если еще учесть 5 тысяч слов ПОМЕСТИТЬ и тот факт, что соединений в одном запросе бывает несколько - можно говорить, что примерно половина всех запросов являются запросами к одной таблице, т.е. теми самыми "простыми случаями". Это все конечно очень прикидочно.

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

Ну правда, что мешало хотябы в метод НайтиПоРеквизитам и принимать на вход структуру? Только не надо про поиск в обход индексов: если будет надо - все равно напишут запрос и будут искать в обход индексов. Займет это вместо одной строки 15, но напишут.

Чтобы окончательно проникнуться идеей ограниченности языка запросов для простых случаев - давайте попробуем глянуть на процедуру, получающую организацию по умолчанию (это не я придумал, это код типовой УТ):

Организация = Справочники.Организации.ПустаяСсылка();

Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2
|    Организации.Ссылка КАК Организация
|ИЗ
|    Справочник.Организации КАК Организации
|ГДЕ
|    НЕ Организации.ПометкаУдаления
|    И НЕ Организации.Предопределенный";
Запрос.УстановитьПараметр("ИНН", МойИНН);
Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() И Выборка.Количество() = 1 Тогда
    Организация = Вборка.Организация();
КонецЕсли;

Возврат Организация;

Делов тут на 3 копейки, а кода 16 строк. Препишем эту функцию на русском языке:

Найти первые две не помеченных на удаление, не предопределенных организации. Если нашлась одна - вернуть ее ссылку, иначе вернуть пустую ссылку.

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

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

В 1С явно нужен инструмент, позволяющий получить доступ к данным более лаконичным образом чем язык запросов. Естественно, при этом придется поступиться широкоуниверсальностью, но не настолько чтобы получить что-то бесполезное типа НайтиПоРеквизиту. Хорошо бы получить что-то типа такого:

Организация = Справочники.Организации.НайтиПо("НЕ ПометкаУдаления").ИПо("НЕ Предопределенный").ПолучитьСсылку(Истина);

или типа такого:

Организация = Найти.В("Справочник.Организации").По_("НЕ ПометкаУдаления").ИПо("НЕ Предопределенный").ПолучитьСсылку(Истина);

Как вы пониматете, ничего невозможного в этом нет, а разница между первым и вторым только в наличии функции НайтиПо в модуле менеджера, которая делает вызов Найти.В...

Итак, чтобы не писать каждый раз портянку одинаковых букв, план такой:
1. Делаем общий модуль Найти
2. Пишем в нем обёртку над языком запросов, что-то весьма функциональное, но с простым лаконичным АПИ.
3. Встраиваем вызов процедуры в каждый (или в нужные или только в те, что сняты с поддержки) модуль менеджера.
4. ...
5. PROFIT!

Писать такое не долго, весь мой модуль занимает 250 строк. Делать ли вызов процедур "в одну строку" или нет - вопрос дискуссионный, как делать написано тут.

Некоторые сухие подробности реализации:

  1. Функция НайтиПо(Параметры...) - функция модуля менеджера, объединяющая указание таблицы и первый фильтр
  2. Функция задания имени таблицы: В(Имя); Имя - указывается имя таблицы. При встраивании в модуль менеджера пишется один раз или, если встраивание невозможно или нежелательно - каждый раз.
  3. Функции фильтрации: По_() ИПо() ИНе() ИлиПо() ИлиНе() - функции добавления параметров с соответствующей булевой операцией. В параметрах указывается: имя фильтруемого поля (или само выражение его фильтрации, как в примере "дата между") и, при необходимости, параметры фильтрации. Здесь необходимо пояснить, что для достижения максимальной гибкости и естественной простоты функции пришлось сделать три случая ее функционирования:
    • без параметров, для обработки случаев типа И("НЕ ПометкаУдаления")
    • с одним параметром, для простого добавления простого равенства, например: И("ВидНоменклатуры", МойВид)
    • со сложной обработкой параметров, например: И("Дата МЕЖДУ &Дата1 и &Дата2", ДатаНачала, ДатаКонца). В таком варианте можно задать до трех параметров, а их использование в явном виде указывается. Параметры подставляются по порядку, т.е. в данном случае ДатаНачала будет сопоставлена &Дата1, а ДатаКонца - &Дата2".
    • Если использована функция отрицания: ИНе() или ИлиНе()- вся добавленная фраза будет завернута в "НЕ (...)"
  4. Функции получения результата:
    • ПолучитьТаблицу() - эквивалентно "ВЫБРАТЬ * " в запросе и "Запрос.Выполнить().Выгрузить()" в обработке результата
    • ПолучитьСсылки() - эквивалентно "ВЫБРАТЬ ССЫЛКА" в запросе и "Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")" в обработке результата
    • ПолучитьСсылку(ТолькоУникальную) - возвращает первую попавшуюся ссылку, соответствующую указанным критериям. Если не найдется - будет возвращено Неопределено. Параметр ТолькоУникальную не обязательный, по умолчанию Ложь, если установлен в Истина - ссылка будет возвращена только если нашлась одна ссылка по указанным критериям, если найдется две - будет возвращено неопределено.
    • ПолучитьСсылкуИлиЗначение(ЗначениеПоУмолчанию) - тоже что предыдущее, но если не найдется - будет возвращено ЗначениеПоУмолчанию
    • ПолучитьСсылкуИлиИсключение(ТекстИсключения) - тоже что предыдущее, но если не найдется будет вызвано исключение
    • ПолучитьПараметры(СписокПараметров) - эквивалентно "ВЫБРАТЬ *" в запросе и помещению первой строки результата запроса в структуру, где ключ соответствует имени колонки, а значение - значению этой колонки в первой строке (если строк не будет - Неопределено) СписокПараметров необязательный, если не задан - в структуре будут заполнены все реквизиты, если задан - в структуре будут присутствовать только указанные реквизиты.
  5. Пара примеров:
    • Документ.ПоступлениеТоваровУслуг.НайтиПо("Номер", Номер).И("Дата Между &Дата1 И &Дата2", Дата1, Дата2).ИНе("ПометкаУдаления").ПолучитьТаблицу();
    • Справочник.Номенклатура.НайтиПо("ВидНоменклатуры В (&Виды)", МассивВидов).ИЛИ("СтавкаНДС", Перечисления.СтавкиНДС.НДС0).ПолучитьСсылки();

Платформа 8.3.9.2233, код открыт, даунгрейд возможен при реализации функций типа СтрНачинаетсяС.

Удачи!

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

Наименование Файл Версия Размер
ФасадЗапроса

.cf 13,68Kb
7
.cf 13,68Kb 7 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. login1020 100 03.07.19 10:41 Сейчас в теме
Речь идёт только об однопакетных запросах без соединений?
2. darkinitr0 03.07.19 10:42 Сейчас в теме
1. не громоздкий, все нормально! Упрощение не всегда означает "удобство чтение".
2. да это наоборот плюс что нет запросов которые модифицируют данные! Вы хоть представляете сколько опасных ситуаций могло бы возникнуть из за кривости рук программистов?
4. согласен насчет подсветки - было бы хорошо ее добавить
5. какие проблемы? вы о чем? вы бы писали 5-километровый код строками вместо пары запросов?

Ваши предолжения "найтиПо" и "ИПо" - это просто жесть!
Я рад что вы не работаете в 1С и не развиваете продукты, иначе это стало бы концом фирмы!
Serj1C; skalex; smilemanrus; SadrA; tuxik07; CodeNull; ong1990; V_Ladeska; user1381698; Mi4man; MikeI; amd1986; sergey512; GOshaSaveiko; morin; Artem.Po; A.Sytchev; Arxxximed; user645799_spam_gds; user764477; tka4enk0; О.Ж; s_vidyakin; petrov_al; Kashemir; Merkalov; Kinestetik; VVsaydzhanov; ktb; ASDF2; Jeka44; user774630; ArchLord42; AllexSoft; sergey_garin; rmIvanT; Infector; kotov2000; dachnik; sertak; A_Max; Reaper_1C; chernov.gigansk.ru; cheburashka; boln; Shmell; robotq; Mettem_Kirill; yku; CyberCerber; wowik; rintik; gudogu; DoctorRoza; dimkakopylow001; kuzyara; manuel; alalsl; TODD22; vadim1011985; alex-l19041; +61 5 Ответить
7. m-rv 915 03.07.19 12:19 Сейчас в теме
(2)
2. вот мне в статье про запросы на изменения тоже писали что типа все пропало, теперь все будет плохо, но никто не может сказать почему. чем конкретно опасны запросы на изменения? чем фраза "УДАЛИТЬ ИЗ РегистрСведений.ЦеныНоменклатуры" опаснее фразы "РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей().Записать()"
5. имеется ввиду, когда внутри процедуры на 200 строк еще запрос строк на 100
Altez; CodeNull; vvp117; VladC#; curdate; +5 Ответить
16. darkinitr0 03.07.19 15:14 Сейчас в теме
(7)
вы привели только частный случай опасного удаления записей.

Вот пример "УДАЛИТЬ * ИЗ Документы.РеализацииТоваровУслуг" - удалиться все документы без проверки ссылочной целостности, и концов не найдешь!
А если объект сам удаляешь, то хоть ЖР остается кто удалил
user645799_spam_gds; +1 1 Ответить
20. m-rv 915 03.07.19 16:14 Сейчас в теме
(16)
я не понимаю разницы между Объект.Удалить() и "УДАЛИТЬ ИЗ Документы.РеализацииТоваровУслуг". запись в ЖР можно делать и в обоих случаях. в "не тех руках" оба инструмента приведут к одному результату
Andreeei; Altez; vvp117; VladC#; the1; Wdivine; +6 Ответить
30. darkinitr0 03.07.19 21:38 Сейчас в теме
(20) как вы привяжете к выполнению SQL запроса регистрацию удалений? Если там удаление происходит 111 таблице?
1C же все переводит в SQL запрос и потом его просто бахает на выполнение

по поводу удаления могу сформулировать так - чем проще удалить объект без контроля, тем больше рисков.
Какой нибудь криворукий программист напишет вам кривое условие в конструкции "УДАЛИТЬ * ИЗ ... ГДЕ _некоторое условие_" - и все, потом не отладить, ни концов найти.

Все вышесказанное относиться и к "ИЗМЕНИТЬ"
Summer_13; user645799_spam_gds; +2 Ответить
31. acanta 03.07.19 21:54 Сейчас в теме
(30) в sql именно на этот случай существует журнал транзакций с полной моделью восстановления.
Удалить этот своего рода блокчейн можно изменив модель восстановления и обрезав журнал транзакций.
32. darkinitr0 03.07.19 22:10 Сейчас в теме
(31)
я как 1С программист мало взаимодействую с SQL, поэтому возникает вопрос.
Как оперативно посмотреть кто снес 100 документов? в ЖР это можно увидеть досточно быстро.
В варианте серверной SQL базы - обращаться к админам, что бы развернули копию базы до удаления записей? Это разве выход? Если база гигантская?
Опять же в вашем посте нет ответа - как определить пользователя, который снес документы.
и еще вопрос - как быть с файловой базой?
user645799_spam_gds; О.Ж; +2 1 Ответить
35. acanta 03.07.19 23:19 Сейчас в теме
(32) в sql есть функции просмотра транзакт лога
https://solutioncenter.apexsql.com/ru/%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%B0-%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B9­-sql-server/
Проблема в том, что 1с сервер это один пользователь и даже с полными правами.
По поводу файловой базы вопросы в техподдержку 1с.
VladC#; dachnik; +2 Ответить
33. m-rv 915 03.07.19 22:50 Сейчас в теме
(30) вы отождествляете выполнение запроса в 1С и выполнение запроса в SQL. не факт, что стоит делать один-в-один. посмотрите как сделано тут: https://infostart.ru/public/839681/
без контроля никто не предлагает удалить
10. cool99 03.07.19 12:34 Сейчас в теме
(2) НЕ согласен по некоторым моментам.
2. Кривость это плохо, но зачем ограничивать тех, у кого все растет откуда нужно? Или их настолько мало, что не имеет смысла заморачиватся? :)
4. Для 1С это просто текст, учитываю то, что нет качественной подсветки основного кода, то я думаю этого не будет сделано от слова никогда

5. Есть функциональный подход в том же LINQ. И что в этом многокилометровом коде такого плохого? Можно прикрутить и групджоины и т.д. и все это вполне замечательно читается и видно последовательность действий. Поэтому я кстати и не люблю декларативный синтаксис. Простой пример, отбираем записи по условию, сортируем туда обратно и выбираем например 10 записей пропуская первую. Помоему все лаконично и удобочитаемо:
var row = db.table
.Where(x=> x.field == foo)
.OrderBy(p=>p.date)
.OrderByDescending(p=>p.level)
.Skip(1)
.Take(10).
.ToArray(); /// например


(2)
Я рад что вы не работаете в 1С и не развиваете продукты, иначе это стало бы концом фирмы!

INSERT/DELETE- AddRange/RemoveRange, апдейта прямого нет конечно, т.к. линкю работает с объектной моделью и очень часто проще удалить и вставить новые записи.
Есть декларативный язык, есть флюент апи с лямбда синтаксисом. Т.е. вы хотите сказать, что годы развития данных технологий так - за хлебушком ходили? По поводу "жести" я бы поостерегся, не нужно судить все с колокольни 1С, т.к. она по удобству разработки, языку, среде выполнения находится на задворках вселенной.
Altez; Chizhik2020; Збянтэжаны Саўка; ybatiaev; Wdivine; Mettem_Kirill; brr; +7 1 Ответить
11. m-rv 915 03.07.19 12:45 Сейчас в теме
(10)
4. ну когда я думал на эту тему - я думал, что в каждом серверном модуле можно сделать пару вкладок: для процедурного языка и для языка запросов с соответствующей подсветкой в каждой. но это конечно врядли будет реализовано
5. я начал думать от spring data. там пилятся методы типа findByEmployeeAndDateBetween(Employee emp, Date date1, Date date2) без реализации и движок парсит имя метода и понимает что делать надо
64. OPM 322 08.07.19 10:57 Сейчас в теме
(10)
Такой синтаксис:
"var row = db.table
.Where(x=> x.field == foo)
.OrderBy(p=>p.date)
.OrderByDescending(p=>p.level)
.Skip(1)
.Take(10).
.ToArray(); /// например "

Для меня читается намного сложнее, чем запрос, в котором все разложено по полочкам, вот условие, вот сортировка, то что много строк получается - это на любителя, когда читаю код некоторых "экономов" просто офигеваю, с какой целью несколько операторов присваивания умещают в одну строку или запрос вытягиваю в одну длинную строку и тому подобное.
Возможно это все последователи секты "ненавидящих пробелы" и их подмножества "любителей длинных строк".
Alexander.Shvets; amd1986; user774630; user645799_spam_gds; О.Ж; zqzq; ktb; +7 Ответить
66. login1020 100 08.07.19 11:50 Сейчас в теме
(64) Чисто ради интереса. Вы ссылаетесь на (10), (10) ссылается на (2). А оповещения приходят мне).
Непонятные привязки..
77. Darklight 27 06.11.19 13:22 Сейчас в теме
(64)Вы просто привыкли к другому стилю и закрываете глаза на его недостатки.
Кстати, язык LINQ.NET - всё-таки позволяет писать более привычно (но только на C#):

var foo = Getfoo(); //Некая переменная с неким значением, полученном из некой функции

var row = fr om x in db  //я написал тут  "fr om" - но infostart упорно искажает до "fr om"
                      .Take(10).Skip(1); //Увы для этих операторов пока нет ключевых слов - вызываем как обычные функции
                      wh ere x.field == foo  //и тут искажает "wh ere" до "wh ere" (даже в комментарии искажает)
                      orderby x.date descending
                      orderby x.level
                      select x;
Показать


Но чтобы такое сделать - Мелкомягким пришлось допиливать платформу .NET и язык C# - но оно того стоило (в итоге вышеприведённый код - будет при компиляции развернут в последовательность вызовов методов - как в исходном примере через "."), ну а методы, уже в рантайме сгенерят запрос и выполнят его по необходимости, когда выборка будет открыта.

Главное достоинство такого подхода:
1. Запрос выглядит как набор операторов - подсветка синтаксиса работает, это не вбивается из общего анализа кода как серое бельмо
2. Можно легко ставить комментарии и комментировать такой код
3. Можно легко его синтаксически разбирать при сравнении и слиянии, в т.ч. с модификациями
4. Можно легко его рефакторить в IDE
5. Да и сама IDE может легко выводить тип (и структуру) переменной q ещё на этапе конфигурирования - и давать выплывающие подсказки для работы с её членами (но правда не всегда - тут если работать с неописанными источниками, скажем из СУБД - то их структура может быть не известна на этапе конфигурирования - как , возможно, в примере выше)
6. Можно лекго такой код подвергать макрообработке
7. Можно относительно несложно расширять выражения своими операторами (в C# это делается специальными расширителями классов - они же класс хелперы - очень мощная вещь сама по себе)
8. Можно прямо в коде ссылаться на переменные (не передавая их как параметры), да и вообще - прямо в коде писать выражения: " wh ere ConvertToCoreFoo(x.field) == Getfoo().Core"
9. LINQ в C# - очень мощная вещь - универсально позволяющая обрабатывать не только базы данных, но коллекции со структурированными элементами как таблицы, а так же крайне легко выполнять параллельную обработку коллекций - так что код, может и не знать, какой источник данных он реально обрабатывает
10. А ещё LINQ позволяет делать отложенные вычисления - я могу написать лишь часть в одном месте

var part1 = db.table
.OrderBy(p=>p.date)
.Skip(1)
.Take(10)


в другом дополнить (и порядок операторов будет не особо важен)

var part2 = part1
.Wh ere(x=> x.field == foo)
.OrderByDescending(p=>p.level);


И потом только открыть выборку

var row = part2.Select();


Причём так выборка открывается как генератор - и вычисляться будет отложенно - по мере обхода результата
row.ForEach(x => Console.WriteLine(x.ToString()); //Условно какая-то обработка


А могут тут ещё условие дописать

var f = GetFilterValue()
row.Wh ere(x=>x.f==f).ForEach(x => Console.WriteLine(x.ToString()); //Условно какая-то обработка



В общем LINQ - это очень круто, жаль его нет в 1С

А автор статьи молодец - пусть ещё не LINQ - но уже маленький шажок в светлое будущее!

Но звания операторов всё-таки как-то надо поболагозвучнее пдобрать!
80. Darklight 27 06.11.19 13:53 Сейчас в теме
(77)вот так выглядит подсветка синтаксиса на C#
Прикрепленные файлы:
user1132383; +1 Ответить
84. Darklight 27 07.11.19 14:21 Сейчас в теме
(77) Не хотел тут флудить на эту тему, повторяться тоже не хотел - но если интересно см ссылку на комментарий по номеру слева от этого теткста (ещё можно найти по строке "77." или по строке даты "06.11.19 13:22")
Это в ответ на (83)
40. mkalimulin 504 04.07.19 22:45 Сейчас в теме
(2) Фирма и так движется к своему концу, а идеи подобного рода могли бы его несколько отодвинуть. Так что вы не тому радуетесь.
41. darkinitr0 04.07.19 22:48 Сейчас в теме
(40) вы хоть поняли что сказали?
42. darkinitr0 04.07.19 22:54 Сейчас в теме
(40)
можете аргументировать почему фирма 1С движется к своему концу?
Без обид, готов с вами поспорить и ответить на конструктивную критику
46. mkalimulin 504 05.07.19 10:04 Сейчас в теме
(42) Говоря коротко, оппортунизм вместо профессионализма.
VladC#; boln; +2 1 Ответить
52. AntonSm 29 05.07.19 13:01 Сейчас в теме
(46) напишите, пожалуйста, подробнее.
Ато вдруг уже надо о переквалификации задуматься.
43. boln 1033 04.07.19 23:53 Сейчас в теме
(40)
Фирма и так движется к своему концу
Возможно, для самой фирмы это слишком категорично, но вот для V8 это весьма очевидно.
VladC#; user774630; +2 1 Ответить
44. m-rv 915 05.07.19 09:16 Сейчас в теме
(40) (42)
вы делаете весьма огрубляющее обобщение. есть векторы направленные как в одну так и в другую стороны:
- если говорить о скорости выпуска "больших" продуктов - тренда на спад не прослеживается:: 2000 - 8.0; 2010 - 8.2; 2016 - EDT; 2018 - месенджер и 8.4. Разработка конфигураций, по моему оценочному мнению, по сравнению с 2010 годом находится на небывалой высоте как по скорости так и по сложности
- выручка также растет (в 18-м году слегка упала, но пока нельзя говорить что это тренд) и, судя по всему, фирма глубоко прибыльна.
- в технологическом смысле фирма проводит двоякую политику: с одной стороны закрытость "внутреннего мира" можно назвать неким изоляционизмом, а изоляционизм всегда приводит к одному результату (и не подумайте что я намекаю на какие-то параллели))) с другой стороны поддержка rest сервисов в обе стороны делает возможными любые интеграции
- также, можно сказать, что очень опасным трендом является пренебрежение к программистам 1С со стороны программистов "взрослых" языков, что приводит к "непристижности" профессии и оттоке тех, кто может "оттечь", что будет приводить к снижению качества прикладных решений.
- и еще один крайне тревожный тренд заключается в том, что все больше и больше ресурсов как фирмы 1С так и всей отрасли в целом уходит (и по всей видимости тренд будет только нарастать) на удовлетворение хотелок гос.органов, а не бизнеса, что само по себе непроизводительные затраты, не приносящие ни прибыли ни технологического развития.
47. TODD22 18 05.07.19 10:33 Сейчас в теме
(40)
Фирма и так движется к своему концу

"1С ещё пару лет и фсёёё, надо валить" слышу эту мантру с 2008 года....
unknown181538; amd1986; Bassgood; user645799_spam_gds; zqzq; Kinestetik; user774630; studius; AllexSoft; +9 Ответить
48. m-rv 915 05.07.19 10:54 Сейчас в теме
(47) надо признать это мнение основано не на пустом месте
49. mkalimulin 504 05.07.19 10:54 Сейчас в теме
(47) И где вы только подслушиваете.
53. AntonSm 29 05.07.19 13:12 Сейчас в теме
(49) вот тут, например - Непаханое поле или почему люди не идут в программисты 1С.

Цитата из статьи.

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

Опасение: Хоть бы новые «не нарожались» и я ещё лет десять зарабатывал себе спокойно.

Вопрос: Почему от года к году работы всё больше, а конкурентов всё меньше?

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


2012 год, однако.
56. mkalimulin 504 05.07.19 23:04 Сейчас в теме
"Работы все больше, а конкурентов все меньше"
Это хороший признак или плохой? Как по вашему?
58. AntonSm 29 08.07.19 09:21 Сейчас в теме
(56) хороший вопрос. Прошлось задуматься.
Т.к. я работаю с 1С прямо сейчас, то для меня на ближайшие 1-3 года это хорошо.
Меньше конкуренции, больше спроса на мои навыки.
Но на перспективу в 10-15 лет признак, конечно, негативный.
Если дефицит специалистов превысит некий пороговый уровень (по времени поиска специалиста, по стоимости работы специалиста и т.п.), то бизнес может для решения проблем, которые сейчас решаются с помощью 1С, использовать что-то еще.
И тогда придется переучиваться на что-то другое. А это всегда затраты времени, сил, денег.

Но сама фирма 1С, судя по всему, видит проблему. Не раз видел новости на эту тему. Например, что где-то в школах начинают продвижение профессии программист 1С.
60. mkalimulin 504 08.07.19 10:27 Сейчас в теме
(58) Как начинают, так и заканчивают. У молодежи нет спроса на обучение 1С.
62. m-rv 915 08.07.19 10:48 Сейчас в теме
(58) да, пропаганда этого дела ведется - это факт, но тут есть еще один аспект: если у вас низкая конкуренция - у вас нет стимулов двигаться вперед, изобретать лучше и быстрее.
50. acanta 05.07.19 10:58 Сейчас в теме
(47) может и надо, но на топовые должности навыки атрофированы, а для нормальных не топовых должностей даже самый заштатный 1с ник слишком крут.
Не возьмут. Грызите гранит...
87. It-developer 20 20.11.20 11:59 Сейчас в теме
(2) Капец, столько положительных откликов на такой бредовый пост. Программисты 1с не должны увязать только в 1с - посмотрите другие языки и как в них работают с запросами
3. for_sale 859 03.07.19 10:52 Сейчас в теме
Есть конструктор с обработкой результата, все параметры и даже циклы (которые потом почти всегда приходится удалять) пишет за программиста, главное только запрос наклацать.
user645799_spam_gds; +1 Ответить
4. vano-ekt 855 03.07.19 11:02 Сейчас в теме
js'ом надышались? :-D
zqzq; AllexSoft; ilyanet; a_a_burlakov; +4 Ответить
8. m-rv 915 03.07.19 12:20 Сейчас в теме
36. A_Max 18 04.07.19 10:45 Сейчас в теме
(8) Я в руби наковырялся вот с такими выражениями "в одну строку". Это прикольно для примитивных операций и только. Ну и на "прикольно" всё удобство и заканчивается. Ускорения в разработке не заметил вообще. Особенно учитывая перемешку полноценных запросов и таких однострочников, а потом необходимость переделывания однострочника в полноценный запрос.
for-elenak; Arxxximed; user645799_spam_gds; zqzq; AllexSoft; +5 Ответить
5. ManyakRus 433 03.07.19 11:14 Сейчас в теме
я сделал шаблон кода
по строке "Запрос = "
шаблон напишет всё что написано в верхнем запросе :)
так ещё легче

Запрос = Новый Запрос;
ТекстЗапроса = "
|ВЫБРАТЬ
|
|ИЗ
|
|ГДЕ 1=1
|
|";

Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("", );
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда

КонецЕсли;
user645799_spam_gds; +1 Ответить
12. m-rv 915 03.07.19 12:47 Сейчас в теме
(5) это только подтверждает основную мысль: текущая реализация изобилует обвесом, который ни на что не влияет
78. Darklight 27 06.11.19 13:25 Сейчас в теме
(5)Зачем отдельный шаблон Чем встроенный в конфигуратор конструктор запроса с обходом плох?
SadrA; AlX0id; for-elenak; +3 Ответить
86. AlX0id 17.02.20 09:01 Сейчас в теме
(5)
Откройте шаблон по умолчанию - почитайте его и много для себя откроете )
6. astracrypt 69 03.07.19 11:18 Сейчас в теме
Я вообще люблю почитать запросы в 1С. Вечером лежа в кроватке перед сном. Успокаивает нервную систему, нормализует давление, хорошо влияет на сон.
It-developer; SadrA; YaroslavHolovatiy; Serg O.; zqzq; Kinestetik; user774630; A_Max; darkinitr0; CyberCerber; curdate; wowik; acanta; d_bat; +14 Ответить
24. cool99 03.07.19 16:27 Сейчас в теме
(6) Вы работаете с ЗУПом 3 перед сном? :)))
YPermitin; +1 Ответить
9. PowerBoy 3125 03.07.19 12:26 Сейчас в теме
Конструктор запросов это лучшее что у нас есть!
It-developer; for-elenak; user645799_spam_gds; Kinestetik; Jeka44; AllexSoft; rmIvanT; cheburashka; boln; darkinitr0; fotov; curdate; wowik; Азбука Морзе; +14 Ответить
13. DoReMi 03.07.19 12:58 Сейчас в теме
(9) "— Вы же знаете греческие трагедии? Еврипид, Эсхил, Софокл… Одним словом, Греция. Старина — это лучшее, что у нас есть." © Мураками
14. soulsteps 74 03.07.19 14:04 Сейчас в теме
Автору, конечно, спасибо за статью-всё-таки на это было потрачен драгоценный ресурс - время. Но! Все же не соглашусь с идеями статьи. Хочу сказать, что идеальных инструментов не бывает, это во-первых, во-вторых, и отвёрткой можно забивать гвозди, если надо будет. Но инструмент может приносить в этот мир достаточно сложные и лаконичные вещи в руках умелого мастера...)
It-developer; SadrA; for-elenak; A_Max; RonX01; ilyanet; +6 Ответить
15. brr 181 03.07.19 14:07 Сейчас в теме
17. fotov 283 03.07.19 15:24 Сейчас в теме
Тезисно
1. Про избыточность синтаксиса в простых случаях. Нормальный синтаксис и со временем читается очень даже нормально.
2. Про INSERT - запросы отправляются на сервер БД - как работать с обработчиками ПриЗаписи, ПередЗаписью и подписками на события?
3. Про подсветку кода, комментарии и автокомплит - они есть в EDT. Попробуйте, новый конструктор вполне себе торт.

Собственно проблема на с языком запросов, а с культурой программирования. Обычная практика - работа с БД и бизнес логика в одной процедуре, хотя, по-хорошему, надо разделять.
It-developer; for-elenak; user645799_spam_gds; Kinestetik; AllexSoft; awk; ilyanet; +7 Ответить
23. cool99 03.07.19 16:25 Сейчас в теме
(17)
Про избыточность синтаксиса в простых случаях. Нормальный синтаксис и со временем читается очень даже нормально

Тут есть люди которым флюент кажется жестью, хотя чтобы привыкнуть к нему требуется пара дней
2. Entity framework прекрасно работает с моделями представления записей таблиц, там есть так нужные вам и при записи и перед и вдоль и отличия старой записи от новой без всяких сохранений в доп свойствах. И все это отлично работает и с декларативными запросами и со флюентом/лямбда.
(17)
Обычная практика - работа с БД и бизнес логика в одной процедуре, хотя, по-хорошему, надо разделять.

Есть такой пример разделения - фрейворк MVC, там и есть разделение самих моделей данных, работа с ними по запросам и собственно сами формы (view).
It-developer; +1 Ответить
25. m-rv 915 03.07.19 16:27 Сейчас в теме
(17)
2. ну вот тут это как-то работает: https://infostart.ru/public/838790/
3. в edt подсветки синтаксиса запроса небыло.. по крайней мере в тексте процедурного модуля. допилили?
26. fotov 283 03.07.19 16:50 Сейчас в теме
(25)
2. Там просто синтаксический сахар, т.е. если в запросе микс из Выбрать и Изменить - будет несколько запросов, что будет работать некорректно.
3. Проверл - вполне работает (приложил скриншот)
Прикрепленные файлы:
It-developer; +1 Ответить
34. m-rv 915 03.07.19 22:52 Сейчас в теме
(26)
2. это следствие ограничений платформы. внутри платформы можно было бы сделать чтобы корректно отработал микс
3. это текст процедурного модуля или этот редактор надо отдельно открыть?
37. fotov 283 04.07.19 12:36 Сейчас в теме
(34)

2. это следствие ограничений платформы. внутри платформы можно было бы сделать чтобы корректно отработал микс
3. это текст процедурного модуля или этот редактор надо отдельно открыть?

2. Это в любом случае будет неоптимально
3. В редакторе текста запроса EDT
38. m-rv 915 04.07.19 14:50 Сейчас в теме
(37)
2. все будет ок
3. речь шла о виде запроса в тексте процедурного модуля
18. mikele_bes 8 03.07.19 15:27 Сейчас в теме
Такой синтаксис трудно воспринимается. Подумайте о других или о себе через пару месяцев после написания такого...
Несомненный плюс запросов в том, что их достаточно легко прочитать. А читаемость кода важнее экономии места в модуле.
amd1986; for-elenak; YanTsys; AllexSoft; rmIvanT; +5 Ответить
22. cool99 03.07.19 16:18 Сейчас в теме
(18) Создатели fluent api нервно курят в сторонке от таких заявлений.
ИМХО Как раз то читаемость кода во флюенте выше, чем в декларативном виде. Просто если нет опыта в нем, не нужно судить автора статьи.
19. sergathome 03.07.19 15:54 Сейчас в теме
Лично мне не хватает функциональности языка ака вложенные циклы (селекты в полях выборки) + подзапросы в соединениях. Всего эти две простые вещи сделали бы меня счастливым...
Остальное всё пусть будет, как жираф решил.
21. Dzenn 639 03.07.19 16:16 Сейчас в теме
Хайп детектед ;-) Не согласен с бОльшей частью претензий. Наверное, единственное, с чем согласен — нужна возможность писать комментарии в запросах.
for-elenak; Sashares; OPM; AllexSoft; A_Max; boln; ilyanet; +7 Ответить
27. DoReMi 03.07.19 16:59 Сейчас в теме
(21) так комментарии пишутся, только конструктор их выкашивает сразу же
28. Dzenn 639 03.07.19 16:59 Сейчас в теме
69. the1 940 12.07.19 16:40 Сейчас в теме
(21) Комментарии, подсветка, свертка, автокомплит. В принципе, всё.
29. AleksKaverin 03.07.19 18:44 Сейчас в теме
В общем автор хочет аналог ORM из RoR в 1С. Здравая мысль, но никогда реализована не будет.
39. lishniy 125 04.07.19 17:05 Сейчас в теме
И как часто приходится писать такие простые запросы? Хорошо если 1 из 50 запросов будет без объединений,
45. rmIvanT 56 05.07.19 10:04 Сейчас в теме
Что мешает Автору, описать самому все эти функции, какие нужны и тягать их в нужные модули из шаблонов.
Я думаю, что у каждого программиста должна быть своя библиотека подобных "универсальных" функций, ибо зачем и без того монструозный движок перегружать ещё больше.
51. m-rv 915 05.07.19 11:02 Сейчас в теме
(45) "в нужные модули из шаблонов" - это имеете ввиду вставлять как предлагали в 5 комменте? это частично облегчает ситуацию в момент написания кода, но никак не облегчает в момент чтения и не отменяет необходимости в лаконичных языковых конструкциях.
про монструозный движок вы ошибаетесь: если взглянуть на совокупность технологий (запросы, скд, объекты, формы и пр.) то они действительно представляют весьма монструозное впечатление. но каждая технология по отдельности весьма скудно реализует свой функционал, что я показываю на примере языка запросов
57. rmIvanT 56 08.07.19 09:15 Сейчас в теме
(51) Имелось ввиду, что оформить это всё как функцию/процедуру и хранить это дело в шаблонах. Типа:

Организация = СправочникиОрганизацииНайтиПо(Ложь, Ложь);

//Функция из шаблона...
Функция СправочникиОрганизацииНайтиПо(ПометкаУдаления,  Предопределенный)
// Нужный код...
КонецФункции;
63. m-rv 915 08.07.19 10:52 Сейчас в теме
(57) да, это как раз то что я имел ввиду.
такая функция может иметь большую или меньшую вариантивность, и вы привели вариант с меньшей вариативностью (и совсем не факт плохо это или хорошо), но моя общая мысть заключалась именно в необходимости таких оберток. мой вариант обертки - уже частность.
54. AllexSoft 05.07.19 15:26 Сейчас в теме
По п2 вполне понятно почему, интересно как автор с помощью DELETE собрался удалять документ или справочник с несколькими табличными частями? Это ведь то же таблицы, контроль целостности разработчик будет делать? Ну и про события модуля менеджера можно забыть.. я предпочту иметь модуль менеджера, чем иметь DELETE, который пригодился разве что для непереодических регистров сведений.. для периодических уже таблицу срезов чистить надо и простой DELETE там не прокатит.. а что будем делать с проверкой ролевой модели доступа? не нужно это все от слова совсем, все таки в 1с мы работаем с объектами, а не с табличной моделью.
По статье согласен с тем что отборы в 1с устроены не гибко, более менее гибко - в СКД, но к сожалению компановщик настроек нельзя запихнуть как параметр отбора в функцию .Найти( . Ну и комментарии в запросах очень нужны, приходится извращаться для того что бы прокомментировать какие то куски в запросах
55. m-rv 915 05.07.19 18:42 Сейчас в теме
61. AllexSoft 08.07.19 10:34 Сейчас в теме
(55) там циклом обычное создание элементов через модуль менеджера, мне кажется вы не понимаете чем отличается вставка строки таблицы напрямую в субд от вставки через "прокладку" 1с сервер например. То что в статье никакого отношения к инсерту не имеет, это обычная консоль запросов с обработкой результата + допилен синтаксис запросов. Вашу энергию, да в мирное русло бы...
ПС: в чем смысл то? уменьшить количество строк кода? ну видел я код вида
Если пр.Стр = тр.Стр Тогда
....
КонецЕсли;

Человек экономил буквы) вы то же этим занимаетесь?
65. m-rv 915 08.07.19 11:26 Сейчас в теме
(61) вы задаетесь очень комплексным вопросом. в целом, развитие всех языков программирования идет к уменьшению затрат на разработку и поддержку функционала. если предельно это упрощать, то да, нужно чтобы было меньше букв и их было легче читать. в этом смысле ваш пример соответствует критерию уменьшения букв, но не способствует читаемости.
Запрос типа ВСТАВИТЬ это конечно просто обертка над объектной моделью, я никогда не пытался утверждать обратного
59. user1249164 08.07.19 10:14 Сейчас в теме
Конечно. Фанатеем от них
67. Maximus-nsk 08.07.19 16:08 Сейчас в теме
после лаконичного синтаксиса python 1С-ка боль))
AntonProgma; Жолтокнижниг; brr; +3 1 Ответить
73. Жолтокнижниг 254 10.10.19 00:01 Сейчас в теме
(67) ммм, python, код которым хочется любоваться.
68. YanTsys 12 10.07.19 15:37 Сейчас в теме
Мне в запросах больше не хватает возможности выбирать уникальные идентификаторы элементов...
Windsor77; user1051670; brr; +3 1 Ответить
70. Glebis 11 26.07.19 11:50 Сейчас в теме
ПолучитьПараметры(СписокПараметров)


В БСП такое уже есть:
ОбщегоНазначенияКлиентСервер.ЗначенияРеквизитовОбъетов()

Кстати, в запросе из статьи нет условия
 Организации.ИНН = &ИНН
G_117106206056832682599; Matematik; +2 Ответить
90. G_117106206056832682599 25.03.21 20:43 Сейчас в теме
(70) И это не "процедура", а функция. Афтар безграмотен слегка.
71. vpaoli 31 09.10.19 15:47 Сейчас в теме
мне нравятся запросы хоть на 1С, хоть на SQL. А ЭТО не нравится.
72. Жолтокнижниг 254 09.10.19 23:58 Сейчас в теме
Каждый инструмент хорош для своих целей.

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

Основной плюс последних я вижу в динамическом формировании текстов и параметров, а также сохранение единой стилистики код
74. palsergeich 18.10.19 19:29 Сейчас в теме
МММ, а в чем проблема большого числа строк, один фиг руками все это пишут и правят только извращенцы.
Конструктор с обработкой результата и 2 клика, делов то.
Такая запись,ну ввиде такой Организация = Найти.В("Справочник.Организации").По_("НЕ ПометкаУдаления").ИПо("НЕ Предопределенный").ПолучитьСсылку(Истина); сосиски пом оему наборот читается хуже.
for-elenak; +1 Ответить
75. acanta 18.10.19 19:36 Сейчас в теме
А не достаточно ли будет раскрасить код запроса в тексте модуля так же как в конструкторе? Может фон текста чуть офф- сделать? Я немного писать пыталась, но имхо проблема а том что кода мало в модуле и текст запроса в спойлер как то сворачивается отдельно а не всей процедурой( я текст запроса из за этого в отдельную функцию всегда стараюсь вынести).
Хотя для поиска по реквизитам одного элемента использовать запрос тоже можно, вместо выборки по условиям отбора, но я не совсем понимаю разницу между запросом и выборкой, в профайлере они что, блокируются по разному?
76. Perfolenta 197 19.10.19 14:43 Сейчас в теме
Когда приходится дорабатывать или исправлять очень большой запрос, в котором много временных таблиц, и который собирается из частей программным путем, то хочется прибить того, кто это придумал...
Но с другой стороны, объектная логика будет ооочень медленной... что не приемлемо...
Так что компромисы неизбежны... и чаще всего побеждает производительность в ущерб удобочитаемости...
Но в одном автор прав... в простых случаях объектная логика была бы вполне приемлема, т.к. внутри все равно выполнялся бы аналогичный запрос... так зачем его самому писать?
79. Darklight 27 06.11.19 13:29 Сейчас в теме
(76)Здесь тоже можно собирать по частям (но только не тупым текстом, а путём вызовов операторов - т.е. функций) - в чем проблема?
81. Perfolenta 197 06.11.19 14:45 Сейчас в теме
(79) извините, не понял что вы имеете ввиду... не могу ответить...
82. Darklight 27 06.11.19 15:58 Сейчас в теме
83. Perfolenta 197 06.11.19 16:56 Сейчас в теме
(82) комментария (77) похоже не существует....
85. Darklight 27 07.11.19 14:22 Сейчас в теме
88. It-developer 20 20.11.20 12:05 Сейчас в теме
В целом понравилось. Может немного улучшить в плане самих названий и их применение. У меня тоже постоянно мысль, что с запросами что-то не совсем то. Т.е. они удобны, но для простых случаев - громоздки. Я заметил, что для меня стало в последнее время удобно в каких-то обработках, механизмах (когда необходимо получить данные с одной таблицы, но с применением разных фильтров/условий) выносить получение данных в отдельную функцию, а затем применять эти фильтры (таким образом уменьшается кол-во запросов и код).

Ваш стиль - это лямбда программирование - говорят было модно недавно, но утратило, немного, популярность - из-за сложности кода. Но в плане уменьшения - самое оно
89. G_117106206056832682599 25.03.21 20:42 Сейчас в теме
для простых случаев - давайте попробуем глянуть на процедуру, получающую организацию по умолчанию (это не я придумал, это код типовой УТ)

Это функция тащемто.
Много букаф на тему - фе я такой крутой программист, что вадинес ваш провинцияльный и кривой.
Язык запросов это наглядный инструмент, создавался в том числе не только для профессионалов, а для людей далеких от программирования.
Отсюда наглядность.
91. AntonProgma 34 23.06.21 11:41 Сейчас в теме
Для простых запросов использую свои функции. Что-то типа
ВыполнитьЗапрос(
    "Справочник.Номенклатура", 
    "$Ссылка, $Наименование", // поля
    ,  //структура параметров
    "$ПометкаУдаления" // условия
);

Где $ заменяет псевдоним источника.

Читать легче, чем запрос. И самое главное - достигается атомарность команды. Удобная абстракция над всеми необходимыми командами.
Оставьте свое сообщение

См. также

Навигатор по конфигурации базы 1С 8.3 Промо

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

Универсальная внешняя обработка для просмотра метаданных конфигураций баз 1С 8.3. Отображает свойства и реквизиты объектов конфигурации, их количество, основные права доступа и т.д. Отображаемые характеристики объектов: свойства, реквизиты, стандартные рекизиты, реквизиты табличных частей, предопределенные данные, регистраторы для регистров, движения для документов, команды, чужие команды, подписки на события, подсистемы. Отображает структуру хранения объектов базы данных, для регистров доступен сервис "Управление итогами". Платформа 8.3, управляемые формы. Версия 1.1.0.85 от 10.10.2021

3 стартмани

28.10.2018    45881    408    ROL32    72    

Универсальный редактор данных (УРД)

Инструментарий разработчика Инструменты администратора БД v8 Абонемент ($m)

Универсальный редактор данных (УРД) - это лучший инструмент в своем классе, который позволяет редактировать реквизиты и движения объектов

1 стартмани

27.08.2021    6178    127    Adeptus    51    

Подсистема "Показатели объектов"

Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

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

2 стартмани

06.03.2021    7233    6    pila86    16    

Внешняя компонента: Android tools

Мобильная разработка Разработка внешних компонент v8 v8::Mobile Абонемент ($m)

Несколько дополнительных функций для мобильного приложения\клиента под Android. Размер архива внешних компонент под архитектуры ARM и x86 - 230KB.

1 стартмани

12.01.2021    6142    18    KAV2    13    

Удаление и/или копирование сохраненных в 1С настроек (например настроек печати табличных форм) Промо

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

Иногда нужно удалить сохраненную в 1С "покореженную" настройку или скопировать "удачную" другому пользователю...

1 стартмани

01.09.2012    67073    1378    AnryMc    46    

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5

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

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

5 стартмани

21.12.2020    10428    27    huxuxuya    11    

Внешний регламент для 1С

Прочие инструменты разработчика v8 Россия Абонемент ($m)

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

1 стартмани

05.03.2020    8888    9    moolex    11    

CF & SQL : конструктор прямых запросов к БД 1С

Инструментарий разработчика Администрирование СУБД v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

02.10.2019    31124    299    dmitrydemenew    63    

Faster - многофункциональный ускоритель работы программиста 1С и других языков программирования Промо

Инструментарий разработчика v8 1cv8.cf Россия Абонемент ($m)

Программа Faster 9.4 позволяет ускорить процесс работы программиста (работает в любом текстовом редакторе). Подсказка при вводе текста на основе ранее введенного текста и настроенных шаблонов. Программа Faster позволяет делится кодом с другими программистами в два клика или передать ссылку через QR Код. Исправление введенных фраз двойным Shift (с помощью speller.yandex). Переводчик текста. Переворачивает текст случайно набранный на другой раскладке. Полезная утилита для тех, кто печатает много однотипного текста, кодирует в среде Windows на разных языках программирования. Через некоторое время работы с программой у вас соберется своя база часто используемых словосочетаний и кусков кода. Настройка любых шорткатов под себя с помощью скриптов. Никаких установок и лицензий, все бесплатно.

1 стартмани

24.05.2012    85214    967    moolex    157    

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

Работа с интерфейсом v8 ERP2 УТ11 Россия Абонемент ($m)

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

1 стартмани

09.09.2019    18199    35    bmk74    7    

Работа с релизами 1С и договорами ИТС

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

Работа с релизами 1С и партнерским кабинетом.

2 стартмани

15.08.2019    21746    65    RocKeR_13    37    

Модель объекта

Инструментарий разработчика v8 Абонемент ($m)

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

1 стартмани

30.06.2019    16981    1    vadim1980    5    

Консоль запросов с графом (Анализатор сложных запросов) Промо

Консоль запросов v8::УФ v8::Запросы 1cv8.cf Абонемент ($m)

Консоль запросов для анализа запросов с большим количеством временных таблиц и вложенных запросов. Отображает структуру взаимосвязей временных таблиц в виде графа. Позволяет быстро передвигаться по тексту запроса и получать результат выполнения подзапросов. Единственная консоль запросов, которая позволяет выводить результат выполнения вложенных запросов и любой части объединения запроса. Удобное получение данных запроса из отладчика включая временные таблицы. Текст запроса в структурированном виде (можно свернуть, развернуть текст подзапроса). И еще много другого, чего вы не найдете в других консолях запросов. Поддержка УФ и ОФ. Версия 0.9.1 от 18.10.2019 (поддержка WebKit).

10 стартмани

03.05.2017    106331    500    manuel    289    

Блин, мы забыли включить регламентные задания…

Сервисные утилиты v8 Абонемент ($m)

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

1 стартмани

08.04.2019    25348    19    slozhenikin_com    37    

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019)

Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Мобильная разработка Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ v8 v8::Mobile БУ УУ Абонемент ($m)

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

5 стартмани

09.01.2019    63041    271    informa1555    239    

Легкое и гибкое управление списком доступных баз 1С у пользователей

Стартеры 1С Сервисные утилиты Администрирование СУБД v8 1cv8.cf Россия Абонемент ($m)

Когда в локальной сети много пользователей, а еще большое количество различных баз и при этом каждому нужны свои, то администрирование этого зоопарка превращается в АД! Этот комплекс позволяет централизованно управлять списком доступных баз в разрезе пользователей. За пару кликов можно добавить или убрать базу у всех пользователей.

7 стартмани

05.12.2018    22134    22    RomikR    9    

Установка предопределенных элементов: просмотр, исправление и поиск ошибок (задвоенных и отсутствующих) Промо

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

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

2 стартмани

06.10.2014    170714    2770    ekaruk    170    

Очистка кэша 1С 8 (8.0, 8.1, 8.2, 8.3). Грамотная чистка кэша 1С с сохранением настроек.

Чистка данных Сервисные утилиты Инструменты администратора БД v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

04.11.2018    54429    538    Eugen-S    35    

Открывашка ячеек таблиц

Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Глобальное сочетание клавиш для открытия объекта по ссылке из текущей ячейки любой таблицы в большинстве управляемых форм

1 стартмани

27.10.2018    22814    13    tormozit    38    

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

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

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

1 стартмани

21.09.2018    31688    24    stvorl    1    

TextRadar - нечеткий поиск в тексте

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

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

1 стартмани

19.09.2018    24208    32    TSSV    19    

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

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

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

1 стартмани

13.09.2018    29630    15    RocKeR_13    16    

Управляемая консоль запросов, отчетов 3.8.9 (расширение, внешняя обработка)

Консоль запросов v8 v8::УФ v8::Запросы v8::СКД 1cv8.cf Абонемент ($m)

Работа с запросом и СКД, Полная поддержка пакетных запросов, временных таблиц, Сравнение результатов, текстов, Разбор структуры запроса в виде дерева, Анализ плана запроса, Групповая обработка

5 стартмани

14.08.2018    125554    3005    Evg-Lylyk    749    

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

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

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

5 стартмани

09.08.2018    37532    31    informa1555    30    

Визуализация событий на временной шкале средствами "Поле HTML документа"

Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Интересный способ наглядно отобразить события на временной шкале. Например, может быть применен для красивого вывода документов по клиенту. Тестировалось на платформе 8.3.12.1469

1 стартмани

31.07.2018    29539    146    Plotks2017    27    

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

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

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

1 стартмани

17.07.2018    69635    25    kalyaka    17    

Приложение Android для идентификации/распознавания образов (с обучением с одного раза, One-Shot Learning) с возможностью работы с 1С через веб-сервис

Мобильная разработка v8 Абонемент ($m)

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

1 стартмани

19.06.2018    19908    5    informa1555    16    

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

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

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

1 стартмани

01.06.2018    37768    97    m-rv    58    

Регистры правил [Расширение]

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

Регистры правил - права доступа, запрет редактирования, автоподстановка реквизитов и т.д.

10 стартмани

15.03.2018    23598    30    33lab    5    

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

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

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

1 стартмани

08.02.2018    35698    20    mvxyz    17    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

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

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    34050    60    kwazi    6    

Мобильное приложение "Отчет по проделанной работе"

Мобильная разработка Учет рабочего времени Учет рабочего времени v8 Россия УУ Абонемент ($m)

Приложение выполняет фиксацию рабочего времени у клиентов, а также заявок на работы, пригодится как шаблон для разработки своего или как готовое решение для работников в сфере услуг, которые фиксируют время у клиентов. В приложении 2 документа: первый "отчет за день", второй "заявка" и полезный инструмент "Отчет задачи", который в свою очередь создан для просмотра, анализа и закрытия заявок. Тестировал на Iphone 6s.

10 стартмани

01.12.2017    28871    10    olejnikov_m    6    

Программное формирование форматированной строки в стиле html+inline CSS

Работа с интерфейсом Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

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

1 стартмани

18.11.2017    43901    46    bonv    13    

Быстрое удаление неиспользуемых версий 1С:Предприятие 8, кэша метаданных и информационных баз

Сервисные утилиты v8 Абонемент ($m)

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

1 стартмани

14.11.2017    29220    96    bonv    15    

Расширенная настройка динамического списка УФ

Работа с интерфейсом v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

31.05.2017    39461    161    tormozit    25    

Расширения конфигураций 1С: учимся перехватывать методы

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

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

1 стартмани

30.05.2017    169937    13    signum2009    49    

Набор подсистем "Умные таблицы"

Инструментарий разработчика v8 Беларусь Россия Казахстан Абонемент ($m)

Данный набор подсистем – прикладная библиотека, призванная помочь программисту 1С быстрее решать ряд типовых задач бизнес-логики, таких как: ведение статусов объектов, отправка почтовых сообщений в определенное время, ведение произвольных таблиц с возможностью редактирования, сохранения и группировки, ориентированные на расчет бюджетных таблиц (план продаж, ретробонусы B2C, проценты по договорам B2B и договорные условия по КАМ), расчет коммерческой политики для бюджетных таблиц, исполнение произвольных алгоритмов с хранением кода в информационной базе, определение рабочих баз, хранение файлов во внешних СУБД (Postgre SQL, MS SQL и MongoDB) и выполнение произвольного кода после изменений ссылочного объекта вне транзакции изменения.

1 стартмани

22.05.2017    38201    105    Silenser    34    

Автокликер для 1С

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

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

1 стартмани

03.04.2017    37114    82    slava_1c    67    

Универсальный поиск объектов по глобальному уникальному идентификатору (ГУИД, GUID)

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

Универсальная обработка поиска объектов информационной базы по глобальному уникальному идентификатору (ГУИД, GUID) или по его части.

1 стартмани

06.09.2016    40616    113    Dzenn    9    

Конструктор-тестер http запросов в 1С

WEB Инструментарий разработчика v8 1cv8.cf Россия Абонемент ($m)

Данная обработка позволяет в несколько кликов конструировать http запросы на языке 1С и просматривать результаты их выполнения.

3 стартмани

19.08.2016    49086    319    hlopik    19    

Полное решение билетов сертификации 1С: Специалист УТ 11

Решение задач на 1С:Специалист v8 УТ10 Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m)

Решение 10 основных билетов на экзамене 1С: Специалист по УТ 11. Все билеты попадались группе пользователей, из которой сдали все.

1 стартмани

18.08.2016    30865    133    maksimov-y-v    6    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут

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

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    55888    36    Demanoidos    60    

Подсистема обмена данными с порталом ИМНС по электронным счетам-фактурам (автоматический обмен)

Внешние источники данных WEB Инструментарий разработчика v8 1cv8.cf Беларусь БУ НДС Абонемент ($m)

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

1 стартмани

28.07.2016    38849    20    c1nil    4