Имя: Пароль:
1C
1С v8
При программном проведении документа из обработки документ очищается
0 Prisian
 
01.07.15
15:09
Доброго времени суток!
1 Andrey2C
 
01.07.15
15:10
Из какой обработки? Из стандартной?
2 Mikeware
 
01.07.15
15:10
"продолжайте наблюдения"©
3 Serg_1960
 
01.07.15
15:10
(0) Это вопрос или утверждение?
4 Prisian
 
01.07.15
15:11
Извиняюсь, нажал Энтер, не дописав суть проблемы.
5 Mikeware
 
01.07.15
15:11
(3) это задание...
6 Andrey2C
 
01.07.15
15:12
"Групповая обработка справочников и документов" вам в помощь. Она врядли будет очищать чего то там)))
7 Prisian
 
01.07.15
15:14
Есть конфигурация самописная. При заполнении и расчете документа из формы документа, он и заполняет и расчитывает документ и проводит. Но если я эти же процедуры (заполнения, расчета и проведения) вызываю из обработки - документ создается, в отладчике проводится и есть как заполненные табличные части так и движения по нему. Но после проведения в базе данных только пустой документ.
8 Serg_1960
 
01.07.15
15:15
(6) Лучше универсальную подбор и обработку объектов посоветуй - любые хотелки, всё что пожелаешь. И даже очистит.
9 Mikeware
 
01.07.15
15:16
(7) вангую: в обработке что-то неправильно.
10 Serg_1960
 
01.07.15
15:16
(7) "ЭтотОбъект" - он разный.
11 Prisian
 
01.07.15
15:16
Вот код, из обработки: Месяц = КонецМесяца(ДобавитьМесяц(Период, Итератор));
            ФлагРасчета = ЛОЖЬ;
            ДатаДокумента = ?(КонецМесяца(ДатаРасчета) = Месяц, ДатаРасчета, Месяц);
            
            // Проверяем не было ли в этом периоде расчета
            ДокументРасчета = РаботаСРасчетами.ПолучитьДокументРасчета(ЛицевойСчет, ДатаДокумента);
            
            Если ДокументРасчета = Документы.Расчет.ПустаяСсылка() Тогда
                
                ДокументРасчета = Документы.Расчет.СоздатьДокумент();
                ДокументРасчета.Дата             = ДатаДокумента;
                ДокументРасчета.УстановитьНовыйНомер();
                ДокументРасчета.Организация         = Организация;
                ДокументРасчета.ЛицевойСчет         = ЛицевойСчет;
                ДокументРасчета.Автор              = Пользователь;
                
                ДокументРасчета.Записать();
                                
            Иначе
                
                ДокументРасчета = ДокументРасчета.ПолучитьОбъект();
                ДокументРасчета.Дата = ДатаДокумента;
                
                ДокументРасчета.Расчеты.Очистить();
                ДокументРасчета.Льготы.Очистить();
                ДокументРасчета.Записать(РежимЗаписиДокумента.ОтменаПроведения);
                
            КонецЕсли;ДокументОбъект = ДокументРасчета.Ссылка.ПолучитьОбъект();
    
    Документы.Расчет.ЗаполнитьТабличнуюЧастьИнформациейНеобходимойДляРасчетов(ДокументОбъект);
    ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
    
    Документы.Расчет.РасчитатьНачисления(ДокументОбъект);
    ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
    
    Документы.Расчет.ОтразитьДанныеТабличнойЧастиРасчетыВРегистрахРасчетов(ДокументОбъект);
    Документы.Расчет.РасчитатьЛьготы(ДокументОбъект);
    Документы.Расчет.ОчиститьДвиженияПоРегиструРасчетаНеобходимыхДляРасчетаЛьгот(ДокументОбъект);
        
    Попытка
        ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
        ТекстСообщения = ОписаниеОшибки();
        УправлениеВодоканаломСервер.СообщитьОбОшибке(, ТекстСообщения, , , , Ложь);
    Исключение
        ДокументОбъект.Записать();
        ТекстСообщения = ОписаниеОшибки();
        УправлениеВодоканаломСервер.СообщитьОбОшибке(, ТекстСообщения, , , , Ложь);
    КонецПопытки;
12 Mikeware
 
01.07.15
15:18
УправлениеВодоканаломСервер....
мне уже страшно...
Страшнее только УправлениеЧернобыльсккойАЭССервер
хотя... УправлениеВодокАналом - уже смешнее
13 Andrey2C
 
01.07.15
15:18
(11) ты новые документы создаешь или перепроводишь уже существующие? я чет не пойму
14 Andrey2C
 
01.07.15
15:20
И заполняет и расчитывает и сразу проводит. Капец просто! А на балалайке играет при этом еще?)))
15 Prisian
 
01.07.15
15:22
Обработка Ищет документ в указаном периоде, если находит - получает объект документа и очищает табличные части, если нет - создает новы и заполняет определенными данными реквизиты документа а потом уже пытается заполнить табличные части.
16 Prisian
 
01.07.15
15:24
И заполняет и расчитывает и сразу проводит. Капец просто! А на балалайке играет при этом еще?)))
А документ по зарплате в типовой конфигурации не то же делает?
17 Одинесю
 
01.07.15
15:24
(7) Посмотри стандартную обработку проведения документа.
18 gornovrom
 
01.07.15
15:24
(11) ИМХО - это неправильно, что в одной обработке документ 4 раза перезаписывается
19 Andrey2C
 
01.07.15
15:29
(15)Обработка если находит документ, то очищает ТЧ? А как надо? Отладчиком пробовал ходить по обработке своей? Скажи более понятнее что тебе нужно то в итоге? Перепровести документы или создать новые? Я не совсем понимаю какая у тебя проблема и  какая задача?
20 Mirnin
 
01.07.15
15:32
Ну, если проводки все делаются, копай в эту процедуру.

Документы.Расчет.ОчиститьДвиженияПоРегиструРасчетаНеобходимыхДляРасчетаЛьгот(ДокументОбъект);
21 Prisian
 
01.07.15
15:33
(19) Отладчиком пробовал - так в нем и ТЧ заполняются и движения формируются, а после прохождения кода - только пустой документ. Так возникает вопрос почему сделанные изменения в базу не записываются.
22 Prisian
 
01.07.15
15:34
(20) Эта процедура очищает движения по регистру расчета. После вызова данной процедуры идет запись документа в базу данных с последующим проведением документа.
23 Andrey2C
 
01.07.15
15:39
Тут что у тебя покажи:
ЗаполнитьТабличнуюЧастьИнформациейНеобходимойДляРасчетов(ДокументОбъект);
24 Prisian
 
01.07.15
15:40
Попытка
        
        ТабличнаяЧастьРасчеты = ДокументОбъект.Расчеты;
        Если ТабличнаяЧастьРасчеты.Количество() > 0 Тогда
            ТабличнаяЧастьРасчеты.Очистить();
        КонецЕсли;
        
        //ТаблицаРасчеты             = ПолучитьСтруктуруТабличнойЧасти(ДокументОбъект.Ссылка, "Расчеты");
        СтруктураШапкиДокумента     = ПолучитьСтруктуруШапкиДокумента(ДокументОбъект.Ссылка);
        
        ТаблицаФактическогоПериодаДействия = РаботаСРасчетами.ЗаполнитьТаблицуДанныхДляРасчета(СтруктураШапкиДокумента);
        
        // Дополнить табличную часть.
        ДополнитьТабличнуюЧасть(
        ДокументОбъект,
        "Расчеты",
        ТаблицаФактическогоПериодаДействия,
        Новый Структура("Счетчик, ВидРасчета, ДатаНачала, ДатаОкончания")
        );
        
    Исключение
        
        ТекстСообщения = ОписаниеОшибки();
        УправлениеВодоканаломСервер.СообщитьОбОшибке(, ТекстСообщения, , , , Ложь);
        
    КонецПопытки;
25 Mirnin
 
01.07.15
15:42
(22)
А, нет, дело не в процедурах.

ДокументОбъект = ДокументРасчета.Ссылка.ПолучитьОбъект();

Тут ты получаешь объект документа по ссылке. Чистый.

Затем ты заполняешь текущий объект и вновь записываешь тот, который чистый. Потом опять и опять..

Попробуй

ДокументОбъект = ДокументРасчета.ПолучитьОбъект();
26 yavasya
 
01.07.15
15:43
(25) у меня ДокументОбъект = ДокументРасчета.Ссылка.ПолучитьОбъект();  работало
27 Andrey2C
 
01.07.15
15:48
(24) Ты их и там и тут очищаешь. Или тут контрольная очистка?
Покажи дальше что там в ДополнитьТабличнуюЧасть?
28 Prisian
 
01.07.15
15:49
(27) тут контрольная очистка
29 Andrey2C
 
01.07.15
15:52
(28) Ты тут все только очищаешь а где ты заполняешь ТЧ? Давай доступ чтоли уже тим вьювером или что там у тебя есть?
30 Andrey2C
 
01.07.15
15:55
(29) А лучший вариант пригласи того, кто это все писал и пусть он сам все настроит и покажет как надо. Так можно долго гадать тут что откуда и куда. Из того что ты показал ничего не понятно.
31 Prisian
 
01.07.15
16:01
(29) тут очищаю, а заполняю при вызове процедур общего модуля(11).
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший