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

1С:Предприятие :: 1С:Предприятие 8 общая

История изменений реквизитов документа, реквизитов табличных частей документа

История изменений реквизитов документа, реквизитов табличных частей документа
Я
   pups777
 
22.10.18 - 19:16
добрый вечер взял ссылку отсюда Книга знаний: История изменений реквизитов документа, реквизитов табличных частей документа
Разместил в модуле УправленческийКонтроль все необходимое.в документе счет покупателю в модуле документа в процедуре при записи разместил     УправленческийКонтроль.ФиксацияРеквизитовДокумента
(ЭтотОбъект,"Номенклатура1");
без единички писались все реквизиты кроме табличной части.поставил единичку и все висит долгое время.не могу понять почему  у меня не пишутся реквизиты табличной части и как определить номер табличной части? тупо по возрастанию?
 
 
   pups777
 
1 - 22.10.18 - 19:27
Найти(СписокКлючевыхПолей,Строка(СчетчикТЧ)) вот эта строка почему то не срабатывает
   pups777
 
2 - 22.10.18 - 19:28
СписокКлючевыхПолей=Номенклатура
   Chameleon1980
 
3 - 22.10.18 - 20:08
что за бред?
   pups777
 
4 - 22.10.18 - 20:32
почитай по ссылке.и поймешь где бред а где вопрос.ибо там цикл какой то бесконечный
Если Найти(СписокКлючевыхПолей,Строка(СчетчикТЧ)) Тогда//Если поля по текущей ТЧ 

указаны
             Пока Найти(СокрЛП(СписокКлючевыхПолей),Строка(СчетчикТЧ)) Цик//то 

добавляем их в условие соединения 

у меня при вызове     УправленческийКонтроль.ФиксацияРеквизитовДокумента
(ЭтотОбъект,"Номенклатура1");
в цикле всегда стоит 13.позиция символа.и цикл бесконечен получается.
   pups777
 
5 - 22.10.18 - 20:34
где ДокОбъект-  это ЭтотОбъект
документа, СписокКлючевыхПолей – это те ключевые поля, в разрезе которых будет происходить сравнение
таблиц До и После записи. Указывается строкой, перечислением(через запятую) колонок с указанием
номера табличной части. («Материал1,Цена1», если две табличной части: «Материал1,Цена1,Тара2». Тара2
– означает, что у второй табличной части нас интересует только колонка «Тара»)
Записи измененных значений в РС записываются в виде строки.

я указал поля.и цикл постоянно 13 гоняет позицию
   pups777
 
6 - 22.10.18 - 20:46
оказывается цикл идет только по ТЧ Товары и Возвратная тара
   pups777
 
7 - 22.10.18 - 20:57
этот кусок кода почему то только две табличные части обрабатывает Товары и возвратная тара.а есть еще услуги

    СчетчикТЧ = 1;    
    ДЛя каждого ТЧ ИЗ Ссылка.Метаданные().ТабличныеЧасти  Цикл
        ТАблицаЗначенийДо = Ссылка[ТЧ.Имя].Выгрузить();
        ТаблицаЗначенийПосле = ДокОбъект[ТЧ.Имя].Выгрузить();
        Запрос = Новый Запрос;
        Текст = "ВЫБРАТЬ
        |    *
        |ПОМЕСТИТЬ Первая
        |ИЗ
        |    &ТаблицаЗначенийДо КАК ТЧДо
        |;
        |
        ////////////////////////////////////////////////////////////////////////////////

        |ВЫБРАТЬ
        |    *
        |ПОМЕСТИТЬ Вторая
        |ИЗ
        |    &ТаблицаЗначенийПосле КАК ТЧПосле
        |;
        |
        ////////////////////////////////////////////////////////////////////////////////

        |ВЫБРАТЬ
        |    *
        |ИЗ
        |    Первая КАК Первая
        |        ПОЛНОЕ СОЕДИНЕНИЕ Вторая КАК Вторая
        |ПО";
        СоюзИ = "";
        ИзменяемоеЗначение ="";
        списокКолонок = СписокКлючевыхПолей+",";
        СписокКолонок = Новый СписокЗначений;
        Если Найти(СписокКлючевыхПолей,Строка(СчетчикТЧ)) Тогда//Если поля по текущей ТЧ указаны

            Пока Найти(СокрЛП(СписокКлючевыхПолей),Строка(СчетчикТЧ)) Цик//то 

                //добавляем их в условие соединения 

                КОлонкаТЧ = Сред(СписокКлючевыхПолей,1,Найти(СписокКлючевыхПолей,Строка(СчетчикТЧ))-1);
                СписокКолонок.Добавить(КолонкаТЧ);
                СписокКлючевыхПолей = СтрЗаменить(СписокКлючевыхПолей, КолонкаТЧ+Строка(СчетчикТЧ)+",","");
                Текст = Текст+СоюзИ+"         
                |         Первая."+КолонкаТЧ+" = Вторая."+КолонкаТЧ;                       
                СоюзИ ="
                |И";
            КонецЦикла;
        Иначе
            ПРервать;
        КонецЕСли;
        Запрос.Текст = Текст;
        Запрос.УстановитьПараметр("ТаблицаЗначенийДо",ТаблицаЗначенийДо);
        Запрос.УстановитьПараметр("ТаблицаЗначенийПосле",ТаблицаЗначенийПосле);
        Выборка = Запрос.Выполнить().Выбрать();
        Пока выборка.Следующий() Цикл
            Если Выборка[КолонкаТЧ] = NULL тогда//Добавили

                ВИдДействия = Перечисления.ВидДействияСОбъектом.Добавление;
                Добавлено = "1";
            КонецЕсли;
            Если Выборка[КолонкаТЧ+"1"] = NULL тогда//Удалили

                ВидДействия = Перечисления.ВидДействияСОбъектом.Удаление;
                Добавлено = "";
            КонецЕсли;            
            Если Выборка[КолонкаТЧ] = Выборка[КолонкаТЧ+"1"] тогда    //Изменили

                ВидДействия = перечисления.ВидДействияСОбъектом.Изменение;
                Добавлено = "";
            КонецЕсли;
            Для каждого Колонка из ТаблицаЗначенийДо.КОлонки Цикл
                Если Колонка.Имя <> "НомерСтроки" Тогда  //не учитывая сортировку строк

                    Если выборка[Колонка.Имя]<>выборка[Колонка.Имя+"1"]  Тогда
                        Для каждого Поле из СписокКолонок Цикл
                            ИзменяемоеЗначение = ИзменяемоеЗначение + 
                            "_"+Строка(выборка[Строка(Поле)+Добавлено]);
                        КонецЦикла;
                        РегистрацияВРегистр(ДокОбъект,ВидДействия,Тч.Имя+"_"+ИзменяемоеЗначение+"("+Колонка.Имя+")", Строка
                        (Выборка[Колонка.Имя]),Строка(Выборка[Колонка.Имя+"1"]));
                        ИзменяемоеЗначение = "";
                    КонецЕсли;    
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        СчетчикТЧ= СчетчикТЧ+1;
    КОнецЦикла;      
    //++Реквизиты ТЧ объекта
   d4rkmesa
 
8 - 22.10.18 - 21:31
(0) http://catalog.mista.ru/public/66851/
"Ошибка! Публикация неактивна или находится на модерации."

Думаю, смысла обсуждать нет. Другое _похожее_ решение на Инфостарте тоже не без косяков. Бред все эти истории изменений. Для тех реквизитов что нужно, проще делать истории изменения выборочно.
   pups777
 
9 - 22.10.18 - 21:34
разобрался.может кому пригодится.
для того чтобы писать в историю табличную часть "услуги" надо строку сделать так:    УправленческийКонтроль.ФиксацияРеквизитовДокумента
(ЭтотОбъект,"Номенклатура1,Номенклатура2,Номенклатура3,");

подозреваю именно потому что Услуги 3-яя ТЧ
   pups777
 
10 - 22.10.18 - 21:35
причем последняя запятая важна.хотя в статье этого нет
 
 Рекламное место пустует

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