powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Загрузка данных в табличную часть из запроса
6 сообщений из 6, страница 1 из 1
Загрузка данных в табличную часть из запроса
    #36131815
vpanasenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Изучаю 1С 8.1 (пытаюсь :-) ) второй день. Хочу реализовать загрузку в табличную часть документа счетов. суть: есть таблица(или как это в 1С называется, объект) счетов, в которой есть поле ЗАКАЗ, есть вторая таблица, связанная с таблице счетов по полю ЗАКАЗ. Счета (заголовки) первоначально заполняются необходимой информацией(дата, №, контрагент, ЗАКАЗ! и т.д.). во второй таблице документов вносится по сути табличная информация, но не привязанная к Счету. Единственная связь - Заказ. Мне необходимо реализовать такой функционал: найти Счета, у которых Заказ не пустой и статус Обработан=Ложь или NULL, выбрать из дополнительной таблицы данные по Заказу и внести их в табличную часть этого самого счета. Уткнулся в то, что не знаю, как добавить данные в табличную часть. Вот, что накропал. Может, конечно, не фантастика, но честно, взялся за 1С второй день, до этого вообще не имел ни малейшего представления об этой системе.
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Процедура КнопкаСформироватьНажатие(Элемент)
	// Вставить содержимое обработчика.
перем Счета;	
    Счета = Документы.СчетНаОплатуПокупателю.Выбрать();

	ТекстЗапроса = "ВЫБРАТЬ Исходник, Номенклатура, Рубрика, Заказ, Количество, ЦенаИсходника 
	|ИЗ Документ.СчетИсходник ГДЕ Документ.СчетИсходник.Заказ=&Заказ";
	
	МойЗапрос = Новый Запрос (ТекстЗапроса);
	
	ТекстЗапроса = "ВЫБРАТЬ Дата, Номер, Заказ ИЗ Документ.СчетНаОплатуПокупателю ГДЕ (Документ.СчетНаОплатуПокупателю.Заказ  ЕСТЬ НЕ NULL 
	|ИЛИ Документ.СчетНаОплатуПокупателю.Заказ <> """") И (Документ.СчетНаОплатуПокупателю.Обработан <> ИСТИНА ИЛИ Документ.СчетНаОплатуПокупателю.Обработан ЕСТЬ NULL)";
	СчетЗапрос = Новый Запрос(ТекстЗапроса);
	Выборка = СчетЗапрос.Выполнить().Выбрать();
		
	пока Выборка.Следующий() цикл
		МойЗапрос.УстановитьПараметр("Заказ", Выборка.Заказ);
		Выборка2 = МойЗапрос.Выполнить().Выбрать();
		пока Выборка2.Следующий() цикл
			Документ = Документы.СчетНаОплатуПокупателю.НайтиПоНаименованию(Выборка2.Заказ, Истина);
			если Документ<>Неопределено 
				тогда 
				  //Документ.ТабличнаяЧасть = Документ.Услуги;
				  Документ.Услуги.Добавить();
				  Документ.Услуги.Номенклатура = Выборка2.Номенклатура;
				  Документ.Услуги.Рубрика = Выборка2.Рубрика;
				  Документ.Услуги.Исходник = Выборка2.Исходник;
				  Документ.Услуги.Цена = Выборка2.Цена;
				  Документ.Услуги.Количество = Выборка2.Количество;
				  Документ.Услуги.Сумма = Выборка2.Цена * Выборка2.Количество;
				  //Документ.Услуги.Записать;
				иначе 
			конецесли;
		конеццикла;
	конеццикла;	
	//Выбираем счета, которые нужно привязать к Исходникам
КонецПроцедуры
Можно подсказать?
...
Рейтинг: 0 / 0
Загрузка данных в табличную часть из запроса
    #36131962
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятная нетиповая структура таблиц
1. запрос должен быть один без всяких вложеннных циклов
2. Документ.СчетНаОплатуПокупателю.Заказ <> """"
заказ поле, разве строка?
3. вместо:
Документ.СчетНаОплатуПокупателю.Обработан <> ИСТИНА
лучше
(НЕ Документ.СчетНаОплатуПокупателю.Обработан)
4. 1С так устроен, что прямые ссылки никогда не равны NULL, поэтому:
Документ.СчетНаОплатуПокупателю.Заказ ЕСТЬ НЕ NULL
всегда верно
Документ.СчетНаОплатуПокупателю.Обработан ЕСТЬ NULL
никогда не верно
5. Документ = Документы.СчетНаОплатуПокупателю.НайтиПоНаименованию(Выборка2.Заказ, Истина);
откровенно, не понял
6. Даже если вы что-то там и получили, то только ссылку на запись, надо создать объект:
Объект = Документ.получитьОбъект();
7. Надо:
Стр = Документ.Услуги.Добавить();
Стр.Номенклатура =
8. наконец, если поименуте в запросе поля аналогично таб. части то не надо перебирать поля строки табличной части:
Стр = Документ.Услуги.Добавить();
ЗаполнитЗначенияСвойств(Выборка,Стр);
С уважением, Naf
...
Рейтинг: 0 / 0
Загрузка данных в табличную часть из запроса
    #36132153
vup70200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. запрос должен быть один без всяких вложеннных циклов - почему? мастер-деталь. Счет связан с другой таблицей по полю Заказ(строка). я выбрал все счета, удовлетворяющие условию, далее выбираю из второй таблицы данные ТОЛЬКО ДЛЯ ЭТОГО счета и соответственно (пытаюсь) заношу их в табличную часть
...
Рейтинг: 0 / 0
Загрузка данных в табличную часть из запроса
    #36132215
vup70200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5. Документ = Документы.СчетНаОплатуПокупателю.НайтиПоНаименованию(Выборка2.Заказ, Истина);
откровенно, не понял
это я пытаюсь найти в Счетах запись с соответствующим значение поля Заказ
...
Рейтинг: 0 / 0
Загрузка данных в табличную часть из запроса
    #36132343
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vup702001. запрос должен быть один без всяких вложеннных циклов - почему? мастер-деталь. Счет связан с другой таблицей по полю Заказ(строка). я выбрал все счета, удовлетворяющие условию, далее выбираю из второй таблицы данные ТОЛЬКО ДЛЯ ЭТОГО счета и соответственно (пытаюсь) заношу их в табличную часть
методологически не верно. Для каждой строки первого вы отправляете новые запросы на сервер: результат тот же а по времени и нагруженности сервера хуже.
А вообще ответа не прозвучала потому, что мне непонятны ваши таблицы, опишите их
...
Рейтинг: 0 / 0
Загрузка данных в табличную часть из запроса
    #36132687
vup70200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf,

Вот, не без чужой, конечно помощи получил такое
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ
    |СчетНаОплатуПокупателю.Ссылка КАК СчетНаОплатуПокупателю,
       |СчетИсходник.Номенклатура,
    |СчетИсходник.Рубрика,
    |СчетИсходник.Исходник,
    |СчетИсходник.ЦенаИсходника,
    |СчетИсходник.Количество
|ИЗ
    |Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|ЛЕВОЕ СОЕДИНЕНИЕ(    
    |ВЫБРАТЬ 
        |СчетИсходник.Заказ,
        |СчетИсходник.Номенклатура,
        |СчетИсходник.Рубрика,
        |СчетИсходник.Ссылка КАК Исходник,
        |СчетИсходник.ЦенаИсходника,
        |СчетИсходник.Количество
    |ИЗ
        |Документ.СчетИсходник КАК СчетИсходник
    |ГДЕ        
        |СчетИсходник.ПометкаУдаления = ЛОЖЬ) КАК СчетИсходник
|ПО
    |СчетНаОплатуПокупателю.Заказ = СчетИсходник.Заказ        
|ГДЕ
    |СчетНаОплатуПокупателю.ПометкаУдаления = ЛОЖЬ
    |И СчетНаОплатуПокупателю.Обработан = ЛОЖЬ
	|И (СчетНаОплатуПокупателю.Заказ <> """" ИЛИ СчетНаОплатуПокупателю.Заказ ЕСТЬ NULL)
|ИТОГИ ПО 
    |СчетНаОплатуПокупателю";

Запрос.Текст = ТекстЗапроса;
РЗ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Для Каждого СчетПолучатель из РЗ.Строки Цикл
    Док = СчетПолучатель.СчетНаОплатуПокупателю.ПолучитьОбъект();
    Для Каждого СчетИсходник из СчетПолучатель.Строки Цикл
        НовСтрока=Док.Услуги.Добавить();
        НовСтрока.Номенклатура = СчетИсходник.Номенклатура;
        НовСтрока.Рубрика = СчетИсходник.Рубрика;
        НовСтрока.Исходник = СчетИсходник.Исходник;
        НовСтрока.Цена = СчетИсходник.ЦенаИсходника;
        НовСтрока.Количество = СчетИсходник.Количество;
        НовСтрока.Сумма = СчетИсходник.ЦенаИсходника * СчетИсходник.Количество;
		
   КонецЦикла;
   Попытка 
   Док.Записать(РежимЗаписиДокумента.Запись);
   Исключение
   Сообщить(ОписаниеОшибки());
   КонецПопытки;
КонецЦикла;
Но теперь другая проблема: как удалить все исходники из СчетИсходник, ОСТАВИВ ПРИ ЭТОМ ТЕ, ДЛЯ КОТОРЫХ НЕТУ подходящего счета? Связь осуществляется по по полю Заказ, которое заполняется вручную и возможны опечатки. Нужно удалить все привязанные записи, оставив только "беспризорные" для последующего разбора ситуации.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Загрузка данных в табличную часть из запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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