Имя: Пароль:
1C
 
Семёрошный стиль
☑
0 Anchorite
 
30.10.26
✎
10:51
На правах пятничного: много раз слыхал, что заядлого клюшечника якобы можно уверенно сдетектить по стилю восмёрошного кодонаписания. Поесните нюфане, каг таг.
1 toypaul
 
гуру
30.10.26
✎
10:58
(0) непонимание как работает клиент сервер. обращение через точку. переменные в стиле пБум, тЛяЛя.

Переделывал последние два месяца код за таким.
2 formista2000
 
30.10.26
✎
10:59
Контрагент = 0;
3 PLUT
 
гуру
30.10.26
✎
11:27
(0) вымирающий вид

щас сильные погромисты с подписькой на клод за 20 американских рублей в месяц (которые ни разу не погромисты, но "хороший" код и главное очень много кода "пишут")
4 PLUT
 
гуру
30.10.26
✎
11:34
(1) > Переделывал последние два месяца код

реfuckторинг кода
5 rozer76
 
30.10.26
✎
11:34
вместо запросов все делает через таблицузначений
6 Garykom
 
гуру
30.10.26
✎
11:36
(1) >обращение через точку
А вот тут интересный момент
Если тебе надо много реквизитов объекта - проще через точку ибо закеширует
Фактически будет почти вызов ОбъектСсылка.ПолучитьОбъект()

Понятно когда один-два реквизита то лучше сразу
СтруктураРеквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбъектСсылка, "ИменаРеквизитов");

Но не лучше когда последовательно делают:
Реквизит1 = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "ИмяРеквизита1");
Реквизит2 = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "ИмяРеквизита2");
// ...
7 Garykom
 
гуру
30.10.26
✎
11:38
(6)+ Кстати в запросах тоже можно обычно не париться и делать через точку, понятно не всегда и не везде
Какая нафик разница оно само неявно или ты сам явно соединение сделаешь
Но это не касается составных типов реквизитов - тут только явно самому делать ибо неявное хренакнет кучу соединений!
8 Garykom
 
гуру
30.10.26
✎
11:42
(5) Прикинь я результат запроса почти всегда выгружаю в ТЗ
Вместо выборки
Это же идиотизм выборку (из результатов запроса) параметром передавать в процедуры/функции
Или как получишь Количество() ? Когда надо условия сделать от 0, 1 или 2 или многа
И да это не считая что так удобней для отладки, ТЗ глянуть без ИР и прочих
9 mikecool
 
30.10.26
✎
11:46
(8) молодец, возьми с полки пирожок, вместо одного набора данных делаешь два
10 Мультук
 
гуру
30.10.26
✎
11:50
(8)

Надеюсь, тз с именем тз ? :-)

тз
й
стр
строка
флаг

Мои одноразовые переменные, которые живут 1-5 строк.
Ну или код настолько тривиален, что нормальные имена просто не нужны.

И да, префиксом "п" я пользуюсь, ибо пространство имён в 1С это жуть жуткая.

(9)

Не экономит он ОЗУ.
И это он делает в эти непростые времени, когда с ОЗУ очень тяжело.
Вернуть его в наказание на 640Кб, ибо как известно...
11 Мультук
 
гуру
30.10.26
✎
11:56
(9)

Типовой механизм ЕРП, при проведении документа выполняет туеву хучу запросов и выгружает весь пул данных для движений в таблицы значений, чтобы потом засунуть всё это в регистры.

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

Ах да. Так ведь удобнее в разработке, отладке.


Красиво/не красиво
Удобно/не удобно.
12 PR
 
30.10.26
✎
12:11
(0) Напремег мажна частаг замичадд сроффнене с фоллос и труум
ЗЫ: а в чем прикол этого тупого недосуржика?
13 paramedic
 
30.10.26
✎
12:23
(11) Не совсем так. Там, где сразу нужны данные в "плоском" виде - ТЗ, где используется перебор - используются выборки или комбинация выборки+ТЗ из разных составляющих пакета запросов.
14 Web00001
 
30.10.26
✎
12:27
(6)
Но не лучше когда последовательно делают:
Реквизит1 = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "ИмяРеквизита1");
Реквизит2 = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "ИмяРеквизита2");

Когда нашел функцию "ЗначениеРеквизитаОбъекта" но не нашел "ЗначениеРеквизитовОбъекта"
(8)
Это же идиотизм выборку (из результатов запроса) параметром передавать в процедуры/функции
Это идиотизм выгружать в ТЗ результат запроса, только потому, что боишься передать выборку. Никакого нет негатива к ТЗ. Но если она не нужна, то и делать ее не надо. Ты там по дороге еще в массивы структур что ни будь повыгружай, ну типа а чобы нет, просто по приколу.

Или как получишь Количество()

Прям вот так и получишь Выборка.Количество()
15 Гений 1С
 
гуру
30.10.26
✎
13:10
(0) в типовых не ставили пробелов.
77:
а=б;
8х:
а = б;

Очень часто видно.
Плюс использование числа 1 и 0 вместо булево часто.
16 Garykom
 
гуру
30.10.26
✎
13:21
(14)
Прям вот так и получишь Выборка.Количество()

Молодец, теперь возьми предпоследнее значение

Я не спорю что Выборка тоже хорошо
Но применять ее надо на огромных результатах запроса
Чтобы по памяти сервер 1С не упал

Если ты знаешь что у тебя малый результат (печатная форма например) - ну так получи ТЗ и передай ее дальше в процедуры/функции заполнения печформ.
А не как в типовых кучу выборок передаем параметрами чтобы накладную сформировать для печати...
17 Garykom
 
гуру
30.10.26
✎
15:20
(9) 1. Не всегда
2. И не два а один
В память сервера 1С разом получаем из СУБД в ТЗ
Вместо того чтобы построчно из сервера 1С смещая курсор дергать СУБД
Причем заставляя СУБД держать ВТ с результатами запроса/выборкой в его памяти
18 Злопчинский
 
30.10.26
✎
19:23
Для ы = 1 по ...
19 MWWRuza
 
гуру
30.10.26
✎
19:55
(15) А чегой-то так?
Я "застарелый клюшечник", но пробелы и табуляции ставлю всегда... Просто так читать свои каракули легче, когда все "ровненько", чем там "как бык пос**ал":


Но, это не типовая, а мое личное :-)
20 Zamestas
 
30.10.26
✎
20:37
(5) Ну я себя часто ловлю на мысли, что это из семерки ноги растут - так как обычно всё собираю запросами во временную таблицу(ы), шлифуя запросами с соединением до приемлемого состояния.
21 Guk
 
30.10.26
✎
20:50
(15) >> в типовых не ставили пробелов.

так мы выяснили, что сирожа никогда в глаза не видел типовые семерочные конфигурации.
зато всегда видно в типовых семерочных конфигурациях присутствие криворукого фрилансера. это всегда: названные через жопу переменные, все с маленькой буквы, нигде нет разделительных пробелов, нигде нет разделительных строк.
такое впечатление, что этих убогих в детстве покусали заглавные буквы, пробелы и пустые строки...
22 eddy_n
 
30.10.26
✎
20:45
Мин и Макс - и сразу всё ясно.
23 Злопчинский
 
30.10.26
✎
22:02
(22) а это что за мессенджер такой - Мин..?
24 Злопчинский
 
30.10.26
✎
22:06
Ненавижу когда после оператора тчкзпт не ставят. Да, так можно, но повбывав бы...
25 Web00001
 
31.10.26
✎
08:35
(16) >Но применять ее надо на огромных результатах запроса
Применять ее надо тогда, когда выгружать в ТЗ или нет смысла (например тебе не нужен произвольный доступ к результатам запроса)

>ну так получи ТЗ и передай ее дальше в процедуры/функции заполнения печформ.
Просто указание. Делайте так как я сказал. Ну чисто гипотетически, вдруг окажется, что надо взять предпоследнее значение, что делать будете? Непонятно, почему программист пишет про какие-то обряды и верования (не передавайте выборку в функцию, потому, что потом я не смогу найти источник и выгрузить оттуда результат запроса). Просто какой-то сюр.
26 Garykom
 
гуру
31.10.26
✎
11:21
(25) Вероятно еще не приходилось дорабатывать типовые?
Например в плане добавления/заполнения своих колонок в печатных формах
Там в исходные запросы вклиниться и везде пробросить новые поля нереально
Приходится уже позже присоединять

И как понимаем присоединить к выборке никак, получается говнокод с запросами в цикле
А были бы ТЗ переданы вместо выборок из результатов запроса просто эти ТЗ можно засунуть в запрос, сделать одно соединение и полученную новую ТЗ передать дальше с новыми полями/колонками
27 LoneMan
 
31.10.26
✎
11:42
Таблицы значений постоянно используются в типовых. Это же не учебный экзамен. Помнится, писал расширение для доработки печ. формы. Так аудит не пропустил вроде как потому, что в запросе было обращение к регистратору через точку, то есть претензия была к типовому коду. Да и так понятно, что типовая вряд ли какой аудит пройдёт - бескрайний перечень предупреждений наверно будет.
28 LoneMan
 
31.10.26
✎
11:42
*обращение через точку после регистратора. что-то типа такого
29 Garykom
 
гуру
31.10.26
✎
12:01
(27) >типовая вряд ли какой аудит пройдёт - бескрайний перечень предупреждений
Без наверно
С сонаром доработка типовых модулей превращается в ахтунг, приходится сначала владельца кода менять (скидываем все предупреждения в никуда "на вендора")
И только затем правки вносить

И да там в типовых постоянно выборки как параметры через кучу вызовов процедур/функций пробрасывают
И считают это нормально что бедная СУБД держит и ВТ с результатами и соединение и что ее в режиме как по COM дергают по одной записи - что было нормально только в древние времена с толстыми клиентами 1С 7.7 сразу к СУБД без трехзвенки
30 Сергиус
 
31.10.26
✎
11:54
(0)Как ни крути, но весь код современных типовых имеет корни с 7.7, как бы его не причёсывали..
31 Web00001
 
31.10.26
✎
12:54
(26)Регулярно дорабатываю. С утверждением, что вклиниться нереально, не согласен. Может у меня какие-то не правильные типовые(ЕРП, УТ, ЗУП) но там все красиво. Получение всех данных всегда в одном месте, это модуль мендежера объекта владельца печатной формы. Кроме некоторых случаев(вроде УПД). Сложностей с модификацией как правило не возникает. Может примеры какие-то приведешь? Пока не понимаю, о чем речь.
32 Garykom
 
гуру
31.10.26
✎
13:21
(31) И никогда не видел в ERP
Обработки.ПечатьОбщихФорм.СформироватьПечатнуюФормуСчетФактура()

И там внутри вызов ЗаполнитьТабличныйДокументСчетФактура()
?

Это чуть уже старая конфа 1С:ERP. Управление холдингом (3.1.12.11)
33 eddy_n
 
31.10.26
✎
13:20
(23) Это - любимые подходы семёрочников
34 rozer76
 
31.10.26
✎
13:44
(33) а восьмерочный, это вместо а=Мин(к,м)
писать а=?(к<м,к,м) чтоле?
35 Гена
 
гуру
31.10.26
✎
15:23
Семёрошный Централ! Ветер северный...
36 Garykom
 
гуру
31.10.26
✎
16:19
(34) Поведение функции Мин (или Макс) хз в отличие от условия
В условии точно все сначала попытаются привести к числам а затем сравнить
Куда и что выйдет из
 = Мин(Истина, 1, '00010102', "1")
большое хз
37 Anarki
 
31.10.26
✎
18:29
(26) в чем проблема "вклиниться" не очень понятно. Можно схемой запроса вклиниваться что бы инъекция была максимально безболезненной
38 Garykom
 
гуру
31.10.26
✎
18:57
(37) Попробуй, см (32)
39 Garykom
 
гуру
31.10.26
✎
18:59
(37) Там километровые запросы с кучей ВТ
Которые собираются и модифицируются по куче типовых модулей/процедур с передачей объекта Запрос и МВТ
Нафуй-нафуй
40 Anarki
 
31.10.26
✎
19:26
(37) ага, весь этот километровый запрос собираешь в консоле через отложенную отладку. Находишь места для инъекций, переносишь в конфу.
41 eddy_n
 
31.10.26
✎
20:36
(34) Именно.
42 Garykom
 
гуру
31.10.26
✎
20:38
(40) А потом типовая обновляется и?
43 Ботаник Гарден Меран
 
31.10.26
✎
20:51
(42)
Расширение, схема запроса.
Не печатные формы, конечно, но 1С постепенно в типовых  многое переделывает на эту методику.
44 Chai Nic
 
31.10.26
✎
21:18
(10) Я проводил эксперимент, сравнивал по потреблению памяти процесса обращение к огромному результату запроса через выборку или выгрузку. Один фиг, в первом приближении.
45 Garykom
 
гуру
31.10.26
✎
22:16
(44) А раз один фиг то надо использовать что удобней.
46 Guk
 
31.10.26
✎
22:33
как не крути, ТЗ удобнее. не понимаю упоротости запросодрочеров. сравните скорость нахождения ошибок в запросе и ТЗ. отладка в куче запросов с кучей ВТ это вообще квест. кому это надо?...
47 Anarki
 
31.10.26
✎
22:55
(42)и ты обновляешь. Если это единственная разработка, то то как я описал делать не нужно конечно. А если это твоя любимая 1сочка, то делай все так как сделали бы разработчики типовой.
48 Anarki
 
31.10.26
✎
22:58
(46) ты точно знаешь что можно выгрузить весь запрос (не результат запроса, запрос) в консоль и там его рассматривать со всех сторон, со всеми вт, со всеми источниками данных и параметрами?
49 Guk
 
31.10.26
✎
23:05
(48) конечно...
50 Anarki
 
31.10.26
✎
23:07
(49) ок, тогда я не понял (46)
51 rsv
 
01.11.26
✎
13:55
(0) зачем сравнивать процедурное прогание 7.7 и 8.*.
Оно одинаковое.
52 X Leshiy
 
01.11.26
✎
22:56
(45)
Да что эти пионеры понимают в ТЗ?!)))
Всегда использую ТЗ, если нужно хотя бы на миллиметр больше, чем просто пройтись по выборке.
Лучше я кластер дерну лишний раз, чем СУБД)
53 Санта Клаус
 
02.11.26
✎
10:13
(0)ну, это уж если совсем человек сел первый раз за восьмерку. Потом, семерочники не такие уж тупые - им всем уже далеко за и у 99% опыт не один десяток лет. И когда садятся за 1С8, то и используют то, что нужно. А если, например, зумера посадить за 7.7, что там получится
54 maxab72
 
02.11.26
✎
11:07
(53) Вы его за 7.5 посадите... где еще ТЗ не было как класса...
55 PLUT
 
гуру
02.11.26
✎
11:20
(53) > И когда садятся за 1С8, то и используют то, что нужно

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

джысон еще и фабрика XDTO. в 7.7 такого никогда такого не было
56 Garykom
 
гуру
02.11.26
✎
11:32
(55) а кто не смог освоить новое - или в аналитики или совсем уходят
57 rsv
 
02.11.26
✎
11:41
(55) приличный самопал 1.8* будет без этого всего работать. А типовые да…
58 Dmitrii
 
гуру
02.11.26
✎
11:45
Ключевое отличие стиля кодирования клюшечника от стиля восьмёрочника будет действительно в работе с ТЗ.

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

ТЗ = Новый ТаблицаЗнчений;
ТЗ.Колонки.Добавить("Накладная");
ТЗ.Колонки.Добавить("Номер");
ТЗ.Колонки.Добавить("Дата");
ТЗ.Колонки.Добавить("Товар");
ВыборкаПриходных = Документы.ПриходнаяНакладная.Выбрать(ДатаНачала, ДатаОкончания);
Пока ВыборкаПриходных.Следующий() Цикл
  // Тут будет реализован отбор при помощи операторов Если
  // потому что про объект Отбор и про параметр Отбор (структура)
  // метода Выбрать клюшечник не знает
  Если ВыборкаПриходных.Контрагент.ИНН <> "7700000000" Тогда
    Продолжить;
  КонецЕсли;
  // Потом цикл обхода строк табличной чатси
  КолСтрок = ВыборкаПриходных.Товары.Количество();
  // Цикл обхода разумеется по индексу
  // Потому что про цикл Для Каждого семёрочник тоже не знает
  Для ИндексСтроки = 0 По КолСтрок-1 Цикл
    НовСтрокаТЗ = ТЗ.Добавить();
    новСтрокаТЗ.Накладная = ВыборкаПриходных.Ссылка;
    новСтрокаТЗ.Номер = ВыборкаПриходных.Ссылка;
    новСтрокаТЗ.Дата = ВыборкаПриходных.Ссылка;
    СтрокаТовара = ВыборкаПриходных.Товары[ИндексСтроки]
    новСтрокаТЗ.Товар = СтрокаТовара.Номенклатура;
    ИндексСтроки = ИндексСтроки + 1;
  КонецЦикла;
КонецЦикла;

И при этом в ТЗ не будут собраны все нужные данные.
Все нужные данные будут дособираться в многочисленных циклах обхода этой ТЗ с обращениями к нужным реквизитам через точки. А если по дороге понадобятся какие-то связанные данные (например, подчиненные счета-фактуры или заказы) их семёрочник будет так же искать объектными методами, через выборки и переборы, и разумеется в цикле, а не запросами.
59 rsv
 
02.11.26
✎
11:42
Самопал даже быстрее будет шуршать ….
60 rsv
 
02.11.26
✎
11:49
(58)  в 7 ке не было ansi sql . Это дало хлеб ado, 77 плюс и до кучи всего. В 8 ке он появился .
61 PLUT
 
гуру
02.11.26
✎
11:53
(58) у ТЗ есть еще типизацыя колонок, чтобы в запрос во временные таблицы запихивать. ну и приколы со строками неограниченнной длины в запросах, если в ТЗ у строки не ограничить длину..

Дичь какая-то
ТЗ = Новый ТаблицаЗнчений;
ТЗ.Колонки.Добавить("Накладная");
ТЗ.Колонки.Добавить("Номер");
ТЗ.Колонки.Добавить("Дата");
ТЗ.Колонки.Добавить("Товар");
62 maxab72
 
02.11.26
✎
11:56
(58) ну не надо на семёрошников клепать. Они в запросы умеют (даже не смотря на тот ужас что был в клюшках). И что запрос это быстрее - они знают. Отличие скорее в другом: упёртые семёрошники будут по привычке тащить всю логику на клиента, чтоб было поближе к пользователю и его кнопочкам. А гонять между сервером и клиентом данные для них дико и несуразно. И им видится нелогичным, что с сервера нельзя обратиться напрямую к клиенту (например, чтоб выдавать пользователю какие-то сообщения в ходе отработки сложного и длительного алгоритма на клиент-сервере надо поизвращаться, а на клюшках это элементарно за отсутствием сервера). То есть семёрошники они более интерфейсноориентированные (семерка объективно работала быстро и на экономию времени процессора не смотрели), а восьмерочики больше думают о производительности и экономии времени запросов (а не о конечном пользователе).
63 PLUT
 
гуру
02.11.26
✎
12:06
(62) еще всякие блаблатеки из трёх буков (БСП, БПО, БИД, БЭД, БТС)

Г1С вот свою фиксопедию решил делать для Ф3
64 Санта Клаус
 
02.11.26
✎
12:09
(55) когда начинал на 1с8 10 лет назад, то тупо в гугле сразу искал - как написать то или иное
65 Garykom
 
гуру
02.11.26
✎
12:11
А скажите ка
Как правильно очистить (сделать пустыми) реквизиты объекта?
Причем для разных типов.
66 rsv
 
02.11.26
✎
12:14
(65) Обьект.А = “”;
67 Garykom
 
гуру
02.11.26
✎
12:18
(66) Не кажется странным попытка присвоить значение пустой строки совершенно иному типу?
Вот
Обьект.А = Неопределено;

еще могу понять
68 rsv
 
02.11.26
✎
12:20
(67)  упадет ?
69 Ботаник Гарден Меран
 
02.11.26
✎
12:20
Семерка - это быстро только в ларьке.
В восьмерке работа с данными бд стала компактнее и появилось много интерфейсных излишеств.
"С сервера нельзя обратиться напрямую к клиенту" - так а для чего 1С объявляет процедуры модуля формы экспортными? Нельзя только потому, что главный методист так решил, но понемногу откатывают это решение костылями.
70 Dmitrii
 
гуру
02.11.26
✎
12:21
(62) >> не надо на семёрошников клепать.

И не думал.
Эту проблему можно описать словосочетанием "делаю как умею (привык)".

>> Они в запросы умеют... И что запрос это быстрее - они знают.

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

По поводу второго довода ("своеобразная" работа с формами) о разделении клиента и сервера соглашусь.
71 Ботаник Гарден Меран
 
02.11.26
✎
12:30
(65)
Б = Новый(ТипЗнч(А));
ЗаполнитьЗначенияСвойств(А, Б);
72 ADirks
 
02.11.26
✎
13:09
(62)
>> То есть семёрошники они более интерфейсноориентированные (семерка объективно работала быстро и на экономию времени процессора не смотрели), а восьмерочики больше думают о производительности и экономии времени запросов (а не о конечном пользователе).

Да никто вообще не думает об экономии каких-то там ресурсов. Шевелится приемлемо - и хорошо.
Семёрка работает быстрее на современном железе. На железе начала 2000 оно тоже не летало. И этот факт как раз свидетельствует о том, что раньше _приходилось_ делать менее ресурсоёмкие решения.
И на экономию процессора как раз таки временами всё же смотрели. А вот в восьмёрке уже не очень то смотрят (я сужу по коду в типовой БП).
73 maxab72
 
02.11.26
✎
13:14
(72) на столе у дира стоял крутой игровой комп с пентиум 4, на нем все летало, а что было у бушек с их разогнанными 386 мало кого волновало.
74 Guk
 
02.11.26
✎
14:12
(58) уже сто лет в 8-ке не видел кода с выборкой, документов или справочников. независимо от того, кто писал код, природный восьмерочник или упоротый семерочник. а чтобы собирать все данные по ссылочным объектам выборкой, это надо быть не упоротым семерочником, а обычным клиническим имбецилом...
75 Garikk
 
гуру
02.11.26
✎
14:44
(74) <а обычным клиническим имбецилом...>
переоцениваете вы людей, таких больше чем хотелось бы
я конечно мало в последнее время видел 1Сных нетленок,
но в большом ИТ таких уникумов сильно много както
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой