![]() |
|
Обработка заполнения ТЧ документа Инвентаризация НЗП | ☑ | ||
---|---|---|---|---|
0
Тринадцать
27.01.21
✎
10:17
|
Всем привет! делаю обработку заполнения ТЧ документа Инвентаризация НЗП для проставления сумм НУ, которые рассчитываются на основании суммыБУ по определенной формуле
При заполнении документа добавляет в табличную часть пустые строчки, ошибок не выдает В чем может быть косяк? &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт ОбъектФормы = ВладелецФормы.Объект; ЗаполнитьВДокументеСуммыНУ(ОбъектФормы); КопироватьДанныеФормы(ОбъектФормы,ВладелецФормы.Объект); ВладелецФормы.Прочитать(); КонецПроцедуры &НаСервере Процедура ЗаполнитьВДокументеСуммыНУ(СсылкаНаОбъект) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК НоменклатурнаяГруппа, | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт + ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаНУ, | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК Сумма |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНачало, &ДатаКонец, , , , , ) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.Счет = &Счет | И ХозрасчетныйОстаткиИОбороты.Организация = &Организация | И ХозрасчетныйОстаткиИОбороты.Подразделение = &Подразделение" ; Запрос.УстановитьПараметр ("ДатаНачало",НачалоДня(НачалоМесяца(СсылкаНаОбъект.Дата))); Запрос.УстановитьПараметр ("ДатаКонец", КонецДня(КонецМесяца(СсылкаНаОбъект.Дата))); Запрос.УстановитьПараметр ("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.01")); Запрос.УстановитьПараметр ("Организация",СсылкаНаОбъект.Организация); Запрос.УстановитьПараметр ("Подразделение",СсылкаНаОбъект.ПодразделениеОрганизации); Выборка = Запрос.Выполнить().Выгрузить(); ДокументДляИзменения = СсылкаНаОбъект.Ссылка.ПолучитьОбъект(); ДокументДляИзменения.Состав.Очистить(); Для каждого ТекущаяСтрока из Выборка Цикл НовСтр = ДокументДляИзменения.Состав.Добавить(); ЗаполнитьЗначенияСвойств(НовСтр,Выборка); КонецЦикла; ДокументДляИзменения.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры |
|||
1
Тринадцать
27.01.21
✎
10:44
|
Если пробую так:
Выборка = Запрос.Выполнить().Выбрать(); ДокументДляИзменения = СсылкаНаОбъект.Ссылка.ПолучитьОбъект(); ДокументДляИзменения.Состав.Очистить(); Пока Выборка.Следующий() Цикл ДокументДляИзменения.Состав.НоменклатурнаяГруппа = Выборка.НоменклатурнаяГруппа; ДокументДляИзменения.Состав.Сумма = Выборка.Сумма; ДокументДляИзменения.Состав.СуммаНУ = Выборка.СуммаНУ; КонецЦикла; То выдает ошибку: Поле объекта не обнаружено (НоменклатурнаяГруппа) Получается не правильно обращаюсь к табличной части документа? |
|||
2
ДенисЧ
27.01.21
✎
11:33
|
Отладчик, разумеется, молчит, как Павка Корчагин?
|
|||
3
Тринадцать
27.01.21
✎
11:43
|
Если действовать первым способом, таблицу значений выдает.
Видимо неправильно подставляю ее в ТЧ документа ? |
|||
4
Bad_Aleks
27.01.21
✎
11:57
|
(0) НовСтр = ДокументДляИзменения.Состав.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,Выборка); Нужно заполнять не Выборкой, а строкой из выборки. Цикл ты же для этого написал |
|||
5
Serg_1960
27.01.21
✎
11:59
|
(1)
Пока Выборка.Следующий() Цикл НовСтр = ДокументДляИзменения.Состав.Добавить(); НовСтр.НоменклатурнаяГруппа =... |
|||
6
Тринадцать
27.01.21
✎
12:05
|
(4) ну конечно!!!
(5) получилось!! Спасибо вам огромное!!! |
|||
7
Тринадцать
28.01.21
✎
16:23
|
Оказалось, я немного не правильно поняла задачу заказчика - надо было использовать данные из документа, а я брала уже из регистра, при условии, что док уже проведен. В общем, бух в ручную заполняет НомГруппы и остаток по Бух, а мне нужно рассчитать обработкой суммы НУ и подставить в документ. Перезаполнять не нужно, как я это делала
Не могу сообразить, как правильно сделать обход ТЧ документа. Сейчас обходит каждую строчку по количеству выборки и записывает последнее значение. Для полноты картины кидаю весь текст процедуры: Процедура ЗаполнитьВДокументеСуммыНУ(СсылкаНаОбъект) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт, | ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт, | ХозрасчетныйОстаткиИОбороты.СуммаНУНачальныйОстатокДт КАК СуммаНУНачальныйОстатокДт, | ХозрасчетныйОстаткиИОбороты.СуммаНУОборотДт КАК СуммаНУОборотДт, | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт, | ИнвентаризацияНЗПСостав.Сумма КАК СуммаНЗПБУ, | ИнвентаризацияНЗПСостав.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа |ИЗ | Документ.ИнвентаризацияНЗП.Состав КАК ИнвентаризацияНЗПСостав | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНачало, &ДатаКонец, , , , , ) КАК ХозрасчетныйОстаткиИОбороты | ПО ИнвентаризацияНЗПСостав.НоменклатурнаяГруппа = ХозрасчетныйОстаткиИОбороты.Субконто1 |ГДЕ | ХозрасчетныйОстаткиИОбороты.Счет = &Счет | И ХозрасчетныйОстаткиИОбороты.Организация = &Организация | И ХозрасчетныйОстаткиИОбороты.Подразделение = &Подразделение | И ИнвентаризацияНЗПСостав.Ссылка = &Ссылка" ; Запрос.УстановитьПараметр ("ДатаНачало",НачалоДня(НачалоМесяца(СсылкаНаОбъект.Дата))); Запрос.УстановитьПараметр ("ДатаКонец", КонецДня(КонецМесяца(СсылкаНаОбъект.Дата))); Запрос.УстановитьПараметр ("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.01")); Запрос.УстановитьПараметр ("Организация",СсылкаНаОбъект.Организация); Запрос.УстановитьПараметр ("Подразделение",СсылкаНаОбъект.ПодразделениеОрганизации); Запрос.УстановитьПараметр ("Ссылка",СсылкаНаОбъект.Ссылка); Выборка = Запрос.Выполнить().Выбрать(); ДокументДляИзменения = СсылкаНаОбъект.Ссылка.ПолучитьОбъект(); Пока Выборка.Следующий() Цикл Для каждого НовСтр из ДокументДляИзменения.Состав Цикл Приход20 = Выборка.СуммаНачальныйОстатокДт + Выборка.СуммаОборотДт; Расход20 = Приход20 - Выборка.СуммаНЗПБУ; КоэффициентСписания = Окр(Расход20/Приход20, 2); Приход20НУ = Выборка.СуммаНУНачальныйОстатокДт + Выборка.СуммаНУОборотДт; Расход20НУ = Приход20НУ*КоэффициентСписания; СуммаНЗПНУ = Окр(Приход20НУ - Расход20НУ, 2); НовСтр.СуммаНУ = СуммаНЗПНУ; КонецЦикла; КонецЦикла; ДокументДляИзменения.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры |
|||
8
Serg_1960
29.01.21
✎
11:42
|
(7) Вам нужен, как минимум, алгоритм установления соответствия записей выборки и записей ТЧ документа вместо второго цикла. Всё, что Вы написали для пост-расчета НовСтр.СуммаНУ - можно исполнить в запросе. А если при этом в запросе написать типа "ВЫБРАТЬ ИнвентаризацияНЗПСостав.*..." (выбрать все записи и поля ТЧ документа, дополнив их расчетом суммы НУ) - то можно просто перезаполнить ТЧ документа (загрузить в ТЧ результат запроса).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |