Имя: Пароль:
1C
1С v8
V8: программно очистить субконто в наборе проводок
0 Sasha_1CK
 
16.04.14
08:03
НаборПроводок = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();    
            НаборПроводок.Отбор.Регистратор.Установить(Выборка.Регистратор);
            НаборПроводок.Прочитать();
            Для Каждого Проводка Из НаборПроводок Цикл
                Сообщить(Выборка.Регистратор);
                Если Проводка.СчетДт = Выборка.Счет и  Проводка.СчетКт = Выборка.КорСчет Тогда
                    
                    Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
                КонецЕсли;

            КонецЦикла;
            
            НаборПроводок.Записать();


Меняю программно счет в наборе проводок/
Но набор не записывается, так как количество субконто на счетах разное - как удалить из проводки субконо "Номенклатура" и "Ставки НДС"
1 shuhard
 
16.04.14
08:05
(0)  в каждой типовой установка субконто живёт в общем модуле
2 Sasha_1CK
 
16.04.14
08:08
(1)  установка живет - это понятно
а вот очистка там как то не фигурирует
3 hhhh
 
16.04.14
08:14
(2) в каждом документе типовой есть выбор счета. Примеры: РКО, Списание с банковского счета. Миллион примеров. Включай уже голову.
4 Sasha_1CK
 
16.04.14
08:23
(3)  Включил.
Но все равно не доходит - там меняется состав субконто на форме
а мне нужно очистить субконто в проводке
5 cw014
 
16.04.14
08:25
Продам СП, дорого:

РегистрБухгалтерииНаборЗаписей.<Имя регистра бухгалтерии>.Удалить (AccountingRegisterRecordSet.<Имя регистра бухгалтерии>.Delete)
РегистрБухгалтерииНаборЗаписей.<Имя регистра бухгалтерии> (AccountingRegisterRecordSet.<Имя регистра бухгалтерии>)
Удалить (Delete)
Вариант синтаксиса: По индексу

Синтаксис:

Удалить(<Индекс>)
Параметры:

<Индекс> (обязательный)

Тип: Число.
Позиция записи в наборе.
Вариант синтаксиса: По объекту записи

Синтаксис:

Удалить(<Запись>)
Параметры:

<Запись> (обязательный)

Тип: РегистрБухгалтерииЗапись.
Удаляемая запись.
Описание:

Удаляет запись из набора записей регистра бухгалтерии.

Доступность:

Сервер, толстый клиент, внешнее соединение.
6 cw014
 
16.04.14
08:25
А для тех, кто в танке, еще и это:

РегистрБухгалтерииНаборЗаписей.<Имя регистра бухгалтерии>.Очистить (AccountingRegisterRecordSet.<Имя регистра бухгалтерии>.Clear)
РегистрБухгалтерииНаборЗаписей.<Имя регистра бухгалтерии> (AccountingRegisterRecordSet.<Имя регистра бухгалтерии>)
Очистить (Clear)
Синтаксис:

Очистить()
Описание:

Очищает набор записей регистра бухгалтерии, удаляя из него все записи.

Доступность:

Сервер, толстый клиент, внешнее соединение.
7 hhhh
 
16.04.14
08:26
(4) вообще-то, чтобы не париться можно таблицу значений использовать

НаборПроводок = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();    
            НаборПроводок.Отбор.Регистратор.Установить(Выборка.Регистратор);
            НаборПроводок.Прочитать();
            ТЗ = НаборПроводок.Выгрузить();
            Для Каждого Проводка Из ТЗ Цикл
                Сообщить(Выборка.Регистратор);
                Если Проводка.СчетДт = Выборка.Счет и  Проводка.СчетКт = Выборка.КорСчет Тогда
                    
                    Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
                    Проводка.СубконтоДт1 = Неопределено;
                    Проводка.СубконтоДт2 = Неопределено;
                    Проводка.СубконтоДт3 = Неопределено;
                КонецЕсли;

            КонецЦикла;
            НаборПроводок.Загрузить(ТЗ);
            НаборПроводок.Записать();
8 Sasha_1CK
 
16.04.14
08:30
(5)  Зачем мне удалять все записи?
Мне нужно изменить счет дебет и убрать из записи лишние субконто.

зачем мне очищать набор записей и удалять из него записи?

А для объекта Проводка.СубконтоДТ Методы очистить и удалить не работают.

Собственно возможно и вообще нет такого метода - об чем и был изначальный вопрос -может я в глухую стенку стучусь.
9 shuhard
 
16.04.14
08:35
(8) [может я в глухую стенку стучусь.]
мы пока не видим даже попыток что-то сделать
10 cw014
 
16.04.14
08:45
(8) Сорри, не то... Вот что тебя спасет:

РегистрБухгалтерииСубконто.<Имя регистра бухгалтерии> (AccountingRegisterExtDimensions.<Имя регистра бухгалтерии>)
РегистрБухгалтерииСубконто.<Имя регистра бухгалтерии> (AccountingRegisterExtDimensions.<Имя регистра бухгалтерии>)
Элементы коллекции:

КлючИЗначение
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются Ключ - вид субконто, Значение - значение субконто.
Возможно обращение к значению субконто посредством оператора [...]. В качестве аргумента передается вид субконто (ПланВидовХарактеристикСсылка.<Имя плана видов характеристик>).

Свойства:

<Имя вида субконто> (<Extra dimension type name>)

Методы:

Вставить (Insert)
Количество (Count)
Очистить (Clear)
Удалить (Delete)

Конструкторы:

Основной

Описание:

Коллекция значений субконто записи регистра бухгалтерии. Установка и получение значения конкретного субконто осуществляется через оператор [], в качестве параметра которому передается вид субконто.
Возвращается значение типа КлючИЗначение. В качестве ключа вид субконто, в качестве значения значение субконто.

Доступность:

Сервер, толстый клиент, внешнее соединение.
См. также:

РегистрБухгалтерииВыборка, свойство Субконто
РегистрБухгалтерииВыборка, свойство СубконтоДт
РегистрБухгалтерииВыборка, свойство СубконтоКт
РегистрБухгалтерииЗапись, свойство Субконто
РегистрБухгалтерииЗапись, свойство СубконтоДт
РегистрБухгалтерииЗапись, свойство СубконтоКт
11 cw014
 
16.04.14
08:45
Поизучай методы все таки
12 Sasha_1CK
 
16.04.14
11:17
результат получен спасибо (7)
Но и (7) в чистом виде не работает

Проводка.СубконтоДт1 = Неопределено;
Проводка.СубконтоДт2 = Неопределено;
Проводка.СубконтоДт3 = Неопределено;

Ибо в этом варианте значение субконто очищается, но сам ВидСубконто в проводке остается и при записи программа ругается на то что - на счете такой субконто не предусмотрен.

Собственно и стандартными методами СП - результат тот же - в отладчике я вижу, что значение субконто "Неопределено" - но ключ "вид субконто" все равно не очищается - и ошибка вываливается.

Работает если сделать выгрузку в ТЗ и обнулить ВидСубконто

Проводка.ВидСубконтоДт1 = Неопределено;
Проводка.ВидСубконтоДт2 = Неопределено;
Проводка.СубконтоДт1 = Неопределено;
Проводка.СубконтоДт2 = Неопределено;

Но штатными методами до вида субконто я так и не понял как достучаться.

Всем Спс
13 laeg
 
16.04.14
11:21
На сколько мне память не изменяет работает механизм ввида
Проводка.СубконтоДт.Номенклатура = Неопределено;
14 Sasha_1CK
 
16.04.14
11:39
(13)  именно потому что этот механизм не работал - я и создал тему.
Это работает если нужно просто удалить значение.
Но у меня в проводке меняется счет 90011 на 90021. на старом счете 3 субконто, на новом - только 1 субконто.
при очистке значения, все равно в СубконтоДт остается ключ привязанный к субконто счета и при попытке сохранить набор записей происходит попытка создать аналитику с пустым значением - а поскольку на новом счете такой аналитики нет - то платформа вываливает ошибку - попытка записать несуществующее субконто в проводке.