Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Помогите разобраться в коде          
poison Подменю пользователя
сообщение 22.06.15, 19:43
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

Все привет, подскажите опытные программисты как реализовать мне такую ситуацию есть файл ексел из него происходит импорт данных в документ 1с 8.1 вот код его, в екселе появилась новая колонка в которой указан номер дисконта это число 13 значное, но я не могу добиться его импорта именно этого числа в документ, все импортируется кроме данной колонки, мне удалось удалось добиться поиском по реквизиту в справочнике информационных карты добавить такую строку при отладке и наведении на неё мне отображается владелец карты, но как мне сделать что бы данная информация переносилась в сам документ я не пойму.
Код
Процедура Загрузить(ПутьКФайлу, КоличСтрок, ЭлементыФормы) Экспорт
    Для каждого строка Из Соответствия Цикл
        строка.ТипРеквизитаТЧДока = ТипыРеквизитов.Получить(строка.РеквизитТЧДока);
    КонецЦикла;

    СтрокаДляВыполнения = "ВспомогательныйРеквизит = Документы." + Документ.<a class="glossary-term" href="http://forum-1c.ru/index.php?topic=26437.0" title="Метаданными в 1С:Предприятии называют данные, которые описывают то, как должны быть представлены данные. То есть, это структура объектов их представления (формы), реквизиты, различные модули, ...">Метаданные</a>().Имя + ".ПолучитьФормуНовогоДокумента();";
    Выполнить(СтрокаДляВыполнения);
    ВспомогательныйРеквизит.Открыть();

    ДокЭксель = ПолучитьCOMОбъект(ПутьКФайлу);

    счСтрок = 2;
    Пока счСтрок <= КоличСтрок Цикл
        Выполнить("ЗагружаемаяТЧ = ВспомогательныйРеквизит.ДокументОбъект." + ЭлементыФормы.ТабличныеЧастиДока.ТекущиеДанные.НаименованиеТЧ + ";");
        СтрокаТЧ = ЗагружаемаяТЧ.Добавить();
        счКолонок = 1;
        Для каждого строка Из Соответствия Цикл
            Если строка.РеквизитТЧДока <> "" Тогда
                Если строка.ТипРеквизитаТЧДока <> "" Тогда
                    
                //Выполнить("СтрокаТЧ." + строка.РеквизитТЧДока + " = " + строка.ТипРеквизитаТЧДока + ".НайтиПоКоду(""" + ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value + """);");
                КодМой = СокрЛП(ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value);
                КодКарты = СокрЛП(ДокЭксель.Sheets(1).Cells(счСтрок,5).Value);
                //КодМой = "" + Лев(КодМой,2) + Прав(КодМой,3);
                
                //Сообщить("длина " + СтрДлина(КодМой));
                Если СтрДлина(КодМой) = 1 Тогда
                    КодМой = "0000"+КодМой;
                ИначеЕсли СтрДлина(КодМой) = 2 Тогда
                    КодМой = "000"+КодМой;
                ИначеЕсли СтрДлина(КодМой) = 3 Тогда
                    КодМой = "00"+КодМой;
                ИначеЕсли СтрДлина(КодМой) = 4 Тогда
                    КодМой = "0"+КодМой;
                КонецЕсли;
                
            
                    //Кодмой = СтрЗаменить(Кодмой," ", "");
                //Кодмой = Строка(Кодмой);
                //сообщить("код " + кодмой);
    
                СтрокаТЧ.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(КодМой);
                СтрокаТЧ.ЕдиницаИзмерения =  СтрокаТЧ.Номенклатура.БазоваяЕдиницаИзмерения;
                СтрокаТЧ.ДисконтнаяКарта = Справочники.ИнформационныеКарты.НайтиПоРеквизиту("КодКарты",КодКарты);// это то что мне удалось сделать
                //ПриИзмененииНоменклатурыТабЧасти(СтрокаТЧ, ЭтотОбъект);
                //ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТЧ, ДокументОбъект, "грн");

                   СтрокаТЧ.ЕдиницаИзмерения    = СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков;
                СтрокаТЧ.Коэффициент            = СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
                СтрокаТЧ.СтавкаНДС            = СтрокаТЧ.Номенклатура.СтавкаНДС; // ЮМ 478



                    Режим = РежимДиалогаВопрос.ДаНет;

                    //Выполнить("Если " + строка.ТипРеквизитаТЧДока + ".НайтиПоКоду(""" + КодМой + """) = " + строка.ТипРеквизитаТЧДока + ".ПустаяСсылка() тогда "
                    //+ "Сообщить(""Элемент справочника " + Прав(строка.ТипРеквизитаТЧДока, СтрДлина(строка.ТипРеквизитаТЧДока) - Найти(строка.ТипРеквизитаТЧДока, ".")) + " с наименованием " + ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value + " не найден! Добавить элемент??"""");" + "Если Ответ = КодВозвратаДиалога.Да Тогда ФормаЭлемента = " + строка.ТипРеквизитаТЧДока + ".СоздатьЭлемент().ПолучитьФорму(); ФормаЭлемента.Элементыформы.Наименование.Значение = """ + ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value + """; ФормаЭлемента.ОткрытьМодально(); СтрокаТЧ." + строка.РеквизитТЧДока + " = " + строка.ТипРеквизитаТЧДока + ".НайтиПоКоду(""" + ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value + """); КонецЕсли; КонецЕсли;");
                    ////Если Справочники.Номенклатура.НайтиПоКоду(ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value) =  Справочники.Номенклатура.ПустаяСсылка() Тогда
                    ////    Сообщить("Элемент справочника не найден " + Прав(строка.ТипРеквизитаТЧДока, СтрДлина(строка.ТипРеквизитаТЧДока) - Найти(строка.ТипРеквизитаТЧДока);
                Иначе


                          

                    Выполнить("СтрокаТЧ." + строка.РеквизитТЧДока + " = ДокЭксель.Sheets(1).Cells(счСтрок,счКолонок).Value;");
                КонецЕсли;
            КонецЕсли;
            счКолонок = счКолонок + 1;
        КонецЦикла;
        счСтрок = счСтрок + 1;

    КонецЦикла;

    ДокЭксель.Application.Quit();
КонецПроцедуры


Сообщение отредактировал Vofka - 23.06.15, 8:00

poison Подменю пользователя
сообщение 23.06.15, 8:59
Сообщение #2

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

Граждане специалисты не уж то это так сложно, что никто не может написать пару строк помощи

Petre Подменю пользователя
сообщение 23.06.15, 10:20
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Может и ответил бы, но ничего не понял из этого единственного большого предложения.
Попробуйте разложить его на несколько.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Vofka Подменю пользователя
сообщение 23.06.15, 10:26
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(Petre @ 23.06.15, 11:20) *
Попробуйте разложить его на несколько.

Дополнив осмысленными кусочками кода, а не выложив отдельно весь текст функции скопом.

poison Подменю пользователя
сообщение 23.06.15, 17:50
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

Ок попробую по частям все выложить есть файл эксель 5 столбцов первый это код товара, второй это цена, третий это количество, четверты это сумма и последний это код дисконтной карты 13ти значное число
эта часть вроде работает
Процедура Загрузить(ПутьКФайлу, КоличСтрок, ЭлементыФормы) Экспорт
    Для каждого строка Из Соответствия Цикл
        строка.ТипРеквизитаТЧДока = ТипыРеквизитов.Получить(строка.РеквизитТЧДока);
    КонецЦикла;

    СтрокаДляВыполнения = "ВспомогательныйРеквизит = Документы." + Документ.<a class="glossary-term" href="http://forum-1c.ru/index.php?topic=26437.0" title="Метаданными в 1С:Предприятии называют данные, которые описывают то, как должны быть представлены данные. То есть, это структура объектов их представления (формы), реквизиты, различные модули, ...">Метаданные</a>().Имя + ".ПолучитьФормуНовогоДокумента();";
    Выполнить(СтрокаДляВыполнения);
    ВспомогательныйРеквизит.Открыть();

    ДокЭксель = ПолучитьCOMОбъект(ПутьКФайлу);

    счСтрок = 2;
    Пока счСтрок <= КоличСтрок Цикл
        Выполнить("ЗагружаемаяТЧ = ВспомогательныйРеквизит.ДокументОбъект." + ЭлементыФормы.ТабличныеЧастиДока.ТекущиеДанные.НаименованиеТЧ + ";");
        СтрокаТЧ = ЗагружаемаяТЧ.Добавить();
        счКолонок = 1;
        Для каждого строка Из Соответствия Цикл
            Если строка.РеквизитТЧДока <> "" Тогда
                Если строка.ТипРеквизитаТЧДока <> "" Тогда
                    
                //Выполнить("СтрокаТЧ." + строка.РеквизитТЧДока + " = " + строка.ТипРеквизитаТЧДока + ".НайтиПоКоду(""" + ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value + """);");
                КодМой = СокрЛП(ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value);
                КодКарты = СокрЛП(ДокЭксель.Sheets(1).Cells(счСтрок,5).Value);
                //КодМой = "" + Лев(КодМой,2) + Прав(КодМой,3);
                
                //Сообщить("длина " + СтрДлина(КодМой));
                Если СтрДлина(КодМой) = 1 Тогда
                    КодМой = "0000"+КодМой;
                ИначеЕсли СтрДлина(КодМой) = 2 Тогда
                    КодМой = "000"+КодМой;
                ИначеЕсли СтрДлина(КодМой) = 3 Тогда
                    КодМой = "00"+КодМой;
                ИначеЕсли СтрДлина(КодМой) = 4 Тогда
                    КодМой = "0"+КодМой;
                КонецЕсли;

Дальше я дохожу до этой части кода, в которой я добавил СтрокаТЧ.ДисконтнаяКарта = Справочники.ИнформационныеКарты.НайтиПоРеквизиту("КодКарты",КодКарты); при отладке я навожу на информационные карты и у меня высвечивается человек его ФИО владельца карты но как мне в следующей части кода закинуть его в документ 1с
  //Кодмой = СтрЗаменить(Кодмой," ", "");
                //Кодмой = Строка(Кодмой);
                //сообщить("код " + кодмой);
    
                СтрокаТЧ.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(КодМой);
                СтрокаТЧ.ЕдиницаИзмерения =  СтрокаТЧ.Номенклатура.БазоваяЕдиницаИзмерения;
                СтрокаТЧ.ДисконтнаяКарта = Справочники.ИнформационныеКарты.НайтиПоРеквизиту("КодКарты",КодКарты);// это то что мне удалось сделать
                //ПриИзмененииНоменклатурыТабЧасти(СтрокаТЧ, ЭтотОбъект);
                //ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТЧ, ДокументОбъект, "грн");

                   СтрокаТЧ.ЕдиницаИзмерения    = СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков;
                СтрокаТЧ.Коэффициент            = СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
                СтрокаТЧ.СтавкаНДС            = СтрокаТЧ.Номенклатура.СтавкаНДС; // ЮМ 478



                    Режим = РежимДиалогаВопрос.ДаНет;

после этого идет как я понимаю часть кода импорта строк из файла эксель в 1с, вот мне нужно разобраться как мне записать строкаТЧ. ДисконтнаяКарта документ реализации товаров и услуг, куда уже пишутся все 4 столбца из файла эксель, но не импортируется 5ый столбец
//Выполнить("Если " + строка.ТипРеквизитаТЧДока + ".НайтиПоКоду(""" + КодМой + """) = " + строка.ТипРеквизитаТЧДока + ".ПустаяСсылка() тогда " 
                    //+ "Сообщить(""Элемент справочника " + Прав(строка.ТипРеквизитаТЧДока, СтрДлина(строка.ТипРеквизитаТЧДока) - Найти(строка.ТипРеквизитаТЧДока, ".")) + " с наименованием " + ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value + " не найден! Добавить элемент??"""");" + "Если Ответ = КодВозвратаДиалога.Да Тогда ФормаЭлемента = " + строка.ТипРеквизитаТЧДока + ".СоздатьЭлемент().ПолучитьФорму(); ФормаЭлемента.Элементыформы.Наименование.Значение = """ + ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value + """; ФормаЭлемента.ОткрытьМодально(); СтрокаТЧ." + строка.РеквизитТЧДока + " = " + строка.ТипРеквизитаТЧДока + ".НайтиПоКоду(""" + ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value + """); КонецЕсли; КонецЕсли;");
                    ////Если Справочники.Номенклатура.НайтиПоКоду(ДокЭксель.Sheets(1).Cells(счСтрок, счКолонок).Value) =  Справочники.Номенклатура.ПустаяСсылка() Тогда
                    ////    Сообщить("Элемент справочника не найден " + Прав(строка.ТипРеквизитаТЧДока, СтрДлина(строка.ТипРеквизитаТЧДока) - Найти(строка.ТипРеквизитаТЧДока);
                Иначе


                          

                    Выполнить("СтрокаТЧ." + строка.РеквизитТЧДока + " = ДокЭксель.Sheets(1).Cells(счСтрок,счКолонок).Value;");
                КонецЕсли;
            КонецЕсли;
            счКолонок = счКолонок + 1;
        КонецЦикла;
        счСтрок = счСтрок + 1;

    КонецЦикла;

    ДокЭксель.Application.Quit();
КонецПроцедуры

Petre Подменю пользователя
сообщение 24.06.15, 9:52
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Все равно ничего не понятно.

Справочники.ИнформационныеКарты.НайтиПоРеквизиту("КодКарты",КодКарты)

находит нужную ссылку?

Какой тип у "СтрокаТЧ.ДисконтнаяКарта"?


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

poison Подменю пользователя
сообщение 24.06.15, 18:08
Сообщение #7

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Petre @ 24.06.15, 9:52) *
Все равно ничего не понятно.

Справочники.ИнформационныеКарты.НайтиПоРеквизиту("КодКарты",КодКарты)

находит нужную ссылку?

Какой тип у "СтрокаТЧ.ДисконтнаяКарта"?


тип число у СтрокаТЧ.ДисконтнаяКарта

Petre Подменю пользователя
сообщение 25.06.15, 8:34
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

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

напишите что-то типа
СтрокаТЧ.ДисконтнаяКарта = Число(КодКарты)


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 19:09
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!