Вход | Регистрация

1С:Предприятие ::

Метки:

Как програмно выбрать Субконто?

Я
   Platon
 
12.02.04 - 08:08
Вчера запустил свой отчет и увидел что в колонке Цех появились ноые цеха по которым естевственно подводился итог. Оказалось что в проводках цех может быть не только в Субконто(2) как я ранее предполагал он может находится и в Субконто(1) и Субконто(3) я попробовал это исправить но не получилось теперь Номер цеха вообще не выводится. У кого есть соображения поделитесь  :)
Вот мой вариант нерабочий
[CODE]
СП=СоздатьОбъект("Справочник.Подразделения");
Если (Опер.Дебет.Субконто(1)="СП") Тогда
                      ТЗ.Цех=Опер.Дебет.Субконто(1).Код;
 ИначеЕсли (Опер.Дебет.Субконто(2)="СП") Тогда
                      ТЗ.Цех=Опер.Дебет.Субконто(2).Код; 
 ИначеЕсли (Опер.Дебет.Субконто(3)="СП") Тогда
                      ТЗ.Цех=Опер.Дебет.Субконто(3).Код;
  КонецЕсли;
[/CODE]
 
 
   Волшебник
 
1 - 12.02.04 - 08:13
СП=СоздатьОбъект("Справочник.Подразделения"); 
Опер.Дебет.Субконто(1)="СП"//<= глюк


Нерабочая конструкция. Несоответствие типов.
   Матвее4
 
2 - 12.02.04 - 08:36
Опер.Дебет.Субконто(1).Вид() = "Подразделения"
   345
3 - 12.02.04 - 08:46
(1) Неверно... Это только часть ошибки ...
=============================================
// полная проверка выглядит так

// проверяем, есть ли на счете Subconto вообще

if Опер.Debit.Счет.SubcontoCount() >0 then
    if ValueTypeStr(Опер.Debit.Subconto(1))="Справочник" then 
        if Опер.Debit.Subconto(1).Kind() = "Подразделения" then 
           // делаем что надо - 

           // Subconto (1) - имеем справочник Подразделения

        endIf; 
    endIf;  
elsIf Опер.Debit.Счет.SubcontoCount() >1 then
    if ValueTypeStr(Опер.Debit.Subconto(2))="Справочник" then 
        if Опер.Debit.Subconto(2).Kind() = "Подразделения" then 
           // делаем что надо - 

           // Subconto (2) - имеем справочник Подразделения

        endIf; 
    endIf;                
elsIf Опер.Debit.Счет.SubcontoCount() >2 then
    if ValueTypeStr(Опер.Debit.Subconto(3))="Справочник" then 
        if Опер.Debit.Subconto(3).Kind() = "Подразделения" then 
           // делаем что надо - 

           // Subconto (3) - имеем справочник Подразделения

        endIf; 
    endIf;     

endIf;                    





P.S. - такую проверку лучше всего оформить функцией в глобальнике





//=============================================

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//\\\\\\\   ПроверитьНаличиеИСоответствие      

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//=============================================

function ПроверитьНаличиеИСоответствиеСубконтоДебета(ОП,Номер,ВидСпр) 
   if Оп.Debit.Счет.Selected() = 0 then return Number(0); endIf;
    if Оп.Debit.Счет.SubcontoCount() >= Номер then
    if ValueTypeStr(Опер.Debit.Subconto(Номер))="Справочник" then 
       if Опер.Debit.Subconto(Номер).Kind() = ВидСпр then
           // Subconto - справочник указанного в ВидСпр вида

            return Number (1);            
        endIf; 
    endIf;                   
    return Number(0);
endFunction //
   Матвее4
 
4 - 12.02.04 - 09:06
Для А = 1 ПО Опер.Debit.Счет.SubcontoCount() Цикл
if ValueTypeStr(Опер.Debit.Subconto(А))="Справочник" then 
if Опер.Debit.Subconto(А).Kind() = "Подразделения" then 
               // делаем что надо - 

               // Subconto (1,2,3) - имеем справочник Подразделения 

            endIf; 
        endIf;   
КонецЦикла;
   345
5 - 12.02.04 - 09:23
Как вариант - да.... Но лучше функцией и вызывать ее из нужного места.

P.S. - просто писал влет... даже без проверки синтаксиса ...

Для А = 1 ПО Опер.Debit.Счет.SubcontoCount() Цикл 
if ПроверитьНаличиеИСоответствиеСубконтоДебета(Опер,А,"Подразделения") = 1 then
              // делаем что надо - 

              // Subconto (1,2,3) - имеем справочник Подразделения 

           endIf; 
КонецЦикла; 

в таком виде можно использовать для проверки субконто типа Справочник любого заданного вида...
   Platon
 
6 - 12.02.04 - 09:27
(3)странно всёравно пустую ячейку выводит
   345
7 - 12.02.04 - 09:32
Открой проводки, посмотри ... м.б. не заполнено субконто в проводке...


Или не задано наименование ... а вывод делается так
Опер.Дебет.Счет.Субконто(х).Наименование

Покажи оператор и формат вывода ...

Поставь
если Опер.Дебет.Счет.Субконто(х).выбран()<> 1 тогда
   Предупреждение ("Бурундук - птица!");

сразу увидишь ....
   Platon
 
8 - 12.02.04 - 10:19
Никогда не покину этот форум Спасибо всем
С уважением! Platon


Список тем форума
Рекламное место пустует   Рекламное место пустует
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки - вот настоящая работа.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует