|
ОбработкаПроведения | ☑ | ||
---|---|---|---|---|
0
AnisaL
25.01.13
✎
10:18
|
Добрый день! Подскажите, в обработке проведения документа такое движение :
движение = движения.ОплатаПоСмете.Добавить(); движение.ВидДвижения = ВидДвиженияНакопления.Приход; движение.Период = дата; движение.Смета = смета; движение.ПризнакРасчета = Признак; движение.Сумма = СуммаДокумента; Потом идет запрос по этому движению: // Расчет сальдо по Смете смет = смета.ПолучитьОбъект(); ном = смет.Номер; запрос = новый запрос; запрос.УстановитьПараметр("Номер", ном); запрос.Текст = "Выбрать * из регистрНакопления.ОплатаПоСмете как рег где рег.смета.номер = &номер"; выборка = запрос.Выполнить().Выбрать(); Ссальдо = 0; если выборка.Количество()<>0 тогда пока выборка.Следующий() цикл если выборка.видДвижения = видДвиженияНакопления.Приход тогда ссальдо = ссальдо+выборка.сумма; иначе ссальдо = ссальдо-выборка.сумма; конецЕсли; конецЦикла; иначе ссальдо = 0; конецЕсли; смет.Сальдо = ссальдо; смет.Записать(); |
|||
1
AnisaL
25.01.13
✎
10:19
|
Документ - ПКО. Вопрос в том, почему запрос не находит это движение?
|
|||
2
Ёпрст
25.01.13
✎
10:20
|
а движения записаны хоть до запроса ?
|
|||
3
k1us181b
25.01.13
✎
10:21
|
а где Записывать=истина и Записать()
|
|||
4
AnisaL
25.01.13
✎
10:21
|
(1) По идее сальдо должно стать равно сумме движения, а оно равно 0.
|
|||
5
AnisaL
25.01.13
✎
10:21
|
(2) аа, вот значит этой строчки и не хватает!
|
|||
6
AnisaL
25.01.13
✎
10:22
|
(3) Как правильно записать, движение.Записать() = Истина ?
|
|||
7
k1us181b
25.01.13
✎
10:24
|
РегистрНакопленияНаборЗаписей.<Имя регистра накопления> (AccumulationRegisterRecordSet.<Имя регистра накопления>)
Записывать (Write) Использование: Чтение и запись. Описание: Тип: Булево. Ложь - не происходит записи набора в информационную базу при вызове Записать коллекции движений документа, которой принадлежит набор, а также при стандартной обработке проведения документа, если значение свойства метаданного документа "Запись движений при проведении" в Конфигураторе выставлено в "Записывать выбранные". Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
8
AnisaL
25.01.13
✎
10:30
|
(7) Пока у меня не получилось, так пишу
движение.Записывать(); ошибка. Значит нужно через РегистрНакоплениянаборзаписей делать? |
|||
9
k1us181b
25.01.13
✎
10:32
|
движения.ОплатаПоСмете.Записывать = Истина;
движение = движения.ОплатаПоСмете.Добавить(); движение.ВидДвижения = ВидДвиженияНакопления.Приход; движение.Период = дата; движение.Смета = смета; движение.ПризнакРасчета = Признак; движение.Сумма = СуммаДокумента; |
|||
10
AnisaL
25.01.13
✎
10:33
|
(9) Документ.ПриходныйКассовыйОрдер(1696)}: Поле объекта не обнаружено (Записывать)
движения.ОплатаПоСмете.Записывать = Истина; |
|||
11
AnisaL
25.01.13
✎
10:34
|
Не получилось(
|
|||
12
AnisaL
25.01.13
✎
10:36
|
Написала так - движения.ОплатаПоСмете.Записать(Истина);
прокатило, но опять потом в запросе не находит эту оплату( |
|||
13
НафНаф
25.01.13
✎
10:38
|
создай свой набор движений (не тот что у объекта Движения), запиши и читай запросом
а тот запишется после обработки проведения |
|||
14
k1us181b
25.01.13
✎
10:38
|
в регистре то хоть строки появляются после записи доков?
|
|||
15
AnisaL
25.01.13
✎
10:41
|
(14) Да, в регистре появляются эти движения)
|
|||
16
НафНаф
25.01.13
✎
10:41
|
(15) см (13)
|
|||
17
AnisaL
25.01.13
✎
10:41
|
(13) Я пробовала перенести этот запрос в событие ПослеЗаписи, тогда он работает
|
|||
18
НафНаф
25.01.13
✎
10:42
|
(17) не надо ничего переносить, сделай как в (13)
|
|||
19
AnisaL
25.01.13
✎
10:43
|
(18) А что значит создай "свой набор движений", я ведь и так его вручную создаю
|
|||
20
Шапокляк
25.01.13
✎
10:43
|
(0) Вы в транзакции по проведению запускаете транзакцию по записи документа. Вряд ли это хорошая идея. Есть несколько способов реализовать ваши идеи. 1 - вычислить это ваше ссальдо без учета движений документа и прибавить к нему планируемые движения, которые делаются в обработке проведения, и в процедуре ПередЗаписью поменять реквизит в объекте, после чего запустится обработка проведения. 2-использовать подписки для изменения реквизита объекта.
|
|||
21
AnisaL
25.01.13
✎
10:44
|
(18) мне тоже не хочется переносить
|
|||
22
AnisaL
25.01.13
✎
10:47
|
(13) можно про это поподробнее, что-то я недогоняю
|
|||
23
cw014
25.01.13
✎
10:47
|
(19) Вместо:
движение = движения.ОплатаПоСмете.Добавить(); Пиши ДвиженияОплат = РегистрНакопления.ОплатаПоСмете.СоздатьНаборЗаписей(); ДвиженияОплат.Регистратор.Установить(ТвойДокументСсылка); Движение = ДвиженияОплат.Добавить(); Движение.Регистратор = ТвойДокументСсылка; Движение.Период = <период>; Движение.Активность = Истина; |
|||
24
НафНаф
25.01.13
✎
10:48
|
+(23) а в конце не забыть записать
|
|||
25
Reset
25.01.13
✎
10:51
|
Это все ради
смет.Сальдо = ссальдо; смет.Записать(); ? Может использовать Обороты регистра? |
|||
26
Reset
25.01.13
✎
10:53
|
или вовсе пересмотреть стратегию.
Как я понял, этот документ при каждом проведении добавляет себе еще одно движение. Это мне не нравится. |
|||
27
AnisaL
25.01.13
✎
10:53
|
(23) Сделала так, но ошибка
Документ.ПриходныйКассовыйОрдер(1704)}: Поле объекта не обнаружено (Регистратор) ДвиженияОплат.Регистратор.Установить(Смета); |
|||
28
AnisaL
25.01.13
✎
10:56
|
(23) Почему ошибка ??
|
|||
29
nvs
25.01.13
✎
10:56
|
Вот это что за хрень:
запрос.Текст = "Выбрать * из регистрНакопления.ОплатаПоСмете как рег где рег.смета.номер = &номер"; выборка = запрос.Выполнить().Выбрать(); Ссальдо = 0; если выборка.Количество()<>0 тогда пока выборка.Следующий() цикл если выборка.видДвижения = видДвиженияНакопления.Приход тогда ссальдо = ссальдо+выборка.сумма; иначе ссальдо = ссальдо-выборка.сумма; конецЕсли; конецЦикла; Есть виртуальная таблица остатков если что... и за "Ссальдо" отдельный плюс ))) |
|||
30
Reset
25.01.13
✎
10:56
|
Вероятно, эта "Смета" должна быть измерением, а не регистратором, раз по ней требуются остатки и обороты
|
|||
31
Reset
25.01.13
✎
10:57
|
+(30) а приход и расход должны формировать другие документы
|
|||
32
AnisaL
25.01.13
✎
10:57
|
(30) Да, правильно - измерением
|
|||
33
AnisaL
25.01.13
✎
10:58
|
(31) Да, все так
|
|||
34
cw014
25.01.13
✎
10:59
|
(28)
ДвиженияОплат.Отбор.Регистратор.Установить(ТвойДокументСсылка); |
|||
35
Reset
25.01.13
✎
11:00
|
(33) Совсем не понимаю смысла в (0) :(
|
|||
36
nvs
25.01.13
✎
11:00
|
+(29) я бы реквизит у сметы сальдо не хранил а вычислял каждый раз при необходимости (например просто в форме элемента показывал)
|
|||
37
Reset
25.01.13
✎
11:01
|
(33) Зачем в реквизит сметы писать сальдо?
Для этого есть остатки у регистра |
|||
38
Reset
25.01.13
✎
11:02
|
Вот, товарищ nvs тоже не понимает
|
|||
39
Reset
25.01.13
✎
11:03
|
(36) Возможно, с нее требуют в списке документов показывать сальдо ;]
|
|||
40
Reset
25.01.13
✎
11:04
|
хотя даже в этом случае я бы считал "динамически"
|
|||
41
AnisaL
25.01.13
✎
11:07
|
(39) На самом деле так и есть, все это для того чтобы в списке документов видеть сальдо и ИтогПоСмете и соотвественно окрашивать эти Ячейки: если она равны , то зеленые, если нет, то красным
|
|||
42
AnisaL
25.01.13
✎
11:10
|
(40) динамически - это без запроса, так?
|
|||
43
nvs
25.01.13
✎
11:11
|
(41) у табличного поля есть такое событие "При полученииДанных" - вот в нем и можно спокойно вывести тебе нужные данные и покрасить в нужный цвет
|
|||
44
Reset
25.01.13
✎
11:11
|
(42) Как раз запросом к остаткам
|
|||
45
nvs
25.01.13
✎
11:12
|
(42) динамически это значит "в процессе выполнения" как-то так... счас пример тебе подкину
|
|||
46
AnisaL
25.01.13
✎
11:12
|
(44) А сейчас и так запрос (0)
|
|||
47
AnisaL
25.01.13
✎
11:15
|
(43) Да, все так и делается) Проблема в том была, что после проведении ПКО, при открытии этого журнала Смет, оплата не "вставала", приходилось бухгалтеру искать Смету, в нее заходить - нажимать, записать, и только после этого в Журнале поялвялось Сальдо.
|
|||
48
Reset
25.01.13
✎
11:17
|
(46)(47)
Сейчас все совсем не так делается. Идет речь от том, что реквизит в документе не нужен совсем, т.е. все (0) лишнее. В момент окраски нужно получать остатки там принимать решение об окраске |
|||
49
cw014
25.01.13
✎
11:18
|
Последний вопрос... А второй запрос когда выполняется? В той же процедуре проведения? Или где-то еще?
|
|||
50
AnisaL
25.01.13
✎
11:18
|
(48) То есть в процедуре ПриПолученииДанных? Там делать Запрос к регистру ОплатаПоСмете?
|
|||
51
Reset
25.01.13
✎
11:18
|
а скорее всего и вовсе дело в
"оплата не "вставала", приходилось бухгалтеру искать Смету, в нее заходить - нажимать, записать" Т.е. ты сейчас делаешь костыль вместо исправления ошибки. |
|||
52
shamannk
25.01.13
✎
11:18
|
(0) Позови взрослых и поставь чеку на место.
|
|||
53
nvs
25.01.13
✎
11:18
|
Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
Если ОформленияСтрок.Количество() = 1 Тогда тСтатус = РегистрыСведений.СтатусДокумента.Получить(Новый Структура("Документ", ОформленияСтрок[0].ДанныеСтроки.Ссылка)).Статус; ОформленияСтрок[0].Ячейки.Статус.УстановитьТекст(тСтатус); ОформленияСтрок[0].Ячейки.Оплачено.УстановитьТекст(Формат(оснПолучитьСуммуОплаченногоПоСчету(ОформленияСтрок[0].ДанныеСтроки.Ссылка),"ЧЦ=15; ЧДЦ=2")); СуммаПоСчету = ?(ОформленияСтрок[0].ДанныеСтроки.Ссылка.СуммаВключаетНДС, ОформленияСтрок[0].ДанныеСтроки.Ссылка.Сумма, ОформленияСтрок[0].ДанныеСтроки.Ссылка.Сумма + ОформленияСтрок[0].ДанныеСтроки.Ссылка.СуммаНДС); ОформленияСтрок[0].Ячейки.СуммаПоСчету.УстановитьТекст(Формат(СуммаПоСчету,"ЧЦ=15; ЧДЦ=2")); ОформленияСтрок[0].ЦветФона = УстановитьЦветЗаписи(ОформленияСтрок[0].ДанныеСтроки.Ссылка, тСтатус); Иначе Массив = Новый Массив; МассивПросроченных = ПолучитьСписокПросроченных(); Для Каждого Элемнт Из ОформленияСтрок Цикл Массив.Добавить(Элемнт.ДанныеСтроки.Ссылка); Результат = МассивПросроченных.Найти(Элемнт.ДанныеСтроки.Ссылка); Если Результат <> Неопределено Тогда бпИнициализироватьБП("ЗаписьСчета",Элемнт.ДанныеСтроки.Ссылка); КонецЕсли; КонецЦикла; фЗапрос = Новый Запрос; фЗапрос.Текст = "ВЫБРАТЬ | СтатусДокумента.Статус, | СтатусДокумента.Документ, | ВЫБОР | КОГДА СтатусДокумента.Документ.СуммаВключаетНДС | ТОГДА СтатусДокумента.Документ.Сумма | ИНАЧЕ СтатусДокумента.Документ.Сумма + СтатусДокумента.Документ.СуммаНДС | КОНЕЦ КАК СуммаПоСчету, | ЕСТЬNULL(ПотребностьОплатыОбороты.СуммаВключаетНДСРасход, 0) КАК Оплачено |ИЗ | РегистрСведений.СтатусДокумента КАК СтатусДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПотребностьОплаты.Обороты КАК ПотребностьОплатыОбороты | ПО СтатусДокумента.Документ = ПотребностьОплатыОбороты.Счет |ГДЕ | СтатусДокумента.Документ В(&Документы)"; фЗапрос.УстановитьПараметр("Документы", Массив); Выборка = фЗапрос.Выполнить().Выбрать(); Для Каждого Элемнт Из ОформленияСтрок Цикл Выборка.Сбросить(); Если Выборка.НайтиСледующий(Новый Структура("Документ", Элемнт.ДанныеСтроки.Ссылка)) Тогда Элемнт.Ячейки.Статус.УстановитьТекст(Выборка.Статус); Элемнт.Ячейки.СуммаПоСчету.УстановитьТекст(Формат(Выборка.СуммаПоСчету,"ЧЦ=15; ЧДЦ=2")); Элемнт.Ячейки.Оплачено.УстановитьТекст(Формат(Выборка.Оплачено,"ЧЦ=15; ЧДЦ=2")); Элемнт.ЦветФона = УстановитьЦветЗаписи(Элемнт.ДанныеСтроки.Ссылка, Выборка.Статус); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
54
Reset
25.01.13
✎
11:20
|
(50) Да, для получения этго самого "сальдо".
|
|||
55
AnisaL
25.01.13
✎
11:20
|
ПКО = ЭтотОбъект.Ссылка;
ДвиженияОплат = РегистрыНакопления.ОплатаПоСмете.СоздатьНаборЗаписей(); ДвиженияОплат.Отбор.Регистратор.Установить(Ссылка); Движение = ДвиженияОплат.Добавить(); Движение.Регистратор = ПКО; Движение.Смета = смета; Движение.ПризнакРасчета = Признак; Движение.Период = дата; Движение.Сумма = СуммаДокумента; Движение.Активность = Истина; Вот такой код не сработал, даже в Регистр нету записи |
|||
56
Reset
25.01.13
✎
11:21
|
(55) Этот код вообще к деле не относится
|
|||
57
AnisaL
25.01.13
✎
11:21
|
(54) Но это же циклическая процедура, если каждый раз в ней делать запрос, то медленнее будет работать
|
|||
58
AnisaL
25.01.13
✎
11:22
|
(56) Я его по (23) делала
|
|||
59
Reset
25.01.13
✎
11:23
|
+(56)
к делу* Речь о Остатках "ВЫБРАТЬ | ЗаказыПокупателейОстатки.СуммаОстаток |ИЗ | РегистрНакопления.ЗаказыПокупателей.Остатки(, ЗаказПокупателя = &Заказ) КАК ЗаказыПокупателейОстатки" |
|||
60
AnisaL
25.01.13
✎
11:23
|
(51) А ошибка то в чем?
|
|||
61
Reset
25.01.13
✎
11:24
|
(60)
"приходилось бухгалтеру искать Смету, в нее заходить - нажимать, записать" Это - ошибка |
|||
62
Reset
25.01.13
✎
11:24
|
Похоже, у вас очень своеобразная конфигурация
|
|||
63
AnisaL
25.01.13
✎
11:25
|
(49) Да, в этой же процедуре проведения, прямо после этого ДВижения
|
|||
64
AnisaL
25.01.13
✎
11:27
|
(62) Да, она у нас очень своебразная) написана с нуля, и переписана
|
|||
65
AnisaL
25.01.13
✎
11:28
|
(61) Так как эту ошибку исправить?
|
|||
66
AnisaL
25.01.13
✎
11:30
|
(59) Такой запрос в процедуру ПриПолучении данных запихнуть что ли
|
|||
67
AnisaL
25.01.13
✎
11:31
|
(53) Попробую такое сделать
|
|||
68
nvs
25.01.13
✎
11:37
|
Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
Запрос = Новый Запрос; Запрос.Текст = "Выбрать т.суммаОстаток | ИЗ регистрНакопления.ОплатаПоСмете.Остатки(, смета в (&Сметы))"; Сметы = Новый Массив; Для Каждого эл Из ОформленияСтрок Цикл Сметы.Добавить(эл.ДанныеСтроки.Ссылка); КонецЦикла; Запрос.УстановитьПараметр("Сметы", Сметы); Выборка = Запрос.Выполнить().Выбрать(); Для Каждого эл Из ОформленияСтрок Цикл Выборка.Сбросить(); Если Выборка.НайтиСледующий(Новый Структура("Документ", эл.ДанныеСтроки.Ссылка)) Тогда эл.Ячейки.Сальдо.УстановитьТекст(Формат(Выборка.суммаОстаток,"ЧЦ=15; ЧДЦ=2")); //тут уж как вам нравится...условия и любой цвет эл.ЦветФона = WebЦвета.Лимонный; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
69
AnisaL
25.01.13
✎
11:43
|
(68) спасибо), попробую
|
|||
70
nvs
25.01.13
✎
11:55
|
(69) примерно так... могут быть ошибки писал без отладчикаи не знаю как у вас реквизиты, объекты, колонки и т.д называются
|
|||
71
AnisaL
25.01.13
✎
12:04
|
(70) ну да, это понятно
|
|||
72
AnisaL
25.01.13
✎
12:35
|
(70) что-то не получилось, в этой строке какой должен быть Документ ?
Если Выборка.НайтиСледующий(Новый Структура("Документ", эл.ДанныеСтроки.Ссылка)) |
|||
73
AnisaL
25.01.13
✎
12:37
|
у меня пишет "Поле не найдено" Документ
|
|||
74
nvs
25.01.13
✎
12:39
|
Запрос поправьтье:
Запрос.Текст = "Выбрать | т.Смета КАК Документ, | т.суммаОстаток | ИЗ регистрНакопления.ОплатаПоСмете.Остатки(, смета в (&Сметы)) |
|||
75
AnisaL
25.01.13
✎
12:48
|
(74) спасибо) поправлю
|
|||
76
AnisaL
25.01.13
✎
12:59
|
(74) Еще раз благодарю )) Все получилось). Всем откликнувшимся отдельное спасибо:)))
|
|||
77
AnisaL
25.01.13
✎
13:09
|
(74) А вот делаю отмену проведения ПКО, то опять в Журнале сумма остается, хотя сальдо должно быть 0
|
|||
78
AnisaL
25.01.13
✎
13:16
|
(77) ой, ошиблась я, все четко работает ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |