Имя: Пароль:
1C
1С v8
Проведение документа и отражение по регистру
0 Смертник
 
24.12.12
15:54
Процедура ОбработкаПроведения(Отказ, Режим)
   //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   // регистр ру_ОтгрузкаФактТариф
   
   Движения.ру_ОтгрузкаФактТариф.Записывать = Истина;
   Движения.ру_ОтгрузкаФактТариф.Очистить();
   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ру_ЖДКвитанцияВагоны.Ссылка.Грузоотправитель КАК ГрузоотправительГл,
       |    ру_ЖДКвитанцияВагоны.Ссылка.Грузополучатель КАК Грузополучатель,
       |    ру_ЖДКвитанцияВагоны.Ссылка.Номенклатура КАК Номенклатура,
       |    ру_ЖДКвитанцияВагоны.Ссылка.Покупатель КАК Покупатель,
       |    ру_ЖДКвитанцияВагоны.Ссылка.ДоговорКонтрагента КАК ДоговорКонтрагента,
       |    ру_ЖДКвитанцияВагоны.Ссылка.Заказ КАК Заказ,
       |    ру_ЖДКвитанцияВагоны.Ссылка.Количество КАК Количество
       |ИЗ
       |    Документ.ру_ЖДКвитанция.Вагоны КАК ру_ЖДКвитанцияВагоны
       |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ру_ПодтверждениеЖДТарифа.Вагоны КАК ру_ПодтверждениеЖДТарифаВагоны
       |        ПО ру_ЖДКвитанцияВагоны.НомерВагона = ру_ПодтверждениеЖДТарифаВагоны.НомерВагона
       |            И ру_ЖДКвитанцияВагоны.Ссылка = ру_ПодтверждениеЖДТарифаВагоны.Ссылка.ДокументОснование
       |ГДЕ
       |    ру_ПодтверждениеЖДТарифаВагоны.Ссылка = &Ссылка";
       
   Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
   ТЗ= Запрос.Выполнить().Выгрузить();

   Для Каждого ТекСтрокаВагоны Из Вагоны Цикл
       Движение = Движения.ру_ОтгрузкаФактТариф.Добавить();
       Движение.Период = Дата;
       Движение.СтанцияОтправления = ТекСтрокаВагоны.СтанцияОтправления;
       Движение.СтанцияНазначения = ТекСтрокаВагоны.СтанцияНазначения;
       Движение.НомерВагона = ТекСтрокаВагоны.НомерВагона;
       Движение.Собственник = ТекСтрокаВагоны.Собственник;
       Движение.ОператорПС = ТекСтрокаВагоны.ОператорПС;
       Движение.ДатаОтгрузки = ТекСтрокаВагоны.ДатаОтгрузки;
       Движение.Грузоподъемность = ТекСтрокаВагоны.Грузоподъемность;
       Движение.ЖДТариф = ТекСтрокаВагоны.ЖДТарифБезНДС;
       Движение.Грузоотправитель = ТЗ.ГрузоотправительГл;
       Движение.Грузополучатель = ТЗ.Грузополучатель;
       Движение.Номенклатура = ТЗ.Номенклатура;
       Движение.Покупатель = ТЗ.Покупатель;
       Движение.ДоговорКонтрагента = ТЗ.ДоговорКонтрагента;
       Движение.Заказ = ТЗ.Заказ;
       Движение.Количество = ТЗ.Количество;
   КонецЦикла;

   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Щапросом беру реквизиты которых нет в самом документе, но есть в документе основании.
И не пойму почему не находит реквизиты их запроса, а именно застрял на этом - Движение.Грузоотправитель = ТЗ.ГрузоотправительГл;
1 GROOVY
 
24.12.12
15:58
Позиционироваться на результате запроса кто будет?
Кстати, не рекомендуется выгрузка в ТЗ результата для получения единственной строки, лучше выборку делать.
2 Deon
 
24.12.12
16:00
(1) О, а не объяснишь, почему?
3 Deon
 
24.12.12
16:00
(0) Семерочник?
4 Starhan
 
24.12.12
16:01
потому что в памяти меньшее места занимает.

в выборке на тек момент хранятся данные ток текущей строки,
а в тз все данные скопом.


техническим языком объяснять не умею :(
5 Смертник
 
24.12.12
16:06
(1) в смысле позиуироваться?
6 Deon
 
24.12.12
16:07
(4) Так все равно 1 строка, что так, что эдак
7 Смертник
 
24.12.12
16:08
не строк много там надо выбрать просто он в первую утыкается и дает ошибку
8 Галахад
 
гуру
24.12.12
16:08
(5) Выгружаешь в ТЗ, а перебираешь Вагоны....
9 Deon
 
24.12.12
16:09
(5) В смысле ТЗ - это таблица значений, а в Движение.Грузоотправитель = ТЗ.ГрузоотправительГл; вместо ТЗ должна идти переменная строки ТЗ.
типа:
СтрТЗ = ТЗ[0];
Движение.Грузоотправитель = СтрТЗ.ГрузоотправительГл;
10 Deon
 
24.12.12
16:09
(9) Ток ты так не делай, это я  для примера
11 zladenuw
 
24.12.12
16:10
(0) лучше название колонок как в документе реквизиты и
ЗАполнитьЗначениеСвойств
12 Галахад
 
гуру
24.12.12
16:11
(6) А если в документе 1000 сток?
13 Starhan
 
24.12.12
16:13
(6)
Можно попробовать замерить обход по строкам и там и там но мне лень :)
14 Deon
 
24.12.12
16:13
(12) Да, не обратил внимания, что в (0) запрос тянет все строки. Я про ситуацию, когда запрос в любом случае вернет 1 строку, что использовать, выборку или выгрузку?
15 Смертник
 
24.12.12
16:14
названия и так соответствуют именам колонок в доке основании
16 zladenuw
 
24.12.12
16:14
(15) обманщик (0)   Движение.Грузоотправитель = ТЗ.ГрузоотправительГл;
17 Смертник
 
24.12.12
16:16
Это я сделал чтобы посмотреть на что ругается, а так там Грузоотправитель
18 Serg_1960
 
24.12.12
16:16
Хитровывернутый запрос, не осилил. Но хочу сказать: когда-нибудь он сработает и взорвется - автор будет иметь бледный вид от испуга :)
19 Галахад
 
гуру
24.12.12
16:17
(14) Наверное пофиг. Хотя лучше однообразно делать...
20 Смертник
 
24.12.12
16:17
если подскажите как написать по другому запрос к доку основания буду благодарен
21 Alexaha
 
24.12.12
16:21
(20) запрос пиши так что бы у тебя в результат получался готовый набор записей

чтобы в итоге можно было написать

НаборЗаписей.Загрузить(Запрос.Выполнить().Выгрузить())
22 zladenuw
 
24.12.12
16:21
(21) ну это вообще по феншуЮ :)
23 Галахад
 
гуру
24.12.12
16:23
Не понимаю, почему программист должен кого-то материть?
Ну кроме начальника.

Матерят, как правило из-за несбывшихся ожиданий.
А какие ожидания от пользователей или коллег.
24 Галахад
 
гуру
24.12.12
16:25
Хм. Акела промахнулся..
25 Deon
 
24.12.12
16:26
(24) Не переживай, я и ту ветку параллельно читаю, так что нормально
26 Serg_1960
 
24.12.12
16:32
(0) Или я ничего не понимаю в мясных обрезках, или ТС нужно:
"ВЫБРАТЬ
|    Квитанция.Грузоотправитель КАК ГрузоотправительГл,
|    Квитанция.Грузополучатель КАК Грузополучатель,
|    Квитанция.Номенклатура КАК Номенклатура,
|    Квитанция.Покупатель КАК Покупатель,
|    Квитанция.ДоговорКонтрагента КАК ДоговорКонтрагента,
|    Квитанция.Заказ КАК Заказ,
|    Квитанция.Количество КАК Количество
|ИЗ
|    Документ.ру_ЖДКвитанция КАК Квитанция
|ГДЕ
|    Квитанция.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.ДокументОснование);
27 Смертник
 
24.12.12
16:41
это сработает если делается на основании ввод а если строки заполнены путем добавления?
28 Serg_1960
 
24.12.12
16:51
(27) Тогда это противоречит запросу, ибо там ты при соединении используешь "...И ру_ЖДКвитанцияВагоны.Ссылка = ру_ПодтверждениеЖДТарифаВагоны.Ссылка.ДокументОснование"
29 Смертник
 
24.12.12
16:57
так я добавляю движение тоже по ЖД Квитанции - просто выбираю какие надо документы и добавляю
30 Смертник
 
24.12.12
17:05
и как тогда правильно строить запрос?
31 Serg_1960
 
24.12.12
17:16
Насколько я понимаю, "НомерВагона" не является уникальным значением и не может являться "самодостаточным" для соединения в документе, у которого не указано основание.

И второе: если документ заполнен не "по основанию", тогда можно предположить, что "оснований" может быть несколько.

Не зная твою конфу, могу только предположить: вероятно в ТЧ есть "Номенклатура" и "Заказ" - вот по ним возможно соединение. Вероятно.
32 Смертник
 
24.12.12
17:21
в подтверждении нет ни заказа ни номенклатуры
33 Смертник
 
24.12.12
17:22
есть номер вагона и те поля которые указаны при заполнении
34 sidalexsandr
 
24.12.12
17:36
Для каждого ТаблЗнач Из ТЗ Цикл
   // Вот так получить значение из таблицы значений
     ТаблЗнач.ТЗ.Грузоотправитель
   

КонецЦикла;
Закон Брукера: Даже маленькая практика стоит большой теории.