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

Добавление проводок документу обработкой.

0 - 26.02.2015 - 14:42
Надо в проведённый документ обработкой добавить проводку. Но новая проводка не попадает в оборотку. Если обработкой править существующие проводки - то изменения в оборотке отображаются. Не подскажете, в чём может быть дело с новой проводкой?
Делаю примерно так:
Опер=СоздатьОбъект("Операция"); Опер.НайтиОперацию(Док.ТекущийДокумент());
Опер.НоваяПроводка();
Опер.Дебет.Счет=Счет1;
Опер.Кредит.Счет=Счет2;
Опер.Сумма=100;
Опер.Записать();



1 - 26.02.2015 - 15:11
РазделительУчета в базе есть?
Гость
2 - 26.02.2015 - 15:23
(0) Год назад делал как то такую х..ню для Отчетов Розн.Прод. для БП 2.0 Работает зараза)) Вроде на компе где то черновики может и остались.
Я по другому делал))
Uho
3 - 26.02.2015 - 15:37
2-nordbox > очень странно, что для БП 2.0 ты делал по-другому
Гость
4 - 26.02.2015 - 15:47
>>Надо в проведённый документ обработкой добавить проводку. Но новая проводка не попадает в оборотку. Если обработкой править существующие проводки
Как то так, не претендую на истину:
Сообщить("Обрабатываем "+Строка(Док.Ссылка));
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗапис ей();
НаборЗаписей.Отбор.Регистратор.Установить(Док.Ссыл ка);
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
//ДокОбъект.РучнаяКорректировка = Ложь;
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение );
ДокОбъект.РучнаяКорректировка = ИСТИНА;
Далее по тексту
Гость
5 - 26.02.2015 - 15:49
+4
Движение= НаборЗаписей.Добавить();
6 - 26.02.2015 - 15:50
Док.Вид() какой?
Опер.Выбрана()?
код из сабжа вполне рабочий для добавления проводки...
Гость
7 - 26.02.2015 - 15:51
+4 вот это можешь заремить
//НаборЗаписей.Очистить();
//НаборЗаписей.Записать();
Uho
8 - 26.02.2015 - 15:56
Цитата:
Сообщение от nordbox Посмотреть сообщение
Как то так, не претендую на истину:
скорее претендуешь на ложь)))
Гость
9 - 26.02.2015 - 15:58
Uho, а если работает???
За пивом пойдешь?
Гость
10 - 26.02.2015 - 16:05
2 All. А никто не заметил, что у ТС "семерка"?
0-который не честный > Так нельзя.
Гость
11 - 26.02.2015 - 16:07
VZ ))))) +100500
Но я ЧЕСТНО сказал что для БП 2.0 ))))
12 - 26.02.2015 - 16:08
(10)
я заметил, что все меньше и меньше помнящих "семерку")))
см (6) 3-ю строку
Гость
13 - 26.02.2015 - 16:11
все вроде заметили, что норд не за метил :)
в отладчике бы посмотреть на ДОК из сабжа.
Гость
14 - 26.02.2015 - 16:24
Опер.НайтиОперацию(Док.ТекущийДокумент());
если ее не находит, надо вероятно:

Опер.Новая();
...
Опер.НоваяПроводка();
...
Опер.Записать();
и будет счастье
Гость
15 - 26.02.2015 - 16:51
14-zaic > Не будет ЩЯСТЯ, если вносить бардак в БУ.
Документ должен формировать проводки согласно содержания реквизитов. Точка.
Чтобы выдерживал и перепроведение, и наглый вопль бухгалтера "Это не я! Это программа такая!". Пшел на. Если накосячил - вводи бухсправку, или ручную операцию, и не шмыгай носом.

Другое дело, меняются метаданные, или (и) правила формирования операции. Тогда можно, но все равно проводки надо получать проведением, потомушно проведение не всегда ограничивается проводками. Оно еще периодические объекты могЁт писать.
Гость
16 - 26.02.2015 - 17:10
+11 Бывают ситуации, когда удобнее менять проводки "динамически", интерактивно, и без монопольного режима. Например, при уничтожении "дублей". Или еще что-то нестандартное.
Да, лезу в операции.
Но не так, как (0).
Uho
17 - 26.02.2015 - 17:57
(9,10,11) см.(3,8)
Гость
18 - 26.02.2015 - 20:33
0-который не честный >
Чтобы запись проходила в бухгалтерские итоги, нужно
перед Опер.Записать();
дополнить:
Опер.ЗаписатьПроводки();
... однако, аналитика по субконто при этом не запишется... - только счД, счК, количество, сумма, содержание проводки.
*****
В синтаксис-помощнике по этому поводу сказано:
...
ЗаписатьПроводки()
Назначение:
Предназначен для записи в информационную базу уже добавленных и заполненных проводок операции.
Замечание:
Метод может использоваться только для атрибута ''Операция'' документа в момент проведения (в процедуре ОбработкаПроведения). При этом происходит обновление бухгалтерских итогов. Это позволяет при проведении документа обращаться к бухгалтерским итогам, уже измененным проводками, записанными этим документом. После выполнения метода ЗаписатьПроводки() и до окончания процедуры ОбработкаПроведение уже невозможно изменять или удалять проводки, добавленные до вызова этого метода.
Данный метод имеет смысл использовать, только в том случае, если существует необходимость обращения к итогам, измененным проводками записываемой операции. При записи сложной проводки, если у главной корреспонденции сложной проводки не указана сумма (равна 0), то она автоматически вычисляется на основании подчиненных корреспонденций.
Гость
19 - 26.02.2015 - 20:47
18-perpetum > + В силу неполноценности операций дозаписи - процедуру дозаписи следует признать бесполезной и вредной, так как можно к любому документу приписать несвойственные корреспонденции счетов, количеств и сумм, к тому же - без аналитики.
А при случайном перепроведении документа, операции всё равно от дозаписей очищаются.
Гость
20 - 26.02.2015 - 20:51
18-perpetum > вот это совсем не надо! это актуально, когда результат след. проводок определяется исходя из результата уже введенных проводок. если просто добавить проводку, то хватит и обычного Записать().
ЗЫ: может счета как-то не так определяются?
Гость
21 - 26.02.2015 - 20:56
18-perpetum > В целом, не верно. Проводки операции можно изменить и вне проведения.
Разумеется, со всей положенной аналитикой.
Но обходить проведение... Без веских на то оснований ("мне нада", "так удобнее" - не основания) плохая идея.
Гость
22 - 27.02.2015 - 05:07
20-Buhta >21-VZ >
:-) - да вы сами попробуйте - это, что называется, из баловства - бухгалтера напугать, например, привязав проводки к непроводимому документу Доверенность - запросто.
А почему аналитика не привязывается, не пойму... - вот чисто для эксперимента - смотрите сами
http://hdd.tomsk.ru/file/tohvanyj
- однако, баловаться стоит на экспериментальной базе!!!
Гость
23 - 27.02.2015 - 05:40
(0) пробуй:
Код:
Операция=СоздатьОбъект("Операция");
ОбъектБД=Док.ТекущийДокумент();
Если Операция.НайтиОперацию(ОбъектБД)=0 Тогда
	Сообщить(ОбъектБД,"!");
Иначе
	Операция.ВыбратьПроводки();
	Операция.НоваяПроводка();
	Операция.Дебет.Счет=Счет1;
	Операция.Кредит.Счет=Счет2;
	Операция.Сумма=100;	
	Операция.ЗаписатьПроводки();
КонецЕсли;
или см. сюда:

24 - 27.02.2015 - 06:51
Нда.. Написал перед уходом домой, а дома посмотреть это всё забыл..
Спасибо за советы.
Сейчас прочитаю.
Опер.ЗаписатьПроводки(); - я пробовал, но 1С вылетела с SQL ошибкой, как я понял, это для модуля документа работает.
Дальше, я пытался сделать проводки на бухсправке, в ней стоит отметка, что операция создаётся всегда. Но в данном случае не важно, я её провёл.
Так вот. Если поменять сумму в проводках, то эти изменения в оборотке появляются. Если удалить проводку - оборотка видит, если добавить новую - в оборотку не попадает..
Вообще цель этого всего такая - разделил базу в конце года, в новой всё внесено остатками через бухсправки. Но, как выяснилось, есть отчёт, который формируется на основе проводок некоторых документов, а в новой базе этих документов нет и он формируется неправильно. Я сделал обработку, которая копирует документы, но т.к. есть константа дата запрета редактирования, я провести их без открытия не смогу. Поэтому родилась мысль, копировать документ и сразу к нему добавить проводки. Но сразу возникло 2 проблемы:
1. Документ не проведён, и как добавить к нему операцию с проводками я не знаю.
2. Эксперимент с уже проведённым документом показал вышеописанную проблему.
Открыть период программно и провести документ я смогу, т.к. это поступление он должен провестись без проблем. Но если придётся чтото менять, или покакой причине они не проведутся....
25 - 27.02.2015 - 07:02
1 - Да, разделитель есть...Вот про него я совсем забыл. Спасибо, получилось!
Теперь буду думать, как не проводя документ сделать его проведённым(или операцию к нему сделать) и записать в него проводки. Ведь не везде стоит отметка про создавать операцию всегда.
26 - 27.02.2015 - 07:32
14 - 1С вылетела на Опер.Новая();
Может ктонибуть сказать, как без Док.Провести() сделать документ проведённым?
Гость
27 - 27.02.2015 - 08:16
26-который не честный >

Новая операция не нужна.
Оп.НайтиОперацию(ВыбДокумент.ТекущийДокумент());
...
Здесь цикл с выборкой, откуда берутся корреспонденции для формирования проводок
... Оп.ПолучитьПроводкуПоНомеру(Оп.КоличествоПроводок( ));
//- Иначе проводки будут вклиниваться в промежуточные и будет нарушена автонумерация проводок.

Оп.НоваяПроводка();
...
Оп.ЗаписатьПроводки();
Конец цикла выборки, откуда берутся корреспонденции для формирования проводок;
Оп.Записать();

P.S.
- документ не обязательно проведённый или проводимый - операции добавятся и будут видны в бух-итогах, только вот аналитику записать не получается, а почему - пока не пойму.
Но проще модифицировать отчет, чтобы не искажал инфу, чем мутить такой огород..., ИМХО.
28 - 27.02.2015 - 08:50
27 вот как у меня сделано
Док.Записать();
Если ПустоеЗначение(Док.Фирма)=0 Тогда
ЮрЛицо=Док.Фирма.ЮрЛицо;
Иначе
ЮрЛицо=Док.ЮрЛицо;
КонецЕсли;

Опер=СоздатьОбъект("Операция");
Опер.НайтиОперацию(Док.ТекущийДокумент());
Если Опер.НайтиОперацию(Док.ТекущийДокумент())=1 Тогда
К2=Опер.КоличествоПроводок();
К1=К2;
Для К=1 По К1 Цикл
Опер.ПолучитьПроводкуПоНомеру(К2);
Опер.УдалитьПроводку();
К2=К2-1;
//Опер.Сумма=100;
КонецЦикла;
Иначе
//Опер.Новая();
КонецЕсли;

Пока Текст.AtEndOfStream=0 Цикл
Стр=Текст.ReadLine();
Список.ИзСтрокиСРазделителями(Стр);//Проводки
Опер.НоваяПроводка();
**(247)**: Операция не выбрана!

У документа значение Создавать операцию установлено в Только при проведении. Соотвественно, после поиска операции, операция не выбрана...
У ьухсправки значение стоит Всегда. Поэтому там такое прокатило.
29 - 27.02.2015 - 09:51
Тут вспомнили, что документ нужен в любом случае. Сделаю, как частный случай, буду проводить, этого хватит. Отчет переделать-даже не знаю, по проводкам ищется документ, а из самого документа берутся данные, остатками их не закачаешь..
Всем спасибо.
30 - 27.02.2015 - 10:10
в свое время я пользовался инструментом _DocActs. не особо вникал , как оно делает но делает и это тоже. вот там есть и контакты автора Автор:
Олег Ризванов aka ROM
rom9@pisem.net
rom1c@narod.ru
icq 94305426
Гость
31 - 27.02.2015 - 10:40
добавить проводок у меня получалось только документам, уже имеющим таковые.
Гость
32 - 27.02.2015 - 12:49
29-который не честный > Можно попробовать использовать глобальную переменную, через которую передавать таблицу значений в форму документа при открытии, с последующей командой записи. В таблице - нужные для проведения реквизиты и уже в модуле проведения сделать дописку, что если эта переменная имеет заданный тип значения, то осуществлять цикл по дозаписи проводок, в дополнение к существующим, или вместо них..., если проводки нужны только по процедуре. - Типа так.
Не совсем понял производимых вами действий, почему нужно пристёгивать проводки, но можно было бы так вот достаточно просто через контекст глобальной переменной осуществить.
Гость
33 - 27.02.2015 - 14:14
32-perpetum >+ - Проверил - через глобальную переменную ТЗ передаётся и проводятся нужные проводки самим документом - работает, но требуется небольшая дописка.
Гость
34 - 27.02.2015 - 14:15
33-perpetum > чтобы дописки не было
Гость
35 - 27.02.2015 - 14:20
не знаю, как автор, а я подобное добавление проводок использовал лишь для технологических целей - для подготовки данных, перед планируемой свёрткой базы. то есть хранить ТЗ в документах, да и дописывать сами документы смысла не было.
это уже тогда проще написать обработку проведения по нормальному, без объектов не подверженных проверке ссылочной целостности.
Гость
36 - 27.02.2015 - 14:44
29-который не честный > Я делал примерно так:
1. Если достаточно изменить реквизиты (или даже перепровести без изменений реквизитов), то так и делал. Отключая "защиту" от изменения ;)
2. Если требуется только изменить проводки, то просто разбил функционал на несколько процедур:
- скачать проводки документа в ТЗ;
- записать проводки операции документа из ТЗ;
Их можно в ГМ всандалить. Чтоб два раза не ходить, если придестя с другим доком возжаться.
Первая элементарна.
Вторая - тоже: вначале удаляем все проводки, потом добавляем из ТЗ. Не забывая записать ;)

Ну, а ТЗ уже по вкусу: переставлять, добавлять, сортировать.....
Гость
37 - 28.02.2015 - 08:25
26-который не честный >36-VZ >20-Buhta >
- В качестве отвлечения от рутины, из чистого любопытства - сделал обработку, через которую можно дописывать проводки к произвольному документу (с возможностью создавать операцию Всегда или Выборочно), с записью напрямую, или через контекст.
http://hdd.tomsk.ru/file/bbvkwyqj
- можно реквизиты проводки вводить в ТЗ - добавлять, удалять,редактировать в ручном режиме, или загрузить через любой док с проводками.
Аналитика проводок пишется.
Присутствует описание для примера организации работы через контекст.
Можно побаловаться, например, приписать к Доверенности проводки от документа отгрузки, Выписки, или перемещения материалов. - Ведь чем ещё порадовать Бухгалтера в день 8-марта? :-)
Гость
38 - 28.02.2015 - 08:44
Всю ветку не читал. Ибо ленив.
Но я в таких случаях генерю документ(ы) "Бухгалтерская справка". И пусть бушки их как хотят потом редактируют или проводят.
Гость
39 - 28.02.2015 - 10:34
37-perpetum > Уж если делать универсальной, то
ТП=СоздатьОбъект("ТаблицаЗначений");
ТП.НоваяКолонка("СчД","Счет");
ТП.НоваяКолонка("Субконто1Д");
ТП.НоваяКолонка("Субконто2Д");
ТП.НоваяКолонка("Субконто3Д");
ТП.НоваяКолонка("СчК","Счет");
ТП.НоваяКолонка("Субконто1К");
ТП.НоваяКолонка("Субконто2К");
ТП.НоваяКолонка("Субконто3К");
ТП.НоваяКолонка("Сумма");
ТП.НоваяКолонка("Валюта");
ТП.НоваяКолонка("ВалСумма");
ТП.НоваяКолонка("Количество");
Для сч=1 По Метаданные.РеквизитПроводки() Цикл
ТП.НоваяКолонка(Метаданные.РеквизитПроводки(сч).Ид ентификатор,Метаданные.РеквизитПроводки(сч).Тип);
КонецЦикла;

;)


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






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