Вход | Регистрация

1С:Предприятие ::

Метки:документы

Как програмно создать док "Операция"

Я
   Gavrila
 
29.06.04 - 11:36
Делаю так, ошибок никаких, операция создается, а проводок нет :( , что не так
ДокПр = ИБПр.СоздатьОбъект("Операция");
ДокПр.Новая();
ДокПр.ДатаОперации = Док.Операция.ДатаОперации;
ДокПр.Содержание = Док.Операция.Содержание;
ДокПр.Документ.НомерДок    = Док.НомерДок;
Док.Операция.ВыбратьПроводки();
Пока Док.Операция.ПолучитьПроводку() = 1 Цикл
  ДокПр.НоваяПроводка();
  ДокПр.Дебет.Счет = Док.Операция.Дебет.Счет;
  Если Док.Операция.Дебет.Счет.КоличествоСубконто() > 0 Тогда
    ДокПр.Дебет.Субконто(1, Док.Операция.Дебет.Субконто(1));
  КонецЕсли;
  Если Док.Операция.Дебет.Счет.КоличествоСубконто() > 1 Тогда
    ДокПр.Дебет.Субконто(2, Док.Операция.Дебет.Субконто(2));
  КонецЕсли;
  Если Док.Операция.Дебет.Счет.КоличествоСубконто() > 2 Тогда
    ДокПр.Дебет.Субконто(3, Док.Операция.Дебет.Субконто(3));
  КонецЕсли;
  ДокПр.Кредит.Счет = Док.Операция.Кредит.Счет;
  Если Док.Операция.Кредит.Счет.КоличествоСубконто() > 0 Тогда
    ДокПр.Кредит.Субконто(1, Док.Операция.Кредит.Субконто(1));
  КонецЕсли;
  Если Док.Операция.Кредит.Счет.КоличествоСубконто() > 1 Тогда
    ДокПр.Кредит.Субконто(2, Док.Операция.Кредит.Субконто(2));
  КонецЕсли;
  Если Док.Операция.Кредит.Счет.КоличествоСубконто() > 2 Тогда
    ДокПр.Кредит.Субконто(3, Док.Операция.Кредит.Субконто(3));
  КонецЕсли;
  ДокПр.Сумма = Док.Операция.Сумма;
  ДокПр.ВалСумма = Док.Операция.ВалСумма;
  ДокПр.Количество = Док.Операция.Количество;
  ДокПр.Валюта = Док.Операция.Валюта;
  ДокПр.НашаФирма = Док.Операция.НашаФирма;
  ДокПр.Комментарий = Док.Операция.Комментарий;
  ДокПр.НомерЖурнала = Док.Операция.НомерЖурнала;
КонецЦикла;
ДокПр.Записать();
 
  Рекламное место пустует
   SnarkHunter
 
1 - 29.06.04 - 11:46
А в цикл-то входишь?
   cup of tea
2 - 29.06.04 - 11:50
"ДокПр = ИБПр.СоздатьОбъект("Операция"); "  Ты ее через OLE создаешь?
Возможно, с этим какая-то проблема, во всем остальном все верно.
P.s. Из конструкций типа
Если Док.Операция.Кредит.Счет.КоличествоСубконто() > 2 Тогда
   ДокПр.Кредит.Субконто(3, Док.Операция.Кредит.Субконто(3)); 
КонецЕсли;
"если" - вполне можно убрать - результат от этого не изменится )))
   laeg
3 - 29.06.04 - 12:01
Всеже объект ИБПр - это что ? ОЛЕ ?
Далее
Если через ОЛЕ то
"ДокПр.Дебет.Счет = Док.Операция.Дебет.Счет" - эта конструкция работать не будет ..., через оле можно переносить только непосредственные значения типа Строка, Число ... счет ты не сможешь ...

Если дашь небольшое пояснение к своей процедурке поможем разобраться
   Gavrila
 
4 - 29.06.04 - 12:04
(1) да, в цикл заходит
(2) да, через ОЛЕ, условия убрал(спасибо), щас попробую в локальной базе, если заработает, то буду дальше смотреть
   Gavrila
 
5 - 29.06.04 - 12:07
(3) строка на самом деле выглядит так
ДокПр.Дебет.Счет = ПолучитьОЛЕОбъект(Док.Операция.Дебет.Счет);
где, ПолучитьОЛЕОбъект - процедура в которой возвращается объект из ОЛЕ-базы соответствующий объекту локальной базы (счет, спр, док и т.д.)

зы: и по субконто тоже самое, просто упростил
   Gavrila
 
6 - 29.06.04 - 12:48
Писец какой-то, локально усё работает, через оле - операция без проводок, по отладчику проверил счета, субконто - в ОЛЕ-базе заполняются корректно и правильно, при записи никаких ошибок, усё типа Оки-споки, а проводок, блинище, нет:(
   cup of tea
7 - 29.06.04 - 13:01
1) Попробуй заменить
ДокПр = ИБПр.СоздатьОбъект("Операция");
на
ДокПр = ИБПр.CreateObject("Операция"); 
В конце концов в ЖКК именно так написано )))
2) В базе, к которой обращаешься через OLE - один план счетов или больше?
   laeg
8 - 29.06.04 - 13:04
Может конечно глупо, но все равно попробуй сначала записать операцию а потом заполнить ее проводками и опять записать ...
   Gavrila
 
9 - 29.06.04 - 13:04
(7.1) попробую
(7.2) База - типовая Комплексная для Украины (10 рел), план счетов один
   laeg
10 - 29.06.04 - 13:09
(7.1)
Смысл ? Если операции создаются а проводок нету ... дело в другом, хотя хм кто его знает
 
  Рекламное место пустует
   Gavrila
 
11 - 29.06.04 - 13:44
перевел на инглиш все что возможно, записываю после каждой проводки и еще после последней... и ни ничего
   serg1234
12 - 29.06.04 - 13:47
Попробуй перед записью операции записать проводки ЗаписатьПроводки()
   laeg
 
13 - 29.06.04 - 13:50
Даже и не знаю что можно еще придумать ...
В отладчике проверь после каждой записи
ДокПр.КоличествоПроводок()
Еще попробуй обновить движок до 23 релиза, они якобы изменили работу с ОЛЕ

Да и на последок:
Я через ОЛЕ обычно только забираю информацию ... а в рабочию вставляю
   It is me
 
14 - 29.06.04 - 14:15
Сделал обработку на основе текста из (0), убрал
ДокПр.Документ.НомерДок   = Док.НомерДок;
ДокПр.Дебет.Субконто(1, Док.Операция.Дебет.Субконто(1)); и т.п.
ДокПр.Валюта = Док.Операция.Валюта;
ДокПр.НашаФирма = Док.Операция.НашаФирма;
заменил  ДокПр.Дебет.Счет = Док.Операция.Дебет.Счет; на ДокПр.Дебет.Счет = ИБПр.EvalExpr("СчетПоКоду(""00"")"); и т.п.
В качестве тестового был приходный кассовый с 2 проводками из БУ для Укр. 253. Релиз 1С - 21SQL. В ОЛЕ-базе создана операция с двумя проводками с соответствующими суммами, то бишь все работает...
   Вор-Пророк
 
15 - 29.06.04 - 16:52
Что интересно попробовал в демо базе - усе нормально, а в клиентской - нет(значит алгоритм правильный), всем спасибо буду копать дальше


Список тем форума
Рекламное место пустует   Рекламное место пустует
Прочитай, хотя бы, Митичкина "Разработка в системе 1С:Предприятие 8". Волшебник
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует