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

Помогите добавить кнопку автозаполнения характеристик

Автор Newel, 06 ноя 2018, 13:53

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

Newel

Доброго времени суток. Помогите со следующим вопросом. В организации некоторые накладные заливаются из Excel и по всем позициям приходится вручную проставлять характеристику. Есть возможность добавить кнопку, что бы в документе автоматически проставлялась характеристика-Новый? 1С 8.2

oleg-x

Цитата: Newel от 06 ноя 2018, 13:53
Доброго времени суток. Помогите со следующим вопросом. В организации некоторые накладные заливаются из Excel и по всем позициям приходится вручную проставлять характеристику. Есть возможность добавить кнопку, что бы в документе автоматически проставлялась характеристика-Новый? 1С 8.2
Есть, обратитесь в раздел фриланс и Вам добавят такую кнопку, если стандартно нет (хотя обычно подбор характеристик есть).
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

pavl_vs

Newel, 1С 8.2 мало о чем говорит - укажите конфигурацию.

oleg-x

Цитата: pavl_vs от 06 ноя 2018, 14:50
Newel, 1С 8.2 мало о чем говорит - укажите конфигурацию.
Говорит о многом.
1) Человек не программист.
2) Что такое конфигурация не знает (в этом нет ничего плохого, как показывает практика, мало кто понимает что такое конфигурация и платформа, сам в свое время долго не мог понять нюансы).
3) Самостоятельно внести изменения в программу не может, если нет стандартного функционала, то только доработка, которую самостоятельно не сделает.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

alexandr_ll

Цитата: Newel от 06 ноя 2018, 13:53
Доброго времени суток. Помогите со следующим вопросом. В организации некоторые накладные заливаются из Excel и по всем позициям приходится вручную проставлять характеристику. Есть возможность добавить кнопку, что бы в документе автоматически проставлялась характеристика-Новый? 1С 8.2
А зачем кнопку? Пусть сразу при заливке заполняется.

Newel

Цитата: oleg-x от 06 ноя 2018, 14:40
Цитата: Newel от 06 ноя 2018, 13:53
Доброго времени суток. Помогите со следующим вопросом. В организации некоторые накладные заливаются из Excel и по всем позициям приходится вручную проставлять характеристику. Есть возможность добавить кнопку, что бы в документе автоматически проставлялась характеристика-Новый? 1С 8.2
Есть, обратитесь в раздел фриланс и Вам добавят такую кнопку, если стандартно нет (хотя обычно подбор характеристик есть).

Организация не хочет оплачивать данную функцию, а вручную постоянно по 200 позиций тыкать очень долго и не удобно, надеялся на помощь на этом форуме.
Добавлено: 07 ноя 2018, 11:51


Цитата: pavl_vs от 06 ноя 2018, 14:50
Newel, 1С 8.2 мало о чем говорит - укажите конфигурацию.

1С 8.2 (8.2.19.68)
Управление торговлей 10.3(10.3.13.2)
Добавлено: 07 ноя 2018, 11:54


Цитата: oleg-x от 06 ноя 2018, 15:02
Цитата: pavl_vs от 06 ноя 2018, 14:50
Newel, 1С 8.2 мало о чем говорит - укажите конфигурацию.
Говорит о многом.
1) Человек не программист.
2) Что такое конфигурация не знает (в этом нет ничего плохого, как показывает практика, мало кто понимает что такое конфигурация и платформа, сам в свое время долго не мог понять нюансы).
3) Самостоятельно внести изменения в программу не может, если нет стандартного функционала, то только доработка, которую самостоятельно не сделает.

Я надеялся на помощь форумчан, если бы кто-то помог с кодом, то методом тыка я бы нашел куда его пристроить:)Уже вставлял пару таких доработок которые находил на просторах интернета, а по данному вопросу к сожалению ничего не удалось найти.
Добавлено: 07 ноя 2018, 11:54


Цитата: alexandr_ll от 06 ноя 2018, 16:43
Цитата: Newel от 06 ноя 2018, 13:53
Доброго времени суток. Помогите со следующим вопросом. В организации некоторые накладные заливаются из Excel и по всем позициям приходится вручную проставлять характеристику. Есть возможность добавить кнопку, что бы в документе автоматически проставлялась характеристика-Новый? 1С 8.2
А зачем кнопку? Пусть сразу при заливке заполняется.

Если можете объяснить как это реализовать, буду очень благодарен.

LexaK

выложите обработку которая заливает данные из Екселя в документ,
там действительно всего одну строку надо добавить
если помогло нажмите: Спасибо!

alexandr_ll


[/quote]
А зачем кнопку? Пусть сразу при заливке заполняется.
[/quote]

Если можете объяснить как это реализовать, буду очень благодарен.
[/quote]

В обработке загрузки нужно получить ссылку на элемент справочника"Характеристики номенклатуры", подчиненный владельцу номенклатура и вставить эту ссылку в соответствующий реквизит табличной части документа.
Более конкретно можно сказать только имея обработку, которой вы пользуетесь.

oleg-x

ЦитироватьОрганизация не хочет оплачивать данную функцию, а вручную постоянно по 200 позиций тыкать очень долго и не удобно, надеялся на помощь на этом форуме.
Странная позиция руководства, в отсутствие штатного программиста. Стоимость данной доработки примерно 500 руб, если выложите здесь обработку, могут и бесплатно подправить.
По цене доработки можно просто посчитать, сколько стоит час работы сотрудника и сколько времени тратит, на подставление руками характеристиками.

Я так понял загружается документ поступление, так как в заказе и реализации есть размещение характеристик.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Newel

Цитата: LexaK от 07 ноя 2018, 12:08
выложите обработку которая заливает данные из Екселя в документ,
там действительно всего одну строку надо добавить


Процедура КнопкаВыполнитьНажатие(Кнопка)

Если ЗагружаемыйСписок.Количество() = 0 тогда
Предупреждение("Не заполнена табличная часть. Сперва необходимо выполнить чтение файла!!!");
Возврат;
КонецЕсли;

Если не ЗначениеЗаполнено(Организация) тогда
Предупреждение("Не указана организация!!!");
Возврат;
КонецЕсли;

Если не ЗначениеЗаполнено(Контрагент) тогда
Предупреждение("Не указан контрагент!!!");
Возврат;
КонецЕсли;
                                                                     


НовДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();

ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(НовДок, глЗначениеПеременной("глТекущийПользователь"), Константы.ВалютаРегламентированногоУчета.Получить(), "Покупка", Неопределено, Неопределено);

НовДок.Контрагент = Контрагент;
НовДок.Организация = Организация;
    ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(НовДок, НовДок.мСтруктураПараметровДляПолученияДоговора);


Для Каждого СтрокаТЧ из ЗагружаемыйСписок Цикл

Если СтрокаТЧ.Номенклатура.Пустая() Тогда
Сообщить("В строке "+СтрокаТЧ.НомерСтроки+" не указана номенклатура. Данная позиция будет пропущена", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;

//Запись новых кодов контрагентов
Если СтрокаТЧ.ЭтоНовый Тогда

НаборЗаписей = регистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Свойство.Установить(СвойствоХраненияКода,Истина);
НаборЗаписей.Отбор.Объект.Установить(СтрокаТЧ.Номенклатура,Истина);

НаборЗаписей.Прочитать();

НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Объект = СтрокаТЧ.Номенклатура;
НоваяЗапись.Свойство = СвойствоХраненияКода;
НоваяЗапись.Значение = СтрокаТЧ.КодИзФайла;

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

КонецЕсли;


СтрокаДок = НовДок.Товары.Добавить();
СтрокаДок.Номенклатура     = СтрокаТЧ.Номенклатура;
СтрокаДок.ЕдиницаИзмерения = СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков;
СтрокаДок.Коэффициент = СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;

ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаДок, НовДок);
ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаДок, НовДок, "Приобретение");
       
СтрокаДок.Количество       = СтрокаТЧ.Количество;
СтрокаДок.Сумма    = СтрокаТЧ.Сумма;

ОбработкаТабличныхЧастей.ПриИзмененииСуммыТабЧасти(СтрокаДок, НовДок, глЗначениеПеременной("глТекущийПользователь"));

    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаДок, НовДок);

КонецЦикла;

НовДок.ПолучитьФорму("ФормаДокумента").Открыть();   

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


Процедура КоманднаяПанель1ПрочитатьФайл(Кнопка)

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

Если НЕ ЗначениеЗаполнено(Файл) ТОгда
Предупреждение("Не указан файл для загрузки. Выберите файл!!!");
Возврат;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
Предупреждение("Необходимо указать поставщика.");
Возврат;
КонецЕсли;

Попытка
ВходExcel = Новый COMОбъект("Excel.Application");
Исключение       
Предупреждение("Невозможно запустить Excel. Возможно он не установлен.",10);
Возврат;
КонецПопытки;

Попытка
Состояние("Открытие файла...");
ExcelФайл = ВходExcel.WorkBooks.Open(Файл);
Исключение
Предупреждение("Не удалось открыть файл. Возможно файл не является файлом EXСEL!!",10);
Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
ВходExcel.Quit();
Возврат;
КонецПопытки;

ЗагрузитьДанныеФайлаВТаблицу(ExcelФайл);

ВходExcel.Quit();



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


Процедура ЗагрузитьДанныеФайлаВТаблицу(ExcelФайл)

Лист = ExcelФайл.WorkSheets(1);

//НомКода         = 1;
//НомНаименования = 2;
//НомЕд           = 3;
//НомКол          = 4;
//НомСумма        = 5;

ТекСтрока = НачальнаяСтрока;

сч = 0;

Пока сч < 9 Цикл

КодНоменклатуры = СокрЛП(Лист.Cells(ТекСтрока, НомКода).Value);

Если НЕ ЗначениеЗаполнено(КодНоменклатуры) тогда
сч = сч + 1;
ТекСтрока = ТекСтрока+1;
Продолжить;
КонецЕсли;

сч = 0;

СтрокаТЧ = ЗагружаемыйСписок.Добавить();
 
СтрокаТЧ.КодИзФайла        = КодНоменклатуры;
СтрокаТЧ.НоменклатураФайла = СокрЛП(Лист.Cells(ТекСтрока, НомНаименования).Value);
СтрокаТЧ.ЕдиницаИзФайла    = СокрЛП(Лист.Cells(ТекСтрока, НомЕд).Value);
СтрокаТЧ.Количество        = Лист.Cells(ТекСтрока, НомКол).Value;
СтрокаТЧ.Сумма             = Лист.Cells(ТекСтрока, НомСумма).Value;
СтавкаНДС            = Лист.Cells(ТекСтрока, НомСтавкаНДС).Value;

Если СокрЛП(СтавкаНДС) = "18%" Тогда
СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
ИначеЕсли СокрЛП(СтавкаНДС) = "10%" Тогда
СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС10;
Иначе
СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;

ТекСтрока = ТекСтрока+1;
КонецЦикла;
Сообщить(сч);
//попытка заполнения номенклатуры

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

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

РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
ЗагружаемыйСписок[РезультатЗапроса.НомерСтроки-1].Номенклатура = РезультатЗапроса.Объект;
КонецЦикла;

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


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

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


Процедура ЗагружаемыйСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если Не ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
ОформлениеСтроки.ЦветФона = Новый Цвет(255,0,0);
КонецЕсли;
КонецПроцедуры


Процедура КоманднаяПанель1НайтиПоНаименованию(Кнопка)

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


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

Функция СоздатьНовуюНоменклатуру(СтрокаСНоменклатурой)

НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НовНоменклатура.Наименование = СтрокаСНоменклатурой.НоменклатураФайла;
НовНоменклатура.НаименованиеПолное = СтрокаСНоменклатурой.НоменклатураФайла;
НовНоменклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
НовНоменклатура.СтавкаНДС = СтрокаСНоменклатурой.СтавкаНДС;
НовНоменклатура.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");

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

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

НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
КонецЕсли;

НовНоменклатура.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
НовНоменклатура.ЕдиницаХраненияОстатков = НайденнаяЕдиница;

Попытка
НовНоменклатура.Записать();
Исключение
Сообщить("При создании номенклатуры возникла ошибка");
Сообщить(ОписаниеОшибки());
НовНоменклатура.ПолучитьФорму("ФормаЭлемента").Открыть();
    Возврат НовНоменклатура.Ссылка;
КонецПопытки;

//запишем свойство
Попытка
НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(НовНоменклатура.Ссылка, Истина);
НаборЗаписей.Отбор.Свойство.Установить(СвойствоХраненияКода, Истина);

НаборЗаписей.Прочитать();

НаборЗаписей.Очистить();
НоваяЗапись = НаборЗаписей.Добавить();
НОваяЗапись.Значение = СтрокаСНоменклатурой.КодИзФайла;
НоваяЗапись.Объект = НовНоменклатура.Ссылка;
НоваяЗапись.Свойство = СвойствоХраненияКода;
НаборЗаписей.Записать(Истина);

Исключение
Сообщить("При создании связи кодов возникла ошибка");
КонецПопытки;


Возврат НовНоменклатура.Ссылка;

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

Процедура КоманднаяПанель1СоздатьНедостающуюНоменклатуру(Кнопка)
Для Каждого СтрокаТЧ из ЗагружаемыйСписок Цикл
Если Не ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда
СтрокаТЧ.Номенклатура = СоздатьНовуюНоменклатуру(СтрокаТЧ);
СтрокаТЧ.ЭтоНовый = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры


Процедура КоманднаяПанель1Переименовать(Кнопка)

ТекущаяСтрока = ЭлементыФормы.ЗагружаемыйСписок.ТекущиеДанные;

Если ТекущаяСтрока = Неопределено Тогда
Предупреждение("Укажите строку для переименования номенклатуры");
Возврат;
КонецЕсли;

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

Добавлено: 07 ноя 2018, 22:44


Цитата: oleg-x от 07 ноя 2018, 16:36
ЦитироватьОрганизация не хочет оплачивать данную функцию, а вручную постоянно по 200 позиций тыкать очень долго и не удобно, надеялся на помощь на этом форуме.
Странная позиция руководства, в отсутствие штатного программиста. Стоимость данной доработки примерно 500 руб, если выложите здесь обработку, могут и бесплатно подправить.
По цене доработки можно просто посчитать, сколько стоит час работы сотрудника и сколько времени тратит, на подставление руками характеристиками.

Я так понял загружается документ поступление, так как в заказе и реализации есть размещение характеристик.

Директор руководствуется тем, что за данную доработку уже было заплачено, работайте так.

Теги:

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

Рейтинг@Mail.ru

Поиск