Имя: Пароль:
1C
1С v8
Выбор субконто составного типа запросом из регистра дает неверный результат (
, ,
0 xaozai
 
28.03.14
10:42
Есть субконто составного типа: Банковские счета и Кассы.
В регистр бухгалтерии Хозрасчетный записывается БанковскиеСчета.ПустаяСсылка.
Когда выбираю данные запросом из Хозрасчетный.ДвиженияССубконто в выборке оказывается не пустая ссылка банковски счетов, а НЕОПРЕДЕЛЕНО.

Что я делаю не так?
1 Defender aka LINN
 
28.03.14
10:43
(0) Ждешь пустую ссылку
2 Cube
 
28.03.14
10:44
(0) У любого поля составного типа
Количество_возможных_пустых_значений = Количество_типов + 1.

+1 это неопределено. Так что, всё нормально. Тебе осталось это осознать просто.
3 xaozai
 
28.03.14
10:44
(1) А почему там неопределено, если в проведении записывается пустая ссылка? Мне нужно получить именно пустую ссылку.
4 Cube
 
28.03.14
10:46
(3) "в проведении записывается пустая ссылка"
Ну во-первых, ты нам этого не доказал.

А во-вторых, запрос, запросу рознь... А ты нам даже текст запроса не показываешь...

Телепатов тут нет.
5 Defender aka LINN
 
28.03.14
10:55
(3) Такова селяви, видимо.
6 xaozai
 
28.03.14
10:56
(4)
Вот мой запрос:
ВЫБРАТЬ
    Хозрасчетный.СчетДт,
    Хозрасчетный.СубконтоДт1,
    Хозрасчетный.СубконтоДт2,
    Хозрасчетный.СубконтоДт3,
    Хозрасчетный.СчетКт,
    Хозрасчетный.СубконтоКт1,
    Хозрасчетный.СубконтоКт2,
    Хозрасчетный.СубконтоКт3,
    Хозрасчетный.Организация,
    Хозрасчетный.ВалютаДт,
    Хозрасчетный.ВалютаКт,
    -Хозрасчетный.Сумма КАК Сумма,
    -Хозрасчетный.ВалютнаяСуммаДт КАК ВалютнаяСуммаДт,
    -Хозрасчетный.ВалютнаяСуммаКт КАК ВалютнаяСуммаКт,
    -Хозрасчетный.КоличествоДт КАК КоличествоДт,
    -Хозрасчетный.КоличествоКт КАК КоличествоКт,
    Хозрасчетный.Содержание,
    Хозрасчетный.НомерЖурнала

ИЗ
    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК Хозрасчетный
ГДЕ
    Хозрасчетный.Регистратор  = &Док


В СубконтоДт3 и СубконтоКт3 должны быть пустые ссылки.

А вот проведение:

Для Каждого Стр Из ТЧ Цикл
    Проводка = Движения.Хозрасчетный.Добавить();
    Проводка.Период = Дата;
    
    ЗаполнитьЗначенияСвойств(Проводка, Стр, ,"ВалютнаяСуммаДт, ВалютнаяСуммаКт, КоличествоДт, КоличествоКт");
    
    Проводка.СубконтоДт.Организации = Организация;
    Проводка.СубконтоДт.СтатьиДвиженияДенежныхСредств = Стр.Статья;
    Проводка.СубконтоДт.БанковскиеСчетаКассы = Справочники.БанковскиеСчета.ПустаяСсылка();
    
    Проводка.СубконтоКт.Организации = ОрганизацияПолучатель;
    Проводка.СубконтоКт.СтатьиДвиженияДенежныхСредств = Стр.Статья;
    Проводка.СубконтоКт.БанковскиеСчетаКассы = Справочники.БанковскиеСчета.ПустаяСсылка();
    
    Если Стр.СчетДт.Валютный Тогда
        Проводка.ВалютнаяСуммаДт = Стр.Сумма;
        Проводка.ВалютаДт = ВалютаДокумента;
    КонецЕсли;
    Если Стр.СчетКт.Валютный Тогда
        Проводка.ВалютнаяСуммаКт = Стр.Сумма;
        Проводка.ВалютаКт = ВалютаДокумента;
    КонецЕсли;
    
    Если Стр.СчетДт.Количественный Тогда
        Проводка.КоличествоДт = 1;
    КонецЕсли;
    Если Стр.СчетКт.Количественный Тогда
        Проводка.КоличествоКт = 1;
    КонецЕсли;
    
    Проводка.НомерЖурнала = 1;
    
    Проводка.Организация = Организация;
    Проводка.Содержание = Содержание;
    Проводка.Сумма = Стр.Сумма;
КонецЦикла;
7 Cube
 
28.03.14
11:00
(6) "Проводка.СубконтоДт.Организации = Организация;"
Что за бред?... Это что за счет такой?

А ты документы-то перепровел, после того, как в коде написал
"Проводка.СубконтоДт.БанковскиеСчетаКассы = Справочники.БанковскиеСчета.ПустаяСсылка();"
?
8 Maxus43
 
28.03.14
11:04
Всё не читал, но ответ на вопрос:
>>Когда выбираю данные запросом из Хозрасчетный.ДвиженияССубконто в выборке оказывается не пустая ссылка банковски счетов, а НЕОПРЕДЕЛЕНО.

Это специально от таких программистов сделано в  типовых, если субконто составного типа и не заполнено - то присваивается НЕОПРЕДЕЛЕНО, что у бухгалтеров не было инфаркта когда рвётся в ОСВ по пустому субконто, плывут остатки и т.д.

Сделано это в коде, в самом Регистре бухгалтерии
9 xaozai
 
28.03.14
11:04
(7) Это не типовые счета. Тут в организации свой хитрый учет.
Да, документы перепровел... уже 250 раз...
10 Maxus43
 
28.03.14
11:05
Пруф простой:

        // Приведение пустых значений субконто составного типа.
        Для Каждого Субконто Из Проводка.СубконтоДт Цикл
            Если Субконто.Ключ.ТипЗначения.Типы().Количество() > 1
               И НЕ ЗначениеЗаполнено(Субконто.Значение)
               И НЕ (Субконто.Значение = Неопределено) Тогда
                Проводка.СубконтоДт.Вставить(Субконто.Ключ, Неопределено);
            КонецЕсли;
        КонецЦикла;
11 xaozai
 
28.03.14
11:06
(8) Точно! Нашел.
Спасибо!
12 Maxus43
 
28.03.14
11:06
(9) код ищи такой в РБ. Но я бы не трогал эту логику, потом чудеса будешь ловить. Не надо тебе пустую ссылку, пусть неопределено будет
13 xaozai
 
28.03.14
11:07
(12) Ага, я понял. Поправлю свой запрос немного.