Имя: Пароль:
1C
1С v8
Цикл по ТЗ. Создавать, заполнять и записывать документы по датам. Как ?
,
0 raykom
 
16.10.14
09:59
ДенисЧ, неси свою очередную метлу ...

Есть таблица значений со строкой вида -

Дата   Номенклатура  Количество

Колонка дата содержит даты, остальные - соответственно.
Даты могут быть и одинаковые и различное количество одинаковых в группе.
Надо идти по таблице и в начале каждой группы одинаковых дат создавать документ, а остальные строки с одноименной датой - заносить в табличную часть.
Потом как то записывать, соответственно.
Подкиньте код.

Я вот так наговнял - все вроде отрабатывает. А вот запись документа - ни как пристроить не могу. Не пойму куда и как.

СтараяДата = "01.01.01";
    //счетцикла = 1;
    Для Каждого Стр из ТабПоле Цикл
        
        Если Стр.Дата <>  СтараяДата Тогда
            //записываем созданный док но если только счетцикла не равен одному
            Сообщить("Создаем документ   "+Стр.Дата);
        КонецЕсли;
        
        Сообщить("Заполняем Строки Документа    "+Стр.НоменклатураФ+"   "+Стр.Дата);
        СтараяДата = Стр.Дата;
        
    КонецЦикла;
    //Сообщить("Записываем документ  ");  ?????


Благодарю за внимание.
54 МишельЛагранж
 
16.10.14
10:48
(52) клюшкины ТАКИХ вопросов не задают...
55 raykom
 
16.10.14
10:48
(50)ТЗ - ТаблицаЗначений или ТезЗадание ?
Если про таблицу - то ТЗ - это Табличное поле на форме обработки
56 raykom
 
16.10.14
10:48
Неее ))) Сусанины.
Это осмерка
57 Крошка Ру
 
16.10.14
10:49
(54) Ещё и не такие задают, когда в восьмерке кодить пытаются. Особенно поначалу
58 МишельЛагранж
 
16.10.14
10:49
ВЫБРАТЬ
    ТЗ.поле1,
    ТЗ.поле2
ИЗ
    &ТЗ КАК ТЗ
59 Крошка Ру
 
16.10.14
10:49
(56) так чем тебе вариант в (29) не понравился?
60 МишельЛагранж
 
16.10.14
10:49
(57) семерошники ПРО СЕМЕРКУ ТАКИХ вопросов не задают ))
61 Ёпрст
 
16.10.14
10:50
(55) поставщиком твоего табличного поля что является ?
Источник данных для него что ? Таблица значений, еще чего ?
62 pessok
 
16.10.14
10:50
Ну так это

ТЗВыгрузка = ТабЧасть.Выгрузить();
Запрос = Новый Запрос(
"ВЫБРАТЬ * ПОМЕСТИТЬ ТЗОтбор ИЗ &ТЗ КАК ТЗ;
ВЫБРАТЬ * ИЗ ТЗОТбор
ИТОГИ ПО Дата");

Запрос.УстановитьПараметр("ТЗ", ТЗВыгрузка);
63 МишельЛагранж
 
16.10.14
10:50
(55)"то ТЗ - это Табличное поле на форме обработки"
ТП и ТЗ - разные вещи.
64 raykom
 
16.10.14
10:51
(59)>Если Дата='00010101000000' Тогда
Док.Записать();

Это будет только одн раз при запуске процедуры.
Я остальные то Доки когда записывать буду ?
65 pessok
 
16.10.14
10:51
(63) у табличного поля (не поля табличного документ) есть источник. Либо это табличная часть объекта, либо это таблица значений. И то и другое можно запихнуть параметров в запрос
66 МишельЛагранж
 
16.10.14
10:52
(65) из ТЧ выгрузить сначала надо.
67 pessok
 
16.10.14
10:53
(66) чуЖь
68 Ёпрст
 
16.10.14
10:53
(59) не рабочий код
69 Крошка Ру
 
16.10.14
10:53
(64) А да. Там ошибка. Должно быть
Если Дата<>'00010101000000' Тогда
70 Крошка Ру
 
16.10.14
10:53
(68) Обоснуй
71 Ёпрст
 
16.10.14
10:53
(64) там помимо этого, всё неправильно.
72 МишельЛагранж
 
16.10.14
10:54
+ 63 хотя ТП неявно использует внутри себя некую структуру а-ля ТЗ как основу, но никто не признается.
73 pessok
 
16.10.14
10:54
посоны, ну это уже троллинг, расходимся :)
74 raykom
 
16.10.14
10:54
(61)ТабПоле - ТипЗнаения - ТаблицаЗначений
75 raykom
 
16.10.14
10:54
(73)Приехали ...
76 Ёпрст
 
16.10.14
10:55
(70)
Если Дата='00010101000000' Тогда
Док.Записать();

в это условие влетит раньше, чем переменная Док вообшще объявляется как создать документ
77 МишельЛагранж
 
16.10.14
10:55
(70) алгоритм в 17 самый правильный, его только в 8-ку нужно переписать.
78 pessok
 
16.10.14
10:55
(75) я тебе написал рабочий код в (62)
обходи теперь по группировкам результат запроса как в (30)
79 Крошка Ру
 
16.10.14
10:56
(76) См.(69)
80 МишельЛагранж
 
16.10.14
10:56
(74)"ТабПоле - ТипЗнаения - ТаблицаЗначений"
это откуда такие информации?
81 Ёпрст
 
16.10.14
10:56
(74)

Помести ТЗ в запрос, далее примитив - обходи группировки запроса и привет.
82 raykom
 
16.10.14
10:57
(77)И я о том же. Только не понимаю как. Покурить про объект ИндексированнаяТаблица ?
В СП есть такое ?

(78)Да пробую. Только тут вот вариантов накидали - завис ...
83 МишельЛагранж
 
16.10.14
10:57
ТипЗначения ТП = Тип("ТабличноеПоле")
84 Ёпрст
 
16.10.14
10:58
(79) не спасёт - последний документ не запишется
85 МишельЛагранж
 
16.10.14
10:58
(82) нет, заменить семерошные инструкции на восьмерошные.
86 raykom
 
16.10.14
10:58
(8)>Помести ТЗ в запрос
Каг ?
87 raykom
 
16.10.14
10:58
(85)Где их искать ?
88 МишельЛагранж
 
16.10.14
10:59
(81) из ТЗ можно отобрать все что угодно по условию безо всякого запроса ))
89 Ёпрст
 
16.10.14
10:59
(86)
Запрос.УстановитьПараметр("ТЗ",ТЗ);
90 raykom
 
16.10.14
10:59
Рука тянется к бутилке ...
91 pessok
 
16.10.14
11:00
Запрос = Новый Запрос();
    
    Запрос.Текст =
    
    "ВЫБРАТЬ
    |    ТаблицаОбработки.Дата,
    |    ТаблицаОбработки.Номенклатура,
    |    ТаблицаОбработки.Количество
    |ПОМЕСТИТЬ ВТТабЧастьОбработки
    |ИЗ
    |    &ТаблицаОбработки КАК ТаблицаОбработки
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТТабЧастьОбработки.Дата,
    |    ВТТабЧастьОбработки.Номенклатура,
    |    ВТТабЧастьОбработки.Количество
    |ИЗ
    |    ВТТабЧастьОбработки КАК ВТТабЧастьОбработки
    |ГДЕ
    |    ВТТабЧастьОбработки.Дата = &Дата";
    
    Запрос.УстановитьПараметр("ТаблицаОбработки", ТабличнаяЧасть1);
    
    ВыборкаДата = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаДата.Сбросить() Цикл
        
        Док = Документы.ХХХ.Создать();
        Док.Дата = ВыборкаДата.Дата;
        
        ВыборкаДетали = ВыборкаДата.Выбрать();
        
        Пока ВыборкаДетали.Следующий() Цикл
            
            ЗаполнитьЗначенияСвойств(Док.ТЧ.Добавить(), ВыборкаДетали);
            
        КонецЦикла;
        
        Док.Записать();
        
    КонецЦикла;
92 Ёпрст
 
16.10.14
11:00
(88) ктож спорит то.. запросом удобнее, мало ли, ему надо еще что-то при этом сделать
:)
93 pessok
 
16.10.14
11:00
все, закрываемся :)
94 raykom
 
16.10.14
11:00
(89)Ага.
95 raykom
 
16.10.14
11:00
(91) ))) Обломил сотко ...
96 МишельЛагранж
 
16.10.14
11:01
(74) это ты перепутал источник данных ТП и саму ТП.
97 Крошка Ру
 
16.10.14
11:01
(93) Взял и всё испортил
98 pessok
 
16.10.14
11:01
хоу. Сбросить = Следующий() ессно
99 pessok
 
16.10.14
11:01
Запрос = Новый Запрос();
    
    Запрос.Текст =
    
    "ВЫБРАТЬ
    |    ТаблицаОбработки.Дата,
    |    ТаблицаОбработки.Номенклатура,
    |    ТаблицаОбработки.Количество
    |ПОМЕСТИТЬ ВТТабЧастьОбработки
    |ИЗ
    |    &ТаблицаОбработки КАК ТаблицаОбработки
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТТабЧастьОбработки.Дата,
    |    ВТТабЧастьОбработки.Номенклатура,
    |    ВТТабЧастьОбработки.Количество
    |ИЗ
    |    ВТТабЧастьОбработки КАК ВТТабЧастьОбработки
    |ГДЕ
    |    ВТТабЧастьОбработки.Дата = &Дата";
    
    Запрос.УстановитьПараметр("ТаблицаОбработки", ТабличнаяЧасть1);
    
    ВыборкаДата = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаДата.Следующий() Цикл
        
        Док = Документы.ХХХ.Создать();
        Док.Дата = ВыборкаДата.Дата;
        
        ВыборкаДетали = ВыборкаДата.Выбрать();
        
        Пока ВыборкаДетали.Следующий() Цикл
            
            ЗаполнитьЗначенияСвойств(Док.ТЧ.Добавить(), ВыборкаДетали);
            
        КонецЦикла;
        
        Док.Записать();
        
    КонецЦикла;
100 pessok
 
16.10.14
11:01
сотка. закрываемсо :)
101 pessok
 
16.10.14
11:03
чорт. не

    Запрос = Новый Запрос();
    
    Запрос.Текст =
    
    "ВЫБРАТЬ
    |    ТаблицаОбработки.Дата,
    |    ТаблицаОбработки.Номенклатура,
    |    ТаблицаОбработки.Количество
    |ПОМЕСТИТЬ ВТТабЧастьОбработки
    |ИЗ
    |    &ТаблицаОбработки КАК ТаблицаОбработки
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТТабЧастьОбработки.Дата КАК Дата,
    |    ВТТабЧастьОбработки.Номенклатура,
    |    ВТТабЧастьОбработки.Количество
    |ИЗ
    |    ВТТабЧастьОбработки КАК ВТТабЧастьОбработки
    |ИТОГИ ПО
    |    Дата";
    
    Запрос.УстановитьПараметр("ТаблицаОбработки", ТабличнаяЧасть1);
    
    ВыборкаДата = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаДата.Следующий() Цикл
        
        Док = Документы.ХХХ.Создать();
        Док.Дата = ВыборкаДата.Дата;
        
        ВыборкаДетали = ВыборкаДата.Выбрать();
        
        Пока ВыборкаДетали.Следующий() Цикл
            
            ЗаполнитьЗначенияСвойств(Док.ТЧ.Добавить(), ВыборкаДетали);
            
        КонецЦикла;
        
        Док.Записать();
        
    КонецЦикла;
102 raykom
 
16.10.14
11:04
Ну спасибо, камрады. Надо разбираться. Материала наверстали - выше крыши )))

Буду применять. Дальше без меня пока ...

(101)Нифига, тебя штырибасит )))
103 pessok
 
16.10.14
11:05
ну если уж даешь код, то он должен быть рабочим, без закладок :)
104 raykom
 
16.10.14
11:09
Таки мне приглянулсо код из (17) курю вот.
про СоздатьОбъект("ИндексированнаяТаблица")
105 pessok
 
16.10.14
11:10
(104) это код для клюшек, в восьмерке не взлетит
106 raykom
 
16.10.14
11:11
Да. Уже понял. 1с++ надо бибилиотеку СРР.
Все. Переключаюсь на другие варианты.
107 pessok
 
16.10.14
11:11
+(105) по сути он делает тоже самое что и (101), создает дерево и обходит его
108 raykom
 
16.10.14
11:12
(107)А вот на (101) и остановлюсь, походу.
109 raykom
 
16.10.14
11:16
(101)>ТаблицаОбработки
Это что ? Мое ТабличноеПоле ?
110 raykom
 
16.10.14
11:19
(101)>ВТТабЧастьОбработки
Это правильное написание ?
111 Banned
 
16.10.14
11:33
Мда... Не, зря ему метлу предлагали...
112 raykom
 
16.10.14
11:35
Дак кто спорит ... Я не отказываюсь. Принимаю с почтением. У меня их штук десяток уже.
Не помогает ...
113 Banned
 
16.10.14
11:37
(112) Так ими пользоваться нужно по назначению, а не коллекционировать.
Зря что-ли человек старался?
114 raykom
 
16.10.14
11:41
(113)Дак я и это то не умею ...
115 raykom
 
16.10.14
11:42
Работал бы  я одинесником тогда ...
116 pessok
 
16.10.14
11:43
(109) это таблица значений, которая источник твоего табличного поля
117 raykom
 
16.10.14
11:51
(116)Да, уже понял. Подправил
>Док = Документы.ХХХ.Создать();
СоздатьДокумент()
надо было.

С Датой еще пришлось помудрить - я ее из файла ф ТАбПоле получал как строку.
Привел к виду дата с нужным форматом.
Теперь разбираюсь с

>ВыборкаДетали

Пока через Сообщить все врде ок.
ВыборкаДетали.Коичество() - говорит, что итогах группировки нужное количество записей по каждой дате.

Так что все ОК. Почти ))
118 raykom
 
16.10.14
11:54
Да. По структуре запроса и по итогам - все ОК.
Сейчас нюансы заполнения документа подпилю и все ОК.
Спасибо всем.
И pessok персонально
119 raykom
 
16.10.14
12:03
Мдя. Рановато радовался. Чего то недосмотрел.

Вот такой кодец вышел.

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

    |ВЫБРАТЬ
    |    ВТТабЧастьОбработки.Дата КАК Дата,
    |    ВТТабЧастьОбработки.НоменклатураБ,
    |    ВТТабЧастьОбработки.Количество
    |ИЗ
    |    ВТТабЧастьОбработки КАК ВТТабЧастьОбработки
    |ИТОГИ ПО
    |    Дата";
    
    Запрос.УстановитьПараметр("ТабПоле", ТабПоле);
    
    ВыборкаДата = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаДата.Следующий() Цикл
        Док = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
        Док.Дата = ВыборкаДата.Дата;
        
        ВыборкаДетали = ВыборкаДата.Выбрать();
        Пока ВыборкаДетали.Следующий() Цикл
            ЗаполнитьЗначенияСвойств(Док.Товары.Добавить(), ВыборкаДетали);
        КонецЦикла;
        
        Док.Записать();
        
    КонецЦикла;
КонецПроцедуры

Вроде все верно, а документ не создается.
Помоему с пустой фирмой то запишется ведь ?

Но в журнале - пусто.
120 Banned
 
16.10.14
12:09
ВыборкаДетали = ВыборкаДата.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
121 Сияющий Асинхраль
 
16.10.14
12:12
Во народ дает! Такую фигню на 120 постов развезли!
122 raykom
 
16.10.14
12:14
(120)Ну да, как вариант заполнения ТЧ документа.
Но ведь и в
>ЗаполнитьЗначенияСвойств(Док.Товары.Добавить(), ВыборкаДетали)

Можно просто параметры заполнения добавить и все ОК будет. Не ?

(121)Дак мы общаемся  ... ))
123 raykom
 
16.10.14
12:15
+(122) и на проблему в (119) это не влияет. Не?
124 H A D G E H O G s
 
16.10.14
12:16
(121) +500

Автору нефиг делать в программировании.
125 Banned
 
16.10.14
12:17
(122) Попробуй сначала.
Если получится - дай слово, что уйдёшь из 1с.
126 raykom
 
16.10.14
12:19
(124)Дак я понимаю. Но в дворники не берут.  )))
ДенисЧ протекцию составлял - не помогло.

(125)Как я дам то ??? Куда меня возьмут то ??? Не ... есть то надо уж както. Пока тут перекантуюсь.
Потом может Путин приметит. Я тут отличался прогнозами, так может предложат что то стоящее.
Тогда да. А так - не могу.
127 raykom
 
16.10.14
12:23
Немая сцена
128 pessok
 
16.10.14
12:24
что не работает то?
129 Banned
 
16.10.14
12:24
(127) Так помогло или нет?
130 raykom
 
16.10.14
12:24
Говорят голова ...
131 raykom
 
16.10.14
12:25
(130)для (128)
132 pessok
 
16.10.14
12:27
(131) Москва не сразу строилась, все или почти все через это проходили. В чем конкретно беда?
133 raykom
 
16.10.14
12:28
(129)Шо ? Вот это ?
>ВыборкаДетали = ВыборкаДата.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пробую.
134 pessok
 
16.10.14
12:28
(133) это не поможет и не может помочь. там уже нет группировок, там уже детальные записи, т.к. итоги только по полю дата
135 raykom
 
16.10.14
12:29
ПЦ. Вопще все колом встало )))

Открываю обработку в конфигураторе -
Ошибка при выполнении файловой операции  'C:\Users\ray\Desktop\Девайс\ЗагрузкаИзЭксель.epf'
по причине:
Неверный формат хранилища данных 'file://C:/Users/xxx/Desktop/xxx/ЗагрузкаИзЭксель.epf'
136 pessok
 
16.10.14
12:30
(135) ну тут мы не поможем, файлик побился. письма счастья из "сбебанка" не приходили?
137 Banned
 
16.10.14
12:31
Уже даже сама 1с намекает...
138 pessok
 
16.10.14
12:34
добрее надо быть, коллеги, завтра ж пятница :)
139 raykom
 
16.10.14
12:34
(135)Шо такое сбебанк ? о_О

Типа заплатите на счет ххх пришлем код ?
Да не, у меня все чисто . Вроде ...
140 pessok
 
16.10.14
12:36
(139) ну у тебя побился файл обработки. беда, как известно, одна не приходит. решил предположить худшее, свят-свят
141 raykom
 
16.10.14
12:37
Все. ПЦ файлику. Точно.

Ну, камрады, вводная меняется )))

Теперь тема обсуждения - как отремонтировать файл )))
Еще постов на 300.

Блин. и Копии то нет ...
142 raykom
 
16.10.14
12:38
Цукко ...

Нут как то глухо подвис. Первый раз за пару лет. Пришлось ресетить.
Вот результат.
143 pessok
 
16.10.14
12:39
ресетить вообще категорически 1С нельзя.

если у тебя загрузка из экселя трех колонок, то там переписать все за 10 минут. + вставить мой код из (101) с учетом СоздатьДокумент() вместо Создать() и усё
144 raykom
 
16.10.14
12:39
переименовать в ТХТ и в амноблакноте хоть открыть может ? )))
145 шаэс
 
16.10.14
12:39
(7) некому Вас пока гонять. Под баном Денис.
146 raykom
 
16.10.14
12:41
(145)о_О ??? Шо голым по мисте бегал ???
147 raykom
 
16.10.14
15:16
Слава откатам ... И иногда полезно хранить файлы на рабочем столе.
Откатил систему на позавчера - восстановилась версия файла.
По крайней мере интерфейсная часть и одна процедура.

Остальное по свежей памяти наколотил )))
148 ssh2QQ6
 
16.10.14
15:47
(62) можно выгрузку табличной часть в ТЗ не делать, а сразу в параметр запроса таб часть передавать
149 pessok
 
16.10.14
15:49
(148) да, это обсуждалось чуть дальше
150 raykom
 
16.10.14
22:46
(120)>ВыборкаДетали = ВыборкаДата.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Из принципа попробовал - результат = 0.
Изначально было понятно, что к проблеме (119) отношения не имеет.
151 raykom
 
16.10.14
23:01
А нет проблемы. Извиняй pessok, просто тупо не догадался отключить отбор в журнале документов.  Фирма не заполнена, а отбор по фирме включен.

Все, всем спасибо.
Вопрос закрыт.
152 МишельЛагранж
 
27.10.14
10:30
(0) а вообще, если автору понятней ЕГО вариант - нужно флаг вставить на создание документа ДокументСоздан (перед каждой итерацией его нужно сбрасывать не забывать), а потом проверять: если Истина - то заполнить ТЧ и записать, нет - далее смотреть исходную ТЗ.
153 МишельЛагранж
 
27.10.14
10:34
(65) умные все.
А если нет? Ни ТЗ, ни ТЧ как источника.
Все, на митсу побежишь вопросы задавать?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой