From e60192d3ed8e0c026a34648907e3a15d8384ca6a Mon Sep 17 00:00:00 2001 From: wakadakawaka Date: Sun, 27 Jul 2025 21:46:00 +0500 Subject: [PATCH] edit --- .../bsp-zagruzka-iz-faila/fragmenty-koda.json | 54 +++ .../{Обработка Загрузка данных из файла.md => 1. Обработка Загрузка данных из файла.md} | 4 +- ...ваемые алгоритмы загрузки в справочники.md => 2. Настраиваемые алгоритмы загрузки в справочники.md} | 4 +- .../Загрузка данных из файла/3. Загрузка данных в табличную часть.md | 319 ++++++++++++++++++ .../Программное создание табличного макета для загрузки данных в табличную часть.md | 67 ++++ 5 files changed, 444 insertions(+), 4 deletions(-) create mode 100644 public/bsp-zagruzka-iz-faila/fragmenty-koda.json rename src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/{Обработка Загрузка данных из файла.md => 1. Обработка Загрузка данных из файла.md} (91%) rename src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/{Настраиваемые алгоритмы загрузки в справочники.md => 2. Настраиваемые алгоритмы загрузки в справочники.md} (98%) create mode 100644 src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/3. Загрузка данных в табличную часть.md create mode 100644 src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Программное создание табличного макета для загрузки данных в табличную часть.md diff --git a/public/bsp-zagruzka-iz-faila/fragmenty-koda.json b/public/bsp-zagruzka-iz-faila/fragmenty-koda.json new file mode 100644 index 0000000..2b48cf0 --- /dev/null +++ b/public/bsp-zagruzka-iz-faila/fragmenty-koda.json @@ -0,0 +1,54 @@ +[ + { + "value": [ + { + "value": "// Определяет список справочников, доступных для загрузки с помощью подсистемы \"Загрузка данных из файла\".\r\n//\r\n// Параметры:\r\n// ЗагружаемыеСправочники - ТаблицаЗначений - список справочников, в которые возможна загрузка данных:\r\n// * ПолноеИмя - Строка - полное имя справочника (как в метаданных).\r\n// * Представление - Строка - представление справочника в списке выбора.\r\n// * ПрикладнаяЗагрузка - Булево - если Истина, значит справочник использует собственный алгоритм загрузки и\r\n// в модуле менеджера справочника определены функции.\r\n//\r\nПроцедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт\r\n\u0009\r\n\u0009// Запрет загрузки в определенные справочники\r\n\u0009ИсключаемыеИзЗагрузки = Новый Массив;\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.ВерсииРасширений.ПолноеИмя());\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.ВидыКонтактнойИнформации.ПолноеИмя());\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.ЗначенияСвойствОбъектов.ПолноеИмя());\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.ЗначенияСвойствОбъектовИерархия.ПолноеИмя());\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.НастройкиАвторизацииИнтернетСервисов.ПолноеИмя());\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты.ПолноеИмя());\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.ПапкиФайлов.ПолноеИмя());\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.ПроизводственныеКалендари.ПолноеИмя());\r\n\u0009ИсключаемыеИзЗагрузки.Добавить(Метаданные.Справочники.ЯзыкиПечатныхФорм.ПолноеИмя());\r\n\u0009\r\n\u0009Для каждого ИмяСправочника Из ИсключаемыеИзЗагрузки Цикл\r\n\u0009\u0009\r\n\u0009\u0009СтрокаТаблицы = ЗагружаемыеСправочники.Найти(ИмяСправочника, \"ПолноеИмя\");\r\n\u0009\u0009Если СтрокаТаблицы <> Неопределено Тогда\r\n\u0009\u0009\u0009ЗагружаемыеСправочники.Удалить(СтрокаТаблицы);\r\n\u0009\u0009КонецЕсли;\r\n\u0009\r\n\u0009КонецЦикла;\r\n\r\n\u0009// Собственный алгоритм загрузки данных в справочник \"Номенклатура\"\r\n\u0009СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.Номенклатура.ПолноеИмя(), \"ПолноеИмя\");\r\n\u0009Если СтрокаТаблицы <> Неопределено Тогда\r\n\u0009\u0009СтрокаТаблицы.ПрикладнаяЗагрузка = Истина;\u0009\u0009\r\n\u0009КонецЕсли;\r\n\r\nКонецПроцедуры\r\n", + "type": "П.ЭлементыДанных.Код", + "name": "ОМ ЗагрузкаДанныхИзФайлаПереопределяемый" + }, + { + "value": "#Область ПрограммныйИнтерфейс\r\n\r\n#Область ДляВызоваИзДругихПодсистем\r\n\r\n// СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла\r\n\r\n// Устанавливает параметры загрузки данных из файла\r\n//\r\n// Параметры:\r\n// Параметры - см. ЗагрузкаДанныхИзФайла.ПараметрыЗагрузкиИзФайла\r\n// \r\nПроцедура ОпределитьПараметрыЗагрузкиДанныхИзФайла(Параметры) Экспорт\r\n\u0009\r\n\u0009Параметры.ТипДанныхКолонки.Вставить(\"Штрихкод\", ОбщегоНазначения.ОписаниеТипаСтрока(50));\r\n\u0009Параметры.ТипДанныхКолонки.Вставить(\"Артикул\", ОбщегоНазначения.ОписаниеТипаСтрока(50));\r\n\u0009Параметры.ТипДанныхКолонки.Вставить(\"Наименование\", ОбщегоНазначения.ОписаниеТипаСтрока(100));\r\n\u0009\u0009\r\nКонецПроцедуры\r\n\r\n// Производит сопоставление загружаемых данных с данными в ИБ.\r\n//\r\n// Параметры:\r\n// ЗагружаемыеДанные - см. ЗагрузкаДанныхИзФайла.ТаблицаСопоставления\r\n//\r\nПроцедура СопоставитьЗагружаемыеДанныеИзФайла(ЗагружаемыеДанные) Экспорт\r\n\u0009\r\n\u0009Запрос = Новый Запрос;\r\n\u0009Запрос.Текст = \r\n\u0009\u0009\"ВЫБРАТЬ\r\n\u0009\u0009|\u0009ЗагружаемыеДанные.Наименование КАК Наименование,\r\n\u0009\u0009|\u0009ЗагружаемыеДанные.Штрихкод КАК Штрихкод,\r\n\u0009\u0009|\u0009ЗагружаемыеДанные.Артикул КАК Артикул,\r\n\u0009\u0009|\u0009ЗагружаемыеДанные.Идентификатор КАК Идентификатор\r\n\u0009\u0009|ПОМЕСТИТЬ ВТ_ЗагружаемыеДанные\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009&ЗагружаемыеДанные КАК ЗагружаемыеДанные\r\n\u0009\u0009|\r\n\u0009\u0009|ИНДЕКСИРОВАТЬ ПО\r\n\u0009\u0009|\u0009Штрихкод,\r\n\u0009\u0009|\u0009Идентификатор,\r\n\u0009\u0009|\u0009Артикул\r\n\u0009\u0009|;\r\n\u0009\u0009|\r\n\u0009\u0009|////////////////////////////////////////////////////////////////////////////////\r\n\u0009\u0009|ВЫБРАТЬ\r\n\u0009\u0009|\u0009ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,\r\n\u0009\u0009|\u0009ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,\r\n\u0009\u0009|\u0009ВТ_ЗагружаемыеДанные.Идентификатор КАК Идентификатор\r\n\u0009\u0009|ПОМЕСТИТЬ ВТ_СопоставленныеТоварыПоШтрихкоду\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009ВТ_ЗагружаемыеДанные КАК ВТ_ЗагружаемыеДанные\r\n\u0009\u0009|\u0009\u0009ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры\r\n\u0009\u0009|\u0009\u0009ПО ВТ_ЗагружаемыеДанные.Штрихкод = ШтрихкодыНоменклатуры.Штрихкод\r\n\u0009\u0009|\u0009\u0009\u0009И (ВТ_ЗагружаемыеДанные.Штрихкод <> \"\"\"\")\r\n\u0009\u0009|;\r\n\u0009\u0009|\r\n\u0009\u0009|////////////////////////////////////////////////////////////////////////////////\r\n\u0009\u0009|ВЫБРАТЬ\r\n\u0009\u0009|\u0009ВТ_ЗагружаемыеДанные.Идентификатор КАК Идентификатор,\r\n\u0009\u0009|\u0009ВТ_ЗагружаемыеДанные.Артикул КАК Артикул\r\n\u0009\u0009|ПОМЕСТИТЬ ВТ_ДанныеДляСопоставленияПоАртикулу\r\n\u0009\u0009|ИЗ \r\n\u0009\u0009|\u0009ВТ_ЗагружаемыеДанные КАК ВТ_ЗагружаемыеДанные\r\n\u0009\u0009|\u0009\u0009ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СопоставленныеТоварыПоШтрихкоду КАК ВТ_СопоставленныеТоварыПоШтрихкоду\r\n\u0009\u0009|\u0009\u0009ПО ВТ_ЗагружаемыеДанные.Идентификатор = ВТ_СопоставленныеТоварыПоШтрихкоду.Идентификатор\r\n\u0009\u0009|ГДЕ\r\n\u0009\u0009|\u0009ВТ_СопоставленныеТоварыПоШтрихкоду.Штрихкод ЕСТЬ NULL\r\n\u0009\u0009|;\r\n\u0009\u0009|\r\n\u0009\u0009|////////////////////////////////////////////////////////////////////////////////\r\n\u0009\u0009|ВЫБРАТЬ\r\n\u0009\u0009|\u0009ВТ_СопоставленныеТоварыПоШтрихкоду.Идентификатор КАК Идентификатор,\r\n\u0009\u0009|\u0009ВТ_СопоставленныеТоварыПоШтрихкоду.Номенклатура КАК Ссылка\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009ВТ_СопоставленныеТоварыПоШтрихкоду КАК ВТ_СопоставленныеТоварыПоШтрихкоду\r\n\u0009\u0009|\r\n\u0009\u0009|ОБЪЕДИНИТЬ ВСЕ\r\n\u0009\u0009|\r\n\u0009\u0009|ВЫБРАТЬ\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставленияПоАртикулу.Идентификатор,\r\n\u0009\u0009|\u0009Номенклатура.Ссылка\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставленияПоАртикулу КАК ВТ_ДанныеДляСопоставленияПоАртикулу\r\n\u0009\u0009|\u0009\u0009ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура\r\n\u0009\u0009|\u0009\u0009ПО ВТ_ДанныеДляСопоставленияПоАртикулу.Артикул = Номенклатура.Артикул\r\n\u0009\u0009|\u0009\u0009\u0009И (ВТ_ДанныеДляСопоставленияПоАртикулу.Артикул <> \"\"\"\")\r\n\u0009\u0009|\u0009\u0009\u0009И (Номенклатура.ПометкаУдаления = ЛОЖЬ)\";\r\n\u0009\r\n\u0009Запрос.УстановитьПараметр(\"ЗагружаемыеДанные\", ЗагружаемыеДанные);\r\n\u0009РезультатЗапроса = Запрос.Выполнить();\r\n\u0009\r\n\u0009Выборка = РезультатЗапроса.Выбрать();\r\n\u0009\r\n\u0009Пока Выборка.Следующий() Цикл\r\n\u0009\u0009\r\n\u0009\u0009Фильтр = Новый Структура(\"Идентификатор\", Выборка.Идентификатор);\r\n\u0009\u0009НайденныеСтроки = ЗагружаемыеДанные.НайтиСтроки(Фильтр);\r\n\u0009\u0009Для каждого Строка Из НайденныеСтроки Цикл\r\n\u0009\u0009\u0009Строка.ОбъектСопоставления = Выборка.Ссылка;\r\n\u0009\u0009КонецЦикла;\r\n\u0009\u0009\r\n\u0009КонецЦикла;\r\n\u0009\r\nКонецПроцедуры\r\n\r\n// Загрузка данных из файла.\r\n//\r\n// Параметры:\r\n// ЗагружаемыеДанные - см. ЗагрузкаДанныхИзФайла.ОписаниеЗагружаемыхДанныеДляСправочников\r\n// ПараметрыЗагрузки - см. ЗагрузкаДанныхИзФайла.НастройкиЗагрузкиДанных\r\n// Отказ - Булево - отмена загрузки. Например, если данные некорректные.\r\n// – Булево – Отмена загрузки\r\nПроцедура ЗагрузитьИзФайла(ЗагружаемыеДанные, ПараметрыЗагрузки, Отказ) Экспорт\r\n\u0009\r\n\u0009ВидыНоменклатуры = Новый Соответствие;\r\n\u0009ЕдиницыИзмерения = Новый Соответствие;\r\n\u0009ГруппыНоменклатуры = Новый Соответствие; \r\n\u0009\r\n\u0009СтавкаНДСПоУмолчанию = Перечисления.СтавкиНДС.НДС20;\r\n\u0009\r\n\u0009Для Каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл\r\n\u0009\u0009\r\n\u0009\u0009НоменклатураНайдена = ЗначениеЗаполнено(СтрокаТаблицы.ОбъектСопоставления);\r\n\r\n\u0009\u0009Если (НоменклатураНайдена И ПараметрыЗагрузки.ОбновлятьСуществующие = 0)\r\n\u0009\u0009\u0009Или (Не НоменклатураНайдена И ПараметрыЗагрузки.СоздаватьНовые = 0) Тогда\r\n\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Пропущен\";\r\n\u0009\u0009\u0009Продолжить;\r\n\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009НачатьТранзакцию();\r\n\u0009\u0009Попытка\r\n\r\n\u0009\u0009\u0009Если НоменклатураНайдена Тогда\r\n\r\n\u0009\u0009\u0009\u0009Блокировка = Новый БлокировкаДанных;\r\n\u0009\u0009\u0009\u0009ЭлементБлокировки = Блокировка.Добавить(\"Справочник.Номенклатура\");\r\n\u0009\u0009\u0009\u0009ЭлементБлокировки.УстановитьЗначение(\"Ссылка\", СтрокаТаблицы.ОбъектСопоставления);\r\n\u0009\u0009\u0009\u0009Блокировка.Заблокировать();\r\n\r\n\u0009\u0009\u0009\u0009ЭлементСправочника = СтрокаТаблицы.ОбъектСопоставления.ПолучитьОбъект();\r\n\r\n\u0009\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Обновлен\";\r\n\r\n\u0009\u0009\u0009Иначе\r\n\r\n\u0009\u0009\u0009\u0009ЭлементСправочника = СоздатьЭлемент();\r\n\u0009\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Создан\";\r\n\r\n\u0009\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009\u0009ЭлементСправочника.Наименование = СтрокаТаблицы.Наименование;\r\n\u0009\u0009\u0009ЭлементСправочника.НаименованиеПолное = СтрокаТаблицы.Наименование;\r\n\u0009\u0009\u0009ЭлементСправочника.Артикул = СтрокаТаблицы.Артикул;\r\n\r\n\u0009\u0009\u0009Если ЗначениеЗаполнено(СтрокаТаблицы.Родитель) Тогда\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009Группа = ГруппыНоменклатуры.Получить(СтрокаТаблицы.Родитель);\r\n\u0009\u0009\u0009\u0009Если Группа = Неопределено Тогда\r\n\u0009\u0009\u0009\u0009\u0009Группа = НайтиПоНаименованию(СтрокаТаблицы.Родитель, Истина);\r\n\u0009\u0009\u0009\u0009\u0009Если НЕ Группа.ЭтоГруппа ИЛИ Группа.Пустая() Тогда\r\n\u0009\u0009\u0009\u0009\u0009\u0009НоваяГруппа = СоздатьГруппу();\r\n\u0009\u0009\u0009\u0009\u0009\u0009НоваяГруппа.Наименование = СтрокаТаблицы.Родитель;\r\n\u0009\u0009\u0009\u0009\u0009\u0009НоваяГруппа.Записать(); \r\n\u0009\u0009\u0009\u0009\u0009\u0009Группа = НоваяГруппа.Ссылка;\r\n\u0009\u0009\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\u0009\u0009ГруппыНоменклатуры.Вставить(СтрокаТаблицы.Родитель, Группа);\r\n\u0009\u0009\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009\u0009\u0009ЭлементСправочника.Родитель = Группа;\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\r\n\u0009\u0009\u0009ВидНоменклатуры = ВидыНоменклатуры.Получить(СтрокаТаблицы.ВидНоменклатуры);\r\n\u0009\u0009\u0009Если ВидНоменклатуры = Неопределено Тогда\r\n\r\n\u0009\u0009\u0009\u0009ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(СтрокаТаблицы.ВидНоменклатуры, Истина);\r\n\u0009\u0009\u0009\u0009Если ВидНоменклатуры.Пустая() Тогда\r\n\u0009\u0009\u0009\u0009\u0009НовыйВидНоменклатуры = Справочники.ВидыНоменклатуры.СоздатьЭлемент();\r\n\u0009\u0009\u0009\u0009\u0009НовыйВидНоменклатуры.Наименование = СтрокаТаблицы.ВидНоменклатуры;\r\n\u0009\u0009\u0009\u0009\u0009НовыйВидНоменклатуры.Записать(); \r\n\u0009\u0009\u0009\u0009\u0009ВидНоменклатуры = НовыйВидНоменклатуры.Ссылка;\r\n\u0009\u0009\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009\u0009\u0009ВидыНоменклатуры.Вставить(СтрокаТаблицы.ВидНоменклатуры, ВидНоменклатуры);\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009КонецЕсли; \r\n\u0009\u0009\u0009\r\n\u0009\u0009\u0009ЭлементСправочника.ВидНоменклатуры = ВидНоменклатуры;\r\n\u0009\u0009\u0009\r\n\u0009\u0009\u0009ЕдиницаИзмерения = ЕдиницыИзмерения.Получить(СтрокаТаблицы.ЕдиницаИзмерения);\r\n\u0009\u0009\u0009Если ЕдиницаИзмерения = Неопределено Тогда\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(СтрокаТаблицы.ЕдиницаИзмерения, Истина);\r\n\u0009\u0009\u0009\u0009Если ЕдиницаИзмерения.Пустая() Тогда\r\n\u0009\u0009\u0009\u0009\u0009НоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.СоздатьЭлемент();\r\n\u0009\u0009\u0009\u0009\u0009НоваяЕдиницаИзмерения.Наименование = СтрокаТаблицы.ЕдиницаИзмерения;\r\n\u0009\u0009\u0009\u0009\u0009НоваяЕдиницаИзмерения.Записать(); \r\n\u0009\u0009\u0009\u0009\u0009ЕдиницаИзмерения = НоваяЕдиницаИзмерения.Ссылка;\r\n\u0009\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009ЕдиницыИзмерения.Вставить(СтрокаТаблицы.ЕдиницаИзмерения, ЕдиницаИзмерения);\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009КонецЕсли; \r\n\r\n\u0009\u0009\u0009ЭлементСправочника.ЕдиницаИзмерения = ЕдиницаИзмерения;\r\n\u0009\u0009\u0009\r\n\u0009\u0009\u0009Если НЕ ЗначениеЗаполнено(ЭлементСправочника.СтавкаНДС) Тогда\r\n\u0009\u0009\u0009\u0009ЭлементСправочника.СтавкаНДС = СтавкаНДСПоУмолчанию;\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\r\n\u0009\u0009\u0009Если Не ЭлементСправочника.ПроверитьЗаполнение() Тогда\r\n\u0009\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Пропущен\";\r\n\u0009\u0009\u0009\u0009СообщенияПользователю = ПолучитьСообщенияПользователю(Истина);\r\n\u0009\u0009\u0009\u0009Если СообщенияПользователю.Количество() > 0 Тогда\r\n\u0009\u0009\u0009\u0009\u0009ТекстСообщений = \"\";\r\n\u0009\u0009\u0009\u0009\u0009Для Каждого СообщениеПользователю Из СообщенияПользователю Цикл\r\n\u0009\u0009\u0009\u0009\u0009\u0009ТекстСообщений = ТекстСообщений + СообщениеПользователю.Текст + Символы.ПС;\r\n\u0009\u0009\u0009\u0009\u0009КонецЦикла;\r\n\u0009\u0009\u0009\u0009\u0009СтрокаТаблицы.ОписаниеОшибки = ТекстСообщений;\r\n\u0009\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\u0009ОтменитьТранзакцию();\r\n\u0009\u0009\u0009Иначе\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009ЭлементСправочника.Записать();\r\n\u0009\u0009\u0009\u0009СтрокаТаблицы.ОбъектСопоставления = ЭлементСправочника.Ссылка;\r\n\r\n\u0009\u0009\u0009\u0009ЗагрузкаДанныхИзФайла.ЗаписатьСвойстваОбъекта(ЭлементСправочника.Ссылка, СтрокаТаблицы);\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009Если ЗначениеЗаполнено(СтрокаТаблицы.Штрихкод) Тогда\r\n\u0009\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009\u0009Блокировка = Новый БлокировкаДанных;\r\n\u0009\u0009\u0009\u0009\u0009ЭлементБлокировки = Блокировка.Добавить(\"РегистрСведений.ШтрихкодыНоменклатуры\");\r\n\u0009\u0009\u0009\u0009\u0009ЭлементБлокировки.УстановитьЗначение(\"Штрихкод\", СтрокаТаблицы.Штрихкод);\r\n\u0009\u0009\u0009\u0009\u0009Блокировка.Заблокировать();\r\n\u0009\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009\u0009НовыйШтрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();\r\n\u0009\u0009\u0009\u0009\u0009НовыйШтрихкод.Штрихкод = СтрокаТаблицы.Штрихкод;\r\n\u0009\u0009\u0009\u0009\u0009НовыйШтрихкод.Номенклатура = ЭлементСправочника.Ссылка;\r\n\u0009\u0009\u0009\u0009\u0009НовыйШтрихкод.Записать();\r\n\u0009\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009ЗафиксироватьТранзакцию(); \r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\r\n\u0009\u0009Исключение\r\n\u0009\u0009\u0009ОтменитьТранзакцию();\r\n\u0009\u0009\u0009Причина = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());\r\n\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Пропущен\";\r\n\u0009\u0009\u0009СтрокаТаблицы.ОписаниеОшибки = НСтр(\"ru = 'Невозможна запись данных по причине:'\") + Символы.ПС + Причина;\r\n\u0009\u0009КонецПопытки;\r\n\u0009КонецЦикла;\r\n\u0009\r\nКонецПроцедуры\r\n\r\n// Конец СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла\r\n\r\n#КонецОбласти\r\n\u0009\r\n#КонецОбласти\r\n", + "type": "П.ЭлементыДанных.Код", + "name": "Свой алгоритм (модуль менеджера справочника)" + }, + { + "value": "#Область ПрограммныйИнтерфейс\r\n\r\n#Область ДляВызоваИзДругихПодсистем\r\n\r\n// СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла\r\n\r\n// Переопределяет параметры загрузки данных из файла.\r\n//\r\n// Параметры:\r\n// Параметры - Структура:\r\n// * ИмяМакетаСШаблоном - Строка - наименование макета. Например, \"ЗагрузкаИзФайла\".\r\n// * ИмяТабличнойЧасти - Строка - Полное имя табличной части. Например, \"Документ._ДемоСчетНаОплатуПокупателю.ТабличнаяЧасть.Товары\"\r\n// * ОбязательныеКолонки - Массив из Строка - наименования обязательных для заполнения колонок.\r\n// * ТипДанныхКолонки - Соответствие из КлючИЗначение:\r\n// * Ключ - Строка - имя колонки;\r\n// * Значение - ОписаниеТипов - тип колонки загружаемых данных.\r\n// * ДополнительныеПараметры - Структура\r\n//\r\nПроцедура УстановитьПараметрыЗагрузкиИзФайлаВТЧ(Параметры) Экспорт\r\n\u0009\r\n\u0009Параметры.ТипДанныхКолонки.Вставить(\"Артикул\", ОбщегоНазначения.ОписаниеТипаСтрока(50));\r\n\u0009Параметры.ТипДанныхКолонки.Вставить(\"Номенклатура\", ОбщегоНазначения.ОписаниеТипаСтрока(100));\r\n\u0009\r\n\u0009Параметры.ОбязательныеКолонки.Добавить(\"Артикул\");\r\n\u0009Параметры.ОбязательныеКолонки.Добавить(\"Номенклатура\");\r\n\u0009Параметры.ОбязательныеКолонки.Добавить(\"Количество\");\r\n\u0009Параметры.ОбязательныеКолонки.Добавить(\"Цена\");\r\n\u0009\r\nКонецПроцедуры\r\n\r\n// Производит сопоставление данных, загружаемых в табличную часть ПолноеИмяТабличнойЧасти,\r\n// с данными в ИБ, и заполняет параметры АдресТаблицыСопоставления и СписокНеоднозначностей.\r\n//\r\n// Параметры:\r\n// АдресЗагружаемыхДанных – Строка – адрес временного хранилища с таблицей значений, в которой\r\n// находятся загруженные данные из файла. Состав колонок:\r\n// * Идентификатор – Число – порядковый номер строки;\r\n// * остальные колонки соответствуют колонкам макета ЗагрузкаИзФайла.\r\n// АдресТаблицыСопоставления – Строка – адрес временного хранилища с пустой таблицей значений,\r\n// являющейся копией табличной части документа, \r\n// которую необходимо заполнить из таблицы АдресЗагружаемыхДанных.\r\n// СписокНеоднозначностей – ТаблицаЗначений – список неоднозначных значений, для которых в ИБ имеется несколько подходящих вариантов.\r\n// * Колонка – Строка – имя колонки, в которой была обнаружена неоднозначность;\r\n// * Идентификатор – Число – идентификатор строки, в которой была обнаружена неоднозначность.\r\n// ПолноеИмяТабличнойЧасти – Строка – полное имя табличной части, в которую загружаются данные.\r\n// ДополнительныеПараметры – ЛюбойТип – Любые дополнительные сведения.\r\n//\r\nПроцедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт\r\n\r\n\u0009Товары = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления); // ТаблицаЗначений\r\n\u0009ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных); // ТаблицаЗначений\r\n\u0009\r\n\u0009МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;\r\n\u0009\r\n\u0009Запрос = Новый Запрос;\r\n\u0009Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;\r\n\u0009Запрос.Текст = \r\n\u0009\u0009\"ВЫБРАТЬ\r\n\u0009\u0009|\u0009ДанныеДляСопоставления.Артикул КАК Артикул,\r\n\u0009\u0009|\u0009ДанныеДляСопоставления.Номенклатура КАК Номенклатура,\r\n\u0009\u0009|\u0009ДанныеДляСопоставления.Идентификатор КАК Идентификатор\r\n\u0009\u0009|ПОМЕСТИТЬ ВТ_ДанныеДляСопоставления\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009&ДанныеДляСопоставления КАК ДанныеДляСопоставления\r\n\u0009\u0009|;\r\n\u0009\u0009|\r\n\u0009\u0009|////////////////////////////////////////////////////////////////////////////////\r\n\u0009\u0009|ВЫБРАТЬ\r\n\u0009\u0009|\u0009СпрНоменклатура.Ссылка КАК Ссылка,\r\n\u0009\u0009|\u0009СпрНоменклатура.Артикул КАК Артикул,\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставления.Идентификатор КАК Идентификатор\r\n\u0009\u0009|ПОМЕСТИТЬ ВТ_СопоставленныеТоварыПоАртикулу\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставления КАК ВТ_ДанныеДляСопоставления\r\n\u0009\u0009|\u0009\u0009ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура\r\n\u0009\u0009|\u0009\u0009ПО (СпрНоменклатура.Артикул = ВТ_ДанныеДляСопоставления.Артикул)\r\n\u0009\u0009|\u0009\u0009\u0009И (ВТ_ДанныеДляСопоставления.Артикул <> \"\"\"\")\r\n\u0009\u0009|\r\n\u0009\u0009|ИНДЕКСИРОВАТЬ ПО\r\n\u0009\u0009|\u0009Идентификатор\r\n\u0009\u0009|;\r\n\u0009\u0009|\r\n\u0009\u0009|////////////////////////////////////////////////////////////////////////////////\r\n\u0009\u0009|ВЫБРАТЬ\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставления.Номенклатура КАК Номенклатура,\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставления.Идентификатор КАК Идентификатор\r\n\u0009\u0009|ПОМЕСТИТЬ ВТ_ДанныеДляСопоставленияПоНаименованию\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставления КАК ВТ_ДанныеДляСопоставления\r\n\u0009\u0009|\u0009\u0009ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СопоставленныеТоварыПоАртикулу КАК ВТ_СопоставленныеТоварыПоАртикулу\r\n\u0009\u0009|\u0009\u0009ПО ВТ_ДанныеДляСопоставления.Идентификатор = ВТ_СопоставленныеТоварыПоАртикулу.Идентификатор\r\n\u0009\u0009|ГДЕ\r\n\u0009\u0009|\u0009ВТ_СопоставленныеТоварыПоАртикулу.Идентификатор ЕСТЬ NULL\r\n\u0009\u0009|\r\n\u0009\u0009|ИНДЕКСИРОВАТЬ ПО\r\n\u0009\u0009|\u0009Идентификатор\r\n\u0009\u0009|;\r\n\u0009\u0009|\r\n\u0009\u0009|////////////////////////////////////////////////////////////////////////////////\r\n\u0009\u0009|ВЫБРАТЬ\r\n\u0009\u0009|\u0009МАКСИМУМ(СпрНоменклатура.Ссылка) КАК Ссылка,\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставленияПоНаименованию.Идентификатор КАК Идентификатор,\r\n\u0009\u0009|\u0009КОЛИЧЕСТВО(ВТ_ДанныеДляСопоставленияПоНаименованию.Идентификатор) КАК Количество\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставленияПоНаименованию КАК ВТ_ДанныеДляСопоставленияПоНаименованию\r\n\u0009\u0009|\u0009\u0009ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура\r\n\u0009\u0009|\u0009\u0009ПО (СпрНоменклатура.Наименование = ВТ_ДанныеДляСопоставленияПоНаименованию.Номенклатура)\r\n\u0009\u0009|\r\n\u0009\u0009|СГРУППИРОВАТЬ ПО\r\n\u0009\u0009|\u0009ВТ_ДанныеДляСопоставленияПоНаименованию.Идентификатор\r\n\u0009\u0009|\r\n\u0009\u0009|ОБЪЕДИНИТЬ ВСЕ\r\n\u0009\u0009|\r\n\u0009\u0009|ВЫБРАТЬ\r\n\u0009\u0009|\u0009МАКСИМУМ(ВТ_СопоставленныеТоварыПоАртикулу.Ссылка),\r\n\u0009\u0009|\u0009ВТ_СопоставленныеТоварыПоАртикулу.Идентификатор,\r\n\u0009\u0009|\u0009КОЛИЧЕСТВО(ВТ_СопоставленныеТоварыПоАртикулу.Идентификатор)\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009ВТ_СопоставленныеТоварыПоАртикулу КАК ВТ_СопоставленныеТоварыПоАртикулу\r\n\u0009\u0009|\r\n\u0009\u0009|СГРУППИРОВАТЬ ПО\r\n\u0009\u0009|\u0009ВТ_СопоставленныеТоварыПоАртикулу.Идентификатор\";\r\n\r\n\u0009Запрос.УстановитьПараметр(\"ДанныеДляСопоставления\", ЗагружаемыеДанные);\r\n\u0009МассивРезультатов = Запрос.ВыполнитьПакет();\r\n\u0009\r\n\u0009ТаблицаНоменклатура = МассивРезультатов[3].Выгрузить();\r\n\u0009\r\n\u0009ЕдиницыИзмерения = Новый Соответствие;\r\n\u0009\r\n\u0009Для каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл\r\n\u0009\u0009\r\n\u0009\u0009Товар = Товары.Добавить();\r\n\u0009\u0009Товар.Идентификатор = СтрокаТаблицы.Идентификатор;\r\n\u0009\u0009Товар.Количество = СтрокаТаблицы.Количество;\r\n\u0009\u0009Товар.Цена = СтрокаТаблицы.Цена;\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009СтрокаНоменклатура = ТаблицаНоменклатура.Найти(СтрокаТаблицы.Идентификатор, \"Идентификатор\");\r\n\u0009\u0009Если СтрокаНоменклатура <> Неопределено Тогда \r\n\u0009\u0009\u0009\r\n\u0009\u0009\u0009Если СтрокаНоменклатура.Количество = 1 Тогда \r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009РеквизитыНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаНоменклатура.Ссылка, \r\n\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\u0009\"ЕдиницаИзмерения, СтавкаНДС\");\r\n\u0009\u0009\u0009\u0009Товар.Номенклатура = СтрокаНоменклатура.Ссылка; \r\n\u0009\u0009\u0009\u0009Товар.ЕдиницаИзмерения = РеквизитыНоменклатуры.ЕдиницаИзмерения;\r\n\u0009\u0009\u0009\u0009Товар.СтавкаНДС = РеквизитыНоменклатуры.СтавкаНДС;\r\n\u0009\u0009\u0009\u0009ОбработкаТабличныхЧастей.РассчитатьСуммыВСтрокеТЧ(Товар);\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009ИначеЕсли СтрокаНоменклатура.Количество > 1 Тогда\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009\u0009ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();\r\n\u0009\u0009\u0009\u0009ЗаписьОНеоднозначности.Идентификатор = СтрокаТаблицы.Идентификатор;\r\n\u0009\u0009\u0009\u0009ЗаписьОНеоднозначности.Колонка = \"Номенклатура\";\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\r\n\u0009\u0009КонецЕсли;\r\n\u0009\u0009\r\n\u0009КонецЦикла;\r\n\u0009\r\n\u0009ПоместитьВоВременноеХранилище(Товары, АдресТаблицыСопоставления);\r\n\u0009\r\nКонецПроцедуры\r\n\r\n// Возвращает список подходящих объектов ИБ для неоднозначного значения ячейки.\r\n// \r\n// Параметры:\r\n// ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части, в которую загружаются данные.\r\n// СписокНеоднозначностей - Массив из СправочникСсылка.Номенклатура - массив для заполнения с неоднозначными данными.\r\n// ИмяКолонки - Строка - имя колонки, в который возникла неоднозначность.\r\n// ЗагружаемыеЗначенияСтрока - Строка - загружаемые данные на основании которых возникла неоднозначность.\r\n// ДополнительныеПараметры - Произвольный - любые дополнительные сведения.\r\n//\r\nПроцедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт\r\n\u0009\r\n\u0009Если ИмяКолонки = \"Номенклатура\" Тогда\r\n\u0009\u0009\r\n\u0009\u0009Запрос = Новый Запрос;\r\n\u0009\u0009Запрос.Текст = \r\n\u0009\u0009\"ВЫБРАТЬ\r\n\u0009\u0009|\u0009Номенклатура.Ссылка\r\n\u0009\u0009|ИЗ\r\n\u0009\u0009|\u0009Справочник.Номенклатура КАК Номенклатура\";\r\n\r\n\u0009\u0009ТекстУсловия = \"\";\r\n\u0009\u0009Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Номенклатура) Тогда\r\n\u0009\u0009\u0009ТекстУсловия = \" ГДЕ Номенклатура.Наименование = &Наименование\";\r\n\u0009\u0009\u0009Запрос.УстановитьПараметр(\"Наименование\", ЗагружаемыеЗначенияСтрока.Номенклатура);\r\n\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\r\n\u0009\u0009Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Артикул) Тогда\r\n\u0009\u0009\u0009Если ЗначениеЗаполнено(ТекстУсловия) Тогда\r\n\u0009\u0009\u0009\u0009ТекстУсловия = ТекстУсловия + \" ИЛИ Номенклатура.Артикул = &Артикул\";\r\n\u0009\u0009\u0009Иначе\r\n\u0009\u0009\u0009\u0009ТекстУсловия = \"ГДЕ Номенклатура.Артикул = &Артикул\";\r\n\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009Запрос.УстановитьПараметр(\"Артикул\", ЗагружаемыеЗначенияСтрока.Артикул);\r\n\u0009\u0009\u0009\r\n\u0009\u0009КонецЕсли;\r\n\u0009\u0009\r\n\u0009\u0009Запрос.Текст = Запрос.Текст + Символы.ПС + ТекстУсловия;\r\n\u0009\u0009\r\n\u0009\u0009РезультатЗапроса = Запрос.Выполнить();\r\n\u0009\u0009\r\n\u0009\u0009Выборка = РезультатЗапроса.Выбрать();\r\n\u0009\u0009Пока Выборка.Следующий() Цикл\r\n\u0009\u0009\u0009СписокНеоднозначностей.Добавить(Выборка.Ссылка);\r\n\u0009\u0009КонецЦикла;\r\n\r\n\u0009КонецЕсли;\r\n\u0009\r\nКонецПроцедуры\r\n\r\n// Конец СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла\r\n\r\n#КонецОбласти\r\n\u0009\r\n#КонецОбласти", + "type": "П.ЭлементыДанных.Код", + "name": "Загрузка данных в ТЧ (модуль менеджера)" + }, + { + "value": "#Область ОбработчикиКомандФормы\r\n\r\n&НаКлиенте\r\nПроцедура ЗагрузитьТоварыИзФайла(Команда)\r\n\u0009\r\n\u0009ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных();\r\n ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = \"ПриходнаяНакладная.Товары\";\r\n ПараметрыЗагрузки.Заголовок = НСтр(\"ru = 'Загрузка списка товаров из файла'\");\r\n\r\n\u0009ДополнительныеПараметры = Новый Структура();\r\n ДополнительныеПараметры.Вставить(\"Контрагент\", Объект.Контрагент);\r\n ДополнительныеПараметры.Вставить(\"Организация\", Объект.Организация);\r\n\u0009\r\n\u0009ПараметрыЗагрузки.ДополнительныеПараметры = ДополнительныеПараметры;\r\n\r\n\u0009Оповещение = Новый ОписаниеОповещения(\"ЗагрузитьТоварыИзФайлаЗавершение\", ЭтотОбъект);\r\n ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение);\r\n\r\nКонецПроцедуры\r\n\r\n#КонецОбласти\r\n\r\n#Область СлужебныеПроцедурыИФункции\r\n\r\n&НаКлиенте\r\nПроцедура ЗагрузитьТоварыИзФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт\r\n \r\n Если АдресЗагруженныхДанных = Неопределено Тогда \r\n Возврат;\r\n КонецЕсли;\r\n \r\n ЗагрузитьТоварыИзФайлаНаСервере(АдресЗагруженныхДанных);\r\n\u0009\r\nКонецПроцедуры\r\n\r\n&НаСервере\r\nПроцедура ЗагрузитьТоварыИзФайлаНаСервере(АдресЗагруженныхДанных)\r\n \r\n ЗагруженныеДанные = ПолучитьИзВременногоХранилища(АдресЗагруженныхДанных);\r\n \r\n ТоварыДобавлены = Ложь;\r\n Для каждого СтрокаТаблицы Из ЗагруженныеДанные Цикл \r\n \r\n Если Не ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура) Тогда \r\n Продолжить;\r\n КонецЕсли;\r\n\u0009\u0009\r\n\u0009\u0009СтрокаТовары = Объект.Товары.Добавить();\r\n\u0009\u0009ЗаполнитьЗначенияСвойств(СтрокаТовары, СтрокаТаблицы);\r\n\u0009\u0009\u0009\u0009\r\n\u0009\u0009ТоварыДобавлены = Истина;\r\n\u0009\u0009\r\n\u0009КонецЦикла;\r\n \r\n Если ТоварыДобавлены Тогда\r\n Модифицированность = Истина;\r\n КонецЕсли;\r\n \r\nКонецПроцедуры\r\n\r\n#КонецОбласти", + "type": "П.ЭлементыДанных.Код", + "name": "Загрузка данных в ТЧ (модуль формы)" + } + ], + "type": "П.ЭлементыДанных.Группа", + "name": "Внедрение" + }, + { + "value": [ + { + "value": "// Создает новую структуру параметров для загрузки данных из файла в табличную часть.\r\n// Синтаксис\r\n//\r\n// Функция ПараметрыЗагрузкиДанных() Экспорт\r\n// Возвращаемое значение\r\n//\r\n// Структура - параметры для открытия формы загрузки данных в табличную часть:\r\n// * ПолноеИмяТабличнойЧасти - Строка - полный путь к табличной части документа,\r\n// в виде \"ИмяДокумента.ИмяТабличнойЧасти\".\r\n// * Заголовок - Строка - заголовок формы загрузки данных из файла.\r\n// * ИмяМакетаСШаблоном - Строка - имя макета с шаблоном для ввода данных.\r\n// * Представление - Строка - заголовок окна в форме загрузке данных.\r\n// * ДополнительныеПараметры - Произвольный - любые дополнительные сведения, которые будут переданы\r\n// в процедуру сопоставления данных.\r\n\r\nПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных();\r\nПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = \"ПриходнаяНакладная.Товары\";\r\nПараметрыЗагрузки.Заголовок = НСтр(\"ru = 'Загрузка списка товаров из файла'\");\r\n\r\nДополнительныеПараметры = Новый Структура();\r\nДополнительныеПараметры.Вставить(\"Контрагент\", Объект.Контрагент);\r\nДополнительныеПараметры.Вставить(\"Организация\", Объект.Организация);\r\n\r\nПараметрыЗагрузки.ДополнительныеПараметры = ДополнительныеПараметры;", + "type": "П.ЭлементыДанных.Код", + "name": "ПараметрыЗагрузкиДанных" + }, + { + "value": "// Открывает форму загрузки данных для заполнения табличной части.\r\n// Синтаксис\r\n//\r\n// Процедура ПоказатьФормуЗагрузки(ПараметрыЗагрузки, ОповещениеОЗагрузке) Экспорт\r\n// Параметры\r\n//\r\n// ПараметрыЗагрузки - см. ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных.\r\n// ОповещениеОЗагрузке - ОписаниеОповещения - оповещение, которое будет вызвано для добавления загруженных данных в\r\n// табличную часть.\r\n\r\n// Пример открытия формы загрузки данных при выполнении команды \"Загрузить из файла\" в форме документа\r\n\r\n&НаКлиенте\r\nПроцедура ЗагрузитьТоварыИзФайла(Команда)\r\n\u0009\r\n\u0009ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных();\r\n ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = \"ПриходнаяНакладная.Товары\";\r\n ПараметрыЗагрузки.Заголовок = НСтр(\"ru = 'Загрузка списка товаров из файла'\");\r\n\r\n\u0009ДополнительныеПараметры = Новый Структура();\r\n ДополнительныеПараметры.Вставить(\"Контрагент\", Объект.Контрагент);\r\n ДополнительныеПараметры.Вставить(\"Организация\", Объект.Организация);\r\n\u0009\r\n\u0009ПараметрыЗагрузки.ДополнительныеПараметры = ДополнительныеПараметры;\r\n\r\n\u0009Оповещение = Новый ОписаниеОповещения(\"ЗагрузитьТоварыИзФайлаЗавершение\", ЭтотОбъект);\r\n ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение);\r\n\r\nКонецПроцедуры\r\n", + "type": "П.ЭлементыДанных.Код", + "name": "ПоказатьФормуЗагрузки" + }, + { + "value": "// Сохраняет значения дополнительных реквизитов и свойств из строки таблицы загружаемых данных в объект-владелец.\r\n// Внутри функции код сам находит колонки содержащие значения дополнительных реквизитов или свойств и записывает их.\r\n// Вызывается из процедуры ЗагрузитьИзФайла при прикладной загрузке данных в модуле менеджере объекта.\r\n// Синтаксис\r\n//\r\n// Процедура ЗаписатьСвойстваОбъекта(СсылкаНаОбъект, СтрокаТаблицы) Экспорт\r\n// Параметры\r\n//\r\n// СсылкаНаОбъект - ЛюбаяСсылка - ссылка на объект-владельца свойств куда загружаются данные.\r\n// СтрокаТаблицы - СтрокаТаблицыЗначений: см. ЗагрузкаДанныхИзФайла.ОписаниеЗагружаемыхДанныхДляСправочников\r\n\r\n// Пример использования в модуле менеджера загружаемого справочника\r\n\r\nПроцедура ЗагрузитьИзФайла(ЗагружаемыеДанные, ПараметрыЗагрузки, Отказ) Экспорт\r\n\r\n\u0009Для Каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл\r\n\u0009\u0009\r\n\u0009\u0009ОбъектСопоставленияЗаполнен = ЗначениеЗаполнено(СтрокаТаблицы.ОбъектСопоставления);\r\n\r\n\u0009\u0009Если (ОбъектСопоставленияЗаполнен И ПараметрыЗагрузки.ОбновлятьСуществующие = 0)\r\n\u0009\u0009\u0009Или (Не ОбъектСопоставленияЗаполнен И ПараметрыЗагрузки.СоздаватьНовые = 0) Тогда\r\n\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Пропущен\";\r\n\u0009\u0009\u0009Продолжить;\r\n\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009УправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Истина);\r\n\u0009\u0009НачатьТранзакцию();\r\n\u0009\u0009Попытка\r\n\r\n\u0009\u0009\u0009Если ОбъектСопоставленияЗаполнен Тогда\r\n\r\n\u0009\u0009\u0009\u0009Блокировка = Новый БлокировкаДанных;\r\n\u0009\u0009\u0009\u0009ЭлементБлокировки = Блокировка.Добавить(\"Справочник._ДемоНоменклатура\");\r\n\u0009\u0009\u0009\u0009ЭлементБлокировки.УстановитьЗначение(\"Ссылка\", СтрокаТаблицы.ОбъектСопоставления);\r\n\u0009\u0009\u0009\u0009Блокировка.Заблокировать();\r\n\r\n\u0009\u0009\u0009\u0009ЭлементСправочника = СтрокаТаблицы.ОбъектСопоставления.ПолучитьОбъект();\r\n\r\n\u0009\u0009\u0009\u0009Если ЭлементСправочника = Неопределено Тогда\r\n\u0009\u0009\u0009\u0009\u0009ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(\r\n\u0009\u0009\u0009\u0009\u0009\u0009НСтр(\"ru = 'Номенклатура с артикулом %1 не существует.'\"), СтрокаТаблицы.Артикул);\r\n\u0009\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Обновлен\";\r\n\r\n\u0009\u0009\u0009Иначе\r\n\r\n\u0009\u0009\u0009\u0009ЭлементСправочника = СоздатьЭлемент();\r\n\u0009\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Создан\";\r\n\r\n\u0009\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009\u0009ЭлементСправочника.Наименование = СтрокаТаблицы.Наименование;\r\n\u0009\u0009\u0009ЭлементСправочника.Штрихкод = СтрокаТаблицы.Штрихкод;\r\n\u0009\u0009\u0009Если ЗначениеЗаполнено(СтрокаТаблицы.Страна) Тогда\r\n\u0009\u0009\u0009\u0009ЭлементСправочника.СтранаПроисхождения = Справочники.СтраныМира.НайтиПоНаименованию(СтрокаТаблицы.Страна);\r\n\u0009\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009\u0009Если ЗначениеЗаполнено(СтрокаТаблицы.Родитель) Тогда\r\n\u0009\u0009\u0009\u0009Родитель = НайтиПоНаименованию(СтрокаТаблицы.Родитель, Истина);\r\n\u0009\u0009\u0009\u0009Если Родитель = Неопределено Или Не Родитель.ЭтоГруппа Или Родитель.Пустая() Тогда\r\n\u0009\u0009\u0009\u0009\u0009Родитель = СоздатьГруппу();\r\n\u0009\u0009\u0009\u0009\u0009Родитель.Наименование = СтрокаТаблицы.Родитель;\r\n\u0009\u0009\u0009\u0009\u0009Родитель.Записать();\r\n\u0009\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\u0009ЭлементСправочника.Родитель = Родитель.Ссылка;\r\n\u0009\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009\u0009ВидНоменклатуры = Справочники._ДемоВидыНоменклатуры.НайтиПоНаименованию(СтрокаТаблицы.ВидНоменклатуры, Истина);\r\n\u0009\u0009\u0009Если ВидНоменклатуры = Неопределено Или ВидНоменклатуры.Пустая() Тогда\r\n\u0009\u0009\u0009\u0009ВидНоменклатуры = Справочники._ДемоВидыНоменклатуры.СоздатьЭлемент();\r\n\u0009\u0009\u0009\u0009ВидНоменклатуры.Наименование = СтрокаТаблицы.ВидНоменклатуры;\r\n\u0009\u0009\u0009\u0009ВидНоменклатуры.Записать();\r\n\u0009\u0009\u0009КонецЕсли;\r\n\r\n\u0009\u0009\u0009ЭлементСправочника.ВидНоменклатуры = ВидНоменклатуры.Ссылка;\r\n\u0009\u0009\u0009Если Не ЭлементСправочника.ПроверитьЗаполнение() Тогда\r\n\u0009\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Пропущен\";\r\n\u0009\u0009\u0009\u0009СообщенияПользователю = ПолучитьСообщенияПользователю(Истина);\r\n\u0009\u0009\u0009\u0009Если СообщенияПользователю.Количество() > 0 Тогда\r\n\u0009\u0009\u0009\u0009\u0009ТекстСообщений = \"\";\r\n\u0009\u0009\u0009\u0009\u0009Для Каждого СообщениеПользователю Из СообщенияПользователю Цикл\r\n\u0009\u0009\u0009\u0009\u0009\u0009ТекстСообщений = ТекстСообщений + СообщениеПользователю.Текст + Символы.ПС;\r\n\u0009\u0009\u0009\u0009\u0009КонецЦикла;\r\n\u0009\u0009\u0009\u0009\u0009СтрокаТаблицы.ОписаниеОшибки = ТекстСообщений;\r\n\u0009\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009\u0009\u0009ОтменитьТранзакцию();\r\n\u0009\u0009\u0009Иначе\r\n\u0009\u0009\u0009\u0009ЭлементСправочника.Записать();\r\n\u0009\u0009\u0009\u0009СтрокаТаблицы.ОбъектСопоставления = ЭлементСправочника.Ссылка;\r\n\r\n\u0009\u0009\u0009\u0009ЗагрузкаДанныхИзФайла.ЗаписатьСвойстваОбъекта(ЭлементСправочника.Ссылка, СтрокаТаблицы);\r\n\r\n\u0009\u0009\u0009\u0009УправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Ложь);\r\n\u0009\u0009\u0009\u0009ЗафиксироватьТранзакцию();\r\n\u0009\u0009\u0009КонецЕсли;\r\n\u0009\u0009Исключение\r\n\u0009\u0009\u0009ОтменитьТранзакцию();\r\n\u0009\u0009\u0009УправлениеДоступом.ОтключитьОбновлениеКлючейДоступа(Ложь, Ложь);\r\n\u0009\u0009\u0009Причина = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());\r\n\u0009\u0009\u0009СтрокаТаблицы.РезультатСопоставленияСтроки = \"Пропущен\";\r\n\u0009\u0009\u0009СтрокаТаблицы.ОписаниеОшибки = НСтр(\"ru = 'Невозможна запись данных по причине:'\") + Символы.ПС + Причина;\r\n\u0009\u0009КонецПопытки;\r\n\u0009КонецЦикла;\r\n\r\nКонецПроцедуры\r\n\r\n", + "type": "П.ЭлементыДанных.Код", + "name": "ЗаписатьСвойстваОбъекта" + }, + { + "value": "// Возвращает описание колонок табличной части или таблицы значений.\r\n// Синтаксис\r\n//\r\n// Функция СформироватьОписаниеКолонок(Таблица, Колонки = Неопределено) Экспорт\r\n// Параметры\r\n//\r\n// Таблица - ТаблицаЗначений - ОписаниеТабличнойЧасти с колонками.\r\n// - Строка - для получения списка колонок табличной части\r\n// необходимо указать его полное имя строкой, как в метаданных, например \"Документы.СчетНаОплату.ТабличныеЧасти.Товары\".\r\n// Колонки - Строка - список извлекаемых колонок, разделенный запятыми. Например: \"Номер, Товар, Количество\".\r\n// Возвращаемое значение\r\n//\r\n// Массив из см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета.\r\n\r\n&НаКлиенте\r\nПроцедура ЗагрузитьТоварыИзФайла(Команда)\r\n \r\n ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных();\r\n ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = \"_ДемоНоменклатура.Аналоги\";\r\n ПараметрыЗагрузки.Заголовок = НСтр(\"ru = 'Загрузка списка аналогов из файла'\");\r\n \r\n // Описание колонок для макета загрузки комплектации\r\n ПараметрыЗагрузки.КолонкиМакета = ОписаниеКолонокМакетаДляЗагрузкиАналогов();\r\n \r\n Оповещение = Новый ОписаниеОповещения(\"ЗагрузитьАналогиИзФайлаЗавершение\", ЭтотОбъект);\r\n ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение);\r\n \r\nКонецПроцедуры\r\n\r\n&НаСервере\r\nФункция ОписаниеКолонокМакетаДляЗагрузкиАналогов();\r\n \r\n КолонкиМакета = ЗагрузкаДанныхИзФайла.СформироватьОписаниеКолонок(Объект.Аналоги);\r\n ЗагрузкаДанныхИзФайлаКлиентСервер.УдалитьКолонкуМакета(\"Аналог\", КолонкиМакета);\r\n \r\n Если Объект.ВидНоменклатуры.Наименование = \"Услуга\" Тогда\r\n // У услуг нет штрихкода\r\n Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(\"ШтрихкодАртикул\", ОбщегоНазначения.ОписаниеТипаСтрока(20), НСтр(\"ru = 'Артикул'\"));\r\n Иначе\r\n Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(\"ШтрихкодАртикул\", ОбщегоНазначения.ОписаниеТипаСтрока(20), НСтр(\"ru = 'Штрихкод и Артикул'\"));\r\n КонецЕсли;\r\n Колонка.ОбязательнаДляЗаполнения = Истина;\r\n Колонка.Позиция = 1;\r\n Колонка.Группа = \"Номенклатура\";\r\n Колонка.Родитель = \"Аналог\";\r\n КолонкиМакета.Добавить(Колонка);\r\n \r\n Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(\"Наименование\", ОбщегоНазначения.ОписаниеТипаСтрока(100));\r\n Колонка.Группа = \"Номенклатура\";\r\n Колонка.Родитель = \"Аналог\";\r\n Колонка.Позиция = 2;\r\n Колонка.Подсказка = НСтр(\"ru='Наименование аналогичного товара, который полностью идентичен\r\n |по своему функциональному назначению и техническим характеристикам.'\");\r\n КолонкиМакета.Добавить(Колонка);\r\n \r\n Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкаМакета(\"Совместимость\", КолонкиМакета);\r\n Колонка.Позиция = 3;\r\n \r\n Возврат КолонкиМакета;\r\nКонецФункции", + "type": "П.ЭлементыДанных.Код", + "name": "Программное создание табличного макета для загрузки данных в табличную часть" + } + ], + "type": "П.ЭлементыДанных.Группа", + "name": "Программный интерфейс" + } +] \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Обработка Загрузка данных из файла.md b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/1. Обработка Загрузка данных из файла.md similarity index 91% rename from src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Обработка Загрузка данных из файла.md rename to src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/1. Обработка Загрузка данных из файла.md index 3c409d3..c4ffdf0 100644 --- a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Обработка Загрузка данных из файла.md +++ b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/1. Обработка Загрузка данных из файла.md @@ -1,6 +1,6 @@ --- -title: Обработка Загрузка данных из файла -slug: общие-бсп-стандартные-подсистемы-загрузка-данных-из-файла/обработка-загрузка-данных-из-файла +title: 1. Обработка Загрузка данных из файла +slug: общие-бсп-стандартные-подсистемы-загрузка-данных-из-файла/1-обработка-загрузка-данных-из-файла --- Для загрузки данных используется обработка `Загрузка данных из файла`. По умолчанию она скрыта, найти можно в функциях для технического специалиста. diff --git a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Настраиваемые алгоритмы загрузки в справочники.md b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/2. Настраиваемые алгоритмы загрузки в справочники.md similarity index 98% rename from src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Настраиваемые алгоритмы загрузки в справочники.md rename to src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/2. Настраиваемые алгоритмы загрузки в справочники.md index 08c7e57..5838761 100644 --- a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Настраиваемые алгоритмы загрузки в справочники.md +++ b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/2. Настраиваемые алгоритмы загрузки в справочники.md @@ -1,6 +1,6 @@ --- -title: Настраиваемые алгоритмы загрузки в справочники -slug: общие-бсп-стандартные-подсистемы-загрузка-данных-из-файла/настраиваемые-алгоритмы-загрузки-в-справочники +title: 2. Настраиваемые алгоритмы загрузки в справочники +slug: общие-бсп-стандартные-подсистемы-загрузка-данных-из-файла/2-настраиваемые-алгоритмы-загрузки-в-справочники --- Т.к. справочники, имеющие реквизиты типа `ХранилищеЗначения` не отображаются в обработке `Загрузка данных из файла` по умолчанию, их при необходимости можно подключить самостоятельно. Также можно отключить какой-нибудь справочник и сделать его недоступным для использования в обработке. diff --git a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/3. Загрузка данных в табличную часть.md b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/3. Загрузка данных в табличную часть.md new file mode 100644 index 0000000..0c4d67e --- /dev/null +++ b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/3. Загрузка данных в табличную часть.md @@ -0,0 +1,319 @@ +--- +title: 3. Загрузка данных в табличную часть +slug: общие-бсп-стандартные-подсистемы-загрузка-данных-из-файла/3-загрузка-данных-в-табличную-часть +--- + +Полезное: +[Консоль кода](/common/konsol-koda-is.epf) +[Фрагменты кода](/bsp-zagruzka-iz-faila/fragmenty-koda.json) + +Подсистема "Загрузка данных из файла" также поддерживает загрузку в табличные части документов и справочников. Для этого нужно: + +# Создать макет + +Макет создается на уровне объекта и должен обязательно иметь имя, созданное по шаблону **ЗагрузкаИзФайла<ИмяТабличнойЧасти>**. В нем настраиваем вид шапки таблицы **именя ячеек которой должны соответствовать именам реквизитов нужной табличной части**. + +>Если табличная часть одна, допускается именовать макет просто **"ЗагрузкаИзФайла"** + +![Изображение](/bsp-zagruzka-iz-faila/5.png) +![Изображение](/bsp-zagruzka-iz-faila/6.png) +![Изображение](/bsp-zagruzka-iz-faila/7.png) + +# Создать команду на форме + +В командной панели нужной ТЧ создаем команду `ЗагрузитьТоварыИзФайла` (имя произвольное), в обработчике которой реализуем заполнение служебной структуры, полученной с помощью метода `ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных` и вызываем непосредственное открытие формы загрузки методом `ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки`. + +## Пример реализации: + +```bsl +&НаКлиенте +Процедура ЗагрузитьТоварыИзФайла(Команда) + + + ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных(); + ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = "ПриходнаяНакладная.Товары"; + ПараметрыЗагрузки.Заголовок = НСтр("ru = 'Загрузка списка товаров из файла'"); + + // Любые параметры, которые могут понадобиться дальше при + // выполнении метода, указанного в описании оповещения + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("Контрагент", Объект.Контрагент); + ДополнительныеПараметры.Вставить("Организация", Объект.Организация); + + ПараметрыЗагрузки.ДополнительныеПараметры = ДополнительныеПараметры; + + Оповещение = Новый ОписаниеОповещения("ЗагрузитьТоварыИзФайлаЗавершение", ЭтотОбъект); + ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение); + +КонецПроцедуры + +// Выполняем после завершения работы в стандартной форме загрузки из файла +&НаКлиенте +Процедура ЗагрузитьТоварыИзФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт + + Если АдресЗагруженныхДанных = Неопределено Тогда + Возврат; + КонецЕсли; + + // АдресЗагруженныхДанных - адрес ВХ подготовленной ТЗ с загруженными данными + ЗагрузитьТоварыИзФайлаНаСервере(АдресЗагруженныхДанных); + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьТоварыИзФайлаНаСервере(АдресЗагруженныхДанных) + + ЗагруженныеДанные = ПолучитьИзВременногоХранилища(АдресЗагруженныхДанных); + + ТоварыДобавлены = Ложь; + Для каждого СтрокаТаблицы Из ЗагруженныеДанные Цикл + + Если Не ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура) Тогда + Продолжить; + КонецЕсли; + + СтрокаТовары = Объект.Товары.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТовары, СтрокаТаблицы); + + ТоварыДобавлены = Истина; + + КонецЦикла; + + Если ТоварыДобавлены Тогда + Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +``` + +# В модуле менеджера реализовать методы программного интерфейса + +## Процедура УстановитьПараметрыЗагрузкиИзФайлаВТЧ + +Аналогично процедуре `ОпределитьПараметрыЗагрузкиДанныхИзФайла` (см. статью `2. Настраиваемые алгоритмы загрузки в справочники`). Может быть пустой + +```bsl +// Переопределяет параметры загрузки данных из файла. +// +// Параметры: +// Параметры - Структура: +// * ИмяМакетаСШаблоном - Строка - наименование макета. Например, "ЗагрузкаИзФайла". +// * ИмяТабличнойЧасти - Строка - полное имя табличной части. Например, "Документ._ДемоСчетНаОплатуПокупателю.ТабличнаяЧасть.Товары" +// * ОбязательныеКолонки - Массив из Строка - наименования обязательных для заполнения колонок. +// * ТипДанныхКолонки - Соответствие из КлючИЗначение: +// * Ключ - Строка - имя колонки; +// * Значение - ОписаниеТипов - тип колонки загружаемых данных. +// * ДополнительныеПараметры - Структура +// +Процедура УстановитьПараметрыЗагрузкиИзФайлаВТЧ(Параметры) Экспорт + +КонецПроцедуры +``` + +## Процедура СопоставитьЗагружаемыеДанные + +В этой процедуре необходимо заполнить таблицу, находящуюся по адресу `АдресТаблицыСопоставления` + +```bsl +// АдресЗагружаемыхДанных - Строка - адрес временного хранилища с таблицей значений, в которой +// находятся загруженные данные из файла. Состав колонок: +// * Идентификатор - Число - порядковый номер строки. +// Остальные колонки соответствуют колонкам макета ЗагрузкаИзФайла. +// АдресТаблицыСопоставления - Строка - адрес временного хранилища с пустой таблицей значений, +// являющейся копией табличной части документа, +// которую необходимо заполнить из таблицы АдресЗагружаемыхДанных. +// СписокНеоднозначностей - ТаблицаЗначений - список неоднозначных значений: +// * Колонка - Строка - имя колонки, в которой была обнаружена неоднозначность. +// * Идентификатор - Число - идентификатор строки, в которой была обнаружена неоднозначность. +// ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части, в которую загружаются данные. +// ДополнительныеПараметры - Произвольный - любые дополнительные сведения. +Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт +``` + +|Аргумент|Описание| +|-|-| +|`АдресЗагружаемыхДанных`|По этому адресу расположена таблица значений, заполненная на основании введенных пользователем данных в форме обработки| +|`АдресТаблицыСопоставления`|По этому адресу расположена копия табличной части документа/справочника, которую необходимо заполнить| +|`СписокНеоднозначностей`|Таблица, в которую записываются идентификаторы строк ТЧ, для которых не удалось однозначно определить сопоставляемые данные| + +
+Пример реализации + + ```bsl + Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт + + + Товары = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления); // ТаблицаЗначений + ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных); // ТаблицаЗначений + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.Текст = + "ВЫБРАТЬ + | ВЫРАЗИТЬ(ДанныеДляСопоставления.Штрихкод КАК СТРОКА(13)) КАК Штрихкод, + | ДанныеДляСопоставления.Номенклатура КАК Номенклатура, + | ДанныеДляСопоставления.Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ ДанныеДляСопоставления + |ИЗ + | &ДанныеДляСопоставления КАК ДанныеДляСопоставления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | _ДемоНоменклатура.Ссылка КАК Ссылка, + | _ДемоНоменклатура.Штрихкод КАК Штрихкод, + | ДанныеДляСопоставления.Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ СопоставленнаяНоменклатураПоШтрихкоду + |ИЗ + | ДанныеДляСопоставления КАК ДанныеДляСопоставления + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура + | ПО (_ДемоНоменклатура.Штрихкод = ДанныеДляСопоставления.Штрихкод) + | И (ДанныеДляСопоставления.Штрихкод <> """") + | + |ИНДЕКСИРОВАТЬ ПО + | Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДанныеДляСопоставления.Номенклатура КАК Номенклатура, + | ДанныеДляСопоставления.Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ ДанныеДляСопоставленияПоНаименованию + |ИЗ + | ДанныеДляСопоставления КАК ДанныеДляСопоставления + | ЛЕВОЕ СОЕДИНЕНИЕ СопоставленнаяНоменклатураПоШтрихкоду КАК СопоставленнаяНоменклатураПоШтрихкоду + | ПО ДанныеДляСопоставления.Идентификатор = СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор + |ГДЕ СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор ЕСТЬ NULL + | + |ИНДЕКСИРОВАТЬ ПО + | Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | МАКСИМУМ(_ДемоНоменклатура.Ссылка) КАК Ссылка, + | ДанныеДляСопоставленияПоНаименованию.Идентификатор КАК Идентификатор, + | КОЛИЧЕСТВО(ДанныеДляСопоставленияПоНаименованию.Идентификатор) КАК Количество + |ИЗ + | ДанныеДляСопоставленияПоНаименованию КАК ДанныеДляСопоставленияПоНаименованию + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура + | ПО (_ДемоНоменклатура.Наименование = (ВЫРАЗИТЬ(ДанныеДляСопоставленияПоНаименованию.Номенклатура КАК СТРОКА(500)))) + | + |СГРУППИРОВАТЬ ПО + | ДанныеДляСопоставленияПоНаименованию.Идентификатор + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | МАКСИМУМ(СопоставленнаяНоменклатураПоШтрихкоду.Ссылка), + | СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор, + | КОЛИЧЕСТВО(СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор) + |ИЗ + | СопоставленнаяНоменклатураПоШтрихкоду КАК СопоставленнаяНоменклатураПоШтрихкоду + | + |СГРУППИРОВАТЬ ПО + | СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор"; + + Запрос.УстановитьПараметр("ДанныеДляСопоставления", ЗагружаемыеДанные); + РезультатыЗапросов = Запрос.ВыполнитьПакет(); // Массив из РезультатЗапроса + + ТаблицаНоменклатура = РезультатыЗапросов[3].Выгрузить(); // ТаблицаЗначений + ФункциональнаяОпцияХарактеристика = ?(ЗагружаемыеДанные.Колонки.Найти("Характеристика") <> Неопределено, Истина, Ложь); + Для каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл + + Товар = Товары.Добавить(); + Товар.Идентификатор = СтрокаТаблицы.Идентификатор; + Товар.Количество = СтрокаТаблицы.Количество; + Товар.Цена = СтрокаТаблицы.Цена; + + СтрокаНоменклатура = ТаблицаНоменклатура.Найти(СтрокаТаблицы.Идентификатор, "Идентификатор"); + Если СтрокаНоменклатура <> Неопределено Тогда + Если СтрокаНоменклатура.Количество = 1 Тогда + Товар.Номенклатура = СтрокаНоменклатура.Ссылка; + Если ФункциональнаяОпцияХарактеристика Тогда + Товар.Характеристика = Справочники._ДемоХарактеристики.НайтиПоНаименованию(СтрокаТаблицы.Характеристика, + Истина,, Товар.Номенклатура); + КонецЕсли; + ИначеЕсли СтрокаНоменклатура.Количество > 1 Тогда + ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить(); + ЗаписьОНеоднозначности.Идентификатор = СтрокаТаблицы.Идентификатор; + ЗаписьОНеоднозначности.Колонка = "Номенклатура"; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ПоместитьВоВременноеХранилище(Товары, АдресТаблицыСопоставления); + +КонецПроцедуры + ``` + +
+ + +## ЗаполнитьСписокНеоднозначностей + +```bsl +// Возвращает список подходящих объектов ИБ для неоднозначного значения ячейки. +// +// Параметры: +// ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части, в которую загружаются данные. +// СписокНеоднозначностей - Массив из СправочникСсылка._ДемоНоменклатура - массив для заполнения с неоднозначными данными. +// ИмяКолонки - Строка - имя колонки, в который возникла неоднозначность. +// ЗагружаемыеЗначенияСтрока - Строка - загружаемые данные на основании которых возникла неоднозначность. +// ДополнительныеПараметры - Произвольный - любые дополнительные сведения. +// +Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт + +``` + +
+Пример реализации + + +// Возвращает список подходящих объектов ИБ для неоднозначного значения ячейки. +// +// Параметры: +// ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части, в которую загружаются данные. +// СписокНеоднозначностей - Массив из СправочникСсылка._ДемоНоменклатура - массив для заполнения с неоднозначными данными. +// ИмяКолонки - Строка - имя колонки, в который возникла неоднозначность. +// ЗагружаемыеЗначенияСтрока - Строка - загружаемые данные на основании которых возникла неоднозначность. +// ДополнительныеПараметры - Произвольный - любые дополнительные сведения. +// +Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт + + Если ИмяКолонки = "Номенклатура" Тогда + Запрос = Новый Запрос; + + ТекстГде = ""; + Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Номенклатура) Тогда + ТекстГде = "ГДЕ _ДемоНоменклатура.Наименование = &Наименование"; + Запрос.УстановитьПараметр("Наименование", ЗагружаемыеЗначенияСтрока.Номенклатура); + КонецЕсли; + + Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Штрихкод) Тогда + Если ЗначениеЗаполнено(ТекстГде) Тогда + ТекстГде = ТекстГде + " ИЛИ _ДемоНоменклатура.Штрихкод = &Штрихкод"; + Иначе + ТекстГде = "ГДЕ _ДемоНоменклатура.Штрихкод = &Штрихкод"; + КонецЕсли; + Запрос.УстановитьПараметр("Штрихкод", ЗагружаемыеЗначенияСтрока.Штрихкод); + КонецЕсли; + + Запрос.Текст = "ВЫБРАТЬ + | _ДемоНоменклатура.Ссылка + |ИЗ + | Справочник._ДемоНоменклатура КАК _ДемоНоменклатура " + ТекстГде; + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + СписокНеоднозначностей.Добавить(ВыборкаДетальныеЗаписи.Ссылка); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +
\ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Программное создание табличного макета для загрузки данных в табличную часть.md b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Программное создание табличного макета для загрузки данных в табличную часть.md new file mode 100644 index 0000000..da8529d --- /dev/null +++ b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/Программное создание табличного макета для загрузки данных в табличную часть.md @@ -0,0 +1,67 @@ +--- +title: Программное создание табличного макета для загрузки данных в табличную часть +slug: общие-бсп-стандартные-подсистемы-загрузка-данных-из-файла/программное-создание-табличного-макета-для-загрузки-данных-в-табличную-часть +--- + +```bsl +// Возвращает описание колонок табличной части или таблицы значений. +// Синтаксис +// +// Функция СформироватьОписаниеКолонок(Таблица, Колонки = Неопределено) Экспорт +// Параметры +// +// Таблица - ТаблицаЗначений - ОписаниеТабличнойЧасти с колонками. +// - Строка - для получения списка колонок табличной части +// необходимо указать его полное имя строкой, как в метаданных, например "Документы.СчетНаОплату.ТабличныеЧасти.Товары". +// Колонки - Строка - список извлекаемых колонок, разделенный запятыми. Например: "Номер, Товар, Количество". +// Возвращаемое значение +// +// Массив из см. ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета. + +&НаКлиенте +Процедура ЗагрузитьТоварыИзФайла(Команда) + + ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных(); + ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = "_ДемоНоменклатура.Аналоги"; + ПараметрыЗагрузки.Заголовок = НСтр("ru = 'Загрузка списка аналогов из файла'"); + + // Описание колонок для макета загрузки комплектации + ПараметрыЗагрузки.КолонкиМакета = ОписаниеКолонокМакетаДляЗагрузкиАналогов(); + + Оповещение = Новый ОписаниеОповещения("ЗагрузитьАналогиИзФайлаЗавершение", ЭтотОбъект); + ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение); + +КонецПроцедуры + +&НаСервере +Функция ОписаниеКолонокМакетаДляЗагрузкиАналогов(); + + КолонкиМакета = ЗагрузкаДанныхИзФайла.СформироватьОписаниеКолонок(Объект.Аналоги); + ЗагрузкаДанныхИзФайлаКлиентСервер.УдалитьКолонкуМакета("Аналог", КолонкиМакета); + + Если Объект.ВидНоменклатуры.Наименование = "Услуга" Тогда + // У услуг нет штрихкода + Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("ШтрихкодАртикул", ОбщегоНазначения.ОписаниеТипаСтрока(20), НСтр("ru = 'Артикул'")); + Иначе + Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("ШтрихкодАртикул", ОбщегоНазначения.ОписаниеТипаСтрока(20), НСтр("ru = 'Штрихкод и Артикул'")); + КонецЕсли; + Колонка.ОбязательнаДляЗаполнения = Истина; + Колонка.Позиция = 1; + Колонка.Группа = "Номенклатура"; + Колонка.Родитель = "Аналог"; + КолонкиМакета.Добавить(Колонка); + + Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Наименование", ОбщегоНазначения.ОписаниеТипаСтрока(100)); + Колонка.Группа = "Номенклатура"; + Колонка.Родитель = "Аналог"; + Колонка.Позиция = 2; + Колонка.Подсказка = НСтр("ru='Наименование аналогичного товара, который полностью идентичен + |по своему функциональному назначению и техническим характеристикам.'"); + КолонкиМакета.Добавить(Колонка); + + Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкаМакета("Совместимость", КолонкиМакета); + Колонка.Позиция = 3; + + Возврат КолонкиМакета; +КонецФункции +``` \ No newline at end of file