![]() |
|
OFF. Сколько сусликов ты видишь ? | ☑ | ||
---|---|---|---|---|
0
Мультук
26.07.24
✎
08:58
|
Отцы, пожалуйста, дайте возможность и другим поработать мозгом.
Вот такой чудесный код. Он синтаксически верен (1С не ругается и код выполняется). Но есть нюансы. :-) Должен проверять: "а есть ли движения в РН "Продажи" у единичного {не в цикле} ссылкаДокументРеализации" Если ссылкаДокументРеализации.ПолучитьОбъект().Движения.Продажи.Количество() > 0 Тогда //что-то Иначе //что-то другое КонецЕсли; P.S. И такая дребедень "каждый день", "каждый день". (с) |
|||
1
lEvGl
26.07.24
✎
09:39
|
в чем прикол то
пс. прежде чем .Количество() надо .Прочитать() В или На Украине? Прежде чем стать В, надо быть сначала На (с) |
|||
2
Ненавижу 1С
26.07.24
✎
09:53
|
Ну объект поднять из базы на всякий случай, чтобы не простаивало
|
|||
3
Valdis2007
26.07.24
✎
10:19
|
(2) второй раз?
|
|||
4
YFedor
26.07.24
✎
10:22
|
Я бы сделал что-то типа:
естьДвижения_ = Ложь; движения_ = Неопределено; объект_ = ссылкаДокументРеализации.ПолучитьОбъект(); Если ЗначениеЗаполнено(объект_) Тогда движения_ = объект_.Движения.Продажи; движения_.Прочитать(); Если движения_.Количество() > 0 Тогда естьДвижения_ = Истина; КонецЕсли; КонецЕсли; Если естьДвижения_ Тогда //... КонецЕсли; |
|||
5
RomaH
26.07.24
✎
10:24
|
(4) Если ЗначениеЗаполнено(объект_) Тогда
ха-ха |
|||
6
Мультук
26.07.24
✎
10:24
|
Тогда вопрос. Вот тут в соседней теме неофиты собираются осваивать 1С.
Насколько всё это кошерно со стороны ООП ? //1. Работает, выдает правильное количество ссылкаДокументРеализации.Товары.Количество(); //2. Работает, выдает правильное количество ссылкаДокументРеализации.ПолучитьОбъект().Товары.Количество(); //3. Работает, но внезапно выдает неправильное количество ибо //Именно в этом случае нужно {волшебство Прочитать()} ссылкаДокументРеализации.ПолучитьОбъект().Движения.Продажи.Количество() а) Всё написанное - работает. б) Всё написанное - говнокод. в) Случай "3" -- на знание нюансов Мы везде получаем Количество(), но оно не везде кошерное. "Дети, вы должны запомнить жи-ши..." P.S. Код в (0) был написан как раз неофитом. На равно нулю вероятно программист протестил, а вот на >0, увы. P.P.S. Или Мультук, что ты буквоедствуешь? Мы запомнили и живы, а неофиты должны страдать по определению. |
|||
7
RomaH
26.07.24
✎
10:25
|
а что за фишка - рисовать подчеркивания в именах переменных? - раздражает
никогда такого не было а тут со всех щелей |
|||
8
YFedor
26.07.24
✎
10:30
|
(5) объясните за свое хаха
|
|||
9
YFedor
26.07.24
✎
10:32
|
(7) Я рисую подчеркивания, чтобы в коде сразу было видно, то это переменная, а не имя реквизита
а параметры функций я называю с подчеркивания типа "_ссылка" |
|||
10
Valdis2007
26.07.24
✎
10:33
|
(8) Проверка мутабельных значений на заполненность не поддерживается
|
|||
11
Ненавижу 1С
26.07.24
✎
10:36
|
(3) почему второй? я не знаю откуда он вызывается
|
|||
12
Aleksey
26.07.24
✎
10:37
|
(8) Значение заполнено <> объект существует в БД
|
|||
13
Ненавижу 1С
26.07.24
✎
10:38
|
(4) необоснованное создание объекта по ссылке
|
|||
14
Garykom
26.07.24
✎
10:41
|
(6) Меня тоже удивляет что для Констант накойтохрен нужны методы Получить() и Установить()
Какой смысл в этом? Чем так лучше Значение = Константы.ИмяКонстанты.Получить(); Константы.ИмяКонстанты.Установить(Значение); Почему нельзя просто Значение = Константы.ИмяКонстанты; Константы.ИмяКонстанты = Значение; |
|||
15
Valdis2007
26.07.24
✎
10:43
|
(14) потому что - геттеры и сеттеры))
|
|||
16
Garykom
26.07.24
✎
10:45
|
(15) Техника до пропертисов (property - свойство) не дошла?
|
|||
17
Ненавижу 1С
26.07.24
✎
10:46
|
(14) потому что это Менеджер - даже со своим модулем. Но конечно при желании могли бы и такую модель построить
|
|||
18
lEvGl
26.07.24
✎
10:51
|
(14) ну это ж объект целый отдельный, возможно подразумевалось, что у него будет еще что то кроме значения. вот сейчас у этого объекта уже 4! метода есть и ключ значения/значение. в 8.2 такого не было. Развивают. 8.3. 2024, июль.
|
|||
19
YFedor
26.07.24
✎
10:52
|
(10) Да, тупанул, давно объектами не баловался, значит просто нужно проверить на неопределено,
(12) Тут как раз все ОК, это же объект, он либо будет, либо Неопределено, (13) почему? Можно, конечно прочитать движения запросом, но не уверен, что это будет менее напряжно для системы. |
|||
20
RVN
26.07.24
✎
10:55
|
(19)
>почему? Можно, конечно прочитать движения запросом, но не уверен, что это будет менее напряжно для системы. "При чтении отдельных реквизитов объекта из базы данных следует иметь в виду, что вызов метода ПолучитьОбъект или обращение к реквизитам объекта через точку от ссылки приводит к загрузке объекта из базы целиком, вместе с его табличными частями." (с) https://its.1c.ru/db/v8std/content/496/hdoc |
|||
21
YFedor
26.07.24
✎
11:00
|
(20) Т.е. загрузка запросом хрен знает сколько строк движений будет быстрее?
|
|||
22
Мультук
26.07.24
✎
11:26
|
(19)
В Запрос можно передать ссылку, написать ПЕРВЫЕ 1 и 1) не делать .ПолучитьОбъект(); 2) не читать ВСЕ записи из регистра, достаточно одной 3) Насчет "это же объект, он либо будет, либо Неопределено" |
|||
23
RVN
26.07.24
✎
11:04
|
(21) С вероятностью 90% да.
Ну в из того что написано в (0): ЗАЧЕМ загружать запросом хрен знает сколько строк движений? |
|||
24
Valdis2007
26.07.24
✎
11:14
|
(22) почему не используете БСП? минус 1 балл))
|
|||
25
Мультук
26.07.24
✎
11:19
|
(24)
Не совсем понял. В БСП есть функция, которая возвращает истина если некая ссылка имеет движения по определенному регистру ? А можно название ? P.S. До чего техника дошла... |
|||
26
YFedor
26.07.24
✎
11:20
|
(22)
1), 2) - да, согласен 3) У нас есть ссылка (возможно битая) по ней мы либо получим объект, либо получим Неопределено, если ссылка битая. А что еще мы можем получить? (23) согласен, невнимательно прочитал (0) - нам количество не нужно, только факт наличия. Тогда да, запросом. |
|||
27
RVN
26.07.24
✎
11:24
|
(26) Собственно даже если нам нужно количество - то запрос сразу группируешь по ссылке и у тебя тогда в результате всего одна "строка" возвращается
А вот когда ты по ссылке получаешь объект - тогда-то и читается из базы "...загрузка запросом хрен знает сколько строк..." |
|||
28
Мультук
26.07.24
✎
11:25
|
(26)
Беру свои слова обратно. Извиняюсь. Затупил. :-) |
|||
29
Valdis2007
26.07.24
✎
11:33
|
(27) то запрос сразу группируешь по ссылке и у тебя тогда в результате всего одна "строка" возвращается
не проверял...но подазреваю выбрать первые 1 быстрее отработает , чем группировка |
|||
30
youalex
26.07.24
✎
11:42
|
(21) загрузка всех строк не нужна, нужно просто Количество(*)
upd: невнимательно прочитал (0), тогда можно просто ПЕРВЫЕ 1 Истина, и Не РезультатЗапроса.Пустой() |
|||
31
youalex
26.07.24
✎
11:37
|
(25) ОбщегоНазначения.СсылкаСуществует(ЛюбаяСсылка)
|
|||
32
RVN
26.07.24
✎
11:49
|
(29) >не проверял...но подазреваю выбрать первые 1 быстрее отработает , чем группировка
Конечно быстрее, особенно если без сортировки. Про группировку я писал если надо получить общее количество по накладной. |
|||
33
Волшебник
26.07.24
✎
12:34
|
(24) Наоборот, минусовать надо за использование БСП.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |