Имя: Пароль:
1C
1С v8
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) Наоборот, минусовать надо за использование БСП.