Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // <ОПИСАНИЕ-КОДА>
- // Открываем фаил, читаем ячейки с 4-СТРОКИ по КОЛИЧЕСВО-СТРОК с 1-КОЛОНКИ по 7-КОЛОНКУ
- // Выделяем подколонки в колонках (Заявка Клиент Номенклатура Зарегистрирован) при помощи написанных методов
- // Принцип обработки текста ячеек - удаление всех символов кроме цифр, выделение значений по фиксированной длине ИНН КПП ДАТЫ КОДЫ методом ТолькоЦифры
- // ТолькоЦифры подходит для любого контента ячеек и выделяет только нужные значение, если текст-КОД с буквами то метод может исключить удаление символа или можно обратно добавить букву после удаления
- // Обработка работает с готовым регистром с уникальным ПОЛЕМ-ИЗМЕРЕНИЕ[РегистрационныйНомер], имя регистра задается в ИмяРегистраСведений
- // При повторной загрузке данных из файла записи с одинаковым полем РегистрационныйНомер не дублируются а обновляются
- // При загрузке или незагрузке файла выводится соотбщение пользователю "Удалось прочитать указанный файл!" или "Не удалось прочитать указанный файл"
- // </ОПИСАНИЕ-КОДА>
- // Параметры для подключения
- // ИмяПервойКолонки = "Заявка"; // имя первой колонки шапки-реквизита таблицы ТригерСчитыванияСтрок
- // ИмяРегистраСведений = "д1сСписокОтгруженныхЭлектронныхПоставок";
- &НаКлиенте
- Процедура ПутьКФаилуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
- Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
- Диалог.Заголовок = "Выберите файл Excel";
- Диалог.ПолноеИмяФайла = "";
- Диалог.ПредварительныйПросмотр = Истина;
- Диалог.Фильтр ="Формат Excel (*.xls;*.xlsx)|*.xls;*.xlsx|";
- ВыбранФайл=Диалог.Выбрать();
- Если ВыбранФайл Тогда
- Файл=Новый Файл(Диалог.ПолноеИмяФайла);
- ДД=Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
- Адрес=ПоместитьВоВременноеХранилище(ДД,УникальныйИдентификатор);
- ЗагрузитьДанныеНаСервере(Адрес,Файл.Расширение);
- КонецЕсли;
- КонецПроцедуры
- &НаСервере
- Процедура ЗагрузитьДанныеНаСервере(Адрес,Расширение)
- ИмяРегистраСведений = "д1сСписокОтгруженныхЭлектронныхПоставок";
- ИмяПервойКолонки = "Заявка";
- ДД=ПолучитьИзВременногоХранилища(Адрес);
- ИмяФайла=ПолучитьИмяВременногоФайла(Расширение);
- ДД.Записать(ИмяФайла);
- ТабДок=Новый ТабличныйДокумент;
- ТабДок.Прочитать(ИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Значение);
- Сообщение = Новый СообщениеПользователю;
- Попытка
- ТабДок.Прочитать(ИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Значение);
- Сообщение.Текст = "Удалось прочитать указанный файл!";
- Сообщение.Сообщить();
- Исключение
- Сообщение.Текст = "Не удалось прочитать указанный файл" + ОписаниеОшибки();
- Сообщение.Сообщить();
- Возврат;
- КонецПопытки;
- КоличествоСтрок = ТабДок.ВысотаТаблицы;
- УсловиеЧтенияСтрокФайла = "НеЧитатьСтроки";
- Для НомерСтроки = 1 По КоличествоСтрок Цикл
- // Условие чтения строк файла в цикле
- Если ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, 1) = ИмяПервойКолонки Тогда
- УсловиеЧтенияСтрокФайла = "ЧитатьСтроки";
- Продолжить;
- КонецЕсли;
- Если УсловиеЧтенияСтрокФайла = "НеЧитатьСтроки" Тогда Продолжить; КонецЕсли;
- // Поля из документа
- РеквизитыПоляЗавка = ПолучитьРеквизитыПоляЗаявка(ТабДок, НомерСтроки, 1);
- РеквизитыПоляКлиент = ПолучитьРеквизитыПоляКлиент(ТабДок, НомерСтроки, 2);
- ДатаОтгрузки = ИзСтрокиДату( ТолькоЦифры(ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, 3)) );
- РеквизитыПоляНоменклатура = ПолучитьРеквизитыПоляНоменклатура(ТабДок, НомерСтроки, 4);
- РегНомер = ТолькоЦифры(ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, 5));
- ДатаСкачатьФайлы = ИзСтрокиДату( ТолькоЦифры(ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, 6)) );
- РеквизитыПоляЗарегистрирован = ПолучитьРеквизитыПоляЗарегистрирован(ТабДок, НомерСтроки, 7);
- // Задать значение в регистр сведений ЗарегистрированЧерезЛогинКлиента
- ЗаписьПолей = Вычислить( СтрШаблон("РегистрыСведений.%1.СоздатьМенеджерЗаписи()", ИмяРегистраСведений) );
- //Измерения
- ЗаписьПолей.РегНомер = РегНомер;
- //Реквизиты
- ЗаписьПолей.ДатаОбновления = ТекущаяДата();
- ЗаписьПолей.Заявка = РеквизитыПоляЗавка.Заявка;
- ЗаписьПолей.ЗаявкаНомер = РеквизитыПоляЗавка.ЗаявкаНомер;
- ЗаписьПолей.ЗаявкаДатаОт = РеквизитыПоляЗавка.ЗаявкаДатаОт;
- ЗаписьПолей.Клиент = РеквизитыПоляКлиент.Клиент;
- ЗаписьПолей.КлиентФирма = РеквизитыПоляКлиент.Фирма;
- ЗаписьПолей.КлиентИНН = РеквизитыПоляКлиент.ИНН;
- ЗаписьПолей.КлиентКПП = РеквизитыПоляКлиент.КПП;
- ЗаписьПолей.ДатаОтгрузки = ДатаОтгрузки;
- ЗаписьПолей.Номенклатура = РеквизитыПоляНоменклатура.Номенклатура;
- ЗаписьПолей.НоменклатураКод = РеквизитыПоляНоменклатура.Код;
- ЗаписьПолей.НоменклатураНаименование = РеквизитыПоляНоменклатура.Наименование;
- Запрос = Новый Запрос;
- Запрос.Текст =
- "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
- | Номенклатура.Ссылка КАК Ссылка
- |ИЗ
- | Справочник.Номенклатура КАК Номенклатура
- |ГДЕ
- | Номенклатура.Артикул = &Артикул
- | И НЕ Номенклатура.ПометкаУдаления
- |
- |УПОРЯДОЧИТЬ ПО
- | Номенклатура.Код";
- Запрос.УстановитьПараметр("Артикул", РеквизитыПоляНоменклатура.Код);
- РезультатЗапроса = Запрос.Выполнить();
- ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
- Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
- ЗаписьПолей.НоменклатураСсылка = ВыборкаДетальныеЗаписи.Ссылка;
- КонецЦикла;
- ЗаписьПолей.ДатаСкачатьФайлы = ДатаСкачатьФайлы;
- ЗаписьПолей.Зарегистрирован = РеквизитыПоляЗарегистрирован.Зарегистрирован;
- ЗаписьПолей.ЗарегистрированЧерезЛогинКлиента = РеквизитыПоляЗарегистрирован.ЧерезЛогинКлиента;
- ЗаписьПолей.ЗарегистрированЧерезКодПатнера = РеквизитыПоляЗарегистрирован.ЧерезКодПатнера;
- ЗаписьПолей.Записать(Истина);
- КонецЦикла;
- КонецПроцедуры
- //У поля Заявка под-поля ЗаявкаНомер ЗаявкаДатаОт
- Функция ПолучитьРеквизитыПоляЗаявка(ТабДок, НомерСтроки, НомерСтолбца)
- ЗначенияРеквизитов = Новый Структура;
- ТекстПоляЗаявка = ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца);
- НомерИДата = ТолькоЦифры(ТекстПоляЗаявка);
- ЗаявкаНомер = "WZ" + Лев(НомерИДата, 8); // нужна ли сортирвока по этому номеру, WZ убрать в другую колонку реквизит?
- ЗаявкаДатаОт = Прав(НомерИДата, 8);
- ЗначенияРеквизитов.Вставить("Заявка", ТекстПоляЗаявка);
- ЗначенияРеквизитов.Вставить("ЗаявкаНомер", ЗаявкаНомер);
- ЗначенияРеквизитов.Вставить("ЗаявкаДатаОт", изСтрокиДату(ЗаявкаДатаОт));
- Возврат ЗначенияРеквизитов;
- КонецФункции
- //У поля Клиен под-поля Фирма ИНН КПП
- Функция ПолучитьРеквизитыПоляКлиент(ТабДок, НомерСтроки, НомерСтолбца)
- ЗначенияРеквизитов = Новый Структура;
- ТекстПоляКлиент = ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца);
- ФирмаИннКпп = СтрРазделить(ТекстПоляКлиент, Символы.ПС);
- Фирма = ФирмаИннКпп[0];
- ИНН = ТолькоЦифры( ФирмаИннКпп[1] );
- КПП = ТолькоЦифры( ФирмаИннКпп[2] );
- ЗначенияРеквизитов.Вставить("Клиент", ТекстПоляКлиент );
- ЗначенияРеквизитов.Вставить("Фирма", ФирмаИннКпп[0] );
- ЗначенияРеквизитов.Вставить("ИНН", ТолькоЦифры(ФирмаИннКпп[1]) );
- ЗначенияРеквизитов.Вставить("КПП", ТолькоЦифры(ФирмаИннКпп[2]) );
- Возврат ЗначенияРеквизитов;
- КонецФункции
- //У поля Номенклатура под-поля Код Наименование
- Функция ПолучитьРеквизитыПоляНоменклатура(ТабДок, НомерСтроки, НомерСтолбца)
- ЗначенияРеквизитов = Новый Структура;
- ТекстПоляНоменклатура = ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца);
- КодНаименование = СтрРазделить(ТекстПоляНоменклатура, Символы.ПС);
- ЗначенияРеквизитов.Вставить("Номенклатура", ТекстПоляНоменклатура );
- ЗначенияРеквизитов.Вставить("Код", КодНаименование[0] );
- ЗначенияРеквизитов.Вставить("Наименование", КодНаименование[1] );
- Возврат ЗначенияРеквизитов;
- КонецФункции
- //У поля Зарегистрирован под-поля ЧерезЛогинКлиента
- Функция ПолучитьРеквизитыПоляЗарегистрирован(ТабДок, НомерСтроки, НомерСтолбца)
- ЗначенияРеквизитов = Новый Структура;
- ТекстПоляПоляЗарегистрирован = ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца);
- КодНаименование = СтрРазделить(ТекстПоляПоляЗарегистрирован, " ");
- ЗначенияРеквизитов.Вставить("Зарегистрирован", ТекстПоляПоляЗарегистрирован );
- ЗначенияРеквизитов.Вставить("ЧерезЛогинКлиента", КодНаименование[0] );
- ЗначенияРеквизитов.Вставить("ЧерезКодПатнера", ТолькоЦифры(КодНаименование[1]) );
- Возврат ЗначенияРеквизитов;
- КонецФункции
- // Удаляет из строки все не цифры
- Функция ТолькоЦифры(Строка, ИсключениеСимвол = "")
- ИсключениеКодСимвола = КодСимвола(ИсключениеСимвол);
- Длинна = СтрДлина(Строка);
- Итог = "";
- Для Инд = 1 По Длинна Цикл
- Символ = Сред(Строка,Инд,1);
- КодСимвола = КодСимвола(Символ);
- Если (КодСимвола > 47 И КодСимвола < 58) ИЛИ (КодСимвола = ИсключениеКодСимвола) Тогда
- Итог = Итог + Символ;
- КонецЕсли;
- КонецЦикла;
- Возврат Строка( Итог );
- КонецФункции
- Функция ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца)
- Возврат ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + НомерСтолбца).ТекущаяОбласть.Текст;
- КонецФункции
- Функция изСтрокиДату(строкаДата)
- День = Лев(строкаДата, 2);
- Месяц = Сред(строкаДата, 3, 2);
- Год = Прав(строкаДата, 4);
- //строкаДата = СтрШаблон("%1%2%3", Год, Месяц, День);
- Возврат Дата(Год, Месяц, День); //Формат(строкаДата, "ДЛФ=Д")
- КонецФункции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement