Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 21:35

Нужен гениальный совет

Автор Nosferatu112, 08 фев 2023, 09:22

0 Пользователей и 1 гость просматривают эту тему.

Nosferatu112

я сравниваю созданные номенклатуры в 1с с номенклатурами в эксель как сделать что бы номенклатуры которые не были найдены  попали в мою таблицу значений этот код выводит в таблицу 3 пустые строки в эксель 4 строки 1 не совпадает 3 совпадают я так понимаю пытаеться он вывести именно их но даже их выводит пустыми

&НаКлиенте
Процедура СоздатьНоменклатуру(Команда)
СоздатьНоменклатуруНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПроверитьНоменклатуруНаСервере()

МассивИмен = Новый Массив;
Для Каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
МассивИмен.Добавить(СтрокаДанных.Номенклатура);
КонецЦикла;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование В(&МассивИмен)";

Запрос.УстановитьПараметр("МассивИмен", МассивИмен);

РезультатЗапроса = Запрос.Выполнить();
ТаблицаИмен = РезультатЗапроса.Выгрузить();


Для Каждого СтрокаДанных ИЗ Объект.ДанныеФайла Цикл
НайденыеИмена = ТаблицаИмен.Найти(СтрокаДанных.Номенклатура);
Если НайденыеИмена <> Неопределено Тогда
Продолжить;
Иначе

Для Каждого НомерСтроки Из ТаблицаИмен Цикл
НоменклатураНовый = СозданиеНоменклатуры.Добавить();
НоменклатураНовый.Номенклатура = НайденыеИмена;
КонецЦикла;

КонецЕсли;
КонецЦикла;

КонецПроцедуры


Afinogen

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТЗ",Объект.ДанныеФайла.Выгрузить());

Запрос.Текст = "ВЫБРАТЬ
|ТЗ.Номенклатура
|ПОМЕСТИТЬ ВТТЗ
|ИЗ
|&ТЗ
|
|;
|/////////////////////////////
|ВЫБРАТЬ
|    Номенклатура.Наименование КАК Наименование
|ПОМЕСТИТЬ ВТНоменклатура
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    (Номенклатура.Наименование,ИСТИНА) В(ВЫБРАТЬ ВТТЗ.Номенклатура,ИСТИНА ИЗ ВТТЗ) И НЕ Номенклатура.ПометкаУдаления
|
|;
|//////////////////////////////
|ВЫБРАТЬ *
|ИЗ
|ВТТЗ
|ГДЕ
| НЕ (ВТТЗ.Номенклатура) В (ВЫБРАТЬ ВТНоменклатура.Наименование ИЗ ВТНоменклатура)";

Пакет = Запрос.ВыполнитьПакет()

СозданиеНоменклатуры = ПАкет[2].Выгрузить();

Запрос.МенеджерВременныхТаблиц.Закрыть();

Afinogen

поясняю запрос
1. в первом пакете (то что  до первой точки с запятой) вы в запрос выгружаете данные из  вашего экселя (считываете)
2. во втором пакете вы в справочнике ищите все номенклатуры наименования которых  естьв вашем экселе
3. в итоговом третьем пакете вы уже в экселе ищете все наименования которые не попали во второй пакет

LexaK

Nosferatu112,
ЦитироватьНужен гениальный совет
самый гениальный совет: Начните изучение 1С с самих азов, Типы, Ссылки, Таблицы, Циклы и т.д.
тогда таких проблем с "пустыми" строчками возникать не будет!  :befhbt:

(но кто читает/следует таким гениальным и в то же время простым советам?  :dfbsdfbsdf: )
если помогло нажмите: Спасибо!

Nosferatu112

LexaK, Отличный совет, я так и делаю но у меня всего месяц что бы решить 10 задач так что приходиться спрашивать и торопиться.

LexaK

Цитата: Nosferatu112 от 08 фев 2023, 11:04но у меня всего месяц что бы решить 10 задач
ааа, тогда другой "гениальный" совет!

на этом сайте есть страничка Фрилансеров (что такой фриланс - знаете?)
обратитесь к ним, они решат все ваши задачи на раз-два, (естественно за какую-то плату)

(так вроде, принято платить за сэкономленное время и нервы)
если помогло нажмите: Спасибо!

antoneus

а можно сократить

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТЗ",Объект.ДанныеФайла.Выгрузить());

Запрос.Текст = "ВЫБРАТЬ
|ТЗ.Номенклатура
|ПОМЕСТИТЬ ВТТЗ
|ИЗ
|&ТЗ
|
|;
|//////////////////////////////
|ВЫБРАТЬ
|ВТТЗ.Номенклатура
|ИЗ
|ВТТЗ КАК ВТТЗ
|ЛЕВОЕ СОЕДИНЕНИЕ
|Справочник.Номенклатура КАК спрНоменклатура
|ПО
|ВТТЗ.Номенклатура = спрНоменклатура.Наименование
|ГДЕ
| спрНоменклатура.Наименование ЕСТЬ NULL";

тзНеНайденные = Запрос.Выполнить().Выгрузить();

Nosferatu112

LexaK, Так тоже не пойдёт мне нужно понимать что я делаю, так как это экзамен для завершения стажировки бесплатной а на этом сайте объясняют то что советуют

LexaK

Nosferatu112,
Цитироватьа на этом сайте объясняют то что советуют
эээ, так вы не понимаете разницу между Наименованием и Ссылкой!
(как тут можно что-то посоветовать и объяснить? в самом деле, не книжку же здесь пересказывать?)
если помогло нажмите: Спасибо!

Nosferatu112

LexaK, Я понимаю разницу между наименованием и ссылкой я не могу в голове структурировать свои знания и записать их в код, если вы пол жизни программируете не значит что все с 1го дня хреначат идеальный код. Кстати задача решена спасибо всем за советы, кроме вас LexaK конечно же вы какой то обиженый на жизнь, не быть вам преподователем.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск