Имя: Пароль:
1C
1С v8
УТ 11 программное заполнение заказа клиента
,
0 mxs089
 
28.02.17
12:07
подскажите, как нужно заполнять табличную часть документа?

сейчас использую метод
ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ

НО, в некоторых действиях используется метод Свойство()
Интерфейс (управляемый)/Данные формы/ДанныеФормыЭлементКоллекции/Методы/Свойство

у меня нет формы, и поэтому строку превращаю в структуру...

следующий момент, я вываливаюсь с ошибками типа попытка установки значения в несуществующее поле, т.е. на форме документа определены какие то вспомогательные поля, которых нет в метаданных, я могу конечно наловить ошибок и добавить вручную недостающие поля, или переписать их с формы, но может есть какой то другой, типовой способ?
1 polosov
 
28.02.17
12:42
(0) Ты создаешь док пакетно или форму используешь?
2 mxs089
 
28.02.17
13:06
(1) программно, на сервере
3 Defender aka LINN
 
28.02.17
13:10
(0) Это в каких же действиях используется "Свойство()"?
4 polosov
 
28.02.17
13:15
(2)
    Для Каждого СтрокаТЧ ИЗ ПодготовленныеДанные.МассивСтрокТоваров Цикл
        НоваяСтрока = НовыйДок.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ); //Заполняется Номенклатура, Количество, КоличествоУпаковок
        
    КонецЦикла;
    
    УсловияПродажПоУмолчанию = ПродажиСервер.ПолучитьУсловияПродажПоУмолчанию(
            ПодготовленныеДанные.Шапка.Партнер,
            Новый Структура("УчитыватьГруппыСкладов, ВыбранноеСоглашение, ПустаяСсылкаДокумента",
            Истина,
            НовыйДок.Соглашение,
            Документы.ЗаказКлиента.ПустаяСсылка()));
    
    НовыйДок.НалогообложениеНДС = ЗначениеНастроекПовтИсп.ПолучитьНалогообложениеНДС(НовыйДок.Организация, НовыйДок.Склад, НовыйДок.Дата);
        
    Если УсловияПродажПоУмолчанию <> Неопределено Тогда
        
        Если НЕ ИспользоватьСоглашенияСКлиентами ИЛИ
            (НовыйДок.Соглашение <> УсловияПродажПоУмолчанию.Соглашение И ЗначениеЗаполнено(УсловияПродажПоУмолчанию.Соглашение)) Тогда
        
            НовыйДок.Соглашение = УсловияПродажПоУмолчанию.Соглашение;
            НовыйДок.ЗаполнитьУсловияПродаж(УсловияПродажПоУмолчанию);
            
            Если ИспользоватьСоглашенияСКлиентами Тогда
                СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(НовыйДок);
                ПродажиСервер.ЗаполнитьЦены(
                    НовыйДок.Товары,
                    , // Массив строк или структура отбора
                    Новый Структура( // Параметры заполнения
                        "Дата, Валюта, Соглашение, РасчитыватьНаборы, ПоляЗаполнения",
                        НовыйДок.Дата,
                        НовыйДок.Валюта,
                        НовыйДок.Соглашение,
                        Истина,
                        "Цена, СтавкаНДС, ВидЦены, СрокПоставки"
                    ),
                    Новый Структура( // Структура действий с измененными строками
                        "ПересчитатьСумму, ПересчитатьСуммуСНДС, ПересчитатьСуммуНДС, ПересчитатьСуммуРучнойСкидки, ОчиститьАвтоматическуюСкидку, ПересчитатьСуммуСУчетомРучнойСкидки",
                        "КоличествоУпаковок", СтруктураПересчетаСуммы, СтруктураПересчетаСуммы, "КоличествоУпаковок", Неопределено, Новый Структура("Очищать", Ложь)));
                    КонецЕсли;
        Иначе
            НовыйДок.Соглашение = УсловияПродажПоУмолчанию.Соглашение;
            Если ИспользоватьСоглашенияСКлиентами Тогда
                    СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(НовыйДок);
                    ПродажиСервер.ЗаполнитьЦены(
                        НовыйДок.Товары,
                        , // Массив строк или структура отбора
                        Новый Структура( // Параметры заполнения
                            "Дата, Валюта, Соглашение, РасчитыватьНаборы, ПоляЗаполнения",
                            НовыйДок.Дата,
                            НовыйДок.Валюта,
                            НовыйДок.Соглашение,
                            Истина,
                            "Цена, СтавкаНДС, ВидЦены, СрокПоставки"
                        ),
                        Новый Структура( // Структура действий с измененными строками
                            "ПересчитатьСумму, ПересчитатьСуммуСНДС, ПересчитатьСуммуНДС, ПересчитатьСуммуРучнойСкидки, ОчиститьАвтоматическуюСкидку, ПересчитатьСуммуСУчетомРучнойСкидки",
                            "КоличествоУпаковок", СтруктураПересчетаСуммы, СтруктураПересчетаСуммы, "КоличествоУпаковок", Неопределено, Новый Структура("Очищать", Ложь)));
                        КонецЕсли;
                
            КонецЕсли;
            УстановитьСпецЦены(НовыйДок);
            СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(НовыйДок);
            
            СтруктураДействий = Новый Структура;
            СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", НовыйДок.НалогообложениеНДС);
            СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", НовыйДок.ВернутьМногооборотнуюТару);
            СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
            СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
            СтруктураДействий.Вставить("ПересчитатьСумму");
            
            КешированныеЗначения = Неопределено;
            ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(НовыйДок.Товары, СтруктураДействий, КешированныеЗначения);
            
    Иначе
        ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(НовыйДок.Партнер, НовыйДок.Контрагент);
        Соглашение = Неопределено;
    КонецЕсли;
        
    НовыйДок.БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(НовыйДок.Контрагент, , НовыйДок.БанковскийСчетКонтрагента);
        
    
    ПартнерыИКонтрагенты.ЗаполнитьКонтактноеЛицоПартнераПоУмолчанию(НовыйДок.Партнер,НовыйДок.КонтактноеЛицо);
    //Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеДоставкой") Тогда
    //    НовыйДок.АдресДоставки = ФормированиеПечатныхФорм.ПолучитьАдресИзКонтактнойИнформации(НовыйДок.Партнер);
    //КонецЕсли;
    
    НовыйДок.НалогообложениеНДС = ЗначениеНастроекПовтИсп.ПолучитьНалогообложениеНДС(НовыйДок.Организация, НовыйДок.Склад, НовыйДок.Дата);
    НовыйДок.Комментарий = "#Загружен с сайта" + " #" + НеПодготовленныеДанные.Комментарий;
5 Defender aka LINN
 
28.02.17
13:32
(4) Ни единого "Свойство()" не найдено.
6 polosov
 
28.02.17
13:33
(5) Ну я тоже не знаю зачем ему Свойство.
Это рабочий код загрузки заказов с сайта.
7 Defender aka LINN
 
28.02.17
13:39
(6) В (0) русским по белому написано:
"сейчас использую метод
ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ

НО, в некоторых действиях используется метод Свойство() "
В (4) никаких таких "некоторых действий" нет. В (6) вообще говорится "Это рабочий код".
Тебе чего надо-то, вообще, поговорить?
8 polosov
 
28.02.17
13:43
(7) Если ты внимательно посмотришь в (4), то ты увидишь некоторые действия.
Таки юный падаван скорее всего имеет в виду, что в обработчиках действий идет обращение к методу структур "Свойство", а он не правильно заполняет параметры действий и получает исключение из-за отсутствия метода.
9 Defender aka LINN
 
28.02.17
13:46
(8) Некоторые действия я вижу. Обращений к методу "Свойство" - нет.
Я для загрузки как раз-таки заказов использую как раз-таки этот метод. И все работает. Без некоторых действий.
10 polosov
 
28.02.17
13:50
(9) Не могу представить как тут тебе помогает
Интерфейс (управляемый)/Данные формы/ДанныеФормыЭлементКоллекции/Методы/Свойство
11 polosov
 
28.02.17
13:50
+(10) И зачем тебе форма тоже не понимаю.
12 Defender aka LINN
 
28.02.17
13:55
(10) Мне?!
13 polosov
 
28.02.17
13:56
(12) >Я для загрузки как раз-таки заказов использую как раз-таки этот метод
14 Defender aka LINN
 
28.02.17
14:29
(13) У *меня* все работает.
Независимо от того, куда вы едете — это в гору и против ветра!