К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Перенос проводок из ЗУП в комплексную 77 по OLE вместо счета пустое значение?

Гость
0 - 08.04.2014 - 14:02
Из ЗУПа переношу "Отражение зарплаты в бух учете" в документ БухСправка в комплексную 77. Документ бух справка формируется, но счета Дт и Кт пустые. Только суммы в строках? В чем ошибка в коде? ........

Счет = СерверOLE.CreateObject("Счет");
Если Счет.НайтиПоКоду("96") = 1 Тогда
Опер.СчетДт = Счет.ТекущийСчет();

........



Гость
1 - 08.04.2014 - 14:28
пробуй так
СчетОле = БазаБухОле.CreateObject("Счет.Основной");
СчетОле.НайтиПоКоду("96");
Гость
2 - 08.04.2014 - 14:41
интересен сам подход к идеи
>>Если Счет.НайтиПоКоду("96") = 1 Тогда
а его там может не быть?
Гость
3 - 08.04.2014 - 15:12
(1) Нет, не помогло :((((

(2) Если Счет.НайтиПоКоду("96") = 1 Тогда
этот оператор как раз срабатывает
Гость
4 - 08.04.2014 - 15:22
насколько я помню - оле-объект не получится использовать в качестве объекта текущей конфигурации
в текущей конфигурации создавай свой, родной объект типа "Счет"
Гость
5 - 08.04.2014 - 15:43
(3) (+1)
вместо Опер.СчетДт = Счет.ТекущийСчет();

докОле.УстановитьАтрибут("Счет", СчетОле.ТекущийСчет());
Гость
6 - 08.04.2014 - 15:44
докОле.УстановитьАтрибут("СчетДт", СчетОле.ТекущийСчет());
Гость
7 - 08.04.2014 - 15:45
(+6) и лучше в бух. справку переносить, то бишь в документ, а не операцию
Гость
8 - 08.04.2014 - 15:49
сори комент (7) лишний
Гость
9 - 08.04.2014 - 16:04
(5) Опер = СерверOLE.CreateObject("Документ.БухгалтерскаяСпра вка");
Опер.Новый();
Если ЮрЛицо.НайтиПоКоду("00002") = 1 Тогда
Опер.ЮрЛицо = ЮрЛицо.ТекущийЭлемент();
КонецЕсли;
Сообщить (Лев(Организация.ИНН,10));
Опер.СодержаниеОперации = "Перенос отражения зарплаты из ЗУП";
Опер.ДатаДок = ЭлементыФормы.ДатаЗавершения.Значение;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЭлементыФормы.Индикатор1.Значение = ЭлементыФормы.Индикатор1.Значение + 1;

Опер.НоваяСтрока();
//для счета 20
Если (Выборка.СчетДт.Код = "20.01") И (Выборка.СчетКт.Код = "70") Тогда
Счет = СерверOLE.CreateObject("Счет");
Если Счет.НайтиПоКоду("20") = 1 Тогда
//Опер.СчетДт = Счет.НайтиПоКоду("20"); //Счет.ТекущийСчет();
Опер.УстановитьАтрибут("СчетДт",Счет.ТекущийСчет() );
Опер.СубконтоДт1 = Сч20Субконто2.НайтиПоКоду("00001");
Опер.СубконтоДт2 = Сч20Субконто3.НайтиПоКоду("00003");
Опер.СубконтоДт3 = Сч20Субконто1.НайтиПоКоду("0000005");
Гость
10 - 08.04.2014 - 16:06
(5) Все равно не срабатывает. Может тогда из 77 забирать докумет ЗУПа
11 - 08.04.2014 - 16:16
Сообщить(СерверOLE.СчетПоКоду("20",СерверOLE.Основ нойПланСчетов()).Код);
Гость
12 - 08.04.2014 - 16:16
(10)пример своего кода
СчетОле = БазаБухОле.CreateObject("Счет.Основной");
СчетОле.НайтиПоКоду("90.3");

докСчетФактураОле.НоваяСтрока();
докСчетФактураОле.УстановитьАтрибут("Счет", СчетОле.ТекущийСчет());

докСчетФактураОле.НазначитьТип("Субконто1", докСчетФактураОле.Счет.ВидСубконто(1));
докСчетФактураОле.НазначитьТип("Субконто2", докСчетФактураОле.Счет.ВидСубконто(2));
докСчетФактураОле.НазначитьТип("Субконто3", докСчетФактураОле.Счет.ВидСубконто(3));

у меня работало
Гость
13 - 08.04.2014 - 16:20
(+12)
докСчетФактураОле.Субконто1 = докСчетФактураОле.Товар.ВидНоменклатуры;
докСчетФактураОле.Субконто2 = докСчетФактураОле.СтавкаНДС;
Гость
14 - 08.04.2014 - 16:22
(10)ты назначил вид (тип) субконто чтобы заполнять их?
Гость
15 - 08.04.2014 - 16:25
(10) опять же оставил без изменений строчку
Счет = СерверOLE.CreateObject("Счет");
сказал же
СчетОле = БазаБухОле.CreateObject("Счет.Основной");
Гость
16 - 08.04.2014 - 16:26
план счетов как называется? Jсновной - это отсюда
Гость
17 - 08.04.2014 - 16:28
(15) спасибо, попробую завтра и отпишусь .....
Гость
18 - 08.04.2014 - 16:35
(16) Да счет прописался !! Спасибо огромное !!!!!!
Гость
19 - 08.04.2014 - 20:41
15-vodoley_ol >
18-flower >
И вовсе не обязательно указывать "Основной" ;) Обязательно - это когда счетов несколько (и неважно, что "пустые"), а с единственным прокатывает и без этого довеска (v7.7.0.27, win2008x64, OLE-сервер: Бух77 4.5):
(с сокращениями)
Опер=База.CreateObject("Операция");
.......................
РабДата=База.EvalExpr("РабочаяДата('"+Формат(ДатаП ров,"Д ДДММГГГГ")+"')");

Опер.Новая();
Опер.ДатаОперации=ДатаПров;
Опер.Документ.УстановитьНовыйНомер();
Опер.Содержание="Выгрузка из 'Зарплата+Кадры'";
ПриемникСчета=База.CreateObject("Счет");
Номер=0;
ВсегоСтрок=Таб.КоличествоСтрок();
Для сч=1 по ВсегоСтрок Цикл
Таб.ПолучитьСтрокуПоНомеру(Сч);
Опер.НоваяПроводка();
//Опер.СодержаниеПроводки=Таб.СодержаниеПроводки;
Если ПриемникСчета.НайтиПоКоду(СокрЛП(Таб.СчетКредита.К од))=1 Тогда
Если ПриемникСчета.ТекущийСчет().ЭтоГруппа()=1 Тогда
Ошибка=1;
ВЛогФайл("Счет "+СокрЛП(Таб.СчетКредита.Код)+" не может быть группой!","!");
Продолжить;
КонецЕсли;
Опер.Кредит.Счет=ПриемникСчета.ТекущийСчет();
Для сс=1 по ПриемникСчета.ТекущийСчет().КоличествоСубконто() Цикл
Субк=ПриемникСчета.ВидСубконто(сс);
ТипСубконто=СокрЛП(Субк.ТипСубконто());
ЗначСубк=НайтиСубконто(ТипСубконто,Таб.ПолучитьЗна чение(Таб.НомерСтроки,"Субконто"+сс+"Кредита"));
Если ЗначСубк<>0 Тогда
Опер.Кредит.Субконто(сс,ЗначСубк);
КонецЕсли;
КонецЦикла;
Иначе
Ошибка=1;
ВЛогФайл("Счет не найден "+СокрЛП(Таб.СчетКредита.Код),"!");
Продолжить;
КонецЕсли;
Если ПриемникСчета.НайтиПоКоду(СокрЛП(Таб.СчетДебета.Ко д))=1 Тогда
Если ПриемникСчета.ТекущийСчет().ЭтоГруппа()=1 Тогда
Ошибка=1;
ВЛогФайл("Счет "+СокрЛП(Таб.СчетДебета.Код)+" не может быть группой!","!");
Продолжить;
КонецЕсли;
Опер.Дебет.Счет=ПриемникСчета.ТекущийСчет();
Для сс=1 по ПриемникСчета.ТекущийСчет().КоличествоСубконто() Цикл
Субк=ПриемникСчета.ВидСубконто(сс);
ТипСубконто=СокрЛП(Субк.ТипСубконто());
ЗначСубк=НайтиСубконто(ТипСубконто,Таб.ПолучитьЗна чение(Таб.НомерСтроки,"Субконто"+сс+"Дебета"));
Если ЗначСубк<>0 Тогда
Опер.Дебет.Субконто(сс,ЗначСубк);
КонецЕсли;
КонецЦикла;
Иначе
Ошибка=1;
ВЛогФайл("Счет не найден "+СокрЛП(Таб.СчетДебета.Код),"!");
Продолжить;
КонецЕСли;
Опер.Сумма=Таб.Сумма;
Опер.Количество=Таб.Количество;
Номер=Номер+1;
глСтатусСтрока(Контекст,"Обработано проводок "+Номер+" из "+ВсегоСтрок);
КонецЦикла;

Если Ошибка=0 Тогда
Опер.Записать();
Иначе
ВЛогФайл("Проводки не выгружены!","!");
КонецЕсли;
Гость
20 - 09.04.2014 - 20:45
(19)VZ
Операция и документ это разные вещи, у них и методы работы разные.
Кстати я не увидел в твоем примере что база-источник у тебя это 1С8.
ВсегоСтрок=Таб.КоличествоСтрок();
Для сч=1 по ВсегоСтрок Цикл
Таб.ПолучитьСтрокуПоНомеру(Сч);
такая конструкция возможно только в 7.7

напиши свой пример из 1с8, а не из 7.7 и почувствуешь разницу
Гость
21 - 09.04.2014 - 22:03
20-vodoley_ol > Ты в курсе, что для OLE пофиг и клиент, и сервер?
Это просто прокладка между двумя модулями. На стороне клиента - свой ситаксис, на стороне сервера - свой.
Во-вторых: ТС передает значение именно в "семерку". И значение имеет не выборка в источнике, а то, что принимает приемник. А приемник понимает свой синтаксис команд.
Иначе говоря:
Для сч=1 по ВсегоСтрок Цикл
Таб.ПолучитьСтрокуПоНомеру(Сч);
- это источник ищет в своей среде данные для передачи приемнику. OLE пока ждет своей очереди вступить в работу. И вот она:
Опер.НоваяПроводка(); - это уже для OLE-объекта, это команда имеет синтаксис OLE объекта. В данном (именно данном) случае оба ситоксиса овпадают (ибо источник и приемник имеют одинаковый синтаксис команд), но команду "НоваяПроводка()" сам источник не "знает". Не исполняет. Если б источник не мог передать команду "своим стилем", пришлось бы обращатся не напрямую, а через строку, используя EvalExpr() или ExecuteBatch().
Например, напрямую в "восьмерку" команду "Параметры = Новая Структура" не передать: движок облает синтаксис.
Или наоборот: в "восмерке нельзя напрямую скомандоваит приемнику-"семерке" "ПриемникСчета=База.CreateObject("Счет");" - не поймет восьмерочный движок этого синтаксиса, придется через строку передавать посредством тех же EvalExpr() или ExecuteBatch().
И третье: это в "восьмерке" документ и операция совсем разделены, в "семерке" это не совсем так ;)
И кстати, в данном случае (сабж) роли не играет: в (19) не код для решения именно задачи ТС, а пример.
Только пример, как можно задать счет, и субконто к нему.


К списку вопросов






Copyright ©, Все права защищены