Advertisement
Savelyev_Vyacheslav

загрузка фаила чтение на клиенте передача на сервер

Jul 18th, 2023
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.04 KB | None | 0 0
  1.  
  2. // <ОПИСАНИЕ-КОДА>
  3. // Открываем фаил, читаем ячейки с 4-СТРОКИ по КОЛИЧЕСВО-СТРОК с 1-КОЛОНКИ по 7-КОЛОНКУ
  4. // Выделяем подколонки в колонках (Заявка Клиент Номенклатура Зарегистрирован) при помощи написанных методов
  5. // Принцип обработки текста ячеек - удаление всех символов кроме цифр, выделение значений по фиксированной длине ИНН КПП ДАТЫ КОДЫ методом ТолькоЦифры
  6. // ТолькоЦифры подходит для любого контента ячеек и выделяет только нужные значение, если текст-КОД с буквами то метод может исключить удаление символа или можно обратно добавить букву после удаления
  7. // Обработка работает с готовым регистром с уникальным ПОЛЕМ-ИЗМЕРЕНИЕ[РегистрационныйНомер], имя регистра задается в ИмяРегистраСведений
  8. // При повторной загрузке данных из файла записи с одинаковым полем РегистрационныйНомер не дублируются а обновляются
  9. // При загрузке или незагрузке файла выводится соотбщение пользователю "Удалось прочитать указанный файл!" или "Не удалось прочитать указанный файл"
  10. // </ОПИСАНИЕ-КОДА>
  11.  
  12. // Параметры для подключения
  13. // ИмяПервойКолонки = "Заявка"; // имя первой колонки шапки-реквизита таблицы ТригерСчитыванияСтрок
  14. // ИмяРегистраСведений = "д1сСписокОтгруженныхЭлектронныхПоставок";
  15.  
  16. &НаКлиенте
  17. Процедура ПутьКФаилуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
  18. Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
  19. Диалог.Заголовок = "Выберите файл Excel";
  20. Диалог.ПолноеИмяФайла = "";
  21. Диалог.ПредварительныйПросмотр = Истина;
  22. Диалог.Фильтр ="Формат Excel (*.xls;*.xlsx)|*.xls;*.xlsx|";
  23. ВыбранФайл=Диалог.Выбрать();
  24. Если ВыбранФайл Тогда
  25. Файл=Новый Файл(Диалог.ПолноеИмяФайла);
  26. ДД=Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
  27. Адрес=ПоместитьВоВременноеХранилище(ДД,УникальныйИдентификатор);
  28. ЗагрузитьДанныеНаСервере(Адрес,Файл.Расширение);
  29. КонецЕсли;
  30. КонецПроцедуры
  31.  
  32.  
  33. &НаСервере
  34. Процедура ЗагрузитьДанныеНаСервере(Адрес,Расширение)
  35. ИмяРегистраСведений = "д1сСписокОтгруженныхЭлектронныхПоставок";
  36. ИмяПервойКолонки = "Заявка";
  37.  
  38. ДД=ПолучитьИзВременногоХранилища(Адрес);
  39. ИмяФайла=ПолучитьИмяВременногоФайла(Расширение);
  40. ДД.Записать(ИмяФайла);
  41. ТабДок=Новый ТабличныйДокумент;
  42. ТабДок.Прочитать(ИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Значение);
  43.  
  44. Сообщение = Новый СообщениеПользователю;
  45.  
  46. Попытка
  47. ТабДок.Прочитать(ИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Значение);
  48. Сообщение.Текст = "Удалось прочитать указанный файл!";
  49. Сообщение.Сообщить();
  50. Исключение
  51. Сообщение.Текст = "Не удалось прочитать указанный файл" + ОписаниеОшибки();
  52. Сообщение.Сообщить();
  53. Возврат;
  54. КонецПопытки;
  55.  
  56. КоличествоСтрок = ТабДок.ВысотаТаблицы;
  57. УсловиеЧтенияСтрокФайла = "НеЧитатьСтроки";
  58. Для НомерСтроки = 1 По КоличествоСтрок Цикл
  59.  
  60. // Условие чтения строк файла в цикле
  61. Если ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, 1) = ИмяПервойКолонки Тогда
  62. УсловиеЧтенияСтрокФайла = "ЧитатьСтроки";
  63. Продолжить;
  64. КонецЕсли;
  65. Если УсловиеЧтенияСтрокФайла = "НеЧитатьСтроки" Тогда Продолжить; КонецЕсли;
  66.  
  67. // Поля из документа
  68. РеквизитыПоляЗавка = ПолучитьРеквизитыПоляЗаявка(ТабДок, НомерСтроки, 1);
  69. РеквизитыПоляКлиент = ПолучитьРеквизитыПоляКлиент(ТабДок, НомерСтроки, 2);
  70. ДатаОтгрузки = ИзСтрокиДату( ТолькоЦифры(ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, 3)) );
  71. РеквизитыПоляНоменклатура = ПолучитьРеквизитыПоляНоменклатура(ТабДок, НомерСтроки, 4);
  72. РегНомер = ТолькоЦифры(ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, 5));
  73. ДатаСкачатьФайлы = ИзСтрокиДату( ТолькоЦифры(ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, 6)) );
  74. РеквизитыПоляЗарегистрирован = ПолучитьРеквизитыПоляЗарегистрирован(ТабДок, НомерСтроки, 7);
  75.  
  76. // Задать значение в регистр сведений ЗарегистрированЧерезЛогинКлиента
  77. ЗаписьПолей = Вычислить( СтрШаблон("РегистрыСведений.%1.СоздатьМенеджерЗаписи()", ИмяРегистраСведений) );
  78. //Измерения
  79. ЗаписьПолей.РегНомер = РегНомер;
  80. //Реквизиты
  81. ЗаписьПолей.ДатаОбновления = ТекущаяДата();
  82. ЗаписьПолей.Заявка = РеквизитыПоляЗавка.Заявка;
  83. ЗаписьПолей.ЗаявкаНомер = РеквизитыПоляЗавка.ЗаявкаНомер;
  84. ЗаписьПолей.ЗаявкаДатаОт = РеквизитыПоляЗавка.ЗаявкаДатаОт;
  85. ЗаписьПолей.Клиент = РеквизитыПоляКлиент.Клиент;
  86. ЗаписьПолей.КлиентФирма = РеквизитыПоляКлиент.Фирма;
  87. ЗаписьПолей.КлиентИНН = РеквизитыПоляКлиент.ИНН;
  88. ЗаписьПолей.КлиентКПП = РеквизитыПоляКлиент.КПП;
  89. ЗаписьПолей.ДатаОтгрузки = ДатаОтгрузки;
  90. ЗаписьПолей.Номенклатура = РеквизитыПоляНоменклатура.Номенклатура;
  91. ЗаписьПолей.НоменклатураКод = РеквизитыПоляНоменклатура.Код;
  92. ЗаписьПолей.НоменклатураНаименование = РеквизитыПоляНоменклатура.Наименование;
  93.  
  94. Запрос = Новый Запрос;
  95. Запрос.Текст =
  96. "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
  97. | Номенклатура.Ссылка КАК Ссылка
  98. |ИЗ
  99. | Справочник.Номенклатура КАК Номенклатура
  100. |ГДЕ
  101. | Номенклатура.Артикул = &Артикул
  102. | И НЕ Номенклатура.ПометкаУдаления
  103. |
  104. |УПОРЯДОЧИТЬ ПО
  105. | Номенклатура.Код";
  106.  
  107. Запрос.УстановитьПараметр("Артикул", РеквизитыПоляНоменклатура.Код);
  108. РезультатЗапроса = Запрос.Выполнить();
  109. ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
  110. Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  111. ЗаписьПолей.НоменклатураСсылка = ВыборкаДетальныеЗаписи.Ссылка;
  112. КонецЦикла;
  113.  
  114. ЗаписьПолей.ДатаСкачатьФайлы = ДатаСкачатьФайлы;
  115. ЗаписьПолей.Зарегистрирован = РеквизитыПоляЗарегистрирован.Зарегистрирован;
  116. ЗаписьПолей.ЗарегистрированЧерезЛогинКлиента = РеквизитыПоляЗарегистрирован.ЧерезЛогинКлиента;
  117. ЗаписьПолей.ЗарегистрированЧерезКодПатнера = РеквизитыПоляЗарегистрирован.ЧерезКодПатнера;
  118.  
  119. ЗаписьПолей.Записать(Истина);
  120. КонецЦикла;
  121. КонецПроцедуры
  122.  
  123. //У поля Заявка под-поля ЗаявкаНомер ЗаявкаДатаОт
  124. Функция ПолучитьРеквизитыПоляЗаявка(ТабДок, НомерСтроки, НомерСтолбца)
  125. ЗначенияРеквизитов = Новый Структура;
  126. ТекстПоляЗаявка = ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца);
  127. НомерИДата = ТолькоЦифры(ТекстПоляЗаявка);
  128. ЗаявкаНомер = "WZ" + Лев(НомерИДата, 8); // нужна ли сортирвока по этому номеру, WZ убрать в другую колонку реквизит?
  129. ЗаявкаДатаОт = Прав(НомерИДата, 8);
  130. ЗначенияРеквизитов.Вставить("Заявка", ТекстПоляЗаявка);
  131. ЗначенияРеквизитов.Вставить("ЗаявкаНомер", ЗаявкаНомер);
  132. ЗначенияРеквизитов.Вставить("ЗаявкаДатаОт", изСтрокиДату(ЗаявкаДатаОт));
  133. Возврат ЗначенияРеквизитов;
  134. КонецФункции
  135. //У поля Клиен под-поля Фирма ИНН КПП
  136. Функция ПолучитьРеквизитыПоляКлиент(ТабДок, НомерСтроки, НомерСтолбца)
  137. ЗначенияРеквизитов = Новый Структура;
  138. ТекстПоляКлиент = ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца);
  139. ФирмаИннКпп = СтрРазделить(ТекстПоляКлиент, Символы.ПС);
  140. Фирма = ФирмаИннКпп[0];
  141. ИНН = ТолькоЦифры( ФирмаИннКпп[1] );
  142. КПП = ТолькоЦифры( ФирмаИннКпп[2] );
  143. ЗначенияРеквизитов.Вставить("Клиент", ТекстПоляКлиент );
  144. ЗначенияРеквизитов.Вставить("Фирма", ФирмаИннКпп[0] );
  145. ЗначенияРеквизитов.Вставить("ИНН", ТолькоЦифры(ФирмаИннКпп[1]) );
  146. ЗначенияРеквизитов.Вставить("КПП", ТолькоЦифры(ФирмаИннКпп[2]) );
  147.  
  148. Возврат ЗначенияРеквизитов;
  149. КонецФункции
  150. //У поля Номенклатура под-поля Код Наименование
  151. Функция ПолучитьРеквизитыПоляНоменклатура(ТабДок, НомерСтроки, НомерСтолбца)
  152. ЗначенияРеквизитов = Новый Структура;
  153. ТекстПоляНоменклатура = ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца);
  154. КодНаименование = СтрРазделить(ТекстПоляНоменклатура, Символы.ПС);
  155. ЗначенияРеквизитов.Вставить("Номенклатура", ТекстПоляНоменклатура );
  156. ЗначенияРеквизитов.Вставить("Код", КодНаименование[0] );
  157. ЗначенияРеквизитов.Вставить("Наименование", КодНаименование[1] );
  158. Возврат ЗначенияРеквизитов;
  159. КонецФункции
  160. //У поля Зарегистрирован под-поля ЧерезЛогинКлиента
  161. Функция ПолучитьРеквизитыПоляЗарегистрирован(ТабДок, НомерСтроки, НомерСтолбца)
  162. ЗначенияРеквизитов = Новый Структура;
  163. ТекстПоляПоляЗарегистрирован = ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца);
  164. КодНаименование = СтрРазделить(ТекстПоляПоляЗарегистрирован, " ");
  165. ЗначенияРеквизитов.Вставить("Зарегистрирован", ТекстПоляПоляЗарегистрирован );
  166. ЗначенияРеквизитов.Вставить("ЧерезЛогинКлиента", КодНаименование[0] );
  167. ЗначенияРеквизитов.Вставить("ЧерезКодПатнера", ТолькоЦифры(КодНаименование[1]) );
  168. Возврат ЗначенияРеквизитов;
  169. КонецФункции
  170. // Удаляет из строки все не цифры
  171. Функция ТолькоЦифры(Строка, ИсключениеСимвол = "")
  172. ИсключениеКодСимвола = КодСимвола(ИсключениеСимвол);
  173. Длинна = СтрДлина(Строка);
  174. Итог = "";
  175. Для Инд = 1 По Длинна Цикл
  176. Символ = Сред(Строка,Инд,1);
  177. КодСимвола = КодСимвола(Символ);
  178. Если (КодСимвола > 47 И КодСимвола < 58) ИЛИ (КодСимвола = ИсключениеКодСимвола) Тогда
  179. Итог = Итог + Символ;
  180. КонецЕсли;
  181. КонецЦикла;
  182. Возврат Строка( Итог );
  183. КонецФункции
  184.  
  185. Функция ПолучитьЗначениеИзЯчейки(ТабДок, НомерСтроки, НомерСтолбца)
  186. Возврат ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + НомерСтолбца).ТекущаяОбласть.Текст;
  187. КонецФункции
  188.  
  189. Функция изСтрокиДату(строкаДата)
  190. День = Лев(строкаДата, 2);
  191. Месяц = Сред(строкаДата, 3, 2);
  192. Год = Прав(строкаДата, 4);
  193. //строкаДата = СтрШаблон("%1%2%3", Год, Месяц, День);
  194. Возврат Дата(Год, Месяц, День); //Формат(строкаДата, "ДЛФ=Д")
  195. КонецФункции
  196.  
  197.  
  198.  
  199.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement