Регистрация Правила Главная форума Поиск |
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) не код для решения именно задачи ТС, а пример. Только пример, как можно задать счет, и субконто к нему. | |
| Интернет-форум Краснодарского края и Краснодара |