Имя: Пароль:
1C
1С v8
удаление строк ТЧ при проведении
0 Kurbash
 
30.12.14
09:17
Всем привет. В документе есть ТЧ с одинаковыми строками. Проводить не даёт, поскольку в регистре не не может быть одинаковых записей. Хотел  решить проблему таким образом- в обработчик ПриПроведении перед началом движения по регистрам строк ТЧ удалял ненужные строчки. Все равно ругшается. Поставил удаление на событие ПриЗаписиНаСервере. Ругается, ненужные строчки удаляются, документ проводиться, получается нажимать на кнопку проведение надо два раза, что естественно через ...опу. Подскажите как можно сделать?
1 vicof
 
30.12.14
09:18
*плАчу*
ты группировать свою тч в запросе пробовал, проводитель?
2 Kurbash
 
30.12.14
09:19
(1) не надо плакать, знаю что можно вооще запросом различные записи из ТЧ выбрать, но хочу строчки удалять
3 Kurbash
 
30.12.14
09:20
просто интересно почему удаление не срабатывает перед движением
4 Dmitriy_76
 
30.12.14
09:21
ставь удаление в ПередЗаписью()
5 666 Devil
 
30.12.14
09:21
(0) а с количеством в удаленной строке что происходит?
6 Dmitriy_76
 
30.12.14
09:22
(5) в призаписи() объект уже сохранен :)) и заново не перезаписывается
7 Kurbash
 
30.12.14
09:22
(4)-нет, не канает у меня там есть строчка с НайтиПоНаименованию
(5) уменьшается
8 Dmitriy_76
 
30.12.14
09:22
(7) читай (6). твой вариант только в (4)
9 Kurbash
 
30.12.14
09:22
Так я ПриЗаписи и не ставил, ставил ПередЗаписьюНаСервере
10 Kurbash
 
30.12.14
09:23
вариант (4)-Поставил удаление на событие ПриЗаписиНаСервере. Ругается, ненужные строчки удаляются, документ проводиться, получается нажимать на кнопку проведение надо два раза, что естественно через ...опу.
11 666 Devil
 
30.12.14
09:25
(7) а если эта строка по ошибке была добавлена и не надо ничего уменьшать?
12 Kurbash
 
30.12.14
09:26
(11) надо
13 Kurbash
 
30.12.14
09:27
Ладно. сейчас просто команду сделаю, на нее кину удаление и проведение
14 vicof
 
30.12.14
09:27
Ждем, пока автор откроет для себя хотя бы одну книжку по программированию в 1с.
15 vicof
 
30.12.14
09:27
(13) А это не через опу?
16 Kurbash
 
30.12.14
09:28
(15) это через меньшую ...опу, никто другого варианте не подсказал
17 Dmitriy_76
 
30.12.14
09:30
(9) (10) так все таки в ПередЗаписьюНаСервере() или в ПриЗаписиНаСервере() ?
18 Kurbash
 
30.12.14
09:31
ПередЗаписьюНаСервере
19 vicof
 
30.12.14
09:32
(16) В (1) Ну удаляй дальше. Я чувствую, ты принесешь еще много новогодних тем.
20 666 Devil
 
30.12.14
09:34
значит есть Записать() (18)
21 Kurbash
 
30.12.14
09:39
(19)а я чувствую что тебе самоутверждаться надо на ком то? Сам сразу писать стал профессионально и ни  у кого ничего не спрашивал?
22 vicof
 
30.12.14
09:40
(21) Нет, но слушал, что говорят умные люди, а не порол чушь, типа (2)
23 Kurbash
 
30.12.14
09:40
(22) есть просьба-не пиши больше ответы на мои посты, ок?
24 Dmitriy_76
 
30.12.14
09:41
уряяя...новый год завтра!!!
седня последний рабочий день!!!
не надо ругаться мальчики!!!
25 Kurbash
 
30.12.14
09:41
(20) Записать() где? в обработке проведения нет
26 vicof
 
30.12.14
09:41
(23) Это я сам решу, ок?
27 DrZombi
 
гуру
30.12.14
09:42
(0) >>>  в регистре не не может быть одинаковых записей.

Может стоит подумать об том, что бы изменить регистр? :)
28 Любопытная
 
30.12.14
09:42
(25) может отладчиком посмотреть, что у тебя там двоится и в какой момент лучше удалять?
29 Александр_
Тверь
 
30.12.14
09:43
(0) уважаемый, не делай так. Это плохо.
30 Kurbash
 
30.12.14
09:43
(27) не вариант
(28) да яи без отладчика вижу что двоится, мне интересно почему удаление не срабатывает
31 Kurbash
 
30.12.14
09:43
(29)как?
32 Александр_
Тверь
 
30.12.14
09:45
(31) не надо ничего удалять из ТЧ при проведении, особенно если документ создается пользователем.
Если нужно, просто сгруппируй строки (при получении данных).
33 ktvladimir
 
30.12.14
09:45
(23) ну не зная задачи нельзя говорить что правильно а что нет. На самом деле иногда встречаются задачи когда идентичные строки нужно удалять а не сворачивать) (Ну можно конечно делать проверки и предупреждать пользователя... но это лишняя информация, которая зачастую человеку не нужна и требует лишних телодвижений. Поэтому какой вопрос стоял такой ответ и дан в (18). где правильно удалять строки в процедуре ПередЗаписью..
34 Любопытная
 
30.12.14
09:47
Поставил удаление на событие ПриЗаписиНаСервере. Ругается, ненужные строчки удаляются, документ проводиться, получается нажимать на кнопку проведение надо два раза

Вот тут мне ничего не понятно.

В обработке проведения после формирования набора записей можно обойти набор и записи почистить.
И вообще, можно придумывать до бесконечности, пока архитектуру и код не видно :)
35 Мыш
 
30.12.14
09:47
Идеология 1С как учетной системы не предполагает изменение данных документа при проведении. Моветон так сказать )
36 Kurbash
 
30.12.14
09:47
(33) Так я и ставлю перед записью, при проведении сначала ругается потом строчки удаляются
37 DrZombi
 
гуру
30.12.14
09:48
(30) Тогда сворачивай данные.
Так же Регистр периодический?
38 DrZombi
 
гуру
30.12.14
09:49
(2) Это не просто Можно, а Нужно.
Заметил интересную вещь, что Циклы работают куда быстрее с данными, полученными по запросы, нежели непосредственно полученные из документа :)
39 Kurbash
 
30.12.14
09:49
(37) да, реистр переидический
40 Мыш
 
30.12.14
09:51
(38) Ну дык. Запрос - он такой. Данные уже отобраны. Непосредственное обращение к данным документа - вытаскивать по кусочку )
41 DrZombi
 
гуру
30.12.14
09:51
(39) Ты хоть привиди нам структуру этого регистра.
Можно Принти-Скрином, для наглядности.
Что бы советовать было легче :)
42 Любопытная
 
30.12.14
09:51
(37) а ругается уже на записи в регистр?
43 Любопытная
 
30.12.14
09:52
Просто странно, что проведение срабатывает раньше, чем ПередЗаписью.
44 Kurbash
 
30.12.14
09:52
Парни, да работает у меня все, запрос использую, все нормально, я просто хочу понять почему у меня не работает удаление:), хотя по логике все удаляться должно и проводиться нормально, или сразу ПриЗаписиНаСервере срабатывает проверка на дубли в ТЧ
45 DrZombi
 
гуру
30.12.14
09:53
(42) Если у него Имерение одно, то Вариантов "Период" и "Измерение", уже не хватит для уникальности записи :)
46 Kurbash
 
30.12.14
09:53
Потому что проведение это и есть по сути запись длкумента только с определенным параметромРежимЗаписиДокумента.Проведение
47 DrZombi
 
гуру
30.12.14
09:53
(44) А ты как удаляешь?
48 DrZombi
 
гуру
30.12.14
09:54
(46) Если галочка "Авто удаление" нет, то записи всегда остаются на месте :)
49 Dmitriy_76
 
30.12.14
09:55
(46) о как
50 Любопытная
 
30.12.14
09:56
(46) Это ответ на мое (43)?
51 Dmitriy_76
 
30.12.14
09:56
(48)  взорвал все представление об 1с !!!
52 Dmitriy_76
 
30.12.14
09:57
че уже все бухают вхлам ???
53 Любопытная
 
30.12.14
09:57
(52) похоже, что так
54 Тындр
 
30.12.14
09:57
Хыхы можно из при Записи() вызвать еще раз Записать() и тогда все запишется два раза подряд, не надо будет дважды на запись нажимать ))
Но это знатный govнокод, не достойный 1с специалиста )
55 Dmitriy_76
 
30.12.14
09:58
(54) попробуй зацыклить 1с :)))
56 666 Devil
 
30.12.14
10:00
(44) в свойствах формы событие "ПередЗаписьюНаСервере" заполнено?
57 DrZombi
 
гуру
30.12.14
10:01
+(46) Для тебя из 1С, УПП, в модуле "ОбработкаПроведения"

//Из документа
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, РежимПроведения);

//Из модуля ОбщегоНазначения
// Процедура удаления движений документа при перепроведении (отмене проведения)
//
// Параметры:
//    ДокументОбъект                 - документ, движения которого удаляются
//    Отказ                         - булево, признак отказа
//    ВыборочноОчищатьРегистры     - булево, признак выборочной очистки наборов записей
//                                Если Истина - часть наборов записей не будут очищены, будут очищены только коллекции движений
//    РежимПроведенияДокумента     - режим проведения (оперативный / неоперативный),
//                                нужен для составления списка регистров, которые не надо очищать
//    Для документа ПринятиеКУчетуОС предусмотрена отдельная процедура УдалитьДвиженияПринятиеКУчетуОС
Процедура УдалитьДвиженияРегистратора(ДокументОбъект, Отказ, ВыборочноОчищатьРегистры = Ложь, РежимПроведенияДокумента = Неопределено) Экспорт
    
    // Удалим те движения, которые уже записаны
    УдалитьЗаписанныеДвиженияДокумента(ДокументОбъект, Отказ, ВыборочноОчищатьРегистры, РежимПроведенияДокумента);
    
    // Очистим непустые коллекции движений документа
    ОчисткаКоллекцииДвиженийДокумента(ДокументОбъект);
    
    // Удаление записей регистрации из всех последовательностей - после удаления движений по регистрам
    УдалитьРегистрациюДокументаВПоследовательностях(ДокументОбъект, Истина);
    
КонецПроцедуры

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

// Возвращает перечень регистров, которые требуется очистить
//
Функция МассивРегистровНужноОчистить(ДокументОбъект) Экспорт
    
    МассивРегистров = Новый Массив();
    
    Для Каждого Движение ИЗ ДокументОбъект.Метаданные().Движения Цикл
        МассивРегистров.Добавить(Движение.ПолноеИмя());
    КонецЦикла;
    
    Возврат МассивРегистров;
    
КонецФункции

// Функция возвращает массив, который содержит имена регистров
// движения которых не надо удалять при очистке движений перед перепроведением
//    Остатки, движения по таким регистрам не используются
//         ни в процедурах контроля остатков (товаров, задолженностей)
//         ни в логике формирования других движений (например, партии, авансы)
//
Функция ПолучитьРегистрыДляОптимизацииПерезаписиДвижений(ТекущийРежимПроведенияДокумента)
    
    МассивРегистров = Новый Массив;
    
    //В список регистров могут быть включены только те, движения которых записываются через коллекцию движений (Движения.<...>),
    //а не через набор записей
    
    // Регистры вида "Обороты", которые
    //- не используются для формирования движений
    //- двигаются документами, для которых применяется выборочное удаление движений
    МассивРегистров.Добавить("ДвиженияДенежныхСредств");
    МассивРегистров.Добавить("Закупки");
    МассивРегистров.Добавить("Продажи");

    // Далее перечислены регистры, которые используются для контроля остатков, формирования движений
    // только при оперативном проведении. Их
    // - следует очищать если документ проводится оперативно
    // - можно не очищать, если документ проводится неоперативно
    Если ТекущийРежимПроведенияДокумента = РежимПроведенияДокумента.Неоперативный Тогда
        МассивРегистров.Добавить("ВзаиморасчетыСКонтрагентами");
        МассивРегистров.Добавить("ДенежныеСредства");
        МассивРегистров.Добавить("ЗаказыПоставщикам");
        МассивРегистров.Добавить("РазмещениеЗаказовПокупателей");
        МассивРегистров.Добавить("РасчетыСКонтрагентами");
        МассивРегистров.Добавить("ТоварыВНТТ");
        МассивРегистров.Добавить("ТоварыВРезервеНаСкладах");
        МассивРегистров.Добавить("ТоварыВРознице");
        МассивРегистров.Добавить("ТоварыКПередачеОрганизаций");
        МассивРегистров.Добавить("ТоварыКПередачеСоСкладов");
        МассивРегистров.Добавить("ТоварыКПеремещениюВНТТ");
        МассивРегистров.Добавить("ТоварыКПолучениюНаСклады");
        МассивРегистров.Добавить("ТоварыНаСкладах");
        МассивРегистров.Добавить("ТоварыОрганизаций");
        МассивРегистров.Добавить("ТоварыПереданные");
        МассивРегистров.Добавить("ТоварыПолученные");
    КонецЕсли;
    
    Возврат МассивРегистров;
    
КонецФункции // ПолучитьРегистрыДляОптимизацииПерезаписиДвижений

// Функция возвращает структуру параметров проведения документа
//
// Возвращаемое значение:
//     <Структура> - структура содержащая свойства:
//                ДокументИспользуетсяВОтложенномПроведении - документ поддерживает отложенное проведение
//                ПроведениеПоВсемВидамУчета - выполняется полное проведение документа
//                ВыполняетсяДопроведение - выполняется допроведение документа
//                ВыполняетсяОтложенноеПроведение - выполняется отложенное проведение документа
//  Последние три свойства структуры имеют смысл, если ДокументИспользуетсяВОтложенномПроведении
Функция ПолучитьПараметрыПроведенияДокумента(ДокументОбъект) Экспорт
    
    СтруктураПараметров = Новый Структура("ДокументИспользуетсяВОтложенномПроведении,
                                            |ПроведениеПоВсемВидамУчета,
                                            |ВыполняетсяДопроведение,
                                            |ВыполняетсяОтложенноеПроведение",Ложь,Ложь,Ложь, Ложь);
    
    СвойствоЭтапПроведения = Неопределено;
    СтруктураПараметров.ДокументИспользуетсяВОтложенномПроведении = ДокументОбъект.ДополнительныеСвойства.Свойство("ЭтапПроведения", СвойствоЭтапПроведения)
                                                ИЛИ ОтложенноеПроведениеДокументов.ДокументПодерживаетОтложенноеПроведение(ДокументОбъект);
    Если СтруктураПараметров.ДокументИспользуетсяВОтложенномПроведении Тогда
        
        // Документ проводится в режиме допроведения,
        // если свойство ДополнительныеСвойства содержит ЭтапПроведения
        // и данное свойство равно "Допроведение"
        
        Если СвойствоЭтапПроведения <> Неопределено Тогда
            СтруктураПараметров.ПроведениеПоВсемВидамУчета = (СвойствоЭтапПроведения = "ПроведениеПолностью");
            СтруктураПараметров.ВыполняетсяДопроведение    = (СвойствоЭтапПроведения = "Допроведение");
            СтруктураПараметров.ВыполняетсяОтложенноеПроведение = (СвойствоЭтапПроведения = "Проведение");
        Иначе
            СтруктураПараметров.ВыполняетсяОтложенноеПроведение = Истина;
        КонецЕсли;
    КонецЕсли;
    
    Возврат СтруктураПараметров;
    
КонецФункции

// Функция возвращает признак того, что документ используется в отложенном проведении
//
Функция ДокументПодерживаетОтложенноеПроведение(ДокументОбъект, СтруктураШапкиДокумента = Неопределено) Экспорт
    //Используется ли вообще отложенное проведение по дате и организации, указанным в документе
    Если НЕ ИспользуетсяОтложенноеПроведение(СтруктураШапкиДокумента,ДокументОбъект) Тогда
        Возврат Ложь;
    КонецЕсли;

    Возврат ДокументОбъект.Метаданные().Движения.Содержит(РегистрыСведений.ДокументыТребующиеДопроведения.СоздатьНаборЗаписей().Метаданные());
    
КонецФункции // ДокументПодерживаетОтложенноеПроведение

// Функция возвращает список регистров, движения по которым формируются при допроведении
//
Функция ПолучитьРегистрыОтложенногоПроведения() Экспорт
    
    МассивРегистров = Новый Массив();
    
    МассивРегистров.Добавить("РегистрНакопления.БракВПроизводствеБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.БракВПроизводствеНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.ВзаиморасчетыУСН");
    МассивРегистров.Добавить("РегистрНакопления.ВыпускПродукцииБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.ВыпускПродукцииНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.ВыпускПродукцииНаработкаБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.ВыпускПродукцииНаработкаНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.ЗатратыБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.ЗатратыНаВыпускПродукцииБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.ЗатратыНаВыпускПродукцииНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.ЗатратыНаВыпускПродукцииНаработкаБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.ЗатратыНаВыпускПродукцииНаработкаНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.ЗатратыНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.КнигаУчетаДоходовИРасходов");
    МассивРегистров.Добавить("РегистрБухгалтерии.Налоговый");
    МассивРегистров.Добавить("РегистрБухгалтерии.Хозрасчетный");
    МассивРегистров.Добавить("РегистрНакопления.НезавершенноеПроизводствоБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.НезавершенноеПроизводствоНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.ПартииТоваровНаСкладахНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.ПартииТоваровПереданныеБухгалтерскийУчет");
    МассивРегистров.Добавить("РегистрНакопления.ПартииТоваровПереданныеНалоговыйУчет");
    МассивРегистров.Добавить("РегистрНакопления.РасходыПриУСН");
    МассивРегистров.Добавить("РегистрНакопления.РасчетыПоПриобретениюВУсловныхЕдиницахОрганизации");
    МассивРегистров.Добавить("РегистрСведений.РасчетыПоПриобретениюОрганизации");
    МассивРегистров.Добавить("РегистрСведений.РасчетыПоРеализацииОрганизации");
    МассивРегистров.Добавить("РегистрНакопления.РасчетыПоРеализацииВУсловныхЕдиницахОрганизации");
    МассивРегистров.Добавить("РегистрСведений.РасшифровкаКУДиР");
    МассивРегистров.Добавить("РегистрНакопления.РозничнаяВыручкаОрганизаций");
    МассивРегистров.Добавить("РегистрНакопления.УчетЗатратРегл");
    МассивРегистров.Добавить("РегистрНакопления.УчетПродажИСебестоимости");
    МассивРегистров.Добавить("РегистрНакопления.НДСВключенныйВСтоимость");
    МассивРегистров.Добавить("РегистрНакопления.НДСЗаписиКнигиПокупок");
    МассивРегистров.Добавить("РегистрНакопления.НДСЗаписиКнигиПродаж");
    МассивРегистров.Добавить("РегистрНакопления.НДСКосвенныеРасходы");
    МассивРегистров.Добавить("РегистрНакопления.НДСНачисленный");
    МассивРегистров.Добавить("РегистрНакопления.НДСНезавершенноеПроизводство");
    МассивРегистров.Добавить("РегистрНакопления.НДСПартииТоваров");
    МассивРегистров.Добавить("РегистрНакопления.НДСпоОСиНМА");
    МассивРегистров.Добавить("РегистрНакопления.НДСПредъявленный");
    МассивРегистров.Добавить("РегистрНакопления.НДСПредъявленныйРеализация0");
    МассивРегистров.Добавить("РегистрНакопления.НДСПродукция");
    МассивРегистров.Добавить("РегистрНакопления.НДСРеализация0");
    МассивРегистров.Добавить("РегистрНакопления.НДСсАвансов");
    МассивРегистров.Добавить("РегистрНакопления.НДСУчетРаспределенныхОплатПоставщикам");
    МассивРегистров.Добавить("РегистрНакопления.РеализованныеТовары");

    МассивРегистров.Добавить("РегистрСведений.ДокументыТребующиеДопроведения"); //Регистр включен в список, чтобы по нему очищались движения при допроведении

    Возврат МассивРегистров;
    
КонецФункции // ПолучитьРегистрыОтложенногоПроведения

// Процедура записывает набор записей на сервере (привилегированно)
//
Процедура ЗаписатьНаборЗаписейНаСервере(ИмяРегистра, Регистратор, ТаблицаДвижений = Неопределено, ТипРегистра = "РегистрНакопления") Экспорт
    
    Если ТипРегистра = "РегистрНакопления" Тогда
        Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
        
        Если ТаблицаДвижений <> Неопределено Тогда
            Набор.мТаблицаДвижений = ТаблицаДвижений;
            ОбщегоНазначения.ВыполнитьДвижениеПоРегистру(Набор);        
        КонецЕсли;
        
    Иначе
        Если ТипРегистра = "РегистрБухгалтерии" Тогда
            Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей();
        ИначеЕсли ТипРегистра = "РегистрСведений" Тогда
            Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
        ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда
            Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей();
        КонецЕсли;
        
        Если ТаблицаДвижений <> Неопределено Тогда
            Набор.Загрузить(ТаблицаДвижений);
        КонецЕсли;
    КонецЕсли;
    
    Набор.Отбор.Регистратор.Установить(Регистратор);
    Набор.Записать();
    
КонецПроцедуры
58 Dmitriy_76
 
30.12.14
10:01
*56) после (46) я уже ни чему не удивлюсь
59 ktvladimir
 
30.12.14
10:01
(44) да почему ты уперся ПРИзаписи а не ПЕРЕДзаписью. при записи естественно у тебя будет двойная запись... ты уже записываешь документ. а тут бах и начинаешь его менять
60 DrZombi
 
гуру
30.12.14
10:01
+(57) Вот так простенько, 1С удаляет движения :)
61 ktvladimir
 
30.12.14
10:03
(60) из движений регистра ты  только забыл добавить а не из табличной части, а это как бы разные вещи
62 DrZombi
 
гуру
30.12.14
10:04
(51) Если выполнить такой код:

ДокСсылка = ПолучитьСсылкуНаДокументЛЮБОЙ();
ДокОбъект = ДокСсылка.ПолучитьОбъект();
ДокОбъект.Проведен = Ложь;
ДокОбъект.Записать();


То После этой манипуляции, в журнале будет документ не проведенным, но с Движениями :)
63 DrZombi
 
гуру
30.12.14
10:05
(61) При проведении, НЕЛьЗЯ изменить реквизиты документа!!!!
Только, если повторно вызвать Записать()!

Желательно предусмотреть обход проверок при записи, что бы ускорить такой момент :)
64 DrZombi
 
гуру
30.12.14
10:06
+(61) Редактирование Данных, лучше организовывать в "ПередЗаписью", тогда ты не заблокируешь БД по Транзакции, пока будешь выполнять фигову кучу проверок :)
65 666 Devil
 
30.12.14
10:06
(62) научишь.... :D
66 DrZombi
 
гуру
30.12.14
10:07
(65) Дарю ;)
67 Defender aka LINN
 
30.12.14
10:09
Интересно, сколько пользователи, которые поделие автора юзают, готовы отдать за личную встречу с ним на 5 минут без свидетелей?
68 Kurbash
 
30.12.14
10:12
(67) в смысле?
69 vicof
 
30.12.14
10:14
(67) думаешь, в институте есть люди, которые используют поделия автора?
70 ktvladimir
 
30.12.14
10:15
(62) боже ж ты мой... у ТС стояла задача удалить дубли из ТЧ перед проведением, дабы исключить ситуации ошибки записи регистра. Для этого нужно удалять эти строки перед записью иными словами в процедуре передзаписью нужно вставить
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
свернутьтч
КонецЕсли;
(61) при проведении в любом случае будет вызваны процедуры передзапись и призаписи
(64) где я писал что это нужно делать в момент проведения или при записи?
71 Defender aka LINN
 
30.12.14
10:16
(68) В том, что найди хорошего стоматолога. Пригодится, когда тебе благодарные пользователи челюсть вправят.
Это ж, ять, чем надо думать, чтобы до (0) додуматься? Явно не головой, а другой оконечностью организма.
(69) Если есть, мне их искренне жаль
72 Kurbash
 
30.12.14
10:19
(71) так, стоп, давай разберемся. У меня РАБОЧИЙ документ с РАБОЧИМ проведением. Данные для проведения тащу запросом из ТЧ документа. Еще раз скажу что это документ РАБОЧИЙ, просто решил попробовать пойти по другому пути и разбираюсь почему не получается.
73 Тындр
 
30.12.14
10:20
Перед новым годом так хорошо написать какой-нибудь удивительный код. Который делает счастливым все человечество.
Но ничего кроме ЗавершитьРаботуСистемы() в голову не приходит.
74 ktvladimir
 
30.12.14
10:21
(71) а в чем проблема такой постановы? допусти есть файл с справочной информацией которую нужно загрузить в базу. конечно уникальность можно проверять в момент загрузки, но иногда проще загрузить как есть, а перед проведением просто свернуть тч. В чем проблема такой задачи?. Вы как то узко мыслите в рамках своих задач где это нехорошо. но всегда есть задачи которые потребуют и такой механизм, не вижу ничего криминального
75 DrZombi
 
гуру
30.12.14
10:21
(70) ТС, эти дубли делает не перед, а При проведении :)
76 Defender aka LINN
 
30.12.14
10:24
(74) Для целей загрузки информации документ нафиг не нужен, достаточно обработки.
А теперь представь себе юзера, который набрал документ, довольный жмет на "провести", а документ половину строк тупо берет и удаляет сам. Причем, учитывая средний уровень одинэснегов - с вероятностью в 0.9 удалит нужное.
77 Kurbash
 
30.12.14
10:25
(76)заполнение ТЧ дока происходит автоматом по команде, данные тянутся из кривых регистров которые сейчас приводим в соотвествие, поэтому записи и двоятся
78 Peltzer
 
30.12.14
10:26
Что-то сегодня просто праздник какой-то. Темы одна другой фееричнее...
(0) В типовых конфигурациях одинаковые строки свёртываются для нужд проведения документа. А ТЧ остаётся неизменной, с чего бы это они?
79 Любопытная
 
30.12.14
10:27
Блин, да какая разница, что там ТС творит? Вы мне объясните как у него так происходит, что обработка проведения происходит раньше обработки перед записью?
80 Defender aka LINN
 
30.12.14
10:28
(77) А если не автоматом по команде?
81 Defender aka LINN
 
30.12.14
10:28
(79) Элементарно. Просто он сам не в курсе, что в каком порядке происходит, вот и все.
82 hhhh
 
30.12.14
10:29
(79) легко, если в обработке проведения есть Записать(), то снова вызывается ПередЗаписью.
83 Kurbash
 
30.12.14
10:29
(80) автоматом-автоматом, там строк много, они ленятся руками бить
84 Dmitriy_76
 
30.12.14
10:29
(79) а особенно что у него в голове творится ..ага :))
85 Kurbash
 
30.12.14
10:29
(82) В обработке проведения нет Записать
86 Dmitriy_76
 
30.12.14
10:30
(83) линейкой н..х  по рукам то
87 StaticUnsafe
 
30.12.14
10:30
Это пипец, товарищи... Видимо кризис, и все мутанты ринулись в 1С "погромировать".
88 Dmitriy_76
 
30.12.14
10:30
(85) медленно ползу под стол
89 ktvladimir
 
30.12.14
10:31
(76) ну тут речь идет о дублях. мы же не знаем какая это информация.. может там реально полные дубли. Мы не владеем всей ситуацией. У меня кстати бывают абстрактные вопросы не связанные с текущей задачей. Просто иногда интересует тот или иной механизм, и как-то очень раздражает когда люди начинают кричать это бред для чего это. А мне просто интересен сам механизм. Зато когда ты в нем разберешься то его можно в той или иной мере использовать в других местах.
90 StaticUnsafe
 
30.12.14
10:32
Аффтырь, ПриЗаписиНаСервере это событие формы, а не объекта. Разницу панимать?
91 hhhh
 
30.12.14
10:33
нет, ну с Украины идут фееричные вопросы, там понятно, 1с-ники или воюют на АТО или свалили в Москву, остались одни подаваны. Но сегодня и в России та же фигня началась.
92 Dmitriy_76
 
30.12.14
10:35
(91) тссс.. мы ж с клиентов в два раз больше овса запросим исправляя "их" грабли
93 1976vas
 
30.12.14
10:35
Так автор добился желаемого?
94 vicof
 
30.12.14
10:35
(91) Зомби-апокалипсис. Если тебя укусил такой зомби-1сник, ты обречен...
95 ktvladimir
 
30.12.14
10:37
(85) тем не менее при проведении будет обязательны вызов процедур ПередЗаписью и ПриЗаписи. Также если ты проводишь документ интерактивно из формы то будут вызываться обработчики формы ПередЗаписьюНасервере и ПриЗаписиНаСервере
96 Тындр
 
30.12.14
10:39
(85) "Им бы проведение взять и отменить, они же не бездельники и могли бы жить..."
97 DrZombi
 
гуру
30.12.14
10:42
(79) Это происходит при использовании Функции "ЗаписатьВФорме"

При этом не вызывается "ПередЗаписью" и "ПриЗаписи", если указать в параметре "Провести"

Расширение формы документа (Document form extension)
ЗаписатьВФорме (WriteInForm)
Синтаксис:

ЗаписатьВФорме(<РежимЗаписи>)
Параметры:

<РежимЗаписи> (необязательный)

Тип: РежимЗаписиДокумента.
Позволяет указать режим записи документа.
Возвращаемое значение:

Тип: Булево.
Истина - документ успешно записан; Ложь - в противном случае.
Описание:

Записывает объект, редактируемый в данный момент в форме.

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

Толстый клиент.
См. также:

Расширение формы документа, свойство ИспользоватьРежимПроведения
98 DrZombi
 
гуру
30.12.14
10:43
(97) А ведь ТС, не сказал, какой у него используется Клиент 1С :)
99 Dmitriy_76
 
30.12.14
10:44
(98) а как же в (0) - ПриЗаписиНаСервере
100 Мыш
 
30.12.14
10:45
(100) Сотка
101 Любопытная
 
30.12.14
10:45
(97) Т.е. ЗаписатьВФорме забивает на все обработчики событий и записывает как есть?
102 Dmitriy_76
 
30.12.14
10:46
(100) уряя!!!
103 DrZombi
 
гуру
30.12.14
10:46
(101) Ага, для Толстого, да :)
104 DrZombi
 
гуру
30.12.14
10:47
+(101) Предполагается, что все проверки реализованы в Форме :)

...Я предполагаю, делая вывод по заключению...
105 Dmitriy_76
 
30.12.14
10:47
(103) игнорируя обработчики объекта ???
106 DrZombi
 
гуру
30.12.14
10:48
(105) Да. Проверь. Удивишься.
107 DrZombi
 
гуру
30.12.14
10:49
Хотя, ТС мог бы пролить на сей момент свет. Ведь 1С, обычно не использует эту функцию в своей писанине. :)
108 Dmitriy_76
 
30.12.14
10:51
(106) хм нет такого на клиенте
109 Любопытная
 
30.12.14
10:55
(108) только в толстом
110 Ndochp
 
30.12.14
10:55
(0) А еще никто не написал, что для проводимости документа надо выгрузить ТЧ документа в ТЗ, ее свернуть, провести по ней, а за желание удалять что-то при записи надо руки отрывать.
Ну в крайнем случае вывести на форму кнопочку "очистить ТЧ" и сказать пользователям нажимать сначала ее, а потом проводить.
111 DrZombi
 
гуру
30.12.14
11:12
(109) (108) Сори, каюсь... Повторить подвиг, что был не удалось. Но такой момент имел быть место в УПП. :(
Функция "ЗаписатьВФорме", располагалось в "ПередОткрытием", и вызывалась только для новых документов.
(это мы искали способ обойти Модальное окно вопроса "Оперативный / Неоперативный")
В один прекрасный момент, перестала обрабатываться Процедура "ПередЗаписью".

...
С тех времен, я как то "ЗаписатьВФорме" отношусь с опаской :)
112 666 Devil
 
30.12.14
11:36
(0) ТС, задача решена?