Имя: Пароль:
1C
1С v8
Обработка заполнения ТЧ документа Инвентаризация НЗП
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) Вам нужен, как минимум, алгоритм установления соответствия записей выборки и записей ТЧ документа вместо второго цикла. Всё, что Вы написали для пост-расчета НовСтр.СуммаНУ - можно исполнить в запросе. А если при этом в запросе написать типа "ВЫБРАТЬ ИнвентаризацияНЗПСостав.*..." (выбрать все записи и поля ТЧ документа, дополнив их расчетом суммы НУ) - то можно просто перезаполнить ТЧ документа (загрузить в ТЧ результат запроса).
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.