powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / 1с77. Заполнение ТЧ и НайтиПоРеквизиту
11 сообщений из 11, страница 1 из 1
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36814644
Всем привет.

Делаю импорт приходных накладных из Эксель, заполняю табличную часть существующей номенклатурой(ищу её НайтиПоРеквизиту), если её нет, то завожу новую и потом добавляю её в табличную часть. Проблема в том, что в справочник номенклатура добавляется, НайтиПоРеквизиту ищется, а вот в ТЧ добавляться отказывается. Чую, где-то я не дочитал жёлтые книжки.

Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
	ТМЦ=СоздатьОбъект("Справочник.Номенклатура");
	ТМЦПоиск=СоздатьОбъект("Справочник.Номенклатура");
	
     //данные
  	Для Стр= 2  По Высота Цикл
    	Состояние("Прогресс: "+Цел(Стр/Высота* 100 )+"%");
		ПрихНакл.НоваяСтрока();   
		КодНоменкл = УдалитьСимволы(Range.Cells(Стр, 3 ).Text);
        Если ТМЦПоиск.НайтиПоРеквизиту("КодНоменклатуры",КодНоменкл,  1 )= 0  Тогда
			Сообщить("Не найден товар по коду"+КодНоменкл+"!");
			ТМЦ.Новый();
			ТМЦ.КодНоменклатуры=КодНоменкл;
			ТМЦ.Наименование=СокрЛП(Range.Cells(Стр, 4 ).Text) + " (" + КодНоменкл+")";
	        Попытка
				ТМЦ.Записать();
        	Исключение
            	Сообщить("Ошибка записи ТМЦ: "+ОписаниеОшибки(),"!");
			КонецПопытки;
			//ТМЦПоиск=ТМЦ;
			//ТМЦПоиск.НайтиПоРеквизиту("КодНоменклатуры",КодНоменкл,  1 );
           	Продолжить;
		КонецЕсли;
	
		Сообщить(КодНоменкл+"="+ТМЦПоиск.ТекущийЭлемент());
		ПрихНакл.ТМЦ=ТМЦПоиск.ТекущийЭлемент();
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36814646
То есть табличная часть заполняется только той номенклатурой, которая уже была в справочнике. Там, где должна быть свежедобавленная — пустые строки.
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36814759
Reder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор_от_27_августа,

Ответ очевиден, ты же в строку пихаешь не вновь созданный элемент, а не найденный, по сути пустую ссылку.
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36814969
Rederты же в строку пихаешь не вновь созданный элемент, а не найденный, по сути пустую ссылку.И так думал, и так думал, всё равно не понял, что вы хотели сказать. Если номенклатура не найдена, я её создаю и "пихаю". Пустая ссылка получается после создания ТМЦ или после поиска? Оба варианта закомментированы, ибо результата не дали.
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36815019
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
СпрПоиск = создатьОбъект("Справочник.ТМЦ");
СпрЭлемент = создатьОбъект("Справочник.ТМЦ");
Цикл ПереборСтрокЭксель
КодПоиска = ЗначениеЯчейкиИзЭкселя;
 ПрихНакл.НоваяСтрока();
 Если СпрПоиск.ПоискПоРекивизиту(КодПоиска) = 1 Тогда
  ПрихНакл.ТМЦ = СпрПоиск.ТекущийЭлемент();
 Иначе
  СпрЭлемент.Новый();
  СпрЭлемент.КодНоменклатуры = КодПоиска;
  СпрЭлемент.Записать();
  ПрихНакл.ТМЦ = СпрЭлемент.ТекущийЭлемент();
 КонецЕсли;
КонецЦикла;
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36815071
Фотография Dinamo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор_от_27_августаRederты же в строку пихаешь не вновь созданный элемент, а не найденный, по сути пустую ссылку.И так думал, и так думал, всё равно не понял, что вы хотели сказать. Если номенклатура не найдена, я её создаю и "пихаю". Пустая ссылка получается после создания ТМЦ или после поиска? Оба варианта закомментированы, ибо результата не дали.
Двух переменных для номенклатур не нужно, достаточно одной.
Нет куска кода в котором инициируете ПрихНакл.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
ТМЦ = СоздатьОбъект("Справочник.Номенклатура");
//Выборка данных из excel
Для Стр= 2  По Высота Цикл
    Состояние("Прогресс: "+Цел(Стр/Высота* 100 )+"%");
    КодНоменклатуры = УдалитьСимволы(Range.Cells(Стр, 3 ).Text);
    Если ТМЦ.НайтиПоРеквизиту("КодНоменклатуры",КодНоменклатуры,  1 )= 0  Тогда
       Сообщить("Не найден товар по коду"+КодНоменклатуры+"! Выполняется создание");
       ТМЦ.Новый();
       ТМЦ.КодНоменклатуры = КодНоменклатуры;
       ТМЦ.Наименование      = СокрЛП(Range.Cells(Стр, 4 ).Text) + " (" + КодНоменклатуры+")";
       Попытка
	  ТМЦ.Записать();
       Исключение
          Сообщить("Не удалось записать новый ТМЦ: "+ОписаниеОшибки(),"!");
	  Продолжить; 
       КонецПопытки;
    КонецЕсли;
    //на данном этапе есть ссылка либо на найденный либо на вновь записанный элемент
    //теперь можно и строки создавать.
    Сообщить("Создание строки для номенклатуры: " + ТМЦ.КодНоменклатуры);
    ПрихНакал.НоваяСтрока();
    ПрихНакл.ТМЦ = ТМЦ.ТекущийЭлемент();
КонецЦикла;
ПрихНакл.Записать();
Удачи.
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36815087
Фотография Dinamo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Автор_от_27_августа]Всем привет.

Делаю импорт приходных накладных из Эксель, заполняю табличную часть существующей номенклатурой(ищу её НайтиПоРеквизиту), если её нет, то завожу новую и потом добавляю её в табличную часть. Проблема в том, что в справочник номенклатура добавляется, НайтиПоРеквизиту ищется, а вот в ТЧ добавляться отказывается. Чую, где-то я не дочитал жёлтые книжки.

Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	        Попытка
				ТМЦ.Записать();
        	Исключение
            	Сообщить("Ошибка записи ТМЦ: "+ОписаниеОшибки(),"!");
			КонецПопытки;
			//ТМЦПоиск=ТМЦ;
			//ТМЦПоиск.НайтиПоРеквизиту("КодНоменклатуры",КодНоменкл,  1 );
           	Продолжить;
Ошибка вот где.
Вы Продолжить вынесли из Попытки. Поэтому получалось что для всех вновь создаваемых номенклатур, независимо от того удалось ли записать или нет, цикл переходил к следующему шагу.
Продолжить нужно было расположить до строки КонецПопытки.
Ну а более упрощенный варинт я вам написал выше.
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36815122
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	ТМЦ=СоздатьОбъект("Справочник.Номенклатура");
	ТМЦПоиск=СоздатьОбъект("Справочник.Номенклатура");
	
     //данные
  	Для Стр= 2  По Высота Цикл
    	Состояние("Прогресс: "+Цел(Стр/Высота* 100 )+"%");
		ПрихНакл.НоваяСтрока();   
		КодНоменкл = УдалитьСимволы(Range.Cells(Стр, 3 ).Text);
        Если ТМЦПоиск.НайтиПоРеквизиту("КодНоменклатуры",КодНоменкл,  1 )= 0  Тогда
			ТМЦ.Новый();
			ТМЦ.КодНоменклатуры=КодНоменкл;
			ТМЦ.Наименование=СокрЛП(Range.Cells(Стр, 4 ).Text) + " (" + КодНоменкл+")";
			ТМЦ.Записать();
                                  ПрихНакл.ТМЦ=ТМЦ.ТекущийЭлемент();
        Иначе
              ПрихНакл.ТМЦ=ТМЦПоиск.ТекущийЭлемент();
        КонецЕсли;
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36815142
Всем спасибо, работает. :)
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36815167
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор_от_27_августаВсем спасибо, работает. :)

да незашо, тебе ещё Reder ответил на вопрос
...
Рейтинг: 0 / 0
1с77. Заполнение ТЧ и НайтиПоРеквизиту
    #36815209
Фотография Dinamo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Last1CmenАвтор_от_27_августаВсем спасибо, работает. :)
да незашо, тебе ещё Reder ответил на вопрос

Летят Шерлок Холмс и Ватсон на воздушном шаре. Куда залетели - не понятно. Решили спустится и спросить у прохожего.
Опустились поближе к земле, смотрят человек на поле пасет козу.
Спрашивают, на английском язке:
- Многоуважаемый Сэр, вы не подскажите где мы сейчас находимся?
Козопас, на чистом английском отвечает
- В корзине прикрепленной к воздушному шару.
....
Холмс, запускает горелку, шар поднимается вверх.
- Холмс, почему же вы не уточнили в какой местности мы находимся.
- Элементарно, Ватсон, мы летим над Россией, а этот человек программист
- Как вы это узнали?
- Ну, он совершенно верно ответил на поставленный вопрос, значит он человек с системным мышлением и наверняка программист.
- Ну а как вы узнали что мы в России, он ведь говорил по-английски?
- А только в России, Ватсон, программисты могут пасти коз.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / 1с77. Заполнение ТЧ и НайтиПоРеквизиту
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]