Имя: Пароль:
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) Они по-идее одинаково работают, я так понял что нужно сначала Тип Этого субконто указать, а потом уже присваивать Значение,
чего-то я думал, что тип автоматом при присвоении "наследуется"
Спасибо тебе Туз за наводку, завтра наверное добью её
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший