Имя: Пароль:
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) умные все.
А если нет? Ни ТЗ, ни ТЧ как источника.
Все, на митсу побежишь вопросы задавать?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший