![]() |
Перенос проводок из ЗУП в комплексную 77 по OLE вместо счета пустое значение? Из ЗУПа переношу "Отражение зарплаты в бух учете" в документ БухСправка в комплексную 77. Документ бух справка формируется, но счета Дт и Кт пустые. Только суммы в строках? В чем ошибка в коде? ........ Счет = СерверOLE.CreateObject("Счет"); Если Счет.НайтиПоКоду("96") = 1 Тогда Опер.СчетДт = Счет.ТекущийСчет(); ........ |
пробуй так СчетОле = БазаБухОле.CreateObject("Счет.Основной"); СчетОле.НайтиПоКоду("96"); |
интересен сам подход к идеи >>Если Счет.НайтиПоКоду("96") = 1 Тогда а его там может не быть? |
(1) Нет, не помогло :(((( (2) Если Счет.НайтиПоКоду("96") = 1 Тогда этот оператор как раз срабатывает |
насколько я помню - оле-объект не получится использовать в качестве объекта текущей конфигурации в текущей конфигурации создавай свой, родной объект типа "Счет" |
(3) (+1) вместо Опер.СчетДт = Счет.ТекущийСчет(); докОле.УстановитьАтрибут("Счет", СчетОле.ТекущийСчет()); |
докОле.УстановитьАтрибут("СчетДт", СчетОле.ТекущийСчет()); |
(+6) и лучше в бух. справку переносить, то бишь в документ, а не операцию |
сори комент (7) лишний |
(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"); |
(5) Все равно не срабатывает. Может тогда из 77 забирать докумет ЗУПа |
Сообщить(СерверOLE.СчетПоКоду("20",СерверOLE.ОсновнойПланСчетов()).Код); |
(10)пример своего кода СчетОле = БазаБухОле.CreateObject("Счет.Основной"); СчетОле.НайтиПоКоду("90.3"); докСчетФактураОле.НоваяСтрока(); докСчетФактураОле.УстановитьАтрибут("Счет", СчетОле.ТекущийСчет()); докСчетФактураОле.НазначитьТип("Субконто1", докСчетФактураОле.Счет.ВидСубконто(1)); докСчетФактураОле.НазначитьТип("Субконто2", докСчетФактураОле.Счет.ВидСубконто(2)); докСчетФактураОле.НазначитьТип("Субконто3", докСчетФактураОле.Счет.ВидСубконто(3)); у меня работало |
(+12) докСчетФактураОле.Субконто1 = докСчетФактураОле.Товар.ВидНоменклатуры; докСчетФактураОле.Субконто2 = докСчетФактураОле.СтавкаНДС; |
(10)ты назначил вид (тип) субконто чтобы заполнять их? |
(10) опять же оставил без изменений строчку Счет = СерверOLE.CreateObject("Счет"); сказал же СчетОле = БазаБухОле.CreateObject("Счет.Основной"); |
план счетов как называется? Jсновной - это отсюда |
(15) спасибо, попробую завтра и отпишусь ..... |
(16) Да счет прописался !! Спасибо огромное !!!!!! |
15-vodoley_ol > 18-flower > И вовсе не обязательно указывать "Основной" ;) Обязательно - это когда счетов несколько (и неважно, что "пустые"), а с единственным прокатывает и без этого довеска (v7.7.0.27, win2008x64, OLE-сервер: Бух77 4.5): (с сокращениями) [em] Опер=База.CreateObject("Операция"); ....................... РабДата=База.EvalExpr("РабочаяДата('"+Формат(ДатаПров,"Д ДДММГГГГ")+"')"); Опер.Новая(); Опер.ДатаОперации=ДатаПров; Опер.Документ.УстановитьНовыйНомер(); Опер.Содержание="Выгрузка из 'Зарплата+Кадры'"; ПриемникСчета=База.CreateObject("Счет"); Номер=0; ВсегоСтрок=Таб.КоличествоСтрок(); Для сч=1 по ВсегоСтрок Цикл Таб.ПолучитьСтрокуПоНомеру(Сч); Опер.НоваяПроводка(); //Опер.СодержаниеПроводки=Таб.СодержаниеПроводки; Если ПриемникСчета.НайтиПоКоду(СокрЛП(Таб.СчетКредита.Код))=1 Тогда Если ПриемникСчета.ТекущийСчет().ЭтоГруппа()=1 Тогда Ошибка=1; ВЛогФайл("Счет "+СокрЛП(Таб.СчетКредита.Код)+" не может быть группой!","!"); Продолжить; КонецЕсли; Опер.Кредит.Счет=ПриемникСчета.ТекущийСчет(); Для сс=1 по ПриемникСчета.ТекущийСчет().КоличествоСубконто() Цикл Субк=ПриемникСчета.ВидСубконто(сс); ТипСубконто=СокрЛП(Субк.ТипСубконто()); ЗначСубк=НайтиСубконто(ТипСубконто,Таб.ПолучитьЗначение(Таб.НомерСтроки,"Субконто"+сс+"Кредита")); Если ЗначСубк<>0 Тогда Опер.Кредит.Субконто(сс,ЗначСубк); КонецЕсли; КонецЦикла; Иначе Ошибка=1; ВЛогФайл("Счет не найден "+СокрЛП(Таб.СчетКредита.Код),"!"); Продолжить; КонецЕсли; Если ПриемникСчета.НайтиПоКоду(СокрЛП(Таб.СчетДебета.Код))=1 Тогда Если ПриемникСчета.ТекущийСчет().ЭтоГруппа()=1 Тогда Ошибка=1; ВЛогФайл("Счет "+СокрЛП(Таб.СчетДебета.Код)+" не может быть группой!","!"); Продолжить; КонецЕсли; Опер.Дебет.Счет=ПриемникСчета.ТекущийСчет(); Для сс=1 по ПриемникСчета.ТекущийСчет().КоличествоСубконто() Цикл Субк=ПриемникСчета.ВидСубконто(сс); ТипСубконто=СокрЛП(Субк.ТипСубконто()); ЗначСубк=НайтиСубконто(ТипСубконто,Таб.ПолучитьЗначение(Таб.НомерСтроки,"Субконто"+сс+"Дебета")); Если ЗначСубк<>0 Тогда Опер.Дебет.Субконто(сс,ЗначСубк); КонецЕсли; КонецЦикла; Иначе Ошибка=1; ВЛогФайл("Счет не найден "+СокрЛП(Таб.СчетДебета.Код),"!"); Продолжить; КонецЕСли; Опер.Сумма=Таб.Сумма; Опер.Количество=Таб.Количество; Номер=Номер+1; глСтатусСтрока(Контекст,"Обработано проводок "+Номер+" из "+ВсегоСтрок); КонецЦикла; Если Ошибка=0 Тогда Опер.Записать(); Иначе ВЛогФайл("Проводки не выгружены!","!"); КонецЕсли;[/em] |
(19)VZ Операция и документ это разные вещи, у них и методы работы разные. Кстати я не увидел в твоем примере что база-источник у тебя это 1С8. ВсегоСтрок=Таб.КоличествоСтрок(); Для сч=1 по ВсегоСтрок Цикл Таб.ПолучитьСтрокуПоНомеру(Сч); такая конструкция возможно только в 7.7 напиши свой пример из 1с8, а не из 7.7 и почувствуешь разницу |
20-vodoley_ol > Ты в курсе, что для OLE пофиг и клиент, и сервер? Это просто прокладка между двумя модулями. На стороне клиента - свой ситаксис, на стороне сервера - свой. Во-вторых: ТС передает значение именно в "семерку". И значение имеет не выборка в источнике, а то, что принимает приемник. А приемник понимает свой синтаксис команд. Иначе говоря: [em]Для сч=1 по ВсегоСтрок Цикл Таб.ПолучитьСтрокуПоНомеру(Сч);[/em] - это источник ищет в своей среде данные для передачи приемнику. OLE пока ждет своей очереди вступить в работу. И вот она: [b][em]Опер.НоваяПроводка();[/em][/b] - это уже для [b]OLE[/b]-объекта, это команда имеет синтаксис [b]OLE[/b] объекта. В данном (именно данном) случае оба ситоксиса овпадают (ибо источник и приемник имеют одинаковый синтаксис команд), но команду "НоваяПроводка()" сам источник не "знает". Не исполняет. Если б источник не мог передать команду "своим стилем", пришлось бы обращатся не напрямую, а через строку, используя EvalExpr() или ExecuteBatch(). Например, напрямую в "восьмерку" команду "Параметры = Новая Структура" не передать: движок облает синтаксис. Или наоборот: в "восмерке нельзя напрямую скомандоваит приемнику-"семерке" "ПриемникСчета=База.CreateObject("Счет");" - не поймет восьмерочный движок этого синтаксиса, придется через строку передавать посредством тех же EvalExpr() или ExecuteBatch(). И третье: это в "восьмерке" документ и операция совсем разделены, в "семерке" это не совсем так ;) И кстати, в данном случае (сабж) роли не играет: в (19) не код для решения именно задачи ТС, а пример. Только пример, как можно задать счет, и субконто к нему. |
Текущее время: 21:40. Часовой пояс GMT +3. |