Имя: Пароль:
1C
 
как сделать что-бы выполнялась суммирование при загрузки в 1с предприятие 8.3
0 сергей789
 
01.02.19
14:42
как сделать что-бы выполнялась суммирование при загрузки в 1с предприятие 8.3  ?

Данная обработка работает некорректно, при вводе нового товара из excel файла в 1с предприятие 8.3 создаётся новый товар с тем же название.
В базе был товар onyх с артикулом 5-1
загружаем еще одну позицию onyх с артикулом 5-1
получаем два товара раздельно с одим артикулом
как сделать что-бы выполнялось суммирование?
что-бы после загрузки было два товара вместе а не раздельно.

полный текст обработки
https://yadi.sk/i/ElPTXFFlA05M-g

https://yadi.sk/d/DCoitpQO-bw_jg


&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    ПодключитьРасширениеРаботыСФайлами();    
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Фильтр = "Файл Excel(*.xls)|*.xls";
    ДиалогОткрытияФайла.Фильтр                = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор    = Ложь;
    ДиалогОткрытияФайла.Заголовок             = "Выберите файл";
    
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
    Иначе
        Возврат;
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
    
    ТектовыеДанные.Очистить();
    
    Если Не ЗначениеЗаполнено(ПутьКФайлу) тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не указан путь к файлу!";
        Сообщение.Поле = "ПутьКФайлу";
        Сообщение.УстановитьДанные(ЭтаФорма);
        Сообщение.Сообщить();
        Возврат;
    КонецЕсли;    
    
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(ПутьКФайлу);
        ExcelЛист = Excel.Sheets(1);
    Исключение
        Сообщить("Не удалось запустить приложение MS Excel!");
        Возврат;
    КонецПопытки;
    
    ТекущаяСтрока = 2;
    
    ТекущееЗначение = СокрЛП(ExcelЛист.Cells(ТекущаяСтрока, 2).Value);
    
    Пока ЗначениеЗаполнено(ТекущееЗначение) Цикл
        
        Состояние("Обработка строки: " + Строка(ТекущаяСтрока-1));
                
        Элементы.ТектовыеДанные.ДобавитьСтроку();
        Элементы.ТектовыеДанные.ТекущиеДанные.НомерСТрокиДокумента         = ТекущаяСтрока;
        Элементы.ТектовыеДанные.ТекущиеДанные.Артикул                     = СокрЛП

(ExcelЛист.Cells(ТекущаяСтрока, 2).Value);
        Элементы.ТектовыеДанные.ТекущиеДанные.Наименование                 = СокрЛП

(ExcelЛист.Cells(ТекущаяСтрока, 1).Value);
        Элементы.ТектовыеДанные.ТекущиеДанные.Производитель                 = СокрЛП

(ExcelЛист.Cells(ТекущаяСтрока, 3).Value);
        Элементы.ТектовыеДанные.ТекущиеДанные.Количество                 = СокрЛП

(ExcelЛист.Cells(ТекущаяСтрока, 5).Value);
        Элементы.ТектовыеДанные.ТекущиеДанные.Цена                         = СокрЛП

(ExcelЛист.Cells(ТекущаяСтрока, 4).Value);
        Элементы.ТектовыеДанные.ТекущиеДанные.Сумма                         = СокрЛП

(ExcelЛист.Cells(ТекущаяСтрока, 6).Value);
        
        ТекущееЗначение = СокрЛП(ExcelЛист.Cells(ТекущаяСтрока, 2).Value);
        ТекущаяСтрока    = ТекущаяСтрока + 1;
        
    КонецЦикла;
    
    Excel.Quit();
    
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
    
    Отказ = Ложь;
    ПроверитьЗаполнениеНастроек(Отказ);
    
    Если Отказ тогда
        Возврат;
    КонецЕсли;    
    
    ПроверитьЗаполнениеТЧ();
    
    Ссылка = ЗагрузитьНаСервере();
    
    Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") тогда
        ПараметрыФормы = Новый Структура("Ключ", Ссылка);
        ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.ФормаОбъекта", ПараметрыФормы);
    КонецЕсли;    
    
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьЗаполнениеНастроек(Отказ)
    
    Если ТектовыеДанные.Количество() = 0 тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Нет данных для загрузки!";
        Сообщение.Поле = "ТекстовыеДанные";
        Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ТектовыеДанные);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(ХарактеристикаПроизводитель) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не указано свойство производитель!";
        Сообщение.Поле = "ХарактеристикаПроизводитель";
        Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ХарактеристикаПроизводитель);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(ВидНоменклатуры) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не указан вид номенклатуры!";
        Сообщение.Поле = "ВидНоменклатуры";
        Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ВидНоменклатуры);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(ГруппаДоступаКонтрагентов) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не указана группа доступа контрагентов!";
        Сообщение.Поле = "ГруппаДоступаКонтрагентов";
        Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ГруппаДоступаКонтрагентов);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(Склад) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не указан склад!";
        Сообщение.Поле = "Склад";
        Сообщение.УстановитьДанные(ЭтаФорма.Элементы.Склад);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(ГруппаНоменклатуры) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не указана группа номенклатуры!";
        Сообщение.Поле = "ГруппаНоменклатуры";
        Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ГруппаНоменклатуры);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;
    
КонецПроцедуры    

&НаКлиенте
Процедура ПроверитьЗаполнениеТЧ()
    
    Ин = 0;
    
    Для Каждого СтрокаТЧ Из ТектовыеДанные Цикл
        
        НачалоСообщенияПоля = "ТектовыеДанные[" + Строка(Ин) + "].";
        
        Если Не ЗначениеЗаполнено(СтрокаТЧ.Артикул) Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "В строке " + Строка(СтрокаТЧ.НомерСТрокиДокумента) + " не указан

артикул!";
            Сообщение.Поле = НачалоСообщенияПоля + "Артикул";
            Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ТектовыеДанные);
            Сообщение.Сообщить();
            СтрокаТЧ.Ошибка = Истина;
        КонецЕсли;
        
        Если Не ЗначениеЗаполнено(СтрокаТЧ.Наименование) Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "В строке " + Строка(СтрокаТЧ.НомерСТрокиДокумента) + " не указано

наименование!";
            Сообщение.Поле = НачалоСообщенияПоля + "Наименование";
            Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ТектовыеДанные);
            Сообщение.Сообщить();
            СтрокаТЧ.Ошибка = Истина;
        КонецЕсли;
        
        Если Не ЗначениеЗаполнено(СтрокаТЧ.Количество) Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "В строке " + Строка(СтрокаТЧ.НомерСТрокиДокумента) + " не указано

Количество!";
            Сообщение.Поле = НачалоСообщенияПоля + "Количество";
            Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ТектовыеДанные);
            Сообщение.Сообщить();
            СтрокаТЧ.Ошибка = Истина;
        КонецЕсли;
        
        Если Не ЗначениеЗаполнено(СтрокаТЧ.Цена) Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "В строке " + Строка(СтрокаТЧ.НомерСТрокиДокумента) + " не указана

цена!";
            Сообщение.Поле = НачалоСообщенияПоля + "Цена";
            Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ТектовыеДанные);
            Сообщение.Сообщить();
            СтрокаТЧ.Ошибка = Истина;
        КонецЕсли;

        Если Не ЗначениеЗаполнено(СтрокаТЧ.Сумма) Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "В строке " + Строка(СтрокаТЧ.НомерСТрокиДокумента) + " не указана

сумма!";
            Сообщение.Поле = НачалоСообщенияПоля + "Сумма";
            Сообщение.УстановитьДанные(ЭтаФорма.Элементы.ТектовыеДанные);
            Сообщение.Сообщить();
            СтрокаТЧ.Ошибка = Истина;
        КонецЕсли;
        
        
        Ин = Ин + 1;
        
    КонецЦикла;    
    
КонецПроцедуры    

&НаСервере
Функция ЗагрузитьНаСервере()
    
    Перем СтруктураЗаполненияШапки;
    Перем ТаблицаЗагрузки;
    
    Отказ = Ложь;
    
    ПодготовитьСтруктуруЗаполненияШапки(Отказ, СтруктураЗаполненияШапки);
    Если Отказ Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ПодготовитьТаблицуЗагрузки(ТаблицаЗагрузки);
    
    НовыйПоступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    НовыйПоступление.Дата = ТекущаяДата();
    
    НовыйПоступление.Заполнить(Неопределено);
    ЗаполнитьЗначенияСвойств(НовыйПоступление, СтруктураЗаполненияШапки);
    
    НовыйПоступление.Товары.Загрузить(ТаблицаЗагрузки);
    
    КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
    
    СтруктураДействий = Новый Структура;
    ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, НовыйПоступление);
    
    Для каждого СтрокаДокмуента из НовыйПоступление.Товары Цикл
    
        ТекущаяСтрокаСтруктура = ПолучитьТекущуюСтрокуСтруктурой(СтрокаДокмуента, СтруктураДействий);
        
        ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ(ТекущаяСтрокаСтруктура, СтруктураДействий,

КэшированныеЗначения);
        
        ЗаполнитьЗначенияСвойств(СтрокаДокмуента, ТекущаяСтрокаСтруктура);
        
    КонецЦикла;
    
    НовыйПоступление.Записать(РежимЗаписиДокумента.Запись);
    
    Возврат НовыйПоступление.Ссылка;
    
КонецФункции

&НаСервере
ПРоцедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, Объект)
    
    СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ

(Объект);
    СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
    СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
    СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
    СтруктураДействий.Вставить("ПересчитатьСумму");
    СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
    //СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
    СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
    СтруктураДействий.Вставить("ПересчитатьСуммуСверхЗаказа", Новый Структура("РеализацияПоступлениеПоЗаказу,

ТребуетсяЗалогЗаТару",
        Объект.ПоступлениеПоЗаказам, Объект.ТребуетсяЗалогЗаТару));
    
КонецПроцедуры    

&НаСервере
Функция ПолучитьНоменклатуру(СтрокаТекст)
    
    Запрос = Новый Запрос;
    Артикул = СтрокаТекст.Артикул;
    Наименование = СтрокаТекст.Наименование;
    

        
        РодительСсылка = ГруппаНоменклатуры;
        
        // Производитель
        ТекстПроизводитель = СокрЛП(СтрокаТекст.Производитель);
        Если ЗначениеЗаполнено(ТекстПроизводитель) тогда
            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("Наименование",    ТекстПроизводитель);
            Запрос.УстановитьПараметр("Владелец",         ХарактеристикаПроизводитель);
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЗначенияСвойствОбъектов.Ссылка
                           |ИЗ
                           |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                           |ГДЕ
                           |    ЗначенияСвойствОбъектов.Наименование = &Наименование
                           |    И ЗначенияСвойствОбъектов.Владелец = &Владелец";
            
            ВыборкаПроизводитель = Запрос.Выполнить().Выбрать();
            Если ВыборкаПроизводитель.Следующий() тогда
                ПроизводительСсылка = ВыборкаПроизводитель.Ссылка;
            Иначе
                ПроизводительОбъект = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
                ПроизводительОбъект.Владелец = ХарактеристикаПроизводитель;
                ПроизводительОбъект.Наименование = ТекстПроизводитель;
                Попытка
                    ПроизводительОбъект.Записать();
                Исключение
                    Сообщить(ОписаниеОшибки());
                КонецПопытки;    
                ПроизводительСсылка = ПроизводительОбъект.Ссылка;
            КонецЕсли;
        Иначе
            ПроизводительСсылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
        КонецЕсли;    
            
        НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
        НоменклатураОбъект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
        НоменклатураОбъект.ВидНоменклатуры = ВидНоменклатуры;
        НоменклатураОбъект.Качество = Перечисления.ГрадацииКачества.Новый;
        НоменклатураОбъект.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
        
        ЗаполнитьЗначенияСвойств(НоменклатураОбъект, ВидНоменклатуры, , "Ссылка, Владелец,

ПометкаУдаления, ВерсияДанных, Предопределенный, ЭтоГруппа, Родитель, Описание, Наименование, Код,

ИмяПредопределенныхДанных");
        
        Если ИспользоватьУпаковки тогда
            НоменклатураОбъект.ИспользоватьУпаковки = ИспользоватьУпаковки;
            НоменклатураОбъект.НаборУпаковок = НаборУпаковок;
            НоменклатураОбъект.ЕдиницаИзмерения = НаборУпаковок.ЕдиницаИзмерения;
        КонецЕсли;    
        
        ГруппаДоступаНоменклатурыДляКонтроля      = ВидНоменклатуры.ГруппаДоступа;
        ШаблонНаименованияДляПечати               =

ВидНоменклатуры.ШаблонНаименованияДляПечатиНоменклатуры;
        ШаблонРабочегоНаименования                =

ВидНоменклатуры.ШаблонРабочегоНаименованияНоменклатуры;
        ЗапретРедактированияНаименованияДляПечати =

ВидНоменклатуры.ЗапретРедактированияНаименованияНоменклатурыДляПечати;
        ЗапретРедактированияРабочегоНаименования  =

ВидНоменклатуры.ЗапретРедактированияРабочегоНаименованияНоменклатуры;
        НаборСвойств                              = ВидНоменклатуры.НаборСвойств;
        ИспользоватьХарактеристики                = ВидНоменклатуры.ИспользоватьХарактеристики;
        ЭтоНабор                                  = Ложь;
        ВидСодержитДрагоценныеМатериалы           = Ложь;
        
        НоменклатураОбъект.Наименование = Наименование;
        НоменклатураОбъект.НаименованиеПолное = Наименование;
        НоменклатураОбъект.Артикул = Артикул;
        НоменклатураОбъект.Родитель = РодительСсылка;
        
        ЗаписьПроизводитель = НоменклатураОбъект.ДополнительныеРеквизиты.Добавить();
        ЗаписьПроизводитель.Значение = ПроизводительСсылка;
        ЗаписьПроизводитель.Свойство = ХарактеристикаПроизводитель;
        
        Попытка
            НоменклатураОбъект.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;    
                    
    КонецЕсли;    
    
    Возврат НоменклатураСсылка;
    
КонецФункции

&НаСервере
Процедура ПодготовитьТаблицуЗагрузки(ТаблицаЗагрузки)
    
    ТаблицаЗагрузки = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка().Товары.ВыгрузитьКолонки();
    
    ТаблицаСвойств = Новый ТаблицаЗначений;
    ТаблицаСвойств.Колонки.Добавить("Свойство", Новый ОписаниеТипов

("ПланвидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
    ТаблицаСвойств.Колонки.Добавить("Значение");//, Новый ОписаниеТипов

("СправочникСсылка.ЗначенияСвойствОбъектов"));
    
    Ин = 0;
    
    Для Каждого СтрокаТекст из ТектовыеДанные Цикл
        
        Если СтрокаТекст.Ошибка тогда
            Продолжить;
        КонецЕсли;    
        
        Номенклатура     = ПолучитьНоменклатуру(СтрокаТекст);
        
        Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда
            Продолжить;
        КонецЕсли;    
        
        СтрокаТаблицы = ТаблицаЗагрузки.Добавить();
        СтрокаТаблицы.Номенклатура = Номенклатура;
        СтрокаТаблицы.Цена = СтрокаТекст.Цена;
        СтрокаТаблицы.КоличествоУпаковок = СтрокаТекст.Количество;
        СтрокаТаблицы.Сумма = СтрокаТекст.Сумма;
        СтрокаТаблицы.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
        СтрокаТаблицы.СуммаНДС = 0;
        СтрокаТаблицы.НомерСтрокиДокументаПоставщика = СтрокаТекст.НомерСтрокиДокумента;
        СтрокаТаблицы.Склад = Склад;
        
    КонецЦикла;    
    
КонецПроцедуры    

&НаСервере
Процедура ПодготовитьСтруктуруЗаполненияШапки(Отказ, СтруктураЗаполненияШапки)
    
    СтруктураЗаполненияШапки = Новый Структура;
    
    СтруктураЗаполненияШапки.Вставить("Партнер", Партнер);
    СтруктураЗаполненияШапки.Вставить("Контрагент", Контрагент);
    СтруктураЗаполненияШапки.Вставить("Соглашение", Соглашение);
    
    СтруктураЗаполненияШапки.Вставить("Склад", Склад);
    
КонецПроцедуры    

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    
    СохранитьНастройки();
    
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройки()

    КлючНастроек = "Обработка.ЗагрузкаИзEXCEL";
    Настройки = Новый Соответствие;
    
    Настройки.Вставить("ВидНоменклатуры", ВидНоменклатуры);
    Настройки.Вставить("Контрагент", Контрагент);
    Настройки.Вставить("Партнер", Партнер);
    Настройки.Вставить("Соглашение", Соглашение);
    Настройки.Вставить("ХарактеристикаПроизводитель", ХарактеристикаПроизводитель);
    Настройки.Вставить("ГруппаДоступаКонтрагентов", ГруппаДоступаКонтрагентов);
    Настройки.Вставить("Склад", Склад);
    Настройки.Вставить("ИспользоватьУпаковки", ИспользоватьУпаковки);
    Настройки.Вставить("НаборУпаковок", НаборУпаковок);
    
    ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ЗагрузкаИзEXCEL", КлючНастроек, Настройки);

КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ВосстановитьНастройки();
    
КонецПроцедуры

&НаСервере
Процедура ВосстановитьНастройки()
    
    КлючНастроек = "Обработка.ЗагрузкаИзEXCEL";
    
    ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ЗагрузкаИзEXCEL",

КлючНастроек);
    
    Если ТипЗнч(ЗначениеНастроек) = Тип("Соответствие") Тогда
        
        ВидНоменклатуры             = ЗначениеНастроек.Получить("ВидНоменклатуры");
        Попытка
            Партнер    = ЗначениеНастроек.Получить("Партнер");
            Контрагент = ЗначениеНастроек.Получить("Контрагент");
            Соглашение = ЗначениеНастроек.Получить("Соглашение");
        Исключение КонецПопытки;    
        ХарактеристикаПроизводитель    = ЗначениеНастроек.Получить("ХарактеристикаПроизводитель");
        ГруппаДоступаКонтрагентов   = ЗначениеНастроек.Получить("ГруппаДоступаКонтрагентов");
        Склад                        = ЗначениеНастроек.Получить("Склад");
        ИспользоватьУпаковки        = ЗначениеНастроек.Получить("ИспользоватьУпаковки");
        НаборУпаковок                = ЗначениеНастроек.Получить("НаборУпаковок");
        
    КонецЕсли;    
    
КонецПроцедуры

&НаСервере
Функция ПолучитьТекущуюСтрокуСтруктурой(ТекущаяСтрока, СтруктураДействий)
    Перем СтруктураПараметровДействия;

    СтруктураПолейТЧ = Новый Структура;

    Если СтруктураДействий.Свойство("ПроверитьХарактеристикуПоВладельцу") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("ХарактеристикиИспользуются");
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПроверитьЗаполнитьУпаковкуПоВладельцу") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Упаковка");
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПроверитьСтатьюАналитикуРасходов") Тогда
        СтруктураПолейТЧ.Вставить("ТипНоменклатуры");
        СтруктураПолейТЧ.Вставить("СтатьяРасходов");
        СтруктураПолейТЧ.Вставить("АналитикаРасходов");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПересчитатьКоличествоЕдиниц")
        Или СтруктураДействий.Свойство("ПересчитатьКоличествоУпаковок") Тогда
        СтруктураПолейТЧ.Вставить("Упаковка");
        СтруктураПолейТЧ.Вставить("КоличествоУпаковок", 0);
        СтруктураПолейТЧ.Вставить("Количество", 0);
    КонецЕсли;

    Суффикс = Неопределено;
    
    Если СтруктураДействий.Свойство("ПересчитатьКоличествоЕдиницСуффикс",Суффикс)
        Или СтруктураДействий.Свойство("ПересчитатьКоличествоУпаковокСуффикс",Суффикс) Тогда
        СтруктураПолейТЧ.Вставить("Упаковка");
        СтруктураПолейТЧ.Вставить("КоличествоУпаковок"+Суффикс, 0);
        СтруктураПолейТЧ.Вставить("Количество"+Суффикс    , 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьЦенуПродажи") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("Упаковка");
        СтруктураПолейТЧ.Вставить("ВидЦены");
        СтруктураПолейТЧ.Вставить("Цена", 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьЦенуПродажиПоАссортименту") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("Упаковка");
        СтруктураПолейТЧ.Вставить("ВидЦены");
        СтруктураПолейТЧ.Вставить("Цена", 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьЦенуЗакупки") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("Упаковка");
        СтруктураПолейТЧ.Вставить("УсловиеЦеныПоставщика");
        СтруктураПолейТЧ.Вставить("Цена", 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьНоменклатуруПоНоменклатуреПоставщика") Тогда
        СтруктураПолейТЧ.Вставить("НоменклатураПоставщика");
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("Упаковка");
        СтруктураПолейТЧ.Вставить("ХарактеристикиИспользуются");
    КонецЕсли;

    Если СтруктураДействий.Свойство("ЗаполнитьНоменклатуруПоставщикаПоНоменклатуре") Тогда
        СтруктураПолейТЧ.Вставить("НоменклатураПоставщика");
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("Упаковка");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПроверитьСопоставленнуюНоменклатуруПоставщика") Тогда
        СтруктураПолейТЧ.Вставить("НомерСтроки");
        СтруктураПолейТЧ.Вставить("НоменклатураПоставщика");
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("Упаковка");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьСтавкуНДС")
         ИЛИ СтруктураДействий.Свойство("ЗаполнитьСтавкуНДСПоНоменклатуре") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("СтавкаНДС");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьСтавкуНДСВозвратнойТары") Тогда
        СтруктураПолейТЧ.Вставить("ТипНоменклатуры");
        СтруктураПолейТЧ.Вставить("СтавкаНДС");
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПересчитатьСуммуНДС") Тогда
        СтруктураПолейТЧ.Вставить("Сумма"    , 0);
        СтруктураПолейТЧ.Вставить("СтавкаНДС", 0);
        СтруктураПолейТЧ.Вставить("СуммаНДС" , 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПересчитатьСуммуСНДС") Тогда
        СтруктураПолейТЧ.Вставить("Сумма"    , 0);
        СтруктураПолейТЧ.Вставить("СуммаНДС" , 0);
        СтруктураПолейТЧ.Вставить("СуммаСНДС", 0);
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПересчитатьСуммуБезНДС") Тогда
        СтруктураПолейТЧ.Вставить("Сумма"    , 0);
        СтруктураПолейТЧ.Вставить("СуммаНДС" , 0);
        СтруктураПолейТЧ.Вставить("СуммаБезНДС", 0);
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПересчитатьСуммуРегл") Тогда
        СтруктураПолейТЧ.Вставить("СуммаРегл"    , 0);
        СтруктураПолейТЧ.Вставить("СуммаБезНДС", 0);
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПересчитатьНДСРегл") Тогда
        СтруктураПолейТЧ.Вставить("СуммаНДС" , 0);
        СтруктураПолейТЧ.Вставить("НДСРегл", 0);
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПересчитатьСумму") Тогда
        СтруктураПолейТЧ.Вставить("Сумма"             , 0);
        СтруктураПолейТЧ.Вставить("Цена"              , 0);
        СтруктураПолейТЧ.Вставить(?(ПустаяСтрока

(СтруктураДействий.ПересчитатьСумму),"КоличествоУпаковок",СтруктураДействий.ПересчитатьСумму), 0);
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПересчитатьСуммуСУчетомРучнойСкидки") Тогда
        СтруктураПолейТЧ.Вставить("Сумма"              , 0);
        СтруктураПолейТЧ.Вставить("Количество"         , 0);
        СтруктураПолейТЧ.Вставить("Цена      "         , 0);
        СтруктураПолейТЧ.Вставить("СуммаРучнойСкидки"  , 0);
        СтруктураПолейТЧ.Вставить("ПроцентРучнойСкидки", 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПересчитатьСуммуСУчетомАвтоматическойСкидки") Тогда
        СтруктураПолейТЧ.Вставить("Сумма"                      , 0);
        СтруктураПолейТЧ.Вставить("СуммаАвтоматическойСкидки"  , 0);
        СтруктураПолейТЧ.Вставить("ПроцентАвтоматическойСкидки", 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами") Тогда
        СтруктураПолейТЧ.Вставить("Сумма"                      , 0);
        СтруктураПолейТЧ.Вставить("СуммаБонусныхБалловКСписаниюВВалюте"  , 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПересчитатьЦенуЗаУпаковку") Тогда
        СтруктураПолейТЧ.Вставить("Цена"      , 0);
        СтруктураПолейТЧ.Вставить("Количество", 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПересчитатьЦенуЗаказаЗаУпаковку") Тогда
        СтруктураПолейТЧ.Вставить("ЦенаЗаказа"      , 0);
        СтруктураПолейТЧ.Вставить("Количество", 0);
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПересчитатьСуммуСверхЗаказа") Тогда
        СтруктураПолейТЧ.Вставить("СуммаСНДС" , 0);
        СтруктураПолейТЧ.Вставить("СуммаСверхЗаказа", 0);
        СтруктураПолейТЧ.Вставить("КодСтроки", 1);
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПересчитатьЦенуСкидкуПоСуммеВПродажах") Тогда
        СтруктураПолейТЧ.Вставить("Цена"                       , 0);
        СтруктураПолейТЧ.Вставить("Сумма"                      , 0);
        СтруктураПолейТЧ.Вставить("СуммаАвтоматическойСкидки"  , 0);
        СтруктураПолейТЧ.Вставить("ПроцентАвтоматическойСкидки", 0);
        СтруктураПолейТЧ.Вставить("СуммаРучнойСкидки"          , 0);
        СтруктураПолейТЧ.Вставить("ПроцентРучнойСкидки"        , 0);
        СтруктураПолейТЧ.Вставить("КоличествоУпаковок "        , 0);
        СтруктураПолейТЧ.Вставить("Количество"                 , 0);
        СтруктураПолейТЧ.Вставить("ВидЦены");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПересчитатьЦенуСкидкуПоСуммеВЗакупках") Тогда
        СтруктураПолейТЧ.Вставить("Цена"                       , 0);
        СтруктураПолейТЧ.Вставить("Сумма"                      , 0);
        СтруктураПолейТЧ.Вставить("СуммаРучнойСкидки"          , 0);
        СтруктураПолейТЧ.Вставить("ПроцентРучнойСкидки"        , 0);
        СтруктураПолейТЧ.Вставить("КоличествоУпаковок "        , 0);
        СтруктураПолейТЧ.Вставить("Количество"                  , 0);
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ПересчитатьКоличествоУпаковок") Тогда
        СтруктураПолейТЧ.Вставить("Упаковка");
        СтруктураПолейТЧ.Вставить("КоличествоУпаковокПоДаннымУчета", 0);
        СтруктураПолейТЧ.Вставить("КоличествоПоДаннымУчета"        , 0);
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПроверитьЗаполнитьСклад") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Склад");
        СтруктураПолейТЧ.Вставить("ТипНоменклатуры");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьУсловияПродаж") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("Упаковка");
        СтруктураПолейТЧ.Вставить("Цена", 0);
        СтруктураПолейТЧ.Вставить("ВидЦены");
        СтруктураПолейТЧ.Вставить("СтавкаНДС");
        СтруктураПолейТЧ.Вставить("СрокПоставки");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьУсловияПродажУслуги") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("Цена", 0);
        СтруктураПолейТЧ.Вставить("ВидЦены");
        СтруктураПолейТЧ.Вставить("СтавкаНДС");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьРеквизитыПоНоменклатуре") Тогда
        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("ВестиУчетПоГТД");
        СтруктураПолейТЧ.Вставить("ЭтоУслуга");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьПризнакТипНоменклатуры", СтруктураПараметровДействия)
        И ЗначениеЗаполнено(СтруктураПараметровДействия) Тогда
        
        Для Каждого Поле Из СтруктураПараметровДействия Цикл
            СтруктураПолейТЧ.Вставить(Поле.Ключ);
            СтруктураПолейТЧ.Вставить(Поле.Значение);
        КонецЦикла;
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьПризнакХарактеристикиИспользуются", СтруктураПараметровДействия)
        И ЗначениеЗаполнено(СтруктураПараметровДействия) Тогда
        
        Для Каждого Поле Из СтруктураПараметровДействия Цикл
            СтруктураПолейТЧ.Вставить(Поле.Ключ);
            СтруктураПолейТЧ.Вставить(Поле.Значение);
        КонецЦикла;
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьПризнакАналитикаРасходовОбязательна",

СтруктураПараметровДействия) Тогда
        
        Если Не СтруктураПараметровДействия = Неопределено И СтруктураПараметровДействия.Свойство

("ИмяРеквизита") Тогда
            СтруктураПолейТЧ.Вставить(СтруктураПараметровДействия["ИмяРеквизита"]);
        Иначе
            СтруктураПолейТЧ.Вставить("СтатьяРасходов");
        КонецЕсли;
        СтруктураПолейТЧ.Вставить("АналитикаРасходовОбязательна");
        
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьПризнакВедетсяУчетПоГТД", СтруктураПараметровДействия)
        И ЗначениеЗаполнено(СтруктураПараметровДействия) Тогда
        
        Для Каждого Поле Из СтруктураПараметровДействия Цикл
            СтруктураПолейТЧ.Вставить(Поле.Ключ);
            СтруктураПолейТЧ.Вставить(Поле.Значение);
        КонецЦикла;
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьПризнакЭтоУслуга", СтруктураПараметровДействия)
        И ЗначениеЗаполнено(СтруктураПараметровДействия) Тогда
        
        Для Каждого Поле Из СтруктураПараметровДействия Цикл
            СтруктураПолейТЧ.Вставить(Поле.Ключ);
            СтруктураПолейТЧ.Вставить(Поле.Значение);
        КонецЦикла;
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("УстановитьАктивность") Тогда
        СтруктураПолейТЧ.Вставить("Активность");
        СтруктураПолейТЧ.Вставить("ИндексКартинки");
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьХарактеристикуНекачественногоТовара")
        ИЛИ СтруктураДействий.Свойство("ЗаполнитьУпаковкуНекачественногоТовара") Тогда
        СтруктураПолейТЧ.Вставить("НоменклатураИсходногоКачества");
        СтруктураПолейТЧ.Вставить("ХарактеристикиИспользуются");
    КонецЕсли;

    Если СтруктураДействий.Свойство("ПроверитьЗаполнитьВариантКомплектацииПоВладельцу") Тогда

        СтруктураПолейТЧ.Вставить("Номенклатура");
        СтруктураПолейТЧ.Вставить("Характеристика");
        СтруктураПолейТЧ.Вставить("ВариантКомплектации");
        СтруктураПолейТЧ.Вставить("ХарактеристикиИспользуются");

    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьФлагРасхождение") Тогда

        СтруктураПолейТЧ.Вставить("Расхождение");
        СтруктураПолейТЧ.Вставить("КоличествоУпаковок");
        СтруктураПолейТЧ.Вставить("КоличествоУпаковокФакт");
        
    КонецЕсли;

    Если СтруктураДействий.Свойство("ЗаполнитьФлагИзлишекПорча") Тогда

        СтруктураПолейТЧ.Вставить("ИзлишекПорча");
        
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ЗаполнитьФлагИзлишекПорча") Тогда

        СтруктураПолейТЧ.Вставить("ИзлишекПорча");
        
    КонецЕсли;
    
    Если СтруктураДействий.Свойство("ОчиститьСуммуВзаиморасчетов") Тогда
        
        СтруктураПолейТЧ.Вставить("СуммаВзаиморасчетов");
        
    КонецЕсли;
1 ДенисЧ
 
01.02.19
14:43
Так может, перед добавлением строки поискать существующую?