Имя: Пароль:
1C
1С v8
КД 2. Перегрузка с проведением
,
0 live in sky dreams
 
11.01.18
02:15
Как задать в КД проведение документа при перегрузке?
Есть где-либо пример? Ткните носом в ссылку плиз.

БП 3. Задача - перегрузить доки за определенный период.
Если все оставить по умолчанию - доки перегружаются, выглядят проведенными, но движений нет. Как указать системе проводить их?
Интуитивно понимаю, что нужно использовать глобальное "После загрузки данных". Но что там написать не понимаю. Какие переменные доступны и т.д.
1 Franchiser
 
гуру
11.01.18
02:31
После загрузки объекта Объект.Записать(режим записи.проведение)
Или же как рекомендуют 1с создать параметр конвертации куда писать список объектов, которые требуется провести после загрузки, обойти эту коллекцию и провести документы.
2 live in sky dreams
 
11.01.18
02:32
После загрузки объекта он уже заполнен данными разве?
3 live in sky dreams
 
11.01.18
02:34
Я пытался так делать. сразу же ошибка - не заполнено что то в ведомостях, хотя там должно быть все заполнено - иначе бы они не провелись.
я так понял - после загрузки объекта сам объект загружен, но данными еще не заполнен и рановато его проводить... нет?
4 live in sky dreams
 
11.01.18
02:51
(1) а можно подробнее? Как и где рекомендуют? Это сайт какой то или статья? Где можно ознакомиться с подробным разбором этого вопроса?
5 igorPetrov
 
11.01.18
07:25
(3) Ну, так заполни чего не хватает. В чем вопрос?
6 azt-yur
 
11.01.18
08:13
7 Asakra
 
11.01.18
09:06
в ПКО ПередЗагрузкой
РежимЗаписи = "Проведение";
8 Asakra
 
11.01.18
09:07
(0)
Условия возникновения события
Только для платформы V8.
Событие выполняется перед загрузкой объекта. Возможен отказ от загрузки, например, в случае невыполнения каких-либо условий. Загружаемый в БД объект еще не инициализирован.

Параметры:
Отказ - Булево - Если Истина, то объект загружен не будет.

Нпп - Число. Уникальный порядковый номер объекта в файле.

Источник - Строка. Представление объекта источника. Пустая строка, если представление объекта источника не выгружалось.

ИмяПравила - Строка. Имя правила конвертации. Пустая строка, если правила конвертации не используются.

Правило – строка таблицы значений. Ссылка на правило конвертации объекта.

ГенерироватьНовыйНомерИлиКодЕслиНеУказан – Булево. Если Истина и номер или код объекта не заданы, то перед записью будет сгенерирован новый номер или код.

ТипОбъектаСтрокой - Строка. Тип загружаемого объекта. Например: СправочникСсылка.Номенклатура или РегистрСведенийЗапись.ЦеныТоваров

ТипОбъекта - Значение типа Тип. Тип загружаемого объекта.

НеЗамещатьОбъект - Если для данного параметра установить значение Истина, то объект идентифицированный при загрузке (т.е. найденный в информационной базе приемнике по значению синхронизирующих полей) не будет изменен/замещен.

РежимЗаписи - Строка. Режим записи документа. Имеет смысл только если тип объекта приемника "Документ". Возможные значения "Запись", "Проведение", "ОтменаПроведения"

РежимПроведения - Строка. Режим проведения документа. Имеет смысл только если тип объекта приемника "Документ". Возможные значения "Неоперативный", "Оперативный"

Пример:
РежимЗаписи = "ОтменаПроведения";
9 Сияющий Асинхраль
 
11.01.18
09:41
(7) Хороший совет, но не очень работоспособный, любая проблема с проведением документа (например, он находится в закрытом периоде, не хватает прав, не хватает остатков, превышено ограничение по кредиту) приводит к прерыванию загрузки ВСЕХ объектов, поэтому вариант с параметр из (1) самый работоспособный...
10 Мандалай
 
11.01.18
10:05
http://v8.1c.ru/metod/books/book.jsp?id=121
Ищи эту книгу на просторах рунета. Если будет она - ничего другого и не надо.
11 Asakra
 
11.01.18
10:29
(9) без транзакций не будет прерываний.
тут все зависит от конкретной задачи...
сколько объектов, разовая загрузка или нет, что за пользователь будет грузить и т.п.
12 Сияющий Асинхраль
 
11.01.18
22:35
(11) Ты сам лично пробовал? Или исключительно теорией руководствуешься? То бишь как должно быть, а не как есть на самом деле? Так вот на самом деле, повторю еще раз, любая проблема с проведением документа, который должен провестить вырубает дальнейшую загрузку. Если бы было иначе народ не придумывал варианты из (1), а они, увы, придуманы не от того, что народу поизвращаться хочется, а потому что это дает вариант устойчивой загрузки, даже в том случае, если какой-то документ не может быть проведен...
13 Franchiser
 
гуру
14.01.18
23:24
(4) точно не помню где встречал, возможно в курсе Гилева
14 Franchiser
 
гуру
14.01.18
23:25
Во многих типовых переносах так тоже сделано
15 Сияющий Асинхраль
 
15.01.18
01:07
Вот так это делается для обычных форм:
http://catalog.mista.ru/public/21069/
Подозреваю, что для управляемых для случая КД2 надо делать не таблицу значений, а массив, единственно, массив придется сортировать самому, в этом случае с ТЗ проще, а так все должно быть примерно также
16 Сияющий Асинхраль
 
15.01.18
01:09
+(13) У Гилева в одном из курсов был еще один способ, но он мне не понравился, Гилев предлагал наваять отдельную обработку и ей проводить, что чисто по-моему конечно решением является, но решением кривоватым...
17 d4rkmesa
 
15.01.18
08:32
(0)
Конвертация_ПослеЗагрузкиОбъекта:
Если ИмяТипаОбъекта = "Документ" Тогда    
    //ДатаВводаОстатков = РегистрыСведений.ДатыВводаНачальныхОстатков.ДатаВводаНачальныхОстатков(Параметры.Организация);    
    
    Если Параметры.ПроводитьДокументы И Объект.Проведен
        И (Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить) Тогда
        
        ИмяОбъектаМетаданных = Объект.Метаданные().Имя;        
        Если ИмяОбъектаМетаданных = "ВводНачальныхОстатков" Тогда
            Приоритет = 0;
        ИначеЕсли (ИмяОбъектаМетаданных = "СчетФактураВыданный")или(ИмяОбъектаМетаданных = "СчетФактураПолученный") Тогда
            Приоритет = 2;
        Иначе
            Приоритет = 1;
        КонецЕсли;
        
        Если НЕ ОбъектНайден Тогда            
            Объект.Проведен = Ложь;
            УстановитьОбменДаннымиЗагрузка(Объект, Истина);
            Объект.Записать(РежимЗаписиДокумента.Запись);
            ОбъектМодифицирован = Ложь;            
        КонецЕсли;        
        
        Если Приоритет <> 2 Тогда
            НоваяСтрока = Параметры.ТаблицаДокументов.Добавить();
            НоваяСтрока.Документ = Объект.Ссылка;
            НоваяСтрока.ДатаВремя = Объект.Дата;
            НоваяСтрока.Приоритет = Приоритет;
        КонецЕсли;
        
    КонецЕсли;
КонецЕсли;

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

Топорно, но работает.
18 Asakra
 
16.01.18
10:48
(12) Конечна. Оба способа использую. Все зависит от ситуации!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн