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

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

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

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

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

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

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