Тестовое задание

1. Skrips91 06.11.19 12:25 Сейчас в теме
Здравствуйте! помогите пожалуйста с тестовым заданием. Я не знаю синтаксис языка 1С так как я программист js,php. Сможет кто нибудь просто в блокноте логику написать на 1с синтаксисе, я думаю разберусь после этого.Спасибо




Есть обычный текстовый файл, в котором содержатся данные о товаре в следующем формате:

Товар1;Артикул1;Цена;Количество

Товар2;Артикул2;Цена;Количество



ТоварN;АртикулN;Цена;Количество

Необходимо в режиме предприятия 1С сначала упаковать данные этого файла в XML для последующей передачи его обработке, которая из XML получает товары со своим данными и заполняет табличную часть. Если номенклатура (товар) в ИБ найдена по артикулу, а артикул уникальный во всей ИБ, то в табличной части в определённой колонке указывается ссылка на номенклатуру, иначе реализовать пользователю возможность интерактивно создать новый элемент Справочника «Номенклатура».

Упаковка и распаковка в XML как доп. задание, но если сможете будет отлично.
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 06.11.19 12:32 Сейчас в теме
(1)
/режим офф-топ включен/
Если вы вообще не программист 1С, для чего вы взяли это задание?
/режим офф-топ выключен/
YannikAlx; +1 Ответить
3. YannikAlx 43 06.11.19 12:36 Сейчас в теме
(1) Если есть форматированный текстовый файл, ЗАЧЕМ еще мучиться в XML что то замуровывать?
Читайте посрочно , как и в любом языке, если вы программист...
На каждом шаге цикла
- поиск в базе по артикулу, при успешном поиске занесение в табличную часть ссылки, цены и количества.
- при неудачном поиске номенклатуры в базе - возможно автоматическое создание номенклатуры (зачем интерактивно напрягать пользователея?) и уже потом занесение в ваш документ ссылки на вновь созданную номенклатуру...

xml - вообще вам зачем?
alex-l19041; +1 Ответить
4. alex-l19041 8 06.11.19 12:42 Сейчас в теме
(3)
На каждом шаге цикла
- поиск в базе по артикулу
- лучше сначала выбрать из базы в таблицу и в цикле поиск по таблице
8. nomad_irk 72 06.11.19 12:49 Сейчас в теме
(4)О да......а если в базе, например, 1М номенклатуры? :)
9. spacecraft 06.11.19 12:50 Сейчас в теме
(8) ТЧ больше 100к не поддерживает :)
10. nomad_irk 72 06.11.19 12:51 Сейчас в теме
(9)Поддерживает, только номера строк при этом более 99999 не проставляются, это - да :)
Прикрепленные файлы:
14. spacecraft 06.11.19 15:40 Сейчас в теме
(10) я же сказал ТЧ, а не ДанныеФормыКоллекция. Попробуйте это сохранить :)
15. nomad_irk 72 06.11.19 15:56 Сейчас в теме
(14)В данном случае - это ТЧ обработки, поэтому сохранить могу тока в файл, методом ЗначениеВФайл().
16. spacecraft 06.11.19 16:24 Сейчас в теме
(15) проверьте тип этой "ТЧ обработки".
В реальности при записи будет ошибка: "Табличная часть объекта содержит более 99999 строк - 'Документ тест.ТЧ'"
17. nomad_irk 72 06.11.19 16:28 Сейчас в теме
(16)Что значит проверить тип "ТЧ Обработки"? Это ТабличнаяЧасть :)
Прикрепленные файлы:
18. spacecraft 06.11.19 16:35 Сейчас в теме
(17) Обработки ничего не хранят. ТЧ там для галочки. Данные отображаются в ДанныеФормыКоллекция. Нет там данных в ТЧ.
11. acanta 06.11.19 12:52 Сейчас в теме
(4) а если полнотекстовый поиск?
12. spacecraft 06.11.19 12:55 Сейчас в теме
(11) зачем? Поиск ведь полнотекстовый должен быть.
Просто загружается полученная таблица в запрос и по ней левым соединением соединяется по артикулу таблица Номенклатура.
Там где Null, значит нет элемента в базе.
nomad_irk; acanta; +2 Ответить
5. starik-2005 3036 06.11.19 12:43 Сейчас в теме
(3)
xml - вообще вам зачем?
Точно! JSON рулит!

А вообще, все просто:
1. Бесконечный цикл.
2. Читаем строку (проще использовать чтение текста)
3. Цикл по разделенной по разделителю строке
4. Значение полученного элемента в ключ структуры (можно соответствие с индексом в качестве ключа и элементом структуры в качестве значения)
5. Запись XML, JSON, прочего чего, в которую пишется структура.
6. Передача записанного в строку или файл значения во внешнюю обработку.
7. nomad_irk 72 06.11.19 12:48 Сейчас в теме
(3)Не надо построчно выполнять поиск элемента, нужно накопить массив искомых значений и однажды пройтись поиском с помощью запроса - тем самым сократите количество итераций вида "запрос данных в ИБ - получение данных из ИБ" в тысячи раз.
alex-l19041; +1 Ответить
13. kasper076 103 06.11.19 15:40 Сейчас в теме
(0)
Процедура ТекстВХМЛНаСервере()
	
	ЗаписьХМЛ = Новый ЗаписьXML;
	ЗаписьХМЛ.ОткрытьФайл(ПутьКФайлуХМЛ);
	ЗаписьХМЛ.ЗаписатьОбъявлениеXML();
	
	ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Данные");
	
	ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуТХТ);
	Стр = ЧтениеТекста.ПрочитатьСтроку();
	
	Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
		
		ДанныеСтроки = СтрРазделить(Стр, ";");
		
		ЗаписьХМЛ.ЗаписатьНачалоЭлемента("ДанныеТовара");
		
		ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Товар");
		ЗаписьХМЛ.ЗаписатьТекст(ДанныеСтроки[0]);
		ЗаписьХМЛ.ЗаписатьКонецЭлемента();
		
		ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Артикул");
		ЗаписьХМЛ.ЗаписатьТекст(ДанныеСтроки[1]);
		ЗаписьХМЛ.ЗаписатьКонецЭлемента();
		
		ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Цена");
		ЗаписьХМЛ.ЗаписатьТекст(ДанныеСтроки[2]);
		ЗаписьХМЛ.ЗаписатьКонецЭлемента();
		
		ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Количество");
		ЗаписьХМЛ.ЗаписатьТекст(ДанныеСтроки[2]);
		ЗаписьХМЛ.ЗаписатьКонецЭлемента();
		
		ЗаписьХМЛ.ЗаписатьКонецЭлемента(); //ДанныеТовара
		
		Стр = ЧтениеТекста.ПрочитатьСтроку();
	КонецЦикла;
	
	ЗаписьХМЛ.ЗаписатьКонецЭлемента(); //Данные
	
	ЗаписьХМЛ.Закрыть();
	
КонецПроцедуры
Показать


На выходе вот такой ХМЛ
<?xml version="1.0" encoding="UTF-8"?>
<Данные>
<ДанныеТовара>
<Товар>Товар1</Товар>
<Артикул>Артикул1</Артикул>
<Цена>Цена</Цена>
<Количество>Цена</Количество>
</ДанныеТовара>
<ДанныеТовара>
<Товар>Товар2</Товар>
<Артикул>Артикул2</Артикул>
<Цена>Цена</Цена>
<Количество>Цена</Количество>
</ДанныеТовара>
<ДанныеТовара>
<Товар>ТоварN</Товар>
<Артикул>АртикулN</Артикул>
<Цена>Цена</Цена>
<Количество>Цена</Количество>
</ДанныеТовара>
</Данные>
Показать
Прикрепленные файлы:
Текст в ХМЛ.epf
6. spacecraft 06.11.19 12:47 Сейчас в теме
Это тестовое задание, а не соревнование в оптимальности.
Проверяются умения работы с парсингом csv файла, работа с xml, xdto, запросами и формами.
Только если вообще не знаете 1С, то какой смысл проходить это задание? Это уровень немного выше чем junior.
19. PiotrLoginov 07.11.19 01:56 Сейчас в теме
ТС, вопросы остались? Сам я не смог оценить оставленные ответы, потому что не смог осилить описанную задачу. Уже на первом пункте

упаковать данные "обычного текстового файла" в XML

я споткнулся и завис. Нет, можно написать код, который прочитает текстовый файл в двоичные данные, а затем упакует их в архив и сохранит результат в виде xml-файла, но думаю, задача на самом деле не в этом. То ли постановщик задачи весьма косноязычен, то ли Вы такой же программист js,php, как я - балерина. Без обид.

Нет, можно, конечно, представить, что Вы - не программист, а среднестатистический юзер, пытающийся что-то объяснить на своем уровне. И расшифровать "хотелку", как это происходит обычно при общении со среднестатистическими юзерами. Но мы ведь не пойдем таким путем?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот