![]() |
![]() |
![]() |
|
Формирование сложных проводок. Функция СложнаяПроводка() не работает | ☑ | ||
---|---|---|---|---|
0
ildus
30.03.06
✎
13:40
|
Комплексная конфа. необходимо по документам формировать сложные проводки. в справочнике проводок по хоз. операциям настроил проводки, при проведении выдало ошибку "не выбран счет дебета или кредита" (в глПолучитьТаблицуПроводок), исправил
ЗабалансовыйСчетД = Макс(ПустоеЗначение(Таблица.СчетД), Таблица.СчетД.Забалансовый); ЗабалансовыйСчетК = Макс(ПустоеЗначение(Таблица.СчетК), Таблица.СчетК.Забалансовый); на ЗабалансовыйСчетД = Таблица.СчетД.Забалансовый; ЗабалансовыйСчетК = Таблица.СчетК.Забалансовый; далее, таблица проводок успешно сформировалась, в процедуре глЗаполнитьОперациюПроводками() есть участок кода, который не работает: ТаблицаПроводок.ВыбратьСтроки(); Пока ТаблицаПроводок.ПолучитьСтроку() = 1 Цикл Если (ТаблицаПроводок.СчетД.Выбран() = 0) И (ТаблицаПроводок.СчетК.Забалансовый = 0) Тогда Если Операция.СложнаяПроводка() = 0 Тогда Операция.НоваяПроводка(); Иначе Операция.НоваяКорреспонденция(); КонецЕсли; ИначеЕсли (ТаблицаПроводок.СчетК.Выбран() = 0) И (ТаблицаПроводок.СчетД.Забалансовый = 0) Тогда Если Операция.СложнаяПроводка() = 0 Тогда Операция.НоваяПроводка(); Иначе Операция.НоваяКорреспонденция(); КонецЕсли; Иначе Операция.НоваяПроводка(); КонецЕсли; почему-то функция Операция.СложнаяПроводка() всегда возвращает 0, вместо 1, в результате вместо формирования второй корреспонденции первой проводки формируется вторая проводка. почему?? |
|||
1
у лю 427
30.03.06
✎
13:44
|
лучше оставь их в покое...
там камни есть - башку можешь разбить... |
|||
2
ildus
30.03.06
✎
13:50
|
(1) никак нельзя оставить. какие именно камни?
|
|||
3
selenat
30.03.06
✎
13:59
|
(0) Ты офигел править глПолучитьТаблицуПроводок. не боишься, что у тебя слетят проводки у других доков?
|
|||
4
ildus
30.03.06
✎
14:58
|
(3) нет, т.к. в этом месте всего-лишь проверка на пустое значение счета у незабалансовых счетов. а у других документов никто проводки не изменял, так что все д.б. правильно. причем в процедуре глЗаполнитьОперациюПроводками() уже 1С предусмотрена возможность формирования сложных проводок (см. фрагмент кода), однако из-за того что почему-то Операция.СложнаяПроводка() = 0, работает неправильно., видимо программисты из 1С недоделали эту возможность поэтому и отключили выбор пустого счета в глПолучитьТаблицуПроводок().
|
|||
5
ildus
30.03.06
✎
17:25
|
up
|
|||
6
ildus
30.03.06
✎
22:00
|
up
|
|||
7
Бешеная Нога
30.03.06
✎
22:09
|
ну и я то же апну, АП
|
|||
8
ildus
31.03.06
✎
09:27
|
up
|
|||
9
Iran
31.03.06
✎
09:48
|
А если попробовать такое условие:
Если (Опер.НомерКорреспонденции() > 1) Тогда |
|||
10
ildus
31.03.06
✎
10:16
|
(9) нет, так не получится, т.к. НомерКорреспонденции() всегда возвращает 1, пока не введена вторая корреспонденция. а вместо второй корреспонденции вводится новаяПроводка()
НомерКорреспонденции() Назначение: Определяет номер текущей корреспонденции в операции. Возвращает: номер корреспонденции, 1 - если проводка не сложная. |
|||
11
BessTolkovaya
31.03.06
✎
10:25
|
Я чего-то не поняла. Ты же формируешь операцию, добавляешь новые проводки.
И что ты хочешь от СложнаяПроводка(), которая определяет является ли текущая проводка сложной, если на первом шаге у тебя вообще проводок нету? Ну а дальше по твоему алгоритму и быть не может |
|||
12
ildus
31.03.06
✎
10:36
|
(11) первый проход:
Операция.СложнаяПроводка()=0 -это правильно выполнется НоваяПроводка() далее уазывается один из счетов (дебет или кредит) пустой, второй - балансовый, колич-во,сумма. второй проход: Операция.СложнаяПроводка()=0 -это НЕ правильно, должно вернуть 1, т.к. при первом проходе один счет не указан, значит проводка сложная на следующих проходах должно выполняться НоваяКорреспонденция() вместо НоваяПроводка() |
|||
13
ildus
31.03.06
✎
10:37
|
+(12) пока не закроется сумма сложной проводки
|
|||
14
ildus
31.03.06
✎
11:23
|
Пока сложнаяПроводка()=0 цикл
АП !! КонецЦикла; |
|||
15
ildus
31.03.06
✎
11:44
|
up
|
|||
16
ildus
31.03.06
✎
11:59
|
я так понял быстрее тупо прописать все проводки непосредственно в модуле проведения документа, чем дожидаться ответа, и дорабатывать глПриПроведении()
|
|||
17
ildus
31.03.06
✎
13:41
|
кстати послал в 1С тот же вопрос, интересно что они ответят через недельку
|
|||
18
ildus
31.03.06
✎
14:12
|
ответили удивитильно быстро:
Настройка конфигурации для нужд конкретного пользователя не входит в функции линии консультации. По вопросам настройки нужно обращаться к партнерам фирмы 1С в вашем регионе. С уважением, отдел тех. поддержки "1С". Тел. (495) 688-10-01 |
|||
19
ildus
31.03.06
✎
16:32
|
похоже что 1С не дает консультаций по встроенному языку, зачем тогда продают книжки вместе с программой?
|
|||
20
BessTolkovaya
31.03.06
✎
17:22
|
(12) Из преведенного в начале фрагмента не видно, где и как у тебя "далее уазывается один из счетов (дебет или кредит) пустой, второй - балансовый, колич-во,сумма." Поэтому мне, например, тоже не очевидно, что это сложная проводка...
|
|||
21
ildus
31.03.06
✎
17:47
|
(20) это я указал в справочнике проводок хоз операций. а то что это действительно так проверял в отладчике.
|
|||
22
ildus
31.03.06
✎
17:58
|
(20) вот полный текст процедуры глЗаполнитьОперациюПроводками() в типовой конфигурации:
// Параметры: // Операция - операция // ТаблицаПроводок - "ТаблицаЗначений" - таблица проводок, // подготовленная функцией глПолучитьТаблицуПроводок(). // // Описание: // Процедура заполняет операцию проводками. // Процедура глЗаполнитьОперациюПроводками(Операция, ТаблицаПроводок) Экспорт СуммаОперации = 0; ТаблицаПроводок.ВыбратьСтроки(); Пока ТаблицаПроводок.ПолучитьСтроку() = 1 Цикл Если (ТаблицаПроводок.СчетД.Выбран() = 0) И (ТаблицаПроводок.СчетК.Забалансовый = 0) Тогда Если Операция.СложнаяПроводка() = 0 Тогда Операция.НоваяПроводка(); Иначе Операция.НоваяКорреспонденция(); КонецЕсли; ИначеЕсли (ТаблицаПроводок.СчетК.Выбран() = 0) И (ТаблицаПроводок.СчетД.Забалансовый = 0) Тогда Если Операция.СложнаяПроводка() = 0 Тогда Операция.НоваяПроводка(); Иначе Операция.НоваяКорреспонденция(); КонецЕсли; Иначе Операция.НоваяПроводка(); КонецЕсли; Операция.РазделительУчета = Операция.Документ.ЮрЛицо; Операция.СодержаниеПроводки = ТаблицаПроводок.Содержание; Операция.Дебет.Счет = ТаблицаПроводок.СчетД; Операция.Дебет.Субконто(1, ТаблицаПроводок.СубконтоД1); Операция.Дебет.Субконто(2, ТаблицаПроводок.СубконтоД2); Операция.Дебет.Субконто(3, ТаблицаПроводок.СубконтоД3); Операция.Кредит.Счет = ТаблицаПроводок.СчетК; Операция.Кредит.Субконто(1, ТаблицаПроводок.СубконтоК1); Операция.Кредит.Субконто(2, ТаблицаПроводок.СубконтоК2); Операция.Кредит.Субконто(3, ТаблицаПроводок.СубконтоК3); Операция.Сумма = ТаблицаПроводок.Сумма; Операция.ВалСумма = ТаблицаПроводок.ВалСумма; Операция.Валюта = ТаблицаПроводок.Валюта; Операция.Количество = ТаблицаПроводок.Количество; Если ТаблицаПроводок.ВклСуммаОперации = 1 Тогда СуммаОперации = СуммаОперации + ТаблицаПроводок.Сумма; КонецЕсли; КонецЦикла; Операция.СуммаОперации = СуммаОперации; КонецПроцедуры // глЗаполнитьОперациюПроводками() |
|||
23
у лю 427
31.03.06
✎
19:05
|
пля.... понаберут дятлов.... они потом весь лес издолбят...
Разреши для начала сложные проводки в конфе.... вот работающий пример
|
|||
24
ildus
31.03.06
✎
19:25
|
(23) сам ты дятел! это я знаю что так работает. это если прямо в модуле проведения документа так писать годится. Мне же нужно доработать алгоритм проведения в глобальнике так, чтобы сложная проводка или не сложная автоматически формировалась в зависимости от того как она настроена в справочнике проводокХозОпераций. Т.е. если введена первая строка сложной проводки, до тех пор пока она не закроется вызывалась НоваяКорреспонденция() иначе НоваяПроводка(). см. глЗаполнитьОперациюПроводками() в типовой, почему она рабротает не так, как задумано, почему Операция.СложнаяПроводка() возвращает 0 ?
|
|||
25
ildus
31.03.06
✎
19:31
|
(23) сложные проводки разрешены
|
|||
26
у лю 427
31.03.06
✎
20:03
|
Дятел ты и есть дятел...
СложнаяПроводка() используется при переборе сформированных документом проводок. В отчетах или После выбратьОперцииСПроводками... Для определения, есть или нет вторая часть считанной проводки - у обычных проводок для бал счетов д.б. и кредит и дебет, у обычных по забалансу м.б. и кредит и дебет, а может быть только кредит или только дебет... У сложных - у одной есть кредит и много корреспонденций с дебетом или наоборот дебит и много корреспонденций с кредитом... В модуле документа метод СложнаяПроводка() бессмысленен - ты сам должен строить свои действия по формированию сложной проводки... P.S. не лезь ты в сложные проводки - часть типовых отчетов их не обрабатывает, и при сбоях в базе ты получишь такой геморой... после ТиИ.... Мало не покажется... |
|||
27
ildus
31.03.06
✎
20:28
|
(26) тогда какой дятел писал эту глЗаполнитьОперациюПроводками() в типовой конфигурации? почему там используется эта самая функция?
Попробовал кинуть функцию СложнаяПроводка() на форму Операции (в текстовый реквизит). - в интерактивном режиме работает правильно, т.е. возвращает 1 когда вводиш сложную проводку. почему? в чем косяк? ну никак нельзя без эти проводок, ниче не поделаеш буду писать непосредственно в модуле проведения. |
|||
28
Бешеная Нога
31.03.06
✎
20:28
|
Илдус - это имя?
|
|||
29
ildus
31.03.06
✎
20:32
|
(28) Ильдус - имя
|
|||
30
Бешеная Нога
31.03.06
✎
20:34
|
меня Ильдар зовут
|
|||
31
Salvador Limones
31.03.06
✎
20:37
|
(30) Привет, Ильдарка!
|
|||
32
Бешеная Нога
31.03.06
✎
20:37
|
вот гад одолел...
|
|||
33
у лю 427
31.03.06
✎
20:45
|
(27) среди писателей типовых дятлов хватает...
|
|||
34
ildus
31.03.06
✎
21:56
|
(33) убил бы этих дятлов!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |