Имя: Пароль:
1C
1С v8
Программное создание документов.
0 bard666
 
10.10.11
21:31
Столкнулся со следущей шнягой: необходимо при проведении документа содать и провести ещё один. конкретно: при проведении РТУ создать оприходование товаров с датой на пару минут раньше, чтоб было что списать... Сначала процедуру создания засунул в обработку проведения, потом пробовал переносить в процедуры при записи, перед записью, но бесполезняк. Процедура проста:

ДокОприход = Документы.ОприходованиеТоваров.СоздатьДокумент();
ДокОприход.Дата = Дата - 60;
Заполняю организацию, необходимые колонки табличной части, комментарий, склад. Провожу тока в уп. учете.
ДокОприход.Записать(РежимЗаписиДокумента.Проведение);

После всего этого документ в системе не появляется, записей по регистрам тоже никаких. Смотрел по отладчику. После записи переменная обретает вид документа. Номер присвоен, проведен = истина...
В чем прикол не понимаю.. Проверял права пользователя: право на создание, проведение есть, даже под полными такой бред появляется..

Кто-то что-то посоветует?
1 ОбычныйЧеловек
 
10.10.11
21:40
(0) что-то ты явно не договариваешь.
2 Мимохожий Однако
 
10.10.11
21:41
(0)Создавать другой документ при проведении неправильно.
3 bard666
 
10.10.11
21:41
Например? Спрашивай - отвечу.
4 bard666
 
10.10.11
21:42
А как правильнее?
5 ОбычныйЧеловек
 
10.10.11
21:42
(2) оно конечно неправильно, но тем не менее работает, автор явно что-то не договаривает.
6 Мимохожий Однако
 
10.10.11
21:42
(3)Традицинное: Зачем, почему именно так?
7 Мимохожий Однако
 
10.10.11
21:43
Используй ввести на основании с проверкой проведенности исходного документа.
8 bard666
 
10.10.11
21:47
Изобретение местных внедренцев.
Ситуевина такова: идет отгрузка, заказной продукции тупо может не быть на остатках, но доки создать надо, вот и придумалась шняга создания оприходования, чтоб система не орала на отсутствие товара..
9 Мимохожий Однако
 
10.10.11
21:50
Разрешить отгружать в минут "по факту". В конце дня обработкой создать документы Оприходования.
10 ОбычныйЧеловек
 
10.10.11
21:50
(8) может ты не весь код посмотрел - может дальше по коду идет удаление этого дока :)
11 Мимохожий Однако
 
10.10.11
21:50
в минут = в МИНУС
12 ОбычныйЧеловек
 
10.10.11
21:53
(10) скорее всего боятся,что если позволить списывать в минус то спишут в минус не только заказную продукцию а вообще все, что под руку попадется - менеджерам только дай волю - продадут все - вплоть до офиса )
13 Sidney
 
10.10.11
21:55
Поставь Попытка и обрабатывай полученную ошибку.
14 bard666
 
10.10.11
21:56
Почему под одним и тем же пользователем то создается, то нет?))
Или снова недоговариваю: то вставлю удаление, то сотру?))
15 bard666
 
10.10.11
21:57
Нет ошибок-то: говорю ж переменная пишет, что записан и проведен.
16 ОбычныйЧеловек
 
10.10.11
21:57
(14) причина скорее всего банальна, но не видя весь код гадать можно долго.
17 ОбычныйЧеловек
 
10.10.11
21:59
все таки в какую процедуру ты воткнул проведение доп.дока?
18 bard666
 
10.10.11
22:05
В итоге она в ПередЗаписью()
19 bard666
 
10.10.11
22:05
Код сча попробую вытащить..
20 ОбычныйЧеловек
 
10.10.11
22:07
(18) в таком случае посмотри на дату твоего создаваемого дока.
21 bard666
 
10.10.11
22:09
Думаешь на первый день первого года улепетывает?
22 ОбычныйЧеловек
 
10.10.11
22:09
(21) а ты глянь
23 bard666
 
11.10.11
14:57
Вот процедура создания дока

ДокОприх = Документы.ОприходованиеТоваров.СоздатьДокумент();
ТаблДокОприход = ДокОприх.Товары;
       
Для Каждого Стр Из Товары Цикл

//Проверим есть ли товар по регистру ТоварыОрганизации        
КоличествоНехДАР = МодульАркис.ПроверкаОстатковПоОрганизации(Стр, Склад, Справочники.Организации.НайтиПоКоду("000000101"), Дата);

//Если нет:        
Если КоличествоНехДАР > 0 Тогда
   
//Проверяем заказной товар:        
Если Стр.Номенклатура.Родитель = Справочники.Номенклатура.НайтиПоКоду("00000005506")
   ИЛИ Стр.Номенклатура.Родитель = Справочники.Номенклатура.НайтиПоКоду("00000005512") Тогда
               
   НоваяСтрокаОприход = ТаблДокОприход.Добавить();
   НоваяСтрокаОприход.Номенклатура = Стр.Номенклатура;
   НоваяСтрокаОприход.ЕдиницаИзмерения = Стр.Номенклатура.ЕдиницаХраненияОстатков;
   НоваяСтрокаОприход.Количество = КоличествоНехДАР;
   НоваяСтрокаОприход.Цена = ПолучитьЦену(Стр.Номенклатура, Дата);
   НоваяСтрокаОприход.ЦенаВРознице = НоваяСтрокаОприход.Цена;
   НоваяСтрокаОприход.СтатусПартии = Перечисления.СтатусыПартийТоваров.Продукция;
   НоваяСтрокаОприход.Сумма = НоваяСтрокаОприход.Количество * НоваяСтрокаОприход.Цена;
                       
   КонецЕсли;
КонецЕсли;
КонецЦикла;
   
//Если таблчасть заполнена, вводим остальные данные и проводим док
Если ТаблДокОприход.Количество() > 0 Тогда
       
   ДокОприх.ВидОперации = Перечисления.ВидыОперацийОприходованиеТоваров.ОприходованиеТоваров;
   ДокОприх.Комментарий = "Создан автоматически по документу " + Ссылка;
   ДокОприх.Организация = Справочники.Организации.НайтиПоКоду("000000101");
   ДокОприх.Склад = Склад;
   ДокОприх.Ответственный = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный");
   ДокОприх.Дата = Дата - 60;
   ДокОприх.ОтражатьВУправленческомУчете = Истина;
   ДокОприх.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
       
КонецЕсли;
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой