Как программно изменить реквизит ТЧ документа "Коррекировка записей регистров" 8.2

1. yamawa 50 29.12.16 10:48 Сейчас в теме
Как программно прочитать реквизит табличной части документа "Корректировка записей регистров" версия 8.2 и изменить его?
+
Вознаграждение за ответ
Показать полностью
Найденные решения
7. dmt 66 29.12.16 11:45 Сейчас в теме
Имя регистра проще получить так:

ВЫБРАТЬ
КорректировкаЗаписейРегистровТаблицаРегистровНакопления.Имя
ИЗ
Документ.КорректировкаЗаписейРегистров.ТаблицаРегистровНакопления КАК КорректировкаЗаписейРегистровТаблицаРегистровНакопления
ГДЕ
КорректировкаЗаписейРегистровТаблицаРегистровНакопления.Ссылка = &Ссылка
postnn; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dmt 66 29.12.16 10:54 Сейчас в теме
Как и любой регистр:
 Запрос = Новый Запрос;
	НаборЗаписей = РегистрыСведений.СкидкиНаценкиНоменклатуры.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Регистратор.Установить(Док);
	НаборЗаписей.Прочитать();
	Для каждого зап Из НаборЗаписей Цикл
		
		зап.ДатаОкончания = '20151231';     
		
	КонецЦикла;
	НаборЗаписей.Записать();
Показать
Enyel; +1
3. yamawa 50 29.12.16 11:00 Сейчас в теме
(2) вы обращаешься непосредственно к регистру СкидкиНаценкиНоменклатуры, а в документе "Корректрировка записей регистров" несколько табличных частей и в каждой содержиться несколько регистров, как это реализовать?
+
4. yamawa 50 29.12.16 11:01 Сейчас в теме
т.е. мы не можем прописать конкретный регистр...
+
5. dmt 66 29.12.16 11:10 Сейчас в теме
Не сильно понял. Нужно понять какие именно регистры двигает КЗР? И в каком-то изменить движения? А как понять в каком?
+
6. yamawa 50 29.12.16 11:16 Сейчас в теме
(5)
Процедура УдалитьБитыеСсылки()
	Для Каждого Регистр Из Метаданные.РегистрыНакопления Цикл  				
		УдалитьБитыеСсылкиРН(Регистр.Имя);
	КонецЦикла;
КонецПроцедуры

Процедура УдалитьБитыеСсылкиРН(ИмяРегистра)
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	| Регистр.Регистратор
	|ИЗ
	| РегистрНакопления." + ИмяРегистра + " КАК Регистр
	|ГДЕ
	| Регистр.Регистратор = &ДокументКорректировки
	|
	|СГРУППИРОВАТЬ ПО
	| Регистр.Регистратор");
	
	Запрос.УстановитьПараметр("ДокументКоррекировки", ДокументКорректировки);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		НЗ = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
		НЗ.Отбор.Регистратор.Установить(Выборка.Регистратор);
		НЗ.Прочитать(); 		
		НЗ.Период=Дата("01.01.16");				
	КонецЦикла;
НЗ.Записать();
ДокументКорректировки.Записать();
КонецПроцедуры
Показать

Посмотрите так?
+
7. dmt 66 29.12.16 11:45 Сейчас в теме
Имя регистра проще получить так:

ВЫБРАТЬ
КорректировкаЗаписейРегистровТаблицаРегистровНакопления.Имя
ИЗ
Документ.КорректировкаЗаписейРегистров.ТаблицаРегистровНакопления КАК КорректировкаЗаписейРегистровТаблицаРегистровНакопления
ГДЕ
КорректировкаЗаписейРегистровТаблицаРегистровНакопления.Ссылка = &Ссылка
postnn; +1
8. yamawa 50 29.12.16 12:01 Сейчас в теме
спасибо,
у меня есть сомнение также по этому блоку модуля: в нем очевидно нет состыковки меджу записью полученной в запросе
Выборка.Следующий()
и записью полученной через метод
РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
как в этом случае быть?
Пока Выборка.Следующий() Цикл
        НЗ = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
        НЗ.Отбор.Регистратор.Установить(Выборка.Регистратор);
        НЗ.Прочитать();         
        НЗ.Период=Дата("01.01.16");                
    КонецЦикла;
+
11. dmt 66 29.12.16 12:37 Сейчас в теме
(8) Как-то так:
Пока Выборка.Следующий() Цикл
        НЗ = РегистрыНакопления[Выборка.Имя].СоздатьНаборЗаписей();
        НЗ.Отбор.Регистратор.Установить(ДокументКорректировки);
        НЗ.Прочитать();         
        НЗ.Период=Дата("01.01.16");                
 КонецЦикла;


В выборке запрос из (7)
+
9. smirnova_a 29.12.16 12:09 Сейчас в теме
Сч01_01 = ПланыСчетов.Хозрасчетный.ОСвОрганизации;
Сч02_01 = ПланыСчетов.Хозрасчетный.АмортизацияОС_01;
Сч83_01 = ПланыСчетов.Хозрасчетный.ПриростСтоимостиИмуществаПоПереоценке;
ДБФ = Новый XBase;
ДБФ.ОткрытьФайл(ИмяФайла);
Если ДБФ.Открыта() Тогда
    Попытка
        НачатьТранзакцию();
        
  ДокКорректировка = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
        ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокКорректировка.ЭтотОбъект, ПараметрыСеанса.ТекущийПользователь);
        ДокКорректировка.Дата = Период;            

  НоваяСтрокаРегБух = ДокКорректировка.ТаблицаРегистровБухгалтерии.Добавить();
        НоваяСтрокаРегБух.Имя = "Хозрасчетный";
        НоваяСтрокаРегБух.Представление = "Журнал проводок (бухгалтерский учет)";
        
        ДокКорректировка.Записать();
        ДокКорректировкаСсылка = ДокКорректировка.Ссылка;
  
        НЗХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        НЗХозрасчетный.Отбор.Регистратор.Значение = ДокКорректировкаСсылка;
  
        ДБФ.Первая();
        Пока Не ДБФ.ВКонце() Цикл
            ОсновноеСредство = Справочники.ОсновныеСредства.НайтиПоКоду(СокрЛП(ДБФ.OS));
            Если ОсновноеСредство.Пустая() Тогда
                Сообщить("Не найдено ОС с кодом " + ДБФ.OS + "!", СтатусСообщения.Важное);
                Продолжить;
            КонецЕсли;

            ЗХозрасчетный = НЗХозрасчетный.Добавить();
            ЗХозрасчетный.Период = Период;
            ЗХозрасчетный.Регистратор = ДокКорректировкаСсылка;
            ЗХозрасчетный.Организация = Организация;
            ЗХозрасчетный.Содержание  = "Увеличение первоначальной стоимости ОС";
            ЗХозрасчетный.СчетДт = Сч01_01;
            ЗХозрасчетный.СчетКт = Сч83_01;     
            БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетДт, ЗХозрасчетный.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
            БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетКт, ЗХозрасчетный.СубконтоКт, "ОсновныеСредства", ОсновноеСредство);
            ЗХозрасчетный.Сумма = ДБФ.SumB;

            ЗХозрасчетный = НЗХозрасчетный.Добавить();
            ЗХозрасчетный.Период = Период;
            ЗХозрасчетный.Регистратор = ДокКорректировкаСсылка;
            ЗХозрасчетный.Организация = Организация;
            ЗХозрасчетный.Содержание  = "Увеличение накопленной амортизации ОС";
            ЗХозрасчетный.СчетДт = Сч83_01;
            ЗХозрасчетный.СчетКт = Сч02_01;     
            БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетДт, ЗХозрасчетный.СубконтоДт, "ОсновныеСредства", ОсновноеСредство);
            БухгалтерскийУчет.УстановитьСубконто(ЗХозрасчетный.СчетКт, ЗХозрасчетный.СубконтоКт, "ОсновныеСредства", ОсновноеСредство);
            ЗХозрасчетный.Сумма = ДБФ.AmortB;

            ДБФ.Следующая();
        КонецЦикла;
        ДБФ.ЗакрытьФайл();
        НЗХозрасчетный.Записать();

        ЗафиксироватьТранзакцию();
    Исключение
        Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
        ОтменитьТранзакцию();
    КонецПопытки;
КонецЕсли;   
Показать
+
10. yamawa 50 29.12.16 12:12 Сейчас в теме
(9) у вас создать документ, а мне нужно уже готовый прочитать и изменить реквизит
+
12. yamawa 50 29.12.16 12:40 Сейчас в теме
Процедура УдалитьБитыеСсылки()
	
		Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	КорректировкаЗаписейРегистровТаблицаРегистровСведений.Имя КАК Имя
		|ИЗ
		|	Документ.КорректировкаЗаписейРегистров.ТаблицаРегистровСведений КАК КорректировкаЗаписейРегистровТаблицаРегистровСведений
		|ГДЕ
		|	КорректировкаЗаписейРегистровТаблицаРегистровСведений.Ссылка = &ДокументКорректировки");
		Запрос.УстановитьПараметр("ДокументКорректировки",ДокументКорректировки);
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			НЗ = РегистрыСведений[Выборка.Имя].СоздатьНаборЗаписей();
			НЗ.Отбор.Регистратор.Установить(ДокументКорректировки);
			Нз.Прочитать();
			Для Каждого СтрокаРС Из НЗ Цикл
			СтрокаРС.Период = ДатаКоррекировки;
			КонецЦикла;
		КонецЦикла;
		НЗ.Записать();   
		ДокументКорректировки.ПолучитьОбъект().Записать();
////////////////////////////////////////////////////////////­///////////////////		
		Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	КорректировкаЗаписейРегистровТаблицаРегистровНакопления.Имя КАК Имя
		|ИЗ
		|	Документ.КорректировкаЗаписейРегистров.ТаблицаРегистровНакопления КАК КорректировкаЗаписейРегистровТаблицаРегистровНакопления
		|ГДЕ
		|	КорректировкаЗаписейРегистровТаблицаРегистровНакопления.Ссылка = &ДокументКорректировки");
		Запрос.УстановитьПараметр("ДокументКорректировки",ДокументКорректировки);
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			НЗ = РегистрыНакопления[Выборка.Имя].СоздатьНаборЗаписей();
			НЗ.Отбор.Регистратор.Установить(ДокументКорректировки);
			Нз.Прочитать();
			Для Каждого СтрокаРС Из НЗ Цикл
			СтрокаРС.Период = ДатаКоррекировки;
			КонецЦикла;
		КонецЦикла;
		НЗ.Записать();   
		ДокументКорректировки.ПолучитьОбъект().Записать();    		
		
КонецПроцедуры
Показать

Изменили текст модуля как вы сказали, теперь работает
+
13. yamawa 50 29.12.16 14:09 Сейчас в теме
большое вам спасибо! вознаграждение вам перечислили
+
14. zoomzd1234 22.01.17 19:07 Сейчас в теме
Можно на примере запроса как я делал..

Функция ПолучитьСтатусОборудования(Оборудование)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                    |   ДвижениеОборудованияСрезПоследних.Статус
                    |ИЗ
                    |   РегистрСведений.ДвижениеОборудования.СрезПоследних(, ШтрихКод = &ШтрихКод) КАК ДвижениеОборудованияСрезПоследних"
                    ;
    Запрос.УстановитьПараметр("ШтрихКод",Оборудование);
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда 
        //возврат статуса для оборудования, у которого нет еще данных о статусе
        //в регистре сведений
        возврат <<Перечисления.СтатусыОборудования.???>>
        //или
        возврат Неопределено;
    КонецЕсли; 
    
    СтатусОборудованияВыборка = Результат.Выбрать();
    СтатусОборудованияВыборка.Следующий();
    Возврат СтатусОборудованияВыборка.Статус;
    
КонецФункции
Показать
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот