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

null в ОперацииБух

null  в ОперацииБух
Я
   Александр111
 
08.01.21 - 15:17
Добрый день!

При сворачивании базы в бухпроводках по некоторым счетам значения субконто установились как null

я попробовал программно создать операцию и перевести этот остаток с null  на пустые ссылки, но сделать проводку, где по одному из субконто у меня будет null не удается, она упорно встает как неопределено
Как исправить? Могу изменить исходную операцию, но нужно сделать отдельной операцией.
   Ненавижу 1С
 
1 - 08.01.21 - 15:21
(0) вы там определитесь уже NULL, Неопределено или пустые ссылки...
   RomanYS
 
2 - 08.01.21 - 15:22
(0) null  - значит нет записи в таблице субонто, неопределено - пустое значение для составного типа
   Александр111
 
3 - 08.01.21 - 15:25
Стоит Null
   Ненавижу 1С
 
4 - 08.01.21 - 15:26
скорее всего меняли состав субконто на счетах. Верните субконто
   Александр111
 
5 - 08.01.21 - 15:27
Нужно вместо Null установить пустую ссылку т.е. дать сторнирующую операцию  с Null
и правильную с Неопределено
   Александр111
 
6 - 08.01.21 - 15:28
(4) cскорее всего да, но хотелось бы исправить проводками
   RomanYS
 
7 - 08.01.21 - 15:32
(5) >> дать сторнирующую операцию  с Null
Нужно удалить запись с этим субконто, не помню можно ли это сделать кодом. Через сериализацию точно можно.
И записывать набор только в режиме загрузка=Истина, иначе все недостающие записи восстановятся.
Проще и правильнее отремонтировать исходную битую операцию
   Александр111
 
8 - 08.01.21 - 15:35
Откорректировать исходную операцию не проблема, но хотелось бы понять как все таки сделать это с помощью сторнирующих проводок.
   RomanYS
 
9 - 08.01.21 - 15:39
(8) Очевидно нужно заполнить их также, т.е. криво
   Александр111
 
10 - 08.01.21 - 15:44
Даже если устанавливать програмно субконто=Null записывается как неопределено.
Остаток по субконто с типом null и что с ним делать?
   RomanYS
 
11 - 08.01.21 - 15:51
(10) Логично, автоматическое приведение типов. Ты игнорируешь что тебе пишут? Перечитай (2)
   Александр111
 
12 - 08.01.21 - 15:51
И
   Александр111
 
13 - 08.01.21 - 15:52
(0) но нужно сделать отдельной операцией.
   RomanYS
 
14 - 08.01.21 - 15:52
(12)

РегистрБухгалтерииСубконто.<Имя регистра бухгалтерии> (AccountingRegisterExtDimensions.<Accouting register name>)
Удалить (Delete)
Синтаксис:
Удалить(<ВидСубконто>)
Параметры:
<ВидСубконто> (обязательный)
Тип: ПланВидовХарактеристикСсылка.<Имя плана видов характеристик>.
Передается ключ элемента соответствия, который необходимо удалить.
Описание:
Удаляет элемент коллекции субконто.

И записывай в режиме загрузки
   Александр111
 
15 - 08.01.21 - 16:01
(14) т. е. все таки корректировка исходной операции. Но (о) нужно сделать отдельной операцией.
   RomanYS
 
16 - 08.01.21 - 16:02
(15) Нет не корректировка. В новой операции удали субконто где нужно получить Null
   Александр111
 
17 - 08.01.21 - 16:04
Ок. понял, завтра попробую. Спасибо.
   Ёпрст
 
18 - 08.01.21 - 17:18
(0) почитай на ночь

http://catalog.mista.ru/public/1142232/
   Александр111
 
19 - 09.01.21 - 08:31
(14) не получается, вместо null присваивает пустое значение, так же как и при использовании оператора неопределено. (18) Нет стартмани чтобы скачать.
Причина появления ошибки видимо в том, что в программе по 16 год не велся партионный учет, а с 16 по 17  начали вести. остатки сворачивали на начало 18 г.
из http://catalog.mista.ru/public/1142232/ ПРАВИЛО:В случае отключенного на счете признака ведения учета, соответствующее измерение должно быть не ПустаяСсылка справочника, а равняться NULL.
   RomanYS
 
20 - 09.01.21 - 09:36
(19) код покажи
   Александр111
 
21 - 09.01.21 - 09:52
Проводка = РегХозрасчетный.Добавить();
            Проводка.Период = Объект.ДатаоКОНЧАНИЯ;
            Проводка.Регистратор = ДокОперацияСсылка;
            Если Кд.Счет.Вид=ВидСчета.Активный Тогда
                Проводка.СчетКт = Счет000; 
                Проводка.СчетДт = Кд.Счет; 
                кол = 0;
                
                Если Кд.Счет.УчетПоПодразделениям=Истина Тогда
                    Проводка.ПодразделениеДт =Кд.Подразделение;
                КонецЕсли;
                кол = 0;
        
                Пока кол < Кд.Счет.ВидыСубконто.Количество() Цикл
                    Субконто =Кд.Счет.ВидыСубконто[кол].ВидСубконто;
                    
                    Если кол = 0 Тогда 
                        //    Проводка.ПодразделениеКт = Подр1; 

                        Проводка.СубконтоДт[Субконто] = Кд.Субконто1;
                    ИначеЕсли кол = 1 Тогда
                        Проводка.СубконтоДт[Субконто] = Кд.Субконто2; 
                    ИначеЕсли кол = 2 Тогда
                        
                        Если  Кд.Субконто3=NULL Тогда
                            Сообщить("!!");
                        //Проводка.СубконтоДт[Субконто] = неопределено;

                        Проводка.СубконтоДт.Удалить(Субконто);
                        Иначе
                            
                        Проводка.СубконтоДт[Субконто] = Кд.Субконто3; 
                        КонецЕсли;
                    КонецЕсли;
                    кол = кол+1;
   RomanYS
 
22 - 09.01.21 - 09:55
(21) Что такое Кд? "Кд.Субконто3=NULL" точно срабатывает?
Про режи загрузки при записи не забыл?
   Александр111
 
23 - 09.01.21 - 09:58
Кд.Субконто3=NULL" точно срабатывает,
Но если присваиваю Кд.Субконто3=NULL; то присваивается неопределено,
режим загрузки истина
   RomanYS
 
24 - 09.01.21 - 10:24
(23) Попробуй выгрузить в XML и удалить (у нужной проводки)

<ExtDimensionTypeDr>8bbba69b-fc84-4ec0-aeef-2a4b48042eca</ExtDimensionTypeDr>
                        <ExtDimensionDr xsi:nil="true"/>

ИД субконто у тебя будет другое. И загрузи обратно. 
И будь готов к тому что итоги по РБ возможно придётся пересчитывать
   Александр111
 
25 - 09.01.21 - 10:30
Универсальной обработкой?
   RomanYS
 
26 - 09.01.21 - 10:35
(25) ВыгрузкаЗагрузкаXML c ИТСа, есть в дистре КД2
   Cyberhawk
 
27 - 09.01.21 - 10:36
нулл в коде никакого смысла никуда присваивать (при записи) нет
   Александр111
 
28 - 09.01.21 - 10:40
Проводка.СубконтоДт.Вставить(Субконто,Null); -?
   RomanYS
 
29 - 09.01.21 - 10:43
(28) нет. Null значит нет такой записи
   Александр111
 
30 - 09.01.21 - 10:48
Короче, програмно - никак, через выгрузку загрузку xml - как то извращенно. Придется исправлять первичные документы.
 
 Рекламное место пустует
   RomanYS
 
31 - 09.01.21 - 10:52
(30) :)))
   Ёпрст
 
32 - 09.01.21 - 11:00
(30) у тя файловая ?
Так то в скуле апдейт и привет
   Александр111
 
33 - 09.01.21 - 11:02
Нужно средствами 1с (32)
   Александр111
 
34 - 09.01.21 - 11:44
сделал так
Выборка = Документы.ОперацияБух.Выбрать(нАЧАЛОдНЯ(ДатаНачала),кОНЕЦдНЯ(ДатаОкончания),,);
    Пока выборка.Следующий() Цикл
    //Выборка=УдалитьОпер;

        Если Выборка.ПометкаУдаления=Ложь Тогда
            Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
            Набор.Отбор.Регистратор.Установить(Выборка.Ссылка);
            Набор.Прочитать();
            
            
            Для каждого Запись из Набор Цикл
                кол = 0;
                
                Пока кол < Запись.СчетДт.ВидыСубконто.Количество() Цикл
                    Субконто =Запись.СчетДт.ВидыСубконто[кол].ВидСубконто;
                    
                    Если кол = 0 Тогда 
                        
                        Если  Запись.СубконтоДт[Субконто]=NULL или Запись.СубконтоДт[Субконто]=неопределено Тогда
                            Запись.СубконтоДт[Субконто]=неопределено;
                            //Сообщить(Запись.СубконтоДт[Субконто]);

                        Конецесли;
                        
                    ИначеЕсли кол = 1 Тогда
                        
                        Если    Запись.СубконтоДт[Субконто]=NULL или Запись.СубконтоДт[Субконто]=неопределено Тогда
                            Запись.СубконтоДт[Субконто]=неопределено;
                            //Сообщить(Запись.СубконтоДт[Субконто]);


                        Конецесли;    
                    ИначеЕсли кол = 2 Тогда
                        
                        Если    Запись.СубконтоДт[Субконто]=NULL или Запись.СубконтоДт[Субконто]=неопределено Тогда
                            Запись.СубконтоДт[Субконто]=неопределено;
                            //Сообщить(Запись.СубконтоДт[Субконто]);


                        КонецЕсли;
                        
                    КонецЕсли;
                    кол = кол+1;
                    ////Сообщить(счет);

                    
                    
                    
                КонецЦикла;
                
                кол = 0;
                
                Пока кол < Запись.СчетКт.ВидыСубконто.Количество() Цикл
                    Субконто =Запись.СчетКт.ВидыСубконто[кол].ВидСубконто;
                    
                    Если кол = 0 Тогда 
                        
                        Если  Запись.СубконтоКт[Субконто]=NULL или Запись.СубконтоКт[Субконто]=неопределено Тогда
                            Запись.СубконтоКт[Субконто]=неопределено;
                            //Сообщить(Запись.СубконтоКт[Субконто]);

                        Конецесли;
                        
                    ИначеЕсли кол = 1 Тогда
                        
                        Если    Запись.СубконтоКт[Субконто]=NULL или Запись.СубконтоКт[Субконто]=неопределено Тогда
                            Запись.СубконтоКт[Субконто]=неопределено;
                            //Сообщить(Запись.СубконтоКт[Субконто]);


                        Конецесли;    
                    ИначеЕсли кол = 2 Тогда
                        
                        Если    Запись.СубконтоКт[Субконто]=NULL или Запись.СубконтоКт[Субконто]=неопределено Тогда
                            Запись.СубконтоКт[Субконто]=неопределено;
                            //Сообщить(Запись.СубконтоКт[Субконто]);


                        КонецЕсли;
                        
                    КонецЕсли;
                    кол = кол+1;
                    ////Сообщить(счет);

                    
                    
                    
                КонецЦикла;

                
            КонецЦикла;
             Набор.Записать(); 
        Конецесли;
        КонецЦикла;
   Ёпрст
 
35 - 09.01.21 - 11:53
И зачем Неопределенно туда пихаешь, если должен быть NULL ?
   RomanYS
 
36 - 09.01.21 - 12:11
(35)
1. "зачем" - он решил исправить кривые проводки, а не пытаться их сторнировать
2. "если должен быть NULL" - так NULL всё равно не запихнёшь
   Александр111
 
37 - 09.01.21 - 12:12
Точно
   RomanYS
 
38 - 09.01.21 - 12:13
(34) сработало? - ну и ладно
Вообще конечно вермишель из "ИначеЕсли кол = 1 Тогда" вывзывает тихий ужас ))
   Александр111
 
39 - 09.01.21 - 12:17
Лепил на скорую руку
   RomanYS
 
40 - 09.01.21 - 12:37
...            ДтКт = Новый Структура("Дт,Кт");
            
            Для каждого Запись из Набор Цикл
                Для каждого ЭлДтКт Из ДтКт Цикл
                    Для каждого ЭлВидСубконто Из Запись["Счет" +ЭлДтКт.Ключ].ВидыСубконто Цикл
                        ВидСубконто = ЭлВидСубконто .ВидСубконто;
                        ОписаниеТипа = ВидСубконто.ТипЗначения;
                        Запись["Субконто" + ЭлДтКт.Ключ][ВидСубконто] = ВидСубконто.ПривестиЗначение(Запись["Субконто" + ЭлДтКт.Ключ][ВидСубконто]);
                    КонецЦикла;
                КонецЦикла;
            КонецЦикла;
   RomanYS
 
41 - 09.01.21 - 12:51
*(40) описка
Запись["Субконто" + ЭлДтКт.Ключ][ВидСубконто] = ОписаниеТипа.ПривестиЗначение(Запись["Субконто" + ЭлДтКт.Ключ][ВидСубконто]);
   Александр111
 
42 - 09.01.21 - 13:08
ТАК ККРАСИВШЕ )))


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.