Как найти значение субконто

 0 

   

Распечатать

1С 8.x : Как получить значение Субконто

Код 1C v 8.х

 Функция ПолучитьСубконто(Счет, Субконто, ИмяСубконто) Экспорт

Если Счет = Неопределено ИЛИ Счет.Пустая() Тогда
Возврат Неопределено;
КонецЕсли;

Если ТипЗнч(ИмяСубконто) = Тип("Число") Тогда
Если ИмяСубконто > Счет.ВидыСубконто.Количество() Тогда
Возврат Неопределено;
КонецЕсли;
ВидСубк = Счет.ВидыСубконто[ИмяСубконто - 1].ВидСубконто;
Иначе
ВидСубк = ПланыВидовХарактеристик[Метаданные.НайтиПоТипу(ТипЗнч(Счет)).ВидыСубконто.Имя][ИмяСубконто];
Если Счет.ВидыСубконто.Найти( ВидСубк) = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
КонецЕсли;

Возврат Субконто[ВидСубк];

КонецФункции

Код 1C v 8.х

 Функция ПолучитьСубконто(Счет, Субконто, ИмяСубконто) Экспорт
      

Если Счет = Неопределено ИЛИ Счет.Пустая() Тогда
Возврат Неопределено;
КонецЕсли;

Если ТипЗнч(ИмяСубконто) = Тип("Число") Тогда
Если ИмяСубконто > Счет.ВидыСубконто.Количество() Тогда
Возврат Неопределено;
КонецЕсли;
ВидСубк = Счет.ВидыСубконто[ИмяСубконто - 1].ВидСубконто;
Иначе
ВидСубк = ПланыВидовХарактеристик[Метаданные.НайтиПоТипу(ТипЗнч(Счет)).ВидыСубконто.Имя][ИмяСубконто];
Если Счет.ВидыСубконто.Найти( ВидСубк) = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
КонецЕсли;

Возврат Субконто[ВидСубк];

КонецФункции

Информация взята с сайта http://helpf.pro

Подпишитесь на нашу рассылку новостей

Хотите узнать больше по этому вопросу?

Подпишитесь на нашу рассылку новостей

Подписаться

Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:

Предложить статью

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

/// Как прочитать бухгалтерские проводки без значений
/// субконто в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьПроводкиБезСубконтоНаСервере()
 
    // За журнал проводок отвечает таблица РегистрБухгалтерии.Хозрасчетный.
    // Обратите внимание, что в ней нет информации о субконто - аналитике
    // счетов, участвующих в проводках.
 
    // получим все бухгалтерские проводки
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Хозрасчетный.Период КАК Период,
        |   Хозрасчетный.Организация,
        |   Хозрасчетный.СчетДт,
        |   Хозрасчетный.СчетКт,
        |   Хозрасчетный.КоличествоДт,
        |   Хозрасчетный.КоличествоКт,
        |   Хозрасчетный.Сумма
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |ГДЕ
        |   Хозрасчетный.Активность = Истина
        |УПОРЯДОЧИТЬ ПО
        |   Период";
 
    РезультатЗапроса = Запрос.Выполнить();
    Записи = РезультатЗапроса.Выбрать();    
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Формат(Записи.Период, "ДФ=dd.MM.yy") + "]   " +
            "Дт " + Записи.СчетДт + " " +
            "Кт " + Записи.СчетКт + " " +
            Записи.Сумма + " руб.");
    КонецЦикла;
 
КонецПроцедуры
 
/// Как прочитать бухгалтерские проводки вместе со
/// значениями субконто в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьПроводкиВместеССубконтоНаСервере()
 
    // За получение бухгалтерских проводок вместе с их аналитикой (субконто)
    // отвечает виртуальная таблица ДвиженияССубконто,
    // у неё есть параметры:
    // 1. Начало периода
    // 2. Конец периода
    // 3. Условие
    // 4. Порядок (влияет только на отбор первых)
    // 5. Первые (отбор перых N записей)
 
    // Получим проводки за 1 квартал 2014 года, где счёт 41.01 в
    // дебете или кредите, вместе с их аналитикой (субконто).
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ХозрасчетныйДвиженияССубконто.Период КАК Период,
        |   ХозрасчетныйДвиженияССубконто.Организация,
        |   ХозрасчетныйДвиженияССубконто.Регистратор,
        |   ХозрасчетныйДвиженияССубконто.Активность,
        |   ХозрасчетныйДвиженияССубконто.СчетДт,
        |   ХозрасчетныйДвиженияССубконто.СубконтоДт1,
        |   ХозрасчетныйДвиженияССубконто.СубконтоДт2,
        |   ХозрасчетныйДвиженияССубконто.СубконтоДт3,
        |   ХозрасчетныйДвиженияССубконто.СчетКт,
        |   ХозрасчетныйДвиженияССубконто.СубконтоКт1,
        |   ХозрасчетныйДвиженияССубконто.СубконтоКт2,
        |   ХозрасчетныйДвиженияССубконто.СубконтоКт3,
        |   ХозрасчетныйДвиженияССубконто.Сумма,
        |   ХозрасчетныйДвиженияССубконто.КоличествоДт,
        |   ХозрасчетныйДвиженияССубконто.КоличествоКт
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59),
        |       Активность = Истина И (
        |           СчетДт = &ВыбСчет ИЛИ СчетКт = &ВыбСчет)
        |   )
        |   КАК ХозрасчетныйДвиженияССубконто
        |УПОРЯДОЧИТЬ ПО
        |   Период Возр";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));
 
    РезультатЗапроса = Запрос.Выполнить();
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Формат(Записи.Период, "ДФ=dd.MM.yy") + "]   " +
            "Дт " + Записи.СчетДт + " " +
            "(" + Записи.СубконтоДт1 + ", " + Записи.СубконтоДт2 + ")" +
            " " +
            "Кт " + Записи.СчетКт + " " +
            "(" + Записи.СубконтоКт1 + ", " + Записи.СубконтоКт2 + ")" +
            " " +
            Записи.Сумма + " руб.");
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить обороты между бухгалтерскими счетами в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьОборотыМеждуСчетамиНаСервере()
 
    // Пример №1
    Сообщить("Пример №1");
 
    // За получение оборотов между счётом и корреспондирующим счётом
    // за произвольный период с заданной периодичностью в различных
    // разрезах аналитики отвечает виртуальная таблица Обороты,
    // у неё есть следующие параметры:
    // 1. Начало периода
    // 2. Конец периода
    // 3. Периодичность (например, Период, Запись, Год, Месяц...)
    // 4. Условие счета (например, Счет = &ВыбСчет)
    // 5. Субконто (список видов субконто, влияет на доступность
    //    и смысл Субконто1, Субконто2.., которыми можно оперировать
    //    в запросе).
    // 6. Условие (например, Субконто1 = &ВыбСклад)
    // 7. Условие корсчета (аналогично условию счёта)
    // 8. КорСубконто (аналогично субконто)
 
    // Узнаем сколько пришло и сколько ушло товара на основной склад
    // за январь 2014 года. То есть получим дебетовые и кредитовые
    // обороты по счёту 41.01, субконто Склады (значение "Основной склад")
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ХозрасчетныйОбороты.Счет,
        |   ХозрасчетныйОбороты.Субконто1 КАК Склад,
        |   ХозрасчетныйОбороты.Организация,
        |   ХозрасчетныйОбороты.СуммаОборотДт КАК ПришёлТовар,
        |   ХозрасчетныйОбороты.СуммаОборотКт КАК УшёлТовар,
        |   ХозрасчетныйОбороты.СуммаОборот КАК Разница
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.Обороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 01, 31, 23, 59, 59),
        |       Период,
        |       Счет = &ВыбСчет,
        |       &ВидыСубконто,
        |       Субконто1 = &ВыбСклад
        |   )
        |КАК ХозрасчетныйОбороты";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")
    );
 
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
    );
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    Запрос.УстановитьПараметр("ВыбСклад",
        Справочники.Склады.НайтиПоНаименованию("Основной")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Если Записи.Следующий() Тогда
 
        Сообщить("Счёт " + Записи.Счет + " (" + Записи.Склад + ")");
        Сообщить("Пришёл товар на " + Записи.ПришёлТовар + " руб.");
        Сообщить("Ушёл товар на " +Записи.УшёлТовар + " руб.");
        Сообщить("Разница между поступление и списанием " + 
            Записи.Разница + " руб."
        );
 
    КонецЕсли;
 
    // ===========================================================
 
    // Пример №2
    Сообщить("Пример №2");
 
    // Узнаем сколько пришло товара на основной склад
    // за каждый месяц 2014 года.
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ХозрасчетныйОбороты.Период,
        |   ХозрасчетныйОбороты.Счет,
        |   ХозрасчетныйОбороты.Субконто1 КАК Склад,
        |   ХозрасчетныйОбороты.Организация,
        |   ХозрасчетныйОбороты.СуммаОборотДт КАК ПришёлТовар
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.Обороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Месяц,
        |       Счет = &ВыбСчет,
        |       &ВидыСубконто,
        |       Субконто1 = &ВыбСклад
        |   ) КАК ХозрасчетныйОбороты
        |УПОРЯДОЧИТЬ ПО
        |   Период Возр";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")
    );
 
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
    );
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    Запрос.УстановитьПараметр("ВыбСклад",
        Справочники.Склады.НайтиПоНаименованию("Основной")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            Формат(Записи.Период, "ДФ=ММММ") + ": " +
            Записи.ПришёлТовар + " руб."
        );
 
    КонецЦикла;
 
    // ===========================================================
 
    // Пример №3
    Сообщить("Пример №3");
 
    // Узнаем сколько денег поступило в кассу от покупателей за 2014 год.
    // То есть проанализируем дебетовые обороты между 50.01 и 62.01
 
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   ХозрасчетныйОбороты.Счет,
        |   ХозрасчетныйОбороты.КорСчет,
        |   ХозрасчетныйОбороты.СуммаОборотДт
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.Обороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Период,
        |       Счет = &ВыбСчет,
        |       ,
        |       ,
        |       КорСчет = &ВыбКорСчет
        |   ) КАК ХозрасчетныйОбороты";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01")
    );
 
    Запрос.УстановитьПараметр("ВыбКорСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            "За 2014 год на " +
            Записи.Счет + " с " + Записи.КорСчет + " пришло " +
            Записи.СуммаОборотДт + " руб."
        );
 
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить остатки по бухгалтерскому счету в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьОстаткиПоСчетуНаСервере()
 
    // За получение остатков по бухгалтерским счетам
    // в разрезе аналитики отвечает виртуальная
    // таблица Остатки, у неё есть следующие параметры:
    // 1. Период (на который считаем остатки)
    // 2. Условие счета (например, Счет = &ВыбСчет)
    // 3. Субконто (список видов субконто, влияет на доступность
    //    и смысл Субконто1, Субконто2.., которыми можно оперировать
    //    в запросе
    // 4. Условие (например, Субконто1 = &ВыбСклад)
 
    // Найдём остатки товаров на всех складах на конец 2014 года.
    // То есть запросим дебетовые остатки по всем счетам,
    // входящих в группу 41 счёта в разрезе субконто Номенклатура.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ХозрасчетныйОстатки.Счет,
        |   ХозрасчетныйОстатки.Субконто1 КАК Товар,
        |   ХозрасчетныйОстатки.КоличествоОстатокДт,
        |   ХозрасчетныйОстатки.СуммаОстатокДт        
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.Остатки(
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Счет В ИЕРАРХИИ (&ВыбСчет), &ВидыСубконто
        |   ) КАК ХозрасчетныйОстатки";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41")
    );
 
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура
    );
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Сообщить("Остатки товаров по всем складам на конец 2014 года.");
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            Записи.Товар.Наименование +
            " Количество [" + Записи.КоличествоОстатокДт + " шт.]" +
            " Сумма [" + Записи.СуммаОстатокДт + " руб.]"
        );
 
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить сразу остатки и обороты по бухгалтерскому счету
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьСразуОстаткиИОборотыПоСчетуНаСервере()
 
    // За получение остатков и обротов за произвольный период
    // с заданной периодичностью в разрезе аналитики отвечает
    // виртуальная таблица ОстаткиИОбороты, у неё есть параметры:
    // 1. Начало периода
    // 2. Конец периода
    // 3. Периодичность (например, Период, Год, Месяц...)
    // 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода)
    // 5. Условие счета (например, Счет = &ВыбСчет)
    // 6. Субконто (список видов субконто, влияет на доступность
    //    и смысл Субконто1, Субконто2.., которыми можно оперировать
    //    в запросе
    // 7. Условие (например, Субконто1 = &ВыбТовар)
 
    // Для примера получим начальный остаток, приход, расход, и
    // конечный остаток банана на всех складах за каждый месяц
    // 2014 года.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ХозрасчетныйОстаткиИОбороты.Период,
        |   ХозрасчетныйОстаткиИОбороты.Счет,
        |   ХозрасчетныйОстаткиИОбороты.Субконто1,
        |   ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстатокДт,
        |   ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт,
        |   ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт,
        |   ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстатокДт
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Месяц, ДвиженияИГраницыПериода, 
        |       Счет В ИЕРАРХИИ (&ВыбСчет), &ВидыСубконто,
        |       Субконто1 = &ВыбТовар
        |   ) КАК ХозрасчетныйОстаткиИОбороты";
 
    Запрос.УстановитьПараметр("ВыбСчет",
        ПланыСчетов.Хозрасчетный.НайтиПоКоду("41")
    );
 
    ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура
    );
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
 
    Запрос.УстановитьПараметр("ВыбТовар", 
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(Формат(Записи.Период, "ДФ=ММММ") + ": ");
        Сообщить(
            Строка(Записи.Счет) + " " + Записи.Субконто1 + " " +
            "Нач. остаток " + Записи.КоличествоНачальныйОстатокДт +
            " приход " + Записи.КоличествоОборотДт + ", расход " +
            Записи.КоличествоОборотКт + " Кон. остаток " + 
            Записи.КоличествоКонечныйОстатокДт
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как найти и изменить программно бухгалтерские проводки
/// документа в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиИИзменитьПроводкиДокументаНаСервере()
 
    // предположим у нас есть ссылка на проведенный
    // документ поступления еды № ВМБП-000002
 
    ПоступлениеСсылка = 
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231');
 
    // мы знаем, что этот документ делает следующие
    // проводки по регистру бухгалтерии "Хозрасчетный":
    // - Дт 41.01 Кт 60.01
    // - Дт 60.01 Кт 50.01
 
    // наша задача: найти эти проводки бухгалтерские проводки
    // и изменить их (например, удвоим количество по дебету 41.01)
    // и записать вместо старых
 
    // используем объектную технику получения проводок,
    // ведь мы будем их изменять
 
    Поступление = ПоступлениеСсылка.ПолучитьОбъект();
 
    // получим набор проводок этого документа в регистр "Хозрасчетный"
    НаборПроводок = Поступление.Движения.Хозрасчетный;
 
    // прочитаем проводки из базы данных
    НаборПроводок.Прочитать();
 
    Для Каждого Проводка Из НаборПроводок Цикл
 
        // выведем старые значения
        Сообщить(
            "Дт " + Проводка.СчетДт + " (" + Проводка.КоличествоДт + " шт.) " +
            "Кт " + Проводка.СчетКт + " (" + Проводка.КоличествоКт + " шт.) " +
            Проводка.Сумма + " руб."
        ); 
 
        Если 
            Проводка.СчетДт = 
            ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")
        Тогда
            // эта проводка в дебет 41 счёта
            // изменим её, удвоив количество по дебету
            Проводка.КоличествоДт = Проводка.КоличествоДт * 2;
        КонецЕсли;
 
    КонецЦикла;
 
    // добавим новую проводку
    НоваяПроводка = НаборПроводок.Добавить();
    // дт
    НоваяПроводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
    НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] =
         Справочники.Склады.НайтиПоНаименованию("Основной");
    НоваяПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] =
        Справочники.Номенклатура.НайтиПоНаименованию("Банан");
    НоваяПроводка.КоличествоДт = 333;    
    // кт
    НоваяПроводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
    НоваяПроводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] =
        Справочники.Контрагенты.НайтиПоНаименованию("ООО ""Африка""");
    // общая часть
    НоваяПроводка.Период = ТекущаяДата();
    НоваяПроводка.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""");
    НоваяПроводка.Сумма = 5000;
    НоваяПроводка.Содержание = "Проводка добавлена программно.";
 
    //  разом запишем набор проводок
    НаборПроводок.Записать(
        Истина // удалим старые проводки и запишем вместо них новые
    );
 
    // теперь бухгалтерские проводки документа № ВМБП-000002,
    // отличаются от тех, что были записаны документом при проведении
    // чтобы вернуть их к начальному виду - нужно
    // перепровести документ
 
КонецПроцедуры
 
/// Как прочитать бухгалтерские проводки документа запросом в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьПроводкиДокументаЗапросомНаСервере()
 
    // этот приём используется, если не требуется изменять
    // найденные проводки
 
    // предположим у нас есть ссылка на проведенный
    // документ поступления еды № ВМБП-000002
 
    ПоступлениеСсылка = 
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231');
 
    // мы знаем, что этот документ делает проводки по
    // регистру бухгалтерии "Хозрасчетный"
 
    // прочитаем проводкипо регистру "Хозрасчетный" запросом
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Хозрасчетный.СчетДт,
        |   Хозрасчетный.СчетКт,
        |   Хозрасчетный.Сумма
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
        |ГДЕ
        |   Хозрасчетный.Регистратор = &ВыбРегистратор
        |
        |УПОРЯДОЧИТЬ ПО
        |   Хозрасчетный.НомерСтроки";
 
    Запрос.УстановитьПараметр("ВыбРегистратор", ПоступлениеСсылка);
 
    РезультатЗапроса = Запрос.Выполнить();
 
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(
            "Дт " + ВыборкаДетальныеЗаписи.СчетДт +
            " Кт " + ВыборкаДетальныеЗаписи.СчетКт + 
            " " + ВыборкаДетальныеЗаписи.Сумма + " руб."
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как создать бухгалтерские проводки без привязки
/// к документу в 1с 8.3, 8.2
 
&НаСервере
Процедура КакСоздатьПроводкиБезДокументаНаСервере()
 
    // в нашей тестовой конфигурации нет документа
    // "ОперацияБух", который присутствует во всех
    // типовых
 
    Сообщить("Этот пример нельзя выполнить в этой базе.");
    Возврат;
 
    // бухгалтерские проводки обязательно должны быть к
    // привязаны к документу, в данном случае этим документом
    // будет документ "ОперацияБух", задуманный как раз для
    // ручных бухгалтерских операций
 
    // создаём и записываем пустой документ
    // пока без бухгалтерских проводок
    Операция = Документы.ОперацияБух.СоздатьДокумент();
    Операция.Дата = ТекущаяДата();
    Операция.Организация = Справочники.Организации.НайтиПоНаименованию("Ромашка");	
    Операция.СуммаОперации = 1000;
    Операция.Содержание = "Ручная операция по 41 счёту";
    Операция.Записать(РежимЗаписиДокумента.Запись);
 
    // затем получаем его набор проводок (пустой)
    // заполняем его и записываем
    НаборПроводок = Операция.Движения.Хозрасчетный;	
 
    Проводка = НаборПроводок.Добавить();
    Проводка.Период = Операция.Дата;
    Проводка.Организация = Операция.Организация;
    // дт
    Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
    Проводка.СубконтоДт[
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура
    ] = Справочники.Номенклатура.НайтиПоНаименованию("Банан");
 
    На41ВедетсяУчетПоСкладам = Проводка.СчетДт.ВидыСубконто.Найти(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
    ) <> Неопределено;
 
    Если На41ВедетсяУчетПоСкладам Тогда
        Проводка.СубконтоДт[
            ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
        ] = Справочники.Склады.НайтиПоНаименованию("Основной");
    КонецЕсли;
 
    Проводка.КоличествоДт = 3;
    // кт
    Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
    Проводка.СубконтоКт[
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты
    ] = Справочники.Контрагенты.НайтиПоНаименованию("Беркут");
    // общее
    Проводка.Сумма = 500;
 
    НаборПроводок.Записать(Истина);
 
КонецПроцедуры
 
/// Как получить информацию о бухгалтерском счёте
/// из плана счетов в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьИнформациюОСчетеНаСервере()
 
    // читаем информацию о счёте из плана счетов
 
    // находим счёт по коду
    Счёт41_1 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
 
    // смотрим состав субконто
    Для Каждого Субконто Из Счёт41_1.ВидыСубконто Цикл        
        Сообщить("Субконто " + Субконто.ВидСубконто.Наименование);
        Сообщить("  Валютный " + Субконто.Валютный);
        Сообщить("  Количественный " + Субконто.Количественный);
        Сообщить("  Суммовой " + Субконто.Суммовой);
    КонецЦикла;
 
    // узнаем, ведётся ли на 41.01 учёт по складам
    // (другими словами есть ли у этого счёта субконто
    // склады)
 
    Если Счёт41_1.ВидыСубконто.Найти(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады
    ) <> Неопределено Тогда
        Сообщить("На 41.01 ведётся учёт по складам.");
    Иначе
        Сообщить("На 41.01 ведётся учёт по складам не ведётся.");
    КонецЕсли;
 
    // узнаем является ли один счёт родителем другого
    Счёт41 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41");
    Если Счёт41_1.ПринадлежитЭлементу(Счёт41) Тогда
        Сообщить(Счёт41.Код + " является родителем для " + 
            Счёт41_1.Код);
    КонецЕсли;
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Получить значение субконто из РегистраБухгалтерии

Я
   Ann20485

22.03.09 – 11:50

Как можно получить значение субконто, перебрав записи РегистраБухгалтерии? Выдает ошибку:

{Форма.Форма(32)}: Значение не является значением объектного типа (Значение)

Сообщить(Суб.Значение);

Отбор=Новый Структура(“Организация”,Организация);     Рег=РегистрыБухгалтерии.РегистрБухгалтерииСтарый.Выбрать(,,Отбор);    

    Пока Рег.Следующий() Цикл

      Суб=Рег.СубконтоДт.Получить(1);

      Сообщить(Суб.Значение);

    КонецЦикла;

   Ann20485

1 – 22.03.09 – 12:14

Или таким способом невозможно получить значение Субконто? Я бы сделала запросом,только мне нужно выключить потом полученные проводки.

   andr14142

2 – 22.03.09 – 12:24

Могу порекомендовать выгрузку в набор записей – основной прием для работы с регистрами:

       НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

       НаборЗаписей.Отбор.Регистратор.Значение = операциябух1;

       НаборЗаписей.Отбор.Регистратор.ВидСравнения = ВидСравнения.Равно;

       НаборЗаписей.Отбор.Регистратор.Использование = Истина;

       НаборЗаписей.Прочитать();

       ОснЗнач=НаборЗаписей.Выгрузить();

       для каждого стр из ОснЗнач цикл

           дт=стр.СубконтоДт1;

           кт=стр.СубконтоКт2;

   Ann20485

3 – 22.03.09 – 12:38

Отбор по регистратору не использую,нужны все проводки.

Ничего не выдает, ни субконто,ни счет,никакие реквизиты проводки

НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

НаборЗаписей.Прочитать();

ОснЗнач=НаборЗаписей.Выгрузить();

для каждого стр из ОснЗнач цикл

           дт=стр.СубконтоДт1;

           кт=стр.СубконтоКт2;

   andr14142

4 – 22.03.09 – 12:45

Всего три субконто по дебету и три субконто по кредиту. Их видно в конструкторе запроса, если посмотреть РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто. Если вывести суммы – должен показать. А дальше надо разбираться, дебет или кредит, какие субконто.

   Ann20485

5 – 22.03.09 – 12:46

Может немного не то делаю. Проводки в 8-ке можно выключать без удаления документа?

Пишу Рег.Активность=ЛОЖЬ.

{Форма.Форма(43)}: Поле объекта недоступно для записи (Активность)

      Рег.Активность=Ложь;

   Ann20485

6 – 22.03.09 – 12:49

(4) Сумму тож не выводит

После дт=стр.*** выпадает подсказка: Владелец,Получить,Установить. вместо реквизитов проводки

   andr14142

7 – 22.03.09 – 12:51

Конфигурация-то какая? У меня Бухгалтерия предприятия 1.6.14.4.

   Ann20485

8 – 22.03.09 – 13:00

Бухгалтерия 1.6.11

   Ann20485

9 – 22.03.09 – 13:02

У меня такой вопрос: как можно пометить на удаление или выключить определенные проводки в регистреБухгалтерии?

   andr14142

10 – 22.03.09 – 13:05

Проводки хранятся в регистре, а подвязаны к регистратору. Регистратор – это документ, в крайнем случае – документ ОперацияБух. Если документ помечен на удаление, то и его проводки не учитываются.

   Ann20485

11 – 22.03.09 – 13:08

(10) Но я же не могу пометить на удаление документ…у него могут быть и другие проводки,которые нужно оставить

   Ann20485

12 – 22.03.09 – 13:09

Задача не выполнима?

   andr14142

13 – 22.03.09 – 13:10

Если в регистре сделать отбор по регистратору, то мы получим набор записей. В этом наборе записей можно сделать изменения: добавить или удалить записи. А потом этот набор записать обратно в регистр. Тогда и удалится только то, что нужно.

   andr14142

14 – 22.03.09 – 13:11

Но если записи нужно сохранить но не учитывать, то их придется записать в другой регистратор, который помечен на удаление.

   Euguln

15 – 22.03.09 – 13:27

НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Значение = операциябух1;

НаборЗаписей.Отбор.Регистратор.ВидСравнения = ВидСравнения.Равно;

НаборЗаписей.Отбор.Регистратор.Использование = Истина;

НаборЗаписей.Прочитать();

Для каждого Запись из НаборЗаписей Цикл

    Для Сч = 1 По Запись.СчетДт.ВидыСубконто.Количество() Цикл

        СубконтоДт = Запись.СубконтоДт[Сч-1];

    КонецЦикла;

    Для Сч = 1 По Запись.СчетКт.ВидыСубконто.Количество() Цикл

        СубконтоКт = Запись.СубконтоКт[Сч-1];

    КонецЦикла;

КонецЦикла;

   andr14142

16 – 22.03.09 – 13:59

А еще у каждой записи есть реквизит Активность. Скорее всего, он и управляет тем, учитываются записи или нет. Но это нужно проверять. Полный список всех 30 полей регистра Хозрасчетный:

Число колонок таблицы значений: 30

Имя колонки : Период

Имя колонки : Регистратор

Имя колонки : НомерСтроки

Имя колонки : Активность

Имя колонки : СчетДт

Имя колонки : СчетКт

Имя колонки : Организация

Имя колонки : ВалютаДт

Имя колонки : ВалютаКт

Имя колонки : Сумма

Имя колонки : ВалютнаяСуммаДт

Имя колонки : ВалютнаяСуммаКт

Имя колонки : КоличествоДт

Имя колонки : КоличествоКт

Имя колонки : Содержание

Имя колонки : НомерЖурнала

Имя колонки : НеКорректироватьСтоимостьАвтоматически

Имя колонки : МоментВремени

Имя колонки : ВидСубконтоДт1

Имя колонки : СубконтоДт1

Имя колонки : ВидСубконтоДт2

Имя колонки : СубконтоДт2

Имя колонки : ВидСубконтоДт3

Имя колонки : СубконтоДт3

Имя колонки : ВидСубконтоКт1

Имя колонки : СубконтоКт1

Имя колонки : ВидСубконтоКт2

Имя колонки : СубконтоКт2

Имя колонки : ВидСубконтоКт3

Имя колонки : СубконтоКт3

   Ann20485

17 – 22.03.09 – 14:14

(15) Почему-то субконто никакие не находит,хотя они есть:

Сообщить(Запись.СубконтоДт[0]);

Сообщить(Запись.СубконтоДт[1]);

Сообщить(Запись.СубконтоДт[2]);

Сообщить(Запись.СубконтоДт[3]);

   Ann20485

18 – 22.03.09 – 14:15

Для Сч = 1 По Запись.СчетДт.ВидыСубконто.Количество() Цикл

             СубконтоДт = Запись.СубконтоДт[Сч-1];

КонецЦикла;   //пусто

   Ann20485

19 – 22.03.09 – 14:16

Запись.СчетДт.ВидыСубконто.Количество() = 1

   Euguln

20 – 22.03.09 – 14:17

Отладчик в помощь

   Ann20485

21 – 22.03.09 – 14:17

Остальные реквизиты определяет

   Ann20485

22 – 22.03.09 – 14:19

В Табло: Запись.СубконтоДт[Сч-1]; Значение: {1,24} Ошибка в выражении

   Ann20485

24 – 22.03.09 – 14:36

Неужели нельзя перебором записей найти значения субконто? Все перепробовала,не почается. Могу их конечно запросом найти..

Но и выключить проводки тож не получается,пишу:

Для каждого Запись Из НаборЗаписей Цикл

           Запись.Активность=Ложь;

           Запись.Записать();  // никакой реакции

   Ann20485

25 – 22.03.09 – 14:37

{Форма.Форма(40)}: Метод объекта не обнаружен (Записать)

           Запись.Записать();

   Euguln

26 – 22.03.09 – 14:40

Во-первых
НаборЗаписей.Записать()

Во-вторых
Точно уверена, что в проводке есть непустое субконто?

   andr14142

27 – 22.03.09 – 14:40

(25) Отдельную запись записать нельзя, только весь набор с отбором по регистратору.

(24) значения субконто нужно брать из каждой записи по имени СубконтоДт1, …

   Ann20485

28 – 22.03.09 – 14:44

(26) В регистреБухгалтерии есть записи с НЕпустыми субконто

   Euguln

29 – 22.03.09 – 14:46

А уверена, что именно они выбираются. По F9 посмотри у Запись.СубконтоДт и Запись.СубконтоКт значения

   Euguln

30 – 22.03.09 – 14:46

И вообще код в студию

   Ann20485

31 – 22.03.09 – 14:47

Для Каждого ТекСтрока Из ТЗ2 Цикл

       НаборЗаписей = РегистрыБухгалтерии.РегистрБухгалтерииСтарый.СоздатьНаборЗаписей();

       НаборЗаписей.Отбор.Регистратор.Значение = ТекСтрока.Регистратор;

       НаборЗаписей.Отбор.Регистратор.ВидСравнения = ВидСравнения.Равно;

       НаборЗаписей.Отбор.Регистратор.Использование = Истина;

       НаборЗаписей.Прочитать();

       Для каждого Запись Из НаборЗаписей Цикл

           Запись.Активность=Ложь;

           Сообщить(Запись.Активность);

           Для Сч = 1 По Запись.СчетДт.ВидыСубконто.Количество() Цикл

             СубконтоДт = Запись.СубконтоДт[Сч-1];

           КонецЦикла;

       КонецЦикла;    

       НаборЗаписей.Записать();

    КонецЦикла;

   Ann20485

32 – 22.03.09 – 14:48

НаборЗаписей.Записать();  // не дает записать Активность

{Форма.Форма(51)}: Ошибка при вызове метода контекста (Записать): Запись не верна! Не совпадает активность записей (Регистр бухгалтерии: Регистр бухгалтерии старый; Номер строки: 2)

       НаборЗаписей.Записать();

   Ann20485

33 – 22.03.09 – 14:50

(29) В отладчике:

Запись.СубконтоДт[Сч-1]; Тип: не определено. значение пустое

   Ann20485

34 – 22.03.09 – 14:50

Но РегистреБухгалтерии же есть субконто

   Ann20485

36 – 22.03.09 – 14:53

Если снять активность для всех записей,то получается

   Ann20485

37 – 22.03.09 – 14:58

Программа позволяет снять Активность только у всех проводок  Регистратора

   Ann20485

38 – 22.03.09 – 15:00

Для Каждого ТекСтрока Из ТЗ2 Цикл

       НаборЗаписей = РегистрыБухгалтерии.РегистрБухгалтерииСтарый.СоздатьНаборЗаписей();

       НаборЗаписей.Отбор.Регистратор.Значение = ТекСтрока.Регистратор;

       НаборЗаписей.Отбор.Регистратор.ВидСравнения = ВидСравнения.Равно;

       НаборЗаписей.Отбор.Регистратор.Использование = Истина;

       НаборЗаписей.Прочитать();

       Для каждого Запись Из НаборЗаписей Цикл

           Если Запись.СчетДт=ПланыСчетов.ПланСчетовСтарый.НайтиПоКоду(“20.03”) Тогда

             Запись.Активность=Ложь;

           КонецЕсли;

           Сообщить(Запись.Активность);

           Для Сч = 1 По Запись.СчетДт.ВидыСубконто.Количество() Цикл

             СубконтоДт = Запись.СубконтоДт[Сч-1];

           КонецЦикла;

       КонецЦикла;    

       НаборЗаписей.Записать();

    КонецЦикла;

   Euguln

40 – 22.03.09 – 15:11

А вот интересно, что ты хочешь сделать с субконто???
Конструкция
Для Сч = 1 По Запись.СчетДт.ВидыСубконто.Количество() Цикл
   СубконтоДт = Запись.СубконтоДт[Сч-1];
КонецЦикла;

к чеиу?

   Ann20485

41 – 22.03.09 – 15:14

(40) Мне нужно получить все данные проводок(счет,субконто,сумма..),чтобы на их основе создать новые проводки с другим планом счетов. Такое задание)

   Ann20485

42 – 22.03.09 – 15:14

(40) А старые проводки пометить на удаление

   Euguln

45 – 22.03.09 – 16:06

(42) Тогда оптимальнее все делать запросом, а в цикле только выключать активность

  

Ann20485

46 – 22.03.09 – 16:35

(45) Тогда если Активность выключается только у всех проводок Регистратора, проще Регистратор пометить на удаление. Вряд ли попадает под требования задачи..

Тип данных "ПланСчетов"

Тип данных "ПланСчетов" является служебным типом данных. Он предназначен для идентификации Плана счетов, созданного в метаданных.

В основном он используется для передачи в качестве параметра различным процедурам и функциям компоненты «Бухгалтерский учет» и для выбора плана счетов в формах. Тип значения "ПланСчетов" не поддерживает никаких данных в информационной базе, а список возможных значений этого типа данных определён планами счетов, созданными в конфигурации.

Значения типа "ПланСчетов" могут выступать как реквизиты диалога формы, как реквизиты документов, справочников и т.д.

Для получения значения такого типа данных используется глобальный атрибут ПланыСчетов, который имеет в свою очередь набор атрибутов типа "ПланСчетов" (в качестве имени конкретного атрибута выступает идентификатор конкретного плана счетов, имеющегося в конфигурации). Кроме того, глобальный атрибут ПланыСчетов имеет методы для обхода всех существующих планов счетов.

Методы типа данных "ПланСчетов"

Проверить факт выбора (наличия) значения типа "ПланСчетов" позволяет метод Выбран() (англоязычный синоним — Selected()). Параметры у метода отсутствуют. Возвращаемым значением метода будет число 1, если проверяемое значение не пустое, или 0, если значение пустое.

В нижеприведённом примере реквизит диалога «ИспПланСчетов», имеющий тип "ПланСчетов", проверяется на предмет выбора конкретного плана счетов пользователем:

Если ИспПланСчетов.Выбран() = 1 Тогда
   БухИтоги.ИспользоватьПланСчетов(ИспПланСчетов);
КонецЕсли;

Определить порядковый номер плана счетов в конфигурации позволяет метод ПорядковыйНомер() (англоязычный синоним — Number()). Параметры у метода отсутствуют. Возвращаемым значением метода будет числовое значение — порядковый номер плана счетов в конфигурации.

Пример использования:

Если ИспПланСчетов.Выбран() = 1 Тогда
   Сообщить("План счетов " + ИспПланСчетов.ПорядковыйНомер());
КонецЕсли;

Получить идентификатор плана счетов как он задан в метаданных позволяет метод Идентификатор() (англоязычный синоним — Identifier()). Параметры у метода отсутствуют. Возвращаемым значением метода будет строковое значение.

Пример использования:

Сч = СоздатьОбъект("Счет." + ВыбранныйПланСчетов().Идентификатор());

Примечание: В вышеприведённом пример используется встроенная системная функция ВыбранныйПланСчетов() компоненты «Бухгалтерский учет». Данная функция позволяет определить текущее значение параметра «Основной план счетов», выбранное пользователем при работе с системой.

Окно настройки параметров системы

Атрибут глобального контекста ПланыСчетов

Атрибут глобального контекста ПланыСчетов (англоязычный синоним — Charts0fAccounts) не имеет самостоятельного смысла, а служит для получения конкретных значений типа "ПланСчетов". Атрибут всегда используется с доступными ему атрибутами и методами. Например, для получения конкретного значения типа "ПланСчетов" следует через точку указать атрибут — идентификатор плана счетов, а для получения количества существующих в конфигурации планов счетов следует через точку вызвать метод КоличествоЗначений():

Сч = СоздатьОбъект("Счет");

    . . .

Если Сч.ПланСчетов() = ПланыСчетов.РабочийПлан Тогда
    . . .
КонецЕсли;

Для Инд=1 По ПланыСчетов.КоличествоЗначений() Цикл
   ПлСч = ПланыСчетов.ЗначениеПоНомеру(Инд);
    . . .
КонецЦикла;

Методы глобального атрибута ПланыСчетов

Определить общее количество планов счетов, созданных в конфигурации, позволяет метод КоличествоЗначений() (англоязычный синоним — Count()) атрибута глобального контекста ПланыСчетов. Параметры у метода отсутствуют. Возвращаемым значением метода будет числовое значение — количество планов счетов конфигурации.

Пример использования:

Для Инд=1 По ПланыСчетов.КоличествоЗначений() Цикл
   ПлСч = ПланыСчетов.ЗначениеПоНомеру(Инд);
    . . .
КонецЦикла;

Определить план счетов, соответствующий номеру в списке планов счетов конфигурации, позволяет метод ЗначениеПоНомеру() (англоязычный синоним — ValueByIndex()) атрибута глобального контекста ПланыСчетов. Возвращаемым значением метода будет значение типа "ПланСчетов", соответствующее номеру заданной позиции.

Синтаксис метода:

ЗначениеПоНомеру(<Номер>)

где <Номер> — числовое выражение — номер позиции плана счетов, заданный в Конфигураторе.

Пример использования:

Для Инд=1 По ПланыСчетов.КоличествоЗначений() Цикл
   ПлСч = ПланыСчетов.ЗначениеПоНомеру(Инд);
    . . .
КонецЦикла;

Определить план счетов по идентификатору, заданному в конфигурации, позволяет метод ЗначениеПоИдентификатору() (англоязычный синоним — ValueByIdentifier()) атрибута глобального контекста ПланыСчетов. Возвращаемым значением метода будет значение типа "ПланСчетов", соответствующее идентификатору в метаданных. Если же план счетов с таким идентификатором не найден, то возвращаемым значением будет пустое значение.

Синтаксис метода:

ЗначениеПоИдентификатору(<Идентификатор>)

где <Идентификатор> — строковое выражение — идентификатор плана счетов, заданный в Конфигураторе.

Пример использования:

ПлСч = ПланыСчетов.ЗначениеПоИдентификатору("Основной");

Тип данных "ВидСубконто"

Тип данных "ВидСубконто" является служебным типом данных. Он предназначен для идентификации самого вида субконто, созданного в метаданных.

В основном этот тип данных используется для передачи в качестве параметра различным процедурам и функциям компоненты «Бухгалтерский учет» и для выбора вида субконто в формах. Тип данных "ВидСубконто" не поддерживает никаких данных в информационной базе, а список возможных значений этого типа данных определён видами субконто, созданными в конфигурации.

Значения типа "ВидСубконто" могут выступать как реквизиты диалога формы, как реквизиты документов, справочников и т.д.

Для получения значения такого типа используется глобальный атрибут ВидыСубконто, который имеет в свою очередь набор атрибутов типа "ВидСубконто" соответствующих имеющимся видам субконто. Кроме того, глобальный атрибут ВидыСубконто имеет методы для обхода всех существующих видов субконто.

Методы типа данных "ВидСубконто"

Проверить факт выбора (наличия) значения типа "ВидСубконто" позволяет метод Выбран() (англоязычный синоним — Selected()). Параметры у метода отсутствуют. Возвращаемым значением метода будет число 1, если проверяемое значение не пустое, или 0, если значение пустое.

В нижеприведённом примере реквизит диалога «ВыбВидСубк1», имеющий тип "ВидСубконто", проверяется на предмет выбора вида субконто пользователем:

Если ВыбВидСубк1.Выбран() = 1 Тогда
   БухИтоги.ИспользоватьСубконто(ВыбВидСубк1);
КонецЕсли;

Определить порядковый номер вида субконто среди других видов субконто, созданных в конфигурации, позволяет метод ПорядковыйНомер() (англоязычный синоним — Number()). Параметры у метода отсутствуют. Возвращаемым значением метода будет числовое значение — порядковый номер вида субконто.

Пример использования:

Если ВыбВидСубк1.Выбран() = 1 Тогда
   Сообщить("Вид субконто N " + ВыбВидСубк1.ПорядковыйНомер());
КонецЕсли;

Получить строку-идентификатор вида субконто, как он задан в метаданных, позволяет метод Идентификатор() (англоязычный синоним — Identifier()). Параметры у метода отсутствуют. Возвращаемым значением метода будет строковое значение.

Пример использования:

ВидСубконто = Корреспонденция.Счет.ВидСубконто(НомерСубконто).Идентификатор();

Определить тип субконто позволяет метод ТипСубконто() (англоязычный синоним — SubcontoType()). Параметры у метода отсутствуют. Возвращаемым значением метода будет строковое значение, описывающее тип субконто, например "Справочник.Контрагенты".

Пример использования:

Сообщить("Тип субконто " + ВыбВидСубк1.ТипСубконто());

Атрибут глобального контекста ВидыСубконто

Атрибут глобального контекста ВидыСубконто (англоязычный синоним — SubcontoKinds) не имеет самостоятельного смысла, а служит для получения конкретных значений типа "ВидСубконто". Атрибут всегда используется с доступными ему атрибутами и методами. Например, для получения конкретного значения типа "ВидСубконто" следует через точку указать атрибут — идентификатор вида субконто, а для получения количества существующих в конфигурации видов субконто следует через точку вызвать метод КоличествоЗначений():

Сч = СоздатьОбъект("Счет");
Если Сч.ВидСубконто(1) = ВидыСубконто.Материалы Тогда
    . . .
КонецЕсли;

Для Инд=1 По ВидыСубконто.КоличествоЗначений() Цикл
   ВидСк = ВидыСубконто.ЗначениеПоНомеру(Инд);
КонецЦикла;

Методы глобального атрибута ВидыСубконто

Определить общее количество видов субконто, созданных в конфигурации, позволяет метод КоличествоЗначений() (англоязычный синоним — Count()) атрибута глобального контекста ВидыСубконто. Параметры у метода отсутствуют. Возвращаемым значением метода будет числовое значение — количество видов субконто в конфигурации.

Пример использования:

Для Инд=1 По ВидыСубконто.КоличествоЗначений() Цикл
   ВидСк = ВидыСубконто.ЗначениеПоНомеру(Инд);
КонецЦикла;

Определить вид субконто, соответствующий номеру в списке видов субконто конфигурации, позволяет метод ЗначениеПоНомеру() (англоязычный синоним — ValueByIndex()) атрибута глобального контекста ВидыСубконто. Возвращаемым значением метода будет значение типа "ВидСубконто", соответствующее номеру заданной позиции.

Синтаксис метода:

ЗначениеПоНомеру(<Номер>)

где <Номер> — числовое выражение — номер позиции вида субконто, заданный в Конфигураторе.

Пример использования:

Для Инд=1 По ВидыСубконто.КоличествоЗначений() Цикл
   ВидСк = ВидыСубконто.ЗначениеПоНомеру(Инд);
КонецЦикла;

Определить вид субконто, соответствующий идентификатору вида субконто конфигурации, позволяет метод ЗначениеПоИдентификатору() (англоязычный синоним — ValueByIdentifier()) атрибута глобального контекста ВидыСубконто. Возвращаемым значением метода будет значение типа "ВидСубконто", соответствующее идентификатору в метаданных. Если же вид субконто с таким идентификатором не найден, то возвращаемым значением будет пустое значение.

Синтаксис:

ЗначениеПоИдентификатору(<Идентификатор>)

где <Идентификатор> — строковое выражение — идентификатор вида субконто, заданный в конфигураторе.

Пример использования:

ВидСк = ВидыСубконто.ЗначениеПоИдентификатору("Контрагент");

Другие статьи по схожей тематике

  • Работа с типом данных "Счет"
  • Системные процедуры и функции компоненты «Бухгалтерский учет»
  • Работа с операциями и проводками
  • Работа с журналом операций
  • Работа со справочниками в 1С
  • Работа с объектами типа "Документ"

Добавить комментарий