Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 07:57

Программное изменение реквизита СуммаВключаетНДС

Автор DEaD_EGOR, 28 мар 2016, 11:47

0 Пользователей и 1 гость просматривают эту тему.

DEaD_EGOR

Доброго времени суток... Господа Знатоки, помогите новичку.. Создал внешнюю обработку, которая читает эксель и полученными значениями заполняет новый докумен Реализация товаров в БП 3,0 (работаю в демо).. Всё сделал, хочу, чтоб по умолчанию стояло значение "НДС сверху".. как и где это можно прикрутить?

Код собсна ниже...


&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)

ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = "Выберите файл";

Если ДиалогВыбора.Выбрать() Тогда
Объект.ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
Иначе
Возврат;
КонецЕсли;

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

&НаКлиенте
Процедура ЗагрузитьФайлНаКлиенте(мФорма)
                 
    //подключаемся к эксель
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Книга = Excel.WorkBooks.Open(Объект.ИмяФайла);
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
       
    Попытка
        //Открываем необходимый лист
        Excel.Sheets(1).Select();  // лист 1, по умолчанию 
    Исключение
        //Закрываем Excel
        Excel.ActiveWorkbook.Close();   
        Excel = 0;
        Сообщить("Файл "+Строка(Объект.ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!");
        Возврат;
    КонецПопытки;   
                 
    //Получим количество строк и колонок.
    //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
    Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
    Если Версия = "8" тогда
        ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
        ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
        ФайлСтрок   = Excel.Cells(1,1).SpecialCells(11).Row;
        ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;   
    Конецесли;
     
    //считываем первую строку и генерируем колонки 
    Для НС = 2 по ФайлСтрок Цикл  // НС указываем с какой строки начинать обработку       
        НоваяСтрока = мФорма.Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = ПолучитьНоменклатуруНаСервере(Excel.Cells(НС, 2).Text);
мЧисло = СтрЗаменить(Excel.Cells(НС, 3).Text," ", "");
        НоваяСтрока.Количество = Число(мЧисло);
        НоваяСтрока.Цена = Excel.Cells(НС, 4).Text;
        Если Найти(Строка(Excel.Cells(НС, 6).Text),"10")>0 Тогда
            НоваяСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10");
        ИначеЕсли Найти(Строка(Excel.Cells(НС, 6).Text),"20")>0 Тогда
            НоваяСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20");
        ИначеЕсли Найти(Строка(Excel.Cells(НС, 6).Text),"18")>0 Тогда
            НоваяСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18");
КонецЕсли;
КонецЦикла;   
               
     // Закрыть COM соединение для экономии памяти
     Excel.Application.Quit();
                           
КонецПроцедуры
   
&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
   
     //Создаём форму документа
     мФорма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары");                                                                     
ЗагрузитьФайлНаКлиенте(мФорма);
     мФорма.Открыть();
 
КонецПроцедуры

  &НаСервере
Функция ПолучитьНоменклатуруНаСервере(Наименование)
мНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(Наименование);
        Если мНоменклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
         Возврат мНоменклатура;
      Иначе
       мНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
       мНоменклатура.Наименование = Наименование;
       мНоменклатура.Записать();
       Возврат мНоменклатура.Ссылка;
      КонецЕсли;

  КонецФункции
 

cska-fanat-kz

&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
   
     //Создаём форму документа
     мФорма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары");                                                                     
     ЗагрузитьФайлНаКлиенте(мФорма);
    мФорма.Объект.СуммаВключаетНДС = ИСТИНА;
     мФорма.Открыть();
                   
КонецПроцедуры

возможно и по другому значение. но смысл я думаю понятен...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

DEaD_EGOR

1) а разве значение не должно быть Ложь?
2) пробовал, всё равно по умолчанию стоит Документ Без НДС

vitasw

Потому что:
1. вы далеко не все реквизиты объекта заполнили.
2. пройдитесь отладчиком. Скорее всего вы сначала что-то устанавливаете, а затем типовой код, например в ПриОткрытии выполняет собственную установку.

DEaD_EGOR

Цитата: vitasw от 28 мар 2016, 13:11
Потому что:
1. вы далеко не все реквизиты объекта заполнили.
2. пройдитесь отладчиком. Скорее всего вы сначала что-то устанавливаете, а затем типовой код, например в ПриОткрытии выполняет собственную установку.
А мне и не нужно всё заполнять. Это вообще тестовое задание. По условию, считывается и заполняется только номенклатура, количество и цена. всё остальное подтягивается из базы и справочников... Мне тут посоветовали актуализировать данные, то есть обновлять форму после заполнения по типу "Процедура УстановитьВидимостьСчетовУчета()". Как это сделать?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск