Имя: Пароль:
1C
1С v8
Модификация Бу проводки программно
0 Kalina
 
24.05.22
16:47
Здравствуйте, нужно исправиьт БухПроводку - записать в Субконто - Подразделение
пробовал тремя способами - см код, ни один не работает, -
поле в Проводке не изменяется, что я  делаю не так ?

    Набор.Отбор.Регистратор.Установить(Строка.Регистратор);
     Набор.Прочитать();
          Для каждого Запись из Набор Цикл
        Если Запись.СчетКт =  Счет Тогда
               Сообщить("Запись = " + " СчетДт = " + Запись.СчетДт + " СчетКт = " + Запись.СчетКт);  
              Пустая = Справочники.Подразделения.НайтиПоКоду("000000027");
            //           Пустая = Справочники.Подразделения.ПустаяСсылка();
Запись.СубконтоКт.Подразделения = Пустая;
Запись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Подразделения] = Пустая;
Запись.СубконтоКт[Запись.СчетКт.ВидыСубконто[1]] = Пустая;
              
Набор.Записать();
1 butterbean
 
24.05.22
16:49
А разве подразделение это субконто? В БП 3 - это измерение регистра бухгалтерии
2 Kalina
 
24.05.22
16:51
(1) у меня УПП
3 СвинТуз
 
24.05.22
16:53
Срисуй процедуру "УстановитьСубконто" из конфигурации.
Типовая должна быть.
4 Kalina
 
24.05.22
16:54
Бухи Добавили Субконто к 68.01 счёту (ПодразделенияОрганизацмй) теперь нужно проводки поправить
и вот никак не могу записать это Подразделение в Проводку
5 Aleksandr N
 
24.05.22
17:01
модуль набора записей, процедура передзаписью. возможно, там что-то происходит.
6 Aleksey
 
24.05.22
17:01
банально может  Справочники.Подразделения.НайтиПоКоду("000000027"); возвращает пустую ссылку?

И как бы зачем в цикле каждый раз искать, вынеси за цикл
7 СвинТуз
 
24.05.22
17:02
Есть типовая. Зачем писать?
У проводки Что то типа ТЧ должно быть. Вот туда.
Или две ТЧ если ... если.
8 Kalina
 
24.05.22
17:08
(7) В интернете куча примеров - и там всё просто присваиванием делается, у меня так не получается, буду пробовать типовую юзать
9 Kalina
 
24.05.22
17:12
(6) Не, ссылка живая, в цикле - потому что этот Регистратор много проводок делает, их все нужно проверить
10 СвинТуз
 
24.05.22
17:16
Просто присваиванием?
Там же тип составной и таблица.
11 Homer
 
24.05.22
17:20
Может быть попробовать Подразделения организации взять за основу
12 СвинТуз
 
24.05.22
17:22
Непосредственно с набором записей движений

Запись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] =  РезультатОС.Арендатор;
Запись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства] =  РезультатОС.ОсновноеСредство;
13 Kalina
 
24.05.22
17:22
(10) Запись.СубконтоКт[Запись.СчетКт.ВидыСубконто[1]] = Пустая;
ну да, присваиванием в нужную ячейку таблицы ???
в отладчике это поле видно, проверка на его значение тоже отрабатывает, а вот присваивать не хосет :(
14 СвинТуз
 
24.05.22
17:23
// где Выборка - Выборка из результата запроса
Проводка = Движения.Международный.Добавить();
Проводка.Период = ДатаЗакрытияПериода;
Проводка.СчетДт = Выборка.Счет;
Проводка.СчетКт = ПланыСчетов.Международный.СуммарныеДоходыИРасходы;
Проводка.Организация = Организация;
Проводка.Сумма = Выборка.СуммаОстатокКт;
Проводка.Содержание = "Закрытие счетов в конце финансового года";
Проводка.НомерЖурнала = "Рег";
                
НомерСубконто = 0;
Для каждого ВидСубконто Из Проводка.СчетДт.ВидыСубконто Цикл
    НомерСубконто = НомерСубконто + 1;
    ЗначениеСубконто = Выборка["Субконто"+НомерСубконто];
           Если ЗначениеЗаполнено(ЗначениеСубконто) Тогда
              УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, НомерСубконто, ЗначениеСубконто);
           КонецЕсли;
КонецЦикла;
15 СвинТуз
 
24.05.22
17:24
Процедура УстановитьСубконто(Счет, Субконто, ИмяСубконто, ЗначениеСубконто) Экспорт

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

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

    Если ВидСубк.ТипЗначения.СодержитТип(ТипЗнч(ЗначениеСубконто)) Тогда
        Субконто.Вставить(ВидСубк, ЗначениеСубконто);
    Иначе
        Сообщить("Неверное значение """ + ЗначениеСубконто + """ для вида субконто <" + ВидСубк + ">");
    КонецЕсли;

КонецПроцедуры
16 СвинТуз
 
24.05.22
17:27
Путаете в движениях типы и порядок следования в конфигурации возможно.

Должно быть прозаично все.
17 СвинТуз
 
24.05.22
17:28
Как в (12) делайте.
Укажите субконто явно.
18 СвинТуз
 
24.05.22
17:28
По ерунде в квадратных скобках находится в тч
19 СвинТуз
 
24.05.22
17:32
Запись.СубконтоКт.Подразделения = Пустая;
Запись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Подразделения] = Пустая;
Запись.СубконтоКт[Запись.СчетКт.ВидыСубконто[1]] = Пустая;


Изобилие какое-то.

2-ю оставьте.
20 Kalina
 
24.05.22
17:42
(19) Они по-идее одинаково работают, я так понял что нужно сначала Тип Этого субконто указать, а потом уже присваивать Значение,
чего-то я думал, что тип автоматом при присвоении "наследуется"
Спасибо тебе Туз за наводку, завтра наверное добью её
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший