Имя: Пароль:
1C
1С v8
Очистка табличных частей документа при повторной загрузке
,
0 balak05
 
04.04.14
09:34
Здравствуйте. Есть код по зогрузке реализации из ДБФ
//Запрос = Новый Запрос;
        //Запрос.Текст =
        //"ВЫБРАТЬ
        //|    РеализацияТоваровУслуг.Номер,
        //|    РеализацияТоваровУслуг.Дата,
        //|    РеализацияТоваровУслуг.Ссылка
        //|ИЗ
        //|    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        //|ГДЕ
        //|    РеализацияТоваровУслуг.Дата = &ДатаДок
        //|    И РеализацияТоваровУслуг.Номер = &Номер";
        //
        //Запрос.УстановитьПараметр("Номер", СОКРЛП(ОбъектDBF.Num));
        //Запрос.УстановитьПараметр("ДатаДок", ОбъектDBF.Data);

        //
        //Результат = Запрос.Выполнить();
        //
        //ВыборкаДетальныеЗаписи = Результат.Выбрать();
        //
        //Если ВыборкаДетальныеЗаписи.Количество() > 1 Тогда
        //    Сообщить("Имеются дубли Реализации № " + Результат.Выгрузить()[0].Ссылка.Номер);
        //    //НовДок = Результат.Выгрузить()[0].Ссылка.ПолучитьОбъект();
        //    //НовДок.Товары.Очистить();
        //    //НовДок.Услуги.Очистить();
        //    //ОбъектDBF.Следующая();
        //    //Продолжить;
        //ИначеЕсли ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
        //  Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        //      Сообщить("Реализация с таким номером уже есть " + Результат.Выгрузить()[0].Ссылка.Номер);
        //      //НовДок = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
        //    //НовДок.Товары.Очистить();
        //    //НовДок.Услуги.Очистить();
        //  КонецЦикла;
        //Иначе
        //    НовДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
        //КонецЕсли;
        
        
            
                
Если ОбъектDBF.Data = НовДок.Дата Тогда
    Если НЕ СОКРЛП(ОбъектDBF.Num) = СОКРЛП(НовДок.Номер) Тогда
            
            
        Если НЕ (НовДок=Документы.РеализацияТоваровУслуг.ПустаяСсылка()) Тогда
             НовДок.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
             Сообщение = Новый СообщениеПользователю();
             Сообщение.Текст = "Создана реализация с номером № "+НовДок.Номер;
               Сообщение.Сообщить();
        КонецЕсли;
        
            НовДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
            НовДок.Дата = ОбъектDBF.Data;
            НовДок.Номер = ОбъектDBF.Num;
        Если СокрЛП(ОбъектDBF.ORG) = "Софит-Экспо" тогда
            НовДок.Организация = Справочники.Организации.НайтиПоРеквизиту("ОГРН","1026402194719");
        ИначеЕсли СокрЛП(ОбъектDBF.ORG) = "Экспотехсервис" тогда
            НовДок.Организация = Справочники.Организации.НайтиПоРеквизиту("ОГРН","1056405023905");
        КонецЕсли;
        Если ОбъектDBF.vtovar = 0 Тогда
            НовДок.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Товары;
        Иначе
            НовДок.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Услуги;
        КонецЕсли;
            НовДок.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
            НовДок.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду(ОбъектDBF.val);
            НовДок.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.kontr));
            НовДок.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.dog),,,НовДок.Контрагент);
            НовДок.Заказ = Справочники.Заказы.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.proekt));
            НовДок.КурсВзаиморасчетов = 1;
            НовДок.КратностьВзаиморасчетов = 1;
            НовДок.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
            НовДок.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным;
            НовДок.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
            
        
            НомРод = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ОбъектDBF.parent));
            Номенклатура1 = Справочники.Номенклатура.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.tovar), ,НомРод);
            //НовДок.Товары.Очистить();
            //НовДок.Услуги.Очистить();
            Если Номенклатура1.Услуга Тогда
                СтрокаТЧУ = НовДок.Услуги.Добавить();
                СтрокаТЧУ.Номенклатура = Номенклатура1;
                 СтрокаТЧУ.Количество = ОбъектDBF.kol;
                 СтрокаТЧУ.Цена = ОбъектDBF.summa/ОбъектDBF.kol;
                 СтрокаТЧУ.Сумма = ОбъектDBF.summa;
                 СтрокаТЧУ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                 СтрокаТЧУ.СчетДоходов = ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД;
                 СтрокаТЧУ.СчетРасходов = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеЕНВД;
                 СтрокаТЧУ.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
             Иначе
                 СтрокаТЧТ = НовДок.Товары.Добавить();
                 СтрокаТЧТ.Номенклатура = Номенклатура1;
                 СтрокаТЧТ.Количество = ОбъектDBF.kol;
                 СтрокаТЧТ.Цена = ОбъектDBF.summa/ОбъектDBF.kol;
                 СтрокаТЧТ.Сумма = ОбъектDBF.summa;
                 СтрокаТЧТ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                 СтрокаТЧТ.СчетДоходов = ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД;
                 СтрокаТЧТ.СчетРасходов = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеЕНВД;
                 СтрокаТЧТ.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
             КонецЕсли;    
            
    Иначе
            НомРод = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ОбъектDBF.parent));
            Номенклатура1 = Справочники.Номенклатура.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.tovar), ,НомРод);
            Если Номенклатура1.Услуга Тогда
                СтрокаТЧУ = НовДок.Услуги.Добавить();
                СтрокаТЧУ.Номенклатура = Номенклатура1;
                 СтрокаТЧУ.Количество = ОбъектDBF.kol;
                 СтрокаТЧУ.Цена = ОбъектDBF.summa/ОбъектDBF.kol;
                 СтрокаТЧУ.Сумма = ОбъектDBF.summa;
                 СтрокаТЧУ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                 СтрокаТЧУ.СчетДоходов = ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД;
                 СтрокаТЧУ.СчетРасходов = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеЕНВД;
                 СтрокаТЧУ.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
             Иначе    
                 СтрокаТЧТ = НовДок.Товары.Добавить();
                 СтрокаТЧТ.Номенклатура = Номенклатура1;
                 СтрокаТЧТ.Количество = ОбъектDBF.kol;
                 СтрокаТЧТ.Цена = ОбъектDBF.summa/ОбъектDBF.kol;
                 СтрокаТЧТ.Сумма = ОбъектDBF.summa;
                 СтрокаТЧТ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                 СтрокаТЧТ.СчетДоходов = ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД;
                 СтрокаТЧТ.СчетРасходов = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеЕНВД;
                 СтрокаТЧТ.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
             КонецЕсли;    
         КонецЕсли;
Иначе
         НовДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
            НовДок.Дата = ОбъектDBF.Data;
            НовДок.Номер = ОбъектDBF.Num;
        Если СокрЛП(ОбъектDBF.ORG) = "Софит-Экспо" тогда
            НовДок.Организация = Справочники.Организации.НайтиПоРеквизиту("ОГРН","1026402194719");
        ИначеЕсли СокрЛП(ОбъектDBF.ORG) = "Экспотехсервис" тогда
            НовДок.Организация = Справочники.Организации.НайтиПоРеквизиту("ОГРН","1056405023905");
        КонецЕсли;
        Если ОбъектDBF.vtovar = 0 Тогда
            НовДок.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Товары;
        Иначе
            НовДок.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Услуги;
        КонецЕсли;
            НовДок.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
            НовДок.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду(ОбъектDBF.val);
            НовДок.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.kontr));
            НовДок.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.dog),,,НовДок.Контрагент);
            НовДок.Заказ = Справочники.Заказы.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.proekt));
            НовДок.КурсВзаиморасчетов = 1;
            НовДок.КратностьВзаиморасчетов = 1;
            НовДок.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
            НовДок.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным;
            НовДок.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
            
        
            НомРод = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ОбъектDBF.parent));
            Номенклатура1 = Справочники.Номенклатура.НайтиПоНаименованию(СОКРЛП(ОбъектDBF.tovar), ,НомРод);
            Если Номенклатура1.Услуга Тогда
                СтрокаТЧУ = НовДок.Услуги.Добавить();
                СтрокаТЧУ.Номенклатура = Номенклатура1;
                 СтрокаТЧУ.Количество = ОбъектDBF.kol;
                 СтрокаТЧУ.Цена = ОбъектDBF.summa/ОбъектDBF.kol;
                 СтрокаТЧУ.Сумма = ОбъектDBF.summa;
                 СтрокаТЧУ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                 СтрокаТЧУ.СчетДоходов = ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД;
                 СтрокаТЧУ.СчетРасходов = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеЕНВД;
                 СтрокаТЧУ.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
             Иначе
                 СтрокаТЧТ = НовДок.Товары.Добавить();
                 СтрокаТЧТ.Номенклатура = Номенклатура1;
                 СтрокаТЧТ.Количество = ОбъектDBF.kol;
                 СтрокаТЧТ.Цена = ОбъектDBF.summa/ОбъектDBF.kol;
                 СтрокаТЧТ.Сумма = ОбъектDBF.summa;
                 СтрокаТЧТ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
                 СтрокаТЧТ.СчетДоходов = ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД;
                 СтрокаТЧТ.СчетРасходов = ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеЕНВД;
                 СтрокаТЧТ.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Основная номенклатурная группа");
             КонецЕсли;    
    КонецЕсли;
            
            
        
        ОбъектDBF.Следующая();
    КонецЦикла;
    Если НЕ (НовДок=Документы.РеализацияТоваровУслуг.ПустаяСсылка()) Тогда
             НовДок.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
            Сообщение = Новый СообщениеПользователю();
            Сообщение.Текст = "Создана реализация с номером № "+НовДок.Номер;
            Сообщение.Сообщить();
    КонецЕсли;

Как сделать так чтобы при повторной загрузке табличные части очищались? Подскажите пожалуйста.
1 ДенисЧ
 
04.04.14
09:35
Табличная часть.Очистить (Tabular section.Clear)
Табличная часть (Tabular section)
Очистить (Clear)
Синтаксис:

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

Удаляет все строки табличной части.

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

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

Использование метода допустимо только в том случае, если табличная часть получена из свойства объекта. Если табличная часть получена из свойства ссылки (или выборки), то использование этого метода будет вызывать ошибку выполнения.
Пример:

Состав.Очистить();
2 Мимохожий Однако
 
04.04.14
09:35
НовДок.Услуги.Очистить()
3 Godofsin
 
04.04.14
09:37
Раскомментить 2 строчки в твоем коде
4 balak05
 
04.04.14
09:38
(1) (2) Это я знаю. Но куда ее ставить? У меня загрузка происходит в том же цикле что и проверка.
5 balak05
 
04.04.14
09:39
(3) Тогда записывается последняя строчка из табличной части
6 Godofsin
 
04.04.14
09:45
(5) Переписать код
7 ДенисЧ
 
04.04.14
09:46
(4) 500 евро.
8 Мимохожий Однако
 
04.04.14
09:46
(4)Где у тебя найденный документ, чтобы его очищать при повторной загрузке? Вот где нашел, там и вставляй очистку? В приведенном коде найденного документа нет
9 Godofsin
 
04.04.14
09:47
(8) А мне вот что-то не хотелось в его код смотреть...
10 balak05
 
04.04.14
10:17
(8) поиск происходит по дате и номеру. если нашли документ с таким датой и номером тогда вставляем новую строчку в табличную часть. Проблема в том что если я в этом же цикле запросом нахожу документ с датой и номером, то он каждый раз очищается.
11 balak05
 
04.04.14
10:17
(9) ваше право
12 Godofsin
 
04.04.14
10:23
(10) Выгрузи сначала данные в ТЗ, выбери оттуда номера и даты