Ребят, Получил на Сервере ТЗ список листов в эксель файле
Создал поле выбора листа на форме
Что надо написать, чтобы в этом поле отобразился полученный список листов?
&НаСервере
Процедура ОткрытьНаСервере(Наименование)
Ексель = Новый COMОбъект("Excel.Application");
НомерЛиста = 2;
файл = Ексель.WorkBooks.Open(ПолеВвода);
Лист = файл .WorkSheets(НомерЛиста);
СписокЛистов = Новый СписокЗначений;
Для Каждого ТекущийЛист Из файл .WorkSheets Цикл
СписокЛистов.Добавить(ТекущийЛист.Name);
КонецЦикла;
ПоказатьСоздал поле выбора листа на форме
&НаКлиенте
Процедура ВыберитеНомерЛистаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Что надо написать, чтобы в этом поле отобразился полученный список листов?
По теме из базы знаний
- Упаковка строк/массивов строк/таблиц/массивов таблиц в QR Code без ВК с поддержкой русских букв через Google API/локальный сервер
- Перенос таблицы значений между клиентом и сервером
- Быстрая передача результата запроса на клиент через COM-соединение с текущей базой
- Обработка печатной формы WORD клиент-сервер УФ
- Передача данных с сервера на клиент
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
&НаСервере
Процедура ОткрытьНаСервере(Наименование)
Ексель = Новый COMОбъект("Excel.Application");
НомерЛиста = 2;
файл = Ексель.WorkBooks.Open(ПолеВвода);
Лист = файл .WorkSheets(НомерЛиста);
СписокЛистов = Элементы.НомерЛиста.СписокВыбора;
Для Каждого ТекущийЛист Из файл .WorkSheets Цикл
СписокЛистов.Добавить(ТекущийЛист.Name);
КонецЦикла;
Показать
(6)
Значения заполняются...Но когда открываю обработку списка листов нет
&НаСервере
Процедура ОткрытьНаСервере(Наименование)
//C:\Users\бух\Desktop\клапана.xlsx
Ексель = Новый COMОбъект("Excel.Application");
НомерЛиста = 2;
файл = Ексель.WorkBooks.Open(ПолеВвода);
Лист = файл .WorkSheets(НомерЛиста);
СписокЛистов = Элементы.ВыберитеНомерЛиста.СписокВыбора;
Для Каждого ТекущийЛист Из файл .WorkSheets Цикл
СписокЛистов.Добавить(ТекущийЛист.Name);
КонецЦикла;
ПоказатьЗначения заполняются...Но когда открываю обработку списка листов нет
Создайте на форме обработчик события ПриСозданииНаСервере, в него можно написать так, если там всегда есть имя файла, также этот код можно засунуть в обработчик при изменении имени файла
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если значениеЗаполнено(Наименование) Тогда
ОткрытьНаСервере(Наименование)
КонецЕсли;
КонецПроцедуры
(10) Спасибо! Вот только СписокВыбора переменная не определена. и еще вопрос...
При открытии обработки список пуст, делаю разовый запуск, список появляется, выбираю другой лист, отличный от "номерЛиста = 2" загружается все равно второй лист(логично конечно), но как переписать код, чтоб список до запуска появился и не отчищался при следующем запуске обработки
&НаСервере
Процедура ОткрытьНаСервере(Наименование)
Ексель = Новый COMОбъект("Excel.Application");
НомерЛиста = 2;
файл = Ексель.WorkBooks.Open(ПолеВвода);
Лист = файл .WorkSheets(НомерЛиста);
СписокЛистов = Элементы.ВыберитеНомерЛиста.СписокВыбора;
//СписокВыбора.Очистить();
Для Каждого ТекущийЛист Из файл .WorkSheets Цикл
СписокЛистов.Добавить(ТекущийЛист.Name);
КонецЦикла;
ПоказатьПри открытии обработки список пуст, делаю разовый запуск, список появляется, выбираю другой лист, отличный от "номерЛиста = 2" загружается все равно второй лист(логично конечно), но как переписать код, чтоб список до запуска появился и не отчищался при следующем запуске обработки
СписокЛистов = Элементы.ВыберитеНомерЛиста.СписокВыбора;
СписокЛистов.Очистить();
Тут весь код выкладывать надо. Но похоже что то с логикой не то. В какой момент заполнится имя файла, что бы загрузить список листов?
СписокЛистов.Очистить();
Тут весь код выкладывать надо. Но похоже что то с логикой не то. В какой момент заполнится имя файла, что бы загрузить список листов?
(12)
&НаСервере
Процедура ОткрытьНаСервере(Наименование)
//C:\Users\бух\Desktop\клапана.xlsx
Ексель = Новый COMОбъект("Excel.Application");
НомерЛиста = 2;
файл = Ексель.WorkBooks.Open(ПолеВвода);
Лист = файл .WorkSheets(НомерЛиста);
СписокЛистов = Элементы.ВыберитеНомерЛиста.СписокВыбора;
//СписокВыбора.Очистить();
Для Каждого ТекущийЛист Из файл .WorkSheets Цикл
СписокЛистов.Добавить(ТекущийЛист.Name);
КонецЦикла;
ДокДляЗаписи = РежимЗагрузки.ПолучитьОбъект();
//ОСНОВНЫЕ РЕКВИЗИТЫ
//док1 = Справочники.Номенклатура.НайтиПоНаименованию("Диван Монте-Карло");
//док = Документы.КоммерческоеПредложениеКлиенту.НайтиПоНомеру("ПР00-000001", Дата("20190101000000"));
Материал1 = сокрЛП(Лист.Cells(19, 2).text);
Себестоимость2 = сокрЛП(Лист.Cells(20, 2).text);
Высота1 = сокрЛП(Лист.Cells(2, 2).text);
Ширина2 = сокрЛП(Лист.Cells(2, 3).text);
Количество3 = сокрЛП(Лист.Cells(2, 4).text);
ЦенаМатериала4 = сокрЛП(Лист.Cells(2, 5).text);
ЦенаПродажи5 = сокрЛП(Лист.Cells(2, 6).text);
РозничнаяЦена6 = сокрЛП(Лист.Cells(2, 7).text);
Цена7 = сокрЛП(Лист.Cells(2, 8).text);
Сумма8 = сокрЛП(Лист.Cells(2, 9).text);
Скидка9 = сокрЛП(Лист.Cells(2, 10).text);
ДокДляЗаписи.Материал = Материал1;
ДокДляЗаписи.Себестоимость = Себестоимость2;
ДокДляЗаписи.Высота = Высота1;
ДокДляЗаписи.Ширина = Ширина2;
ДокДляЗаписи.Количество = Количество3;
ДокДляЗаписи.ЦенаМатериала = ЦенаМатериала4;
ДокДляЗаписи.ЦенаПродажи = ЦенаПродажи5;
ДокДляЗаписи.РозничнаяЦена = РозничнаяЦена6;
ДокДляЗаписи.Цена = Цена7;
ДокДляЗаписи.Сумма = Сумма8;
ДокДляЗаписи.Скидка = Скидка9;
//ТЧ
ДокДляЗаписи.ТабличнаяЧасть1.Очистить();
//ПЕРЕМЕННЫЕ//////////////////////////////////////////
НомерСтр = 7;
НомерСтроки = 7;
НомерКолонкиДлина = 11;
НомерКолонкиКоличество = 11;
НомерКолонки = 11;
Пока ЗначениеЗаполнено(Лист.Cells(НомерСтроки, 6).text) цикл
ТекущаяНоменклатура = сокрЛП(Лист.Cells(НомерСтроки, 6).text);
КолонкаДляОтбора = (Лист.Cells(1, НомерКолонки).text);
КолонкаДляОтбораДлина = (Лист.Cells(1, НомерКолонки).text);
КолонкаДляОтбораКоличество = (Лист.Cells(1, НомерКолонки).text);
НайденнаяСтрока = СтрНайти(КолонкаДляОтбора, ТекущаяНоменклатура);
Значение2 = "мм";
НайденнаяСтрока2 = СтрНайти(КолонкаДляОтбора, Значение2);
Значение3 = "шт";
НайденнаяСтрока3 = СтрНайти(КолонкаДляОтбора, Значение3);
Значение4 = "компл";
НайденнаяСтрока4 = СтрНайти(КолонкаДляОтбора, Значение4);
Значение5 = "Заготовка";
НайденнаяСтрока5 = СтрНайти(КолонкаДляОтбораКоличество, Значение5);
Если НайденнаяСтрока >= 1 И НайденнаяСтрока2 >= 1 Тогда
СтрокаТЧ = ДокДляЗаписи.ТабличнаяЧасть1.Добавить();
СтрокаТЧ.Длина = сокрЛП(Лист.Cells(2, НомерКолонки).text);
СтрокаТЧ.Номенклатура = ТекущаяНоменклатура;
СтрокаТЧ.Цена = сокрЛП(Лист.Cells(НомерСтроки, 10).text);
НомерСтроки = НомерСтроки + 1;
ИначеЕсли НайденнаяСтрока = 0 Тогда
НомерКолонки = НомерКолонки + 1;
ИначеЕсли НайденнаяСтрока2 = 0 И НайденнаяСтрока3 >= 1 ИЛИ НайденнаяСтрока4 >=1 Тогда
СтрокаТЧ = ДокДляЗаписи.ТабличнаяЧасть1.Добавить();
СтрокаТЧ.Номенклатура = ТекущаяНоменклатура;
СтрокаТЧ.Количество = сокрЛП(Лист.Cells(2, НомерКолонки).text);
СтрокаТЧ.Цена = сокрЛП(Лист.Cells(НомерСтроки, 10).text);
НомерСтроки = НомерСтроки + 1;
НомерКолонки = 11;
КонецЕсли;
Если НайденнаяСтрока >= 1 И НайденнаяСтрока2 >= 1 И НайденнаяСтрока5 >= 1 Тогда
НомерКолонки = НомерКолонки + 1;
СтрокаТЧ.Количество = сокрЛП(Лист.Cells(2, НомерКолонки).text);
НомерКолонки = 11; //восстанавливаю счетчик
КонецЕсли;
Если КолонкаДляОтбора = "" Тогда
Сообщить("Проверьте правила заполнения шаблона Эксель, номенклатура не найдена в строке поиска");
Прервать;
КонецЕсли;
КонецЦикла;
//СОЗДАНИЕ НОМЕНКЛАТУРЫ
НоменклатураДляЗаписиВРегистрСведений = сокрЛП(Лист.Cells(6, 6).text);
НомерСтрокиНоменклатура = 6;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &Наименование";
Пока ЗначениеЗаполнено(Лист.Cells(НомерСтрокиНоменклатура, 6).text) Цикл
ЭлементНоменклатуры = сокрЛП(Лист.Cells(НомерСтрокиНоменклатура, 6).text);
Запрос.УстановитьПараметр("Наименование", ЭлементНоменклатуры);
РезультатЗапроса = Запрос.Выполнить();
// ПРОВЕРКА УНИКАЛЬНОСТИ НОМЕНКЛАТУРЫ
Если РезультатЗапроса.Пустой() Тогда
НовыйЭлементНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлементНоменклатуры.Наименование = ЭлементНоменклатуры;
НовыйЭлементНоменклатуры.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НовыйЭлементНоменклатуры.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Клапана №2");
НовыйЭлементНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
НовыйЭлементНоменклатуры.Записать();
НомерСтрокиНоменклатура = НомерСтрокиНоменклатура + 1;
Иначе
НомерСтрокиНоменклатура = НомерСтрокиНоменклатура + 1;
КонецЕсли;
КонецЦикла;
//ЗАПИСЬ НАИМЕНОВАНИЯ НОМЕНКЛАТУРЫ В РЕКВИЗИТ ВЫХОДНОЕИЗДЕЛИЕ
ДокДляЗаписи.ВыходноеИзделие = Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураДляЗаписиВРегистрСведений);
//ЗАПИСЬ ЦЕНЫ В РЕГИСТР СВЕДЕНИЙ
//ЗаписьЦеныВРегистр = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
//ЗаписьЦеныВРегистр.Отбор.Регистратор.Установить(ДокДляЗаписи);
//ЗаписьЦеныВРегистр.Прочитать();
//
//НоваяЗаписьЗаписьЦеныВРегистр = ЗаписьЦеныВРегистр.Добавить();
//НоваяЗаписьЗаписьЦеныВРегистр.Регистратор = Документы.Клапана.НайтиПоНомеру(ДокДляЗаписи.Номер);
//НоваяЗаписьЗаписьЦеныВРегистр.Период = ДокДляЗаписи.Дата;
//НоваяЗаписьЗаписьЦеныВРегистр.Номенклатура = ДокДляЗаписи.ВыходноеИзделие;
//НоваяЗаписьЗаписьЦеныВРегистр.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Основной");
//НоваяЗаписьЗаписьЦеныВРегистр.Цена = ДокДляЗаписи.Цена;
//НоваяЗаписьЗаписьЦеныВРегистр.Валюта = Справочники.Валюты.НайтиПоНаименованию("руб.");
//// ЗаписьЦеныВРегистр.Записать(Истина);
//СОЗДАНИЕ ВАРИАНТА КОМПЛЕКТАЦИИ НОМЕНКЛАТУРЫ
НомерКолонкиНовый = 11;
НомерСтрокиНовый = 7;
ИщуНоменклатуру = сокрЛП(Лист.Cells(6, 6).text);
КомплектацияСсылка = Справочники.Номенклатура.НайтиПоНаименованию(ИщуНоменклатуру);
Если НЕ КомплектацияСсылка = Справочники.ВариантыКомплектацииНоменклатуры.ПустаяСсылка() Тогда
СозданиеВариантаКомплектации = КомплектацияСсылка.ПолучитьОбъект();
иначе
СозданиеВариантаКомплектации = КомплектацияСсылка.ПолучитьСсылку();
СозданиеВариантаКомплектации = КомплектацияСсылка.ПолучитьОбъект();
КонецЕсли;
ЗаписатьНоменклатуру = сокрЛП(Лист.Cells(6, 6).text);
НовыйЭлементНоменклатуры2 = Справочники.ВариантыКомплектацииНоменклатуры.СоздатьЭлемент();
НовыйЭлементНоменклатуры2.Владелец = справочники.Номенклатура.НайтиПоНаименованию(СозданиеВариантаКомплектации.Наименование);
НовыйЭлементНоменклатуры2.Наименование = сокрЛП(Лист.Cells(6, 6).text);
НовыйЭлементНоменклатуры2.Количество = 1;
НовыйЭлементНоменклатуры2.КоличествоУпаковок = 1;
//ТЧ ВАРИАНТА КОМПЛЕКТАЦИИ
Пока ЗначениеЗаполнено(Лист.Cells(НомерСтрокиНовый, 6).text) цикл
АктуальнаяНоменклатура = сокрЛП(Лист.Cells(НомерСтрокиНовый, 6).text);
КолонкаДляОтбораНоменклатуры = (Лист.Cells(1, НомерКолонкиНовый).text);
НайденнаяСтрокаНоменклатура = СтрНайти(КолонкаДляОтбораНоменклатуры, АктуальнаяНоменклатура);
Значение6 = "Заготовка";
НайденнаяСтрока5Номенклатура = СтрНайти(КолонкаДляОтбораНоменклатуры, Значение6);
ИщемКоличествоШтуки = СтрНайти(КолонкаДляОтбораНоменклатуры, Значение3);
ИщемКоличествоКомплекты = СтрНайти(КолонкаДляОтбораНоменклатуры, Значение4);
ИщемДлинуММ = СтрНайти(КолонкаДляОтбораНоменклатуры, Значение2);
ЗначениеМатериала = "материала";
ИщемЗначениеМатериала = СтрНайти(КолонкаДляОтбораНоменклатуры, ЗначениеМатериала);
Если НайденнаяСтрокаНоменклатура >= 1 И НайденнаяСтрока5Номенклатура >= 1 Тогда
ТЧспрНоменклатура = НовыйЭлементНоменклатуры2.Товары.Добавить();
ТЧспрНоменклатура.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(АктуальнаяНоменклатура);
НомерСтрокиНовый = НомерСтрокиНовый + 1;
ИначеЕсли НайденнаяСтрокаНоменклатура = 0 Тогда
НомерКолонкиНовый = НомерКолонкиНовый + 1;
ИначеЕсли НайденнаяСтрокаНоменклатура >= 1 И ИщемДлинуММ >= 1 И НайденнаяСтрока5Номенклатура = 0 Тогда
ТЧспрНоменклатура = НовыйЭлементНоменклатуры2.Товары.Добавить();
ТЧспрНоменклатура.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(АктуальнаяНоменклатура);
ТЧспрНоменклатура.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("мм");
ТЧспрНоменклатура.Количество = сокрЛП(Лист.Cells(2, НомерКолонкиНовый).text);
ТЧспрНоменклатура.КоличествоУпаковок = ТЧспрНоменклатура.Количество;
НомерСтрокиНовый = НомерСтрокиНовый + 1;
НомерКолонкиНовый = 11;
КонецЕсли;
Если НайденнаяСтрокаНоменклатура >= 1 И ИщемКоличествоШтуки >= 1 Тогда
ТЧспрНоменклатура = НовыйЭлементНоменклатуры2.Товары.Добавить();
ТЧспрНоменклатура.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(АктуальнаяНоменклатура);
ТЧспрНоменклатура.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(796);
ТЧспрНоменклатура.Количество = сокрЛП(Лист.Cells(2, НомерКолонкиНовый).text);
ТЧспрНоменклатура.КоличествоУпаковок = ТЧспрНоменклатура.Количество;
НомерСтрокиНовый = НомерСтрокиНовый + 1;
НомерКолонкиНовый = 11;
ИначеЕсли НайденнаяСтрокаНоменклатура >= 1 И ИщемКоличествоКомплекты >= 1 Тогда
ТЧспрНоменклатура = НовыйЭлементНоменклатуры2.Товары.Добавить();
ТЧспрНоменклатура.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(АктуальнаяНоменклатура);
ТЧспрНоменклатура.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(796);
ТЧспрНоменклатура.Количество = сокрЛП(Лист.Cells(2, НомерКолонкиНовый).text);
ТЧспрНоменклатура.КоличествоУпаковок = ТЧспрНоменклатура.Количество;
НомерСтрокиНовый = НомерСтрокиНовый + 1;
НомерКолонкиНовый = 11;
КонецЕсли;
Если НайденнаяСтрокаНоменклатура >= 1 И ИщемДлинуММ >= 1 И НайденнаяСтрока5Номенклатура >= 1 Тогда
НомерКолонкиНовый = НомерКолонкиНовый + 1;
ТЧспрНоменклатура.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(796);
ТЧспрНоменклатура.Количество = сокрЛП(Лист.Cells(2, НомерКолонкиНовый).text);
ТЧспрНоменклатура.КоличествоУпаковок = ТЧспрНоменклатура.Количество;
НомерКолонкиНовый = 11;
КонецЕсли;
Если КолонкаДляОтбораНоменклатуры = "" Тогда
Сообщить("Проверьте правила заполнения шаблона Эксель, номенклатура не найдена в строке поиска");
Прервать;
КонецЕсли;
//Прервать;
КонецЦикла;
НовыйЭлементНоменклатуры2.Записать();
Ексель.Quit();
Ексель = 0;
ДокДляЗаписи.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНаКлиенте(Команда, Наименование)
ОткрытьНаСервере(Наименование);
КонецПроцедуры
&НаКлиенте
Процедура ПолеВводаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выбор файла";
Диалог.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
Диалог.ИндексФильтра = 0;
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.ПроверятьСуществованиеФайла = Истина;
Диалог.МножественныйВыбор = Ложь;
Диалог.ПолноеИмяФайла = ПолеВвода;
Если Диалог.Выбрать() Тогда
ПолеВвода = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
клапана.xlsx
Как то так, нужно разделить заполнение списка и создание документа
&НаСервере
Процедура ОткрытьНаСервере(Наименование)
Ексель = Новый COMОбъект("Excel.Application");
НомерЛиста = ВыберитеНомерЛиста;
файл = Ексель.WorkBooks.Open(ПолеВвода);
Лист = файл .WorkSheets(НомерЛиста);
//СписокЛистов = Элементы.ВыберитеНомерЛиста.СписокВыбора;
////СписокВыбора.Очистить();
//Для Каждого ТекущийЛист Из файл .WorkSheets Цикл
// СписокЛистов.Добавить(ТекущийЛист.Name);
//КонецЦикла;
ДокДляЗаписи = РежимЗагрузки.ПолучитьОбъект();
//ОСНОВНЫЕ РЕКВИЗИТЫ
//док1 = Справочники.Номенклатура.НайтиПоНаименованию("Диван Монте-Карло");
//док = Документы.КоммерческоеПредложениеКлиенту.НайтиПоНомеру("ПР00-000001", Дата("20190101000000"));
Материал1 = сокрЛП(Лист.Cells(19, 2).text);
Себестоимость2 = сокрЛП(Лист.Cells(20, 2).text);
Высота1 = сокрЛП(Лист.Cells(2, 2).text);
Ширина2 = сокрЛП(Лист.Cells(2, 3).text);
Количество3 = сокрЛП(Лист.Cells(2, 4).text);
ЦенаМатериала4 = сокрЛП(Лист.Cells(2, 5).text);
ЦенаПродажи5 = сокрЛП(Лист.Cells(2, 6).text);
РозничнаяЦена6 = сокрЛП(Лист.Cells(2, 7).text);
Цена7 = сокрЛП(Лист.Cells(2, 8).text);
Сумма8 = сокрЛП(Лист.Cells(2, 9).text);
Скидка9 = сокрЛП(Лист.Cells(2, 10).text);
ДокДляЗаписи.Материал = Материал1;
ДокДляЗаписи.Себестоимость = Себестоимость2;
ДокДляЗаписи.Высота = Высота1;
ДокДляЗаписи.Ширина = Ширина2;
ДокДляЗаписи.Количество = Количество3;
ДокДляЗаписи.ЦенаМатериала = ЦенаМатериала4;
ДокДляЗаписи.ЦенаПродажи = ЦенаПродажи5;
ДокДляЗаписи.РозничнаяЦена = РозничнаяЦена6;
ДокДляЗаписи.Цена = Цена7;
ДокДляЗаписи.Сумма = Сумма8;
ДокДляЗаписи.Скидка = Скидка9;
//ТЧ
ДокДляЗаписи.ТабличнаяЧасть1.Очистить();
//ПЕРЕМЕННЫЕ//////////////////////////////////////////
НомерСтр = 7;
НомерСтроки = 7;
НомерКолонкиДлина = 11;
НомерКолонкиКоличество = 11;
НомерКолонки = 11;
Пока ЗначениеЗаполнено(Лист.Cells(НомерСтроки, 6).text) цикл
ТекущаяНоменклатура = сокрЛП(Лист.Cells(НомерСтроки, 6).text);
КолонкаДляОтбора = (Лист.Cells(1, НомерКолонки).text);
КолонкаДляОтбораДлина = (Лист.Cells(1, НомерКолонки).text);
КолонкаДляОтбораКоличество = (Лист.Cells(1, НомерКолонки).text);
НайденнаяСтрока = СтрНайти(КолонкаДляОтбора, ТекущаяНоменклатура);
Значение2 = "мм";
НайденнаяСтрока2 = СтрНайти(КолонкаДляОтбора, Значение2);
Значение3 = "шт";
НайденнаяСтрока3 = СтрНайти(КолонкаДляОтбора, Значение3);
Значение4 = "компл";
НайденнаяСтрока4 = СтрНайти(КолонкаДляОтбора, Значение4);
Значение5 = "Заготовка";
НайденнаяСтрока5 = СтрНайти(КолонкаДляОтбораКоличество, Значение5);
Если НайденнаяСтрока >= 1 И НайденнаяСтрока2 >= 1 Тогда
СтрокаТЧ = ДокДляЗаписи.ТабличнаяЧасть1.Добавить();
СтрокаТЧ.Длина = сокрЛП(Лист.Cells(2, НомерКолонки).text);
СтрокаТЧ.Номенклатура = ТекущаяНоменклатура;
СтрокаТЧ.Цена = сокрЛП(Лист.Cells(НомерСтроки, 10).text);
НомерСтроки = НомерСтроки + 1;
ИначеЕсли НайденнаяСтрока = 0 Тогда
НомерКолонки = НомерКолонки + 1;
ИначеЕсли НайденнаяСтрока2 = 0 И НайденнаяСтрока3 >= 1 ИЛИ НайденнаяСтрока4 >=1 Тогда
СтрокаТЧ = ДокДляЗаписи.ТабличнаяЧасть1.Добавить();
СтрокаТЧ.Номенклатура = ТекущаяНоменклатура;
СтрокаТЧ.Количество = сокрЛП(Лист.Cells(2, НомерКолонки).text);
СтрокаТЧ.Цена = сокрЛП(Лист.Cells(НомерСтроки, 10).text);
НомерСтроки = НомерСтроки + 1;
НомерКолонки = 11;
КонецЕсли;
Если НайденнаяСтрока >= 1 И НайденнаяСтрока2 >= 1 И НайденнаяСтрока5 >= 1 Тогда
НомерКолонки = НомерКолонки + 1;
СтрокаТЧ.Количество = сокрЛП(Лист.Cells(2, НомерКолонки).text);
НомерКолонки = 11; //восстанавливаю счетчик
КонецЕсли;
Если КолонкаДляОтбора = "" Тогда
Сообщить("Проверьте правила заполнения шаблона Эксель, номенклатура не найдена в строке поиска");
Прервать;
КонецЕсли;
КонецЦикла;
//СОЗДАНИЕ НОМЕНКЛАТУРЫ
НоменклатураДляЗаписиВРегистрСведений = сокрЛП(Лист.Cells(6, 6).text);
НомерСтрокиНоменклатура = 6;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &Наименование";
Пока ЗначениеЗаполнено(Лист.Cells(НомерСтрокиНоменклатура, 6).text) Цикл
ЭлементНоменклатуры = сокрЛП(Лист.Cells(НомерСтрокиНоменклатура, 6).text);
Запрос.УстановитьПараметр("Наименование", ЭлементНоменклатуры);
РезультатЗапроса = Запрос.Выполнить();
// ПРОВЕРКА УНИКАЛЬНОСТИ НОМЕНКЛАТУРЫ
Если РезультатЗапроса.Пустой() Тогда
НовыйЭлементНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлементНоменклатуры.Наименование = ЭлементНоменклатуры;
НовыйЭлементНоменклатуры.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НовыйЭлементНоменклатуры.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Клапана №2");
НовыйЭлементНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
НовыйЭлементНоменклатуры.Записать();
НомерСтрокиНоменклатура = НомерСтрокиНоменклатура + 1;
Иначе
НомерСтрокиНоменклатура = НомерСтрокиНоменклатура + 1;
КонецЕсли;
КонецЦикла;
//ЗАПИСЬ НАИМЕНОВАНИЯ НОМЕНКЛАТУРЫ В РЕКВИЗИТ ВЫХОДНОЕИЗДЕЛИЕ
ДокДляЗаписи.ВыходноеИзделие = Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураДляЗаписиВРегистрСведений);
//ЗАПИСЬ ЦЕНЫ В РЕГИСТР СВЕДЕНИЙ
//ЗаписьЦеныВРегистр = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
//ЗаписьЦеныВРегистр.Отбор.Регистратор.Установить(ДокДляЗаписи);
//ЗаписьЦеныВРегистр.Прочитать();
//
//НоваяЗаписьЗаписьЦеныВРегистр = ЗаписьЦеныВРегистр.Добавить();
//НоваяЗаписьЗаписьЦеныВРегистр.Регистратор = Документы.Клапана.НайтиПоНомеру(ДокДляЗаписи.Номер);
//НоваяЗаписьЗаписьЦеныВРегистр.Период = ДокДляЗаписи.Дата;
//НоваяЗаписьЗаписьЦеныВРегистр.Номенклатура = ДокДляЗаписи.ВыходноеИзделие;
//НоваяЗаписьЗаписьЦеныВРегистр.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Основной");
//НоваяЗаписьЗаписьЦеныВРегистр.Цена = ДокДляЗаписи.Цена;
//НоваяЗаписьЗаписьЦеныВРегистр.Валюта = Справочники.Валюты.НайтиПоНаименованию("руб.");
//// ЗаписьЦеныВРегистр.Записать(Истина);
//СОЗДАНИЕ ВАРИАНТА КОМПЛЕКТАЦИИ НОМЕНКЛАТУРЫ
НомерКолонкиНовый = 11;
НомерСтрокиНовый = 7;
ИщуНоменклатуру = сокрЛП(Лист.Cells(6, 6).text);
КомплектацияСсылка = Справочники.Номенклатура.НайтиПоНаименованию(ИщуНоменклатуру);
Если НЕ КомплектацияСсылка = Справочники.ВариантыКомплектацииНоменклатуры.ПустаяСсылка() Тогда
СозданиеВариантаКомплектации = КомплектацияСсылка.ПолучитьОбъект();
иначе
СозданиеВариантаКомплектации = КомплектацияСсылка.ПолучитьСсылку();
СозданиеВариантаКомплектации = КомплектацияСсылка.ПолучитьОбъект();
КонецЕсли;
ЗаписатьНоменклатуру = сокрЛП(Лист.Cells(6, 6).text);
НовыйЭлементНоменклатуры2 = Справочники.ВариантыКомплектацииНоменклатуры.СоздатьЭлемент();
НовыйЭлементНоменклатуры2.Владелец = справочники.Номенклатура.НайтиПоНаименованию(СозданиеВариантаКомплектации.Наименование);
НовыйЭлементНоменклатуры2.Наименование = сокрЛП(Лист.Cells(6, 6).text);
НовыйЭлементНоменклатуры2.Количество = 1;
НовыйЭлементНоменклатуры2.КоличествоУпаковок = 1;
//ТЧ ВАРИАНТА КОМПЛЕКТАЦИИ
Пока ЗначениеЗаполнено(Лист.Cells(НомерСтрокиНовый, 6).text) цикл
АктуальнаяНоменклатура = сокрЛП(Лист.Cells(НомерСтрокиНовый, 6).text);
КолонкаДляОтбораНоменклатуры = (Лист.Cells(1, НомерКолонкиНовый).text);
НайденнаяСтрокаНоменклатура = СтрНайти(КолонкаДляОтбораНоменклатуры, АктуальнаяНоменклатура);
Значение6 = "Заготовка";
НайденнаяСтрока5Номенклатура = СтрНайти(КолонкаДляОтбораНоменклатуры, Значение6);
ИщемКоличествоШтуки = СтрНайти(КолонкаДляОтбораНоменклатуры, Значение3);
ИщемКоличествоКомплекты = СтрНайти(КолонкаДляОтбораНоменклатуры, Значение4);
ИщемДлинуММ = СтрНайти(КолонкаДляОтбораНоменклатуры, Значение2);
ЗначениеМатериала = "материала";
ИщемЗначениеМатериала = СтрНайти(КолонкаДляОтбораНоменклатуры, ЗначениеМатериала);
Если НайденнаяСтрокаНоменклатура >= 1 И НайденнаяСтрока5Номенклатура >= 1 Тогда
ТЧспрНоменклатура = НовыйЭлементНоменклатуры2.Товары.Добавить();
ТЧспрНоменклатура.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(АктуальнаяНоменклатура);
НомерСтрокиНовый = НомерСтрокиНовый + 1;
ИначеЕсли НайденнаяСтрокаНоменклатура = 0 Тогда
НомерКолонкиНовый = НомерКолонкиНовый + 1;
ИначеЕсли НайденнаяСтрокаНоменклатура >= 1 И ИщемДлинуММ >= 1 И НайденнаяСтрока5Номенклатура = 0 Тогда
ТЧспрНоменклатура = НовыйЭлементНоменклатуры2.Товары.Добавить();
ТЧспрНоменклатура.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(АктуальнаяНоменклатура);
ТЧспрНоменклатура.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("мм");
ТЧспрНоменклатура.Количество = сокрЛП(Лист.Cells(2, НомерКолонкиНовый).text);
ТЧспрНоменклатура.КоличествоУпаковок = ТЧспрНоменклатура.Количество;
НомерСтрокиНовый = НомерСтрокиНовый + 1;
НомерКолонкиНовый = 11;
КонецЕсли;
Если НайденнаяСтрокаНоменклатура >= 1 И ИщемКоличествоШтуки >= 1 Тогда
ТЧспрНоменклатура = НовыйЭлементНоменклатуры2.Товары.Добавить();
ТЧспрНоменклатура.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(АктуальнаяНоменклатура);
ТЧспрНоменклатура.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(796);
ТЧспрНоменклатура.Количество = сокрЛП(Лист.Cells(2, НомерКолонкиНовый).text);
ТЧспрНоменклатура.КоличествоУпаковок = ТЧспрНоменклатура.Количество;
НомерСтрокиНовый = НомерСтрокиНовый + 1;
НомерКолонкиНовый = 11;
ИначеЕсли НайденнаяСтрокаНоменклатура >= 1 И ИщемКоличествоКомплекты >= 1 Тогда
ТЧспрНоменклатура = НовыйЭлементНоменклатуры2.Товары.Добавить();
ТЧспрНоменклатура.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(АктуальнаяНоменклатура);
ТЧспрНоменклатура.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(796);
ТЧспрНоменклатура.Количество = сокрЛП(Лист.Cells(2, НомерКолонкиНовый).text);
ТЧспрНоменклатура.КоличествоУпаковок = ТЧспрНоменклатура.Количество;
НомерСтрокиНовый = НомерСтрокиНовый + 1;
НомерКолонкиНовый = 11;
КонецЕсли;
Если НайденнаяСтрокаНоменклатура >= 1 И ИщемДлинуММ >= 1 И НайденнаяСтрока5Номенклатура >= 1 Тогда
НомерКолонкиНовый = НомерКолонкиНовый + 1;
ТЧспрНоменклатура.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(796);
ТЧспрНоменклатура.Количество = сокрЛП(Лист.Cells(2, НомерКолонкиНовый).text);
ТЧспрНоменклатура.КоличествоУпаковок = ТЧспрНоменклатура.Количество;
НомерКолонкиНовый = 11;
КонецЕсли;
Если КолонкаДляОтбораНоменклатуры = "" Тогда
Сообщить("Проверьте правила заполнения шаблона Эксель, номенклатура не найдена в строке поиска");
Прервать;
КонецЕсли;
//Прервать;
КонецЦикла;
НовыйЭлементНоменклатуры2.Записать();
Ексель.Quit();
Ексель = 0;
ДокДляЗаписи.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокЛистов()
//C:\Users\бух\Desktop\клапана.xlsx
Ексель = Новый COMОбъект("Excel.Application");
//НомерЛиста = 2;
файл = Ексель.WorkBooks.Open(ПолеВвода);
//Лист = файл .WorkSheets(НомерЛиста);
СписокЛистов = Элементы.ВыберитеНомерЛиста.СписокВыбора;
СписокЛистов.Очистить();
Для Каждого ТекущийЛист Из файл .WorkSheets Цикл
СписокЛистов.Добавить(ТекущийЛист.Name);
КонецЦикла;
Ексель.Quit();
Ексель = 0;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьНаКлиенте(Команда, Наименование)
ОткрытьНаСервере(Наименование);
КонецПроцедуры
&НаКлиенте
Процедура ПолеВводаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выбор файла";
Диалог.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
Диалог.ИндексФильтра = 0;
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.ПроверятьСуществованиеФайла = Истина;
Диалог.МножественныйВыбор = Ложь;
Диалог.ПолноеИмяФайла = ПолеВвода;
Если Диалог.Выбрать() Тогда
ПолеВвода = Диалог.ПолноеИмяФайла;
ЗаполнитьСписокЛистов();
КонецЕсли;
КонецПроцедуры
Показать
Для передачи ТЗ на клиент обычно используется ее трансофрмация в массив структур, вот стандратная процедура, может она Вам пригодится:
// Преобразует таблицу значений в массив структур.
// Может использоваться для передачи на клиент данных в том случае, если таблица
// значений содержит только такие значения, которые могут
// быть переданы с сервера на клиент.
//
// Полученный массив содержит структуры, каждая из которых повторяет
// структуру колонок таблицы значений.
//
// Не рекомендуется использовать для преобразования таблиц значений
// с большим количеством строк.
//
// Параметры:
// ТаблицаЗначений - ТаблицаЗначений - исходная таблица значений.
//
// Возвращаемое значение:
// Массив - коллекция строк таблицы в виде структур.
//
Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт
Массив = Новый Массив();
СтруктураСтрокой = "";
НужнаЗапятая = Ложь;
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
Если НужнаЗапятая Тогда
СтруктураСтрокой = СтруктураСтрокой + ",";
КонецЕсли;
СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
НужнаЗапятая = Истина;
КонецЦикла;
Для Каждого Строка Из ТаблицаЗначений Цикл
НоваяСтрока = Новый Структура(СтруктураСтрокой);
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
Массив.Добавить(НоваяСтрока);
КонецЦикла;
Возврат Массив;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот