Имя: Пароль:
1C
 
Добавить запись в регистр сведений из ТабЧасти документа
,
0 inkvizitr
 
02.09.14
11:45
Есть документ поступления товаров, в нем есть табличная часть, как записать табличную часть в регистр сведений? привел ниже код, в регистр сведений он записывет, но если в табличной части несколько строк, то записывает самую последнию, как сделать чтобы каждая строка табличной части записывалась в регистр сведений? чтобы не перезаписывались записи, а добавлялись.. с регистрами сведений мало работал

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

    Пока Выборка.Следующий() Цикл
        ТекущиеЗначение.Период = ТекущаяДата();
        ТекущиеЗначение.Номенклатура = Выборка.Номенклатура;
        ТекущиеЗначение.Цена = Выборка.Цена;
        ТекущиеЗначение.Записать();
    КонецЦикла;
19 inkvizitr
 
02.09.14
12:43
(18) РС Независимый
20 inkvizitr
 
02.09.14
12:44
В чем разнеца зависимого и не зависимого РС? если на пальцах объяснить вообще было бы супер
21 inkvizitr
 
02.09.14
12:45
я понял, если не зависимый то могу я данные в ем сам редактировать, а если зависим, то нет
22 inkvizitr
 
02.09.14
12:45
так как лучше тогда реализовать мой код?
23 sf
 
02.09.14
12:47
(20) разница в том, что ты каждый раз при проведении поступления будешь перезаписывать весь регистр, судя по (14).
или ставь условие по ссылке и измерение добавляй (чтобы перезаписывать по одному ПТУ) или подчиняй регистратору.
24 inkvizitr
 
02.09.14
12:52
(23) Спасибо) ща буду думать)))
25 РенеДекарт
 
02.09.14
12:53
(23) >будешь перезаписывать весь регистр,
только НаборЗаписей
то, что он очищает всь регистр - это ошибка в коде.
(20)>
- зависимый обязательно отбор по регистратору, но зато с удалением регситратора - удалятся его записи.
26 sf
 
02.09.14
12:59
(25) великий теоретик )
>>это ошибка в коде.
нет, это ошибка проектирования, а если быть точным не ошибка, а коряво спроектировано.
>>зависимый обязательно отбор по регистратору
нет
>>с удалением регситратора - удалятся его записи
нет
27 РенеДекарт
 
02.09.14
13:13
(26) иди мануал почитай )
28 sf
 
02.09.14
13:25
(27) ты рассматриваешь частные случаи
про отбор - это же только при записи
с удалением регистратора - вообще непонятно что ты имеешь в виду. движения могут остаться у помеченных на удаление документов. более того, записи могут быть, а документов нет.

короче понятно чему ты студентов учил
29 inkvizitr
 
02.09.14
13:32
(28) (27) да не ругайтесь вы))) а лучше набрасывайте куски кода для решения моей задачи)
30 inkvizitr
 
02.09.14
13:35
может мне в РС как то так записывать?
Пока Выборка.СледующийПоЗначениюПоля("Контрагент") Цикл
        Пока Выборка.СледующийПоЗначениюПоля("Номенклатура") Цикл

чтобы правильно спроектировать запись
31 sf
 
02.09.14
13:42
(30) наборами правильнее записывать - меньше обращений к базе.
Если тебе надо как написал в (0), т.е. всегда добавлять (не знаю зачем, но может очень надо), то в запрос в (11) добавь условие по ссылке документа
32 inkvizitr
 
02.09.14
13:50
(31) наборами это ты имеешь в виду не использовать запрос или как?
33 sf
 
02.09.14
13:58
(32) РегистрСведенийНаборЗаписей.<Имя регистра сведений>.Загрузить (InformationRegisterRecordSet.<Имя регистра сведений>.Load)
РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Имя регистра сведений>)
Загрузить (Load)
Синтаксис:

Загрузить(<ТаблицаЗначений>)
34 РенеДекарт
 
02.09.14
14:10
(28)> движения могут остаться у помеченных на удаление документов.
- каким образом?
>более того, записи могут быть, а документов нет.
- так может и базы не быть уже, а документы - остаться ... ))
35 hhhh
 
02.09.14
14:13
(32) в запросе конкретный документ не указываешь. Поэтому он у тебя и выдает все десятки тысяч поступлений, которые в базе есть.
36 inkvizitr
 
02.09.14
14:15
(35) да понял, ща запрос сделал вот таким, теперь я свой регистр сделал Подчиненым регистратору, вот разбираюсь как внего записать))) ваши примеры записи тоже были бы кстати
ВЫБРАТЬ
                   |    ПоступлениеТоваровУслугТовары.Номенклатура,
                   |    ПоступлениеТоваровУслугТовары.Цена,
                   |    ПоступлениеТоваровУслуг.Номер,
                   |    ПоступлениеТоваровУслуг.Дата,
                   |    ПоступлениеТоваровУслуг.Контрагент
                   |ИЗ
                   |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                   |        ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
                   |ГДЕ
                   |    ПоступлениеТоваровУслуг.Номер = &Номер"
37 Timon1405
 
02.09.14
14:16
(34) у документа есть свойство "Удаление движений"
38 РенеДекарт
 
02.09.14
14:18
(37) ... которое в умолчании СПЕЦИАЛЬНО ставится "Удалять"....
39 РенеДекарт
 
02.09.14
14:20
(37) ну т.е. если я особым оразом залезу в регистр, и наудаляю там записи какие-нибудь - это как будет считаться: вандализм, "я не хотел!", или типовое решение? ))
40 РенеДекарт
 
02.09.14
14:20
*образом
41 РенеДекарт
 
02.09.14
14:21
(36) НаборЗаписей = Запрос
МенеджерЗаписи = Запрос.
Разница - первые вшиты в платформу.
42 hhhh
 
02.09.14
14:22
(36) вообще обкурился? Пиши нормально

ГДЕ
                   |    ПоступлениеТоваровУслуг.Ссылка = &Ссылка
43 РенеДекарт
 
02.09.14
14:23
(30)>чтобы правильно спроектировать запись
- с самой записью ты ничего не сделаешь: сначала её обработает "как хочет" 1С, потом - если серверная база, - как положено SQL.
44 inkvizitr
 
02.09.14
14:23
(42) ок
45 inkvizitr
 
02.09.14
14:28
(42) поправил, а еще вопрос, если у меня в табличной части встречается несколько строк с одинаковой номенклатурой но разными ценами, как тогда поступить? построить запрос чтобы в регистр записывалась цена с наибольшей ценой или все их записывать? отдельными строками
46 Timon1405
 
02.09.14
14:30
(45) Зависит от целей дальнейшего использования
47 РенеДекарт
 
02.09.14
14:38
(42)> Пиши нормально
- относительно 1с разницы особой нет, разве что:
- будут документы с одним номером (ссылка - вроде как уникальна, хотя не факт, особенно в базах с обменами с другими базами :))
- номер - не индексируемое (само по себе, отдельно от ссылки) поле, что, теоретически и лабораторно, дает проигрыш в скорости поиска. НО: поиск и индексация в 1с настолько примитивен, что в большинстве случаев разницы нрет и здесь.
48 inkvizitr
 
02.09.14
14:39
чтобы когда в конфе появится документ реализация, при выборе номенклатуры подставлялась в поле цена которая указывалась от поступления и плюс к этой цене прибавлялся процент
49 inkvizitr
 
02.09.14
14:40
(46) чтобы когда в конфе появится документ реализация, при выборе номенклатуры подставлялась в поле цена которая указывалась от поступления и плюс к этой цене прибавлялся процент
50 РенеДекарт
 
02.09.14
14:42
По поводу "уникальности" ссылок - совсем недавно была ситуация, когда файловая не переводилась на серверный вариант из-за совпадения ссылок.
А так работала, не ругалась.
Т.е. и тут - 1С стандарты и элементарные принципы работы СУБД не указ....
51 inkvizitr
 
02.09.14
14:49
(50) я думаю если одинаковые номенклатуры которые будут встречатся в ТЧ запросом попробую выправить
52 РенеДекарт
 
02.09.14
14:50
(48)>чтобы когда в конфе появится документ реализация
- в конфе "само собой" ничего не появляется. А документы вводят в ИБ.
>при выборе номенклатуры подставлялась в поле цена
-при вводе РТиУ ищи запросом нужное поступление и бери оттуда цену товара. Потом плюсуй-процентуй, и вставляй в поле ТЧ.
(45)>если у меня в табличной части встречается несколько строк с одинаковой номенклатурой
- в одном поступлении такого быть не может: чтобы продали товар партией по разным ценам. Это как покупаешь пачку пельменей: или берешь всю упаковку, или не берешь. Потрошить упаковку и продавать пельмени поштучно по разной цене никто не будет, да и невозможно это потом учесть (один штрихкод, единое поступление, единая цена ЦЕЛОЙ пачки и т.д. - разделить на части невозможно).
53 РенеДекарт
 
02.09.14
14:51
(51)>я думаю если одинаковые номенклатуры
одинаковая номенклатура и одинаковые ссылки - это не одно и то же.
54 sf
 
02.09.14
14:53
(50) Имхо, ты даже не укуренный, это все соли.
>> "уникальности" ссылок
55 sf
 
02.09.14
15:01
(51) уже бы 5 раз тебе написали как нужно, если бы ты раскрыл наконец-то секрет зачем это все.
56 inkvizitr
 
02.09.14
15:06
(55) когда поставщик забивает товар в документе Постепления Товаров, то с документа поступления должна хранится в РС самая последняя цена товара. Нужно для того чтобы цена при отгрузке товара формировалась из цены поступления плюс процент накрутки
57 РенеДекарт
 
02.09.14
15:07
(54)>это все соли
сочувствую, сходите в больницу.
Так а что не понравилось по "уникальности" ссылок? Сразу колики появились на такое сочетание? ))
58 РенеДекарт
 
02.09.14
15:08
(56)>то с документа поступления должна хранится в РС самая последняя цена товара.
- так надо выбирать СрезПоследних самую распоследнюю ))
59 inkvizitr
 
02.09.14
15:10
(58) это я понимаю осталось грамотно это записать в регистр сведений
60 inkvizitr
 
02.09.14
15:12
(58) чтобы при выборе номенклатуры в поле цена документа реализации подставлялась цена поступления плюс накрутка(процент)
поступил товар по цене 100р, а в реализации автоматом подставлялась цена 110 рублей, т.е. накрутка на 10 процентов
61 Timon1405
 
02.09.14
15:13
Переходите на УТ11), там это реализовано
62 inkvizitr
 
02.09.14
15:14
(61) да это можно и самому сделать, так интереснее
63 inkvizitr
 
02.09.14
15:19
как то так набубенил))))
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ПоступлениеТоваровУслугТовары.Номенклатура,
                   |    ПоступлениеТоваровУслугТовары.Цена,
                   |    ПоступлениеТоваровУслуг.Номер,
                   |    ПоступлениеТоваровУслуг.Дата,
                   |    ПоступлениеТоваровУслуг.Контрагент,
                   |    ПоступлениеТоваровУслуг.Ссылка
                   |ИЗ
                   |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                   |        ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
                   |ГДЕ
                   |    ПоступлениеТоваровУслуг.Ссылка = &Ссылка";
                   Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
        НаборЗаписи = РегистрыСведений.ЦеныНоменклатурыОтПоставщиков.СоздатьМенеджерЗаписи();
        НаборЗаписи.Период = Выборка.Дата;
        НаборЗаписи.Поставщик = Выборка.Контрагент;
        НаборЗаписи.Номенклатура = выборка.Номенклатура;
        НаборЗаписи.Цена = выборка.Цена;
        НаборЗаписи.Записать();
    КонецЦикла;
    
КонецПроцедуры
64 sf
 
02.09.14
15:19
(60) (62) это дипломная работа?
(61) +1.

по теме: берешь запрос (36), меняешь условие на ссылку, загружаешь в набор записей.
в реализации - срез последних на дату.
65 inkvizitr
 
02.09.14
15:22
(64) да так и сделаю, осталось РС из независемого сделать Подчинение регистратору, и в цикле код поменять)
66 sf
 
02.09.14
15:22
(63) >>Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
как бы не надо так делать. но преподаватель может и не обратить внимание.
67 inkvizitr
 
02.09.14
15:22
(64) по синтаксису норм? или как том круче сделать можно? для диплома покатит?
68 inkvizitr
 
02.09.14
15:23
(66) а как лучше сделать?
69 sf
 
02.09.14
15:23
(65) старайся записывать и читать из базы не в цикле. мир станет лучше.
70 inkvizitr
 
02.09.14
15:24
(69) стоп, а как записывать в данном случаи без цикла? у меня же ТЧ и в ней допустим строк 20 как тогда обходить данную коллекцию?
71 sf
 
02.09.14
15:26
(70) см (33) + РезультатЗапроса.Выгрузить()
прояви смекалку.
72 РенеДекарт
 
02.09.14
15:37
(67)>для диплома покатит?
хы-хы... а зачем тогда скорость?
(66)>как бы не надо так делать
- для диплома покатит ))
Тут и изменение объекта после записи прокатит ))
73 РенеДекарт
 
02.09.14
15:38
(70)>а как записывать в данном случаи без цикла?
- обращение _к БД_ в цикле в рамках 1С - это смерть производительности базы 1С.
Сначала - все берешь из базы, потом - в цикле обрабатываешь в 1С.
74 inkvizitr
 
02.09.14
15:41
(71) не понял вот в синтаксисе помошнике нашел пример, это именно то что ты имел в виду? не уловил суть
Рег = РегистрыСведений.КурсыВалют;
НаборЗаписей = Рег.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Значение = Ссылка;
ТаблицаКурсов = НаборЗаписей.Выгрузить();
75 inkvizitr
 
02.09.14
15:41
(72) (73)  хочется сделать грамотно, ведь это и для меня полезно, а как бы вы тогда написала данный пример?
76 РенеДекарт
 
02.09.14
15:47
(74) да, он имел ввиду - любым способом создать ТЗ (хоть как "Выгрузить()"), и её обходить в цикле.
(75) тут уже все нюансы разобраны, а весь код писать - это уж сам как-нибудь ))
77 inkvizitr
 
02.09.14
15:50
(76) ааа... понял, т.е. если что то хочу обработать циклом, то всегдадолжен ложить либо в массив, либо в структуру либо в таблицу значений
78 inkvizitr
 
02.09.14
15:50
ну ок) ща переработаю код))
79 inkvizitr
 
02.09.14
15:51
т.е. лучше никогда циклом не обходить результаты запроса
80 sf
 
02.09.14
15:57
(79) сфигали? все зависит от задачи.
(76) протри запойные глаза. я писал, что нехорошо в цикле писать в базу.
например:
НаборЗаписей.Загрузить(РезультатЗапроса.Выгрузить())
+поля в запросе все с нужными синонимами.

и это, автор, перенеси все на сервер в ОбработкаПроведения что ли .... ты же этот код в документе пишешь, да?
81 inkvizitr
 
02.09.14
15:58
(80) да в документе
82 inkvizitr
 
02.09.14
16:01
(80) кстати смотрю в свойствах формы события, а а там нет такого события обработка провидения, интерфейс использую такси
83 РенеДекарт
 
02.09.14
16:04
(80)>протри запойные глаза.
- боюсь, меня нет с вами за столом. Бухай один.
>нехорошо в цикле писать в базу
и читать, и писать. Хотя - вам уже все равно, сколько стаканов уже? ))
84 РенеДекарт
 
02.09.14
16:05
(82)>а там нет такого события обработка провидения
- это у объекта
85 inkvizitr
 
02.09.14
16:07
(80) (83)  смотрю мнения разделились, так все таки как поступать? ложить данные в ТЗ и обходить циклом? или же сразу обходить циклом?
86 inkvizitr
 
02.09.14
16:10
(84) а у объекта это где? что то мозг пухнуть начинает))))))))
87 inkvizitr
 
02.09.14
16:24
Кстати положил ТЗ результат так же норм отрабатывает))
88 РенеДекарт
 
02.09.14
16:36
(85)>ложить данные в ТЗ и обходить циклом
- да. sf о том же, только не может мысль выразить вследствии нахождения не совсем в трезвом состоянии.
(86) есть Форма, есть Объект. Есть модуль у этого объекта. Вот там )
(87)>Кстати положил ТЗ результат
- ну раз положил, то пусть лежит )
Куда хоть положил-то, на печку?
89 РенеДекарт
 
02.09.14
16:39
(79)>т.е. лучше никогда циклом не обходить результаты запроса
- еще раз:
в _1С_ (именно тут, в других базах все пучком или не так критично) лучше в цикле ни писать, ни читать. Т.е. не обращаться _в цикле_ к базе.
90 РенеДекарт
 
02.09.14
16:41
+ в прмиере ТЗ - это не база, база - это сохраненные данные.
А еще ТЗ бывает у ТЧ, у ТП...
91 sf
 
02.09.14
17:13
(89) >> именно тут, в других базах все пучком или не так критично)

дорогой многоуважаемый Рене, раскрой нам, наконец, секрет, что такое "другие базы"?

про за ТЗ у ТЧ и ТП ничего не хочу знать... ))
92 inkvizitr
 
02.09.14
17:30
переработал теперь как то такъ

Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ПоступлениеТоваровУслугТовары.Номенклатура,
                   |    ПоступлениеТоваровУслугТовары.Цена,
                   |    ПоступлениеТоваровУслуг.Номер,
                   |    ПоступлениеТоваровУслуг.Дата,
                   |    ПоступлениеТоваровУслуг.Контрагент,
                   |    ПоступлениеТоваровУслуг.Ссылка
                   |ИЗ
                   |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                   |        ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
                   |ГДЕ
                   |    ПоступлениеТоваровУслуг.Ссылка = &Ссылка";
                   Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
    Результат = Запрос.Выполнить().Выгрузить();
    
    Для каждого Строка из Результат Цикл
        НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыОтПоставщиков.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ТекущийОбъект.Ссылка);
        НаборЗаписей.Прочитать();
        НовЗапись = НаборЗаписей.Добавить();
        НовЗапись.Период = Строка.Дата;
        НовЗапись.Номенклатура = Строка.Номенклатура;
        НовЗапись.Поставщик = Строка.Контрагент;
        НовЗапись.Цена = Строка.Цена;
        НаборЗаписей.Записать();
93 inkvizitr
 
02.09.14
17:30
КонецЦикла;
94 РенеДекарт
 
02.09.14
17:37
(91)>что такое "другие базы"?
- только никому!!!
есть масса (десятки - если точнее) совершенно других баз других форматов. От SQL (не одноэсовый) до Оракла и Сибэйз.
95 Крошка Ру
 
02.09.14
17:38
(92) Вот это:

НаборЗаписей.Прочитать();

убери.

Получается, читаешь набор записей по регистратору, добавляешь ещё строки и записываешь.
При каждом перепроведении будут добавляться строки, которые уже в этом наборе есть, и будет ругаться при записи, что одинаковые записи пытаешься записать.
96 Крошка Ру
 
02.09.14
17:43
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ПоступлениеТоваровУслугТовары.Номенклатура,
                   |    ПоступлениеТоваровУслугТовары.Цена,
                   |    ПоступлениеТоваровУслуг.Номер,
                   |    ПоступлениеТоваровУслуг.Дата КАК Период,
                   |    ПоступлениеТоваровУслуг.Контрагент КАК Поставщик,
                   |    ПоступлениеТоваровУслуг.Ссылка
                   |ИЗ
                   |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                   |        ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
                   |ГДЕ
                   |    ПоступлениеТоваровУслуг.Ссылка = &Ссылка";
                   Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
    Выборка= Запрос.Выполнить().Выбрать();
    
    НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыОтПоставщиков.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ТекущийОбъект.Ссылка);
        НаборЗаписей.Очистить();
   Пока Выборка.Следующий() Цикл        
        НовЗапись = НаборЗаписей.Добавить();
        ЗаполнитьЗначенияСвойств(НовЗапись,Выборка);
   КонецЦикла;
   НаборЗаписей.Записать();
97 Крошка Ру
 
02.09.14
17:44
Ах черт,

НаборЗаписей.Очистить();


не нужно
98 РенеДекарт
 
02.09.14
17:44
(91)>про за ТЗ у ТЧ и ТП
- понятное дело, закипишь ))
(95) это он по отбору читает, нормально все
99 Крошка Ру
 
02.09.14
17:46
(98) Читает, а потом туда ещё записи добавляет. Задвоение.
100 РенеДекарт
 
02.09.14
17:48
(99)читаем справку РегистрСведенийНаборЗаписей:
"При записи может выполняться замещение всех имеющихся в базе данных записей по данному условию на записи, содержащиеся в наборе."
А при записи что? А вот что:
Записать(<Замещать>) - по умолчанию. Понятно теперь?
101 РенеДекарт
 
02.09.14
17:49
+ для остальных видов регистров, кстати, то же самое )
102 РенеДекарт
 
02.09.14
17:50
(99) поэтому если у него строки повторятся - они просто перезапишутся. Регистратор-то один.
103 Крошка Ру
 
02.09.14
17:54
(100) А при чем здесь СП? Читай код:
При каждой итерации цикла заново читается набор записей. Поэтому НаборЗаписей.Прочитать() надо убрать.
104 sf
 
02.09.14
17:54
(100) (101) и ты собрался меня чему-то учить?
ты даже код прочитать не можешь. в (92) он не рабочий, а ты советуешь всякий бред. Крошка Ру дело говорит. а ты только повторяешь мысли других.
про запись/чтение в цикле говоришь что плохо, а когда применяется сам не видишь.
105 РенеДекарт
 
02.09.14
17:58
(103) >НаборЗаписей.Прочитать() надо убрать.
- его нужно просто вынести за цикл. О чем целую страницу написали первую. И запись за цикл.
106 Крошка Ру
 
02.09.14
17:58
(102) Еще раз: читается Набор(т.е если было записано до этого 3 строки, они попадают в набор, ), добавляется строка (было в наборе 3 строки, стало 4), записывается(4 строки).
При каждом перепроведении будут добавлятся новые строки и при попытке записать будет ошибка, т.к. будут записи с одинаковым ключом.
107 РенеДекарт
 
02.09.14
17:59
(104)>и ты собрался меня чему-то учить?
- ты это того, бутылочку-то поставь, донышком к низу... а то схватил дубинку, понимаешь... ))
108 РенеДекарт
 
02.09.14
18:00
(106)>Еще раз: читается Набор
... и все, что аналогичное по строкам дока - в цикле перепишется на то же самое. А потом старый" набор удалится, новый - впишется.
(104) бутылку не хватай! Поставь обратно, спокойно...
109 inkvizitr
 
02.09.14
18:01
(92) он работает, а вот в (94) он пишет что период не может быть пустым
110 РенеДекарт
 
02.09.14
18:02
Всему вас, молодежь, учит надо:
НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыОтПоставщиков.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ТекущийОбъект.Ссылка);
        НаборЗаписей.Прочитать();
Для каждого Строка из Результат Цикл
        НовЗапись = НаборЗаписей.Добавить();
        НовЗапись.Период = Строка.Дата;
        НовЗапись.Номенклатура = Строка.Номенклатура;
        НовЗапись.Поставщик = Строка.Контрагент;
        НовЗапись.Цена = Строка.Цена;
КонецЦикла;
НаборЗаписей.Записать();
(104) не трожь бутылку, кому говорят!!!
111 РенеДекарт
 
02.09.14
18:03
(109) совершенно верно. Первая часть. А начиная "а вот в 94 он пишет.." - так целиком про базы, в 94, не про периоды ))
112 РенеДекарт
 
02.09.14
18:06
+ 111
только код из 92 на документе в 1000 строк повесит базу минут на 5. Только и всего.
113 Крошка Ру
 
02.09.14
18:08
(110) Смотри: Предположим в регистре есть по этому регистратору 4 строки(документ уже проведен). При перепроведении ты:  читаешь набор. В нем оказывается 4 записи. В цикле ты ЕЩЁ ДОБАВЛЯЕШЬ в него новые строки(ещё раз эти же 4 из ТЧ документа). Никаких "старых" и "новых" наборов нет, он один. При попытке записать - ошибка из-за задвоенных записей в наборе.
114 inkvizitr
 
02.09.14
18:10
Вот так он не дублирует записи в РС, прочитать закоментировал, а когда стоит прочитать, то начинает в регистре дублировать записи, присваивая им новую дату


Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
                   Результат = запрос.Выполнить().Выгрузить();
    НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыОтПоставщиков.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ТекущийОбъект.Ссылка);
        //НаборЗаписей.Прочитать();
Для каждого Строка из Результат Цикл
        НовЗапись = НаборЗаписей.Добавить();
        НовЗапись.Период = Строка.Дата;
        НовЗапись.Номенклатура = Строка.Номенклатура;
        НовЗапись.Поставщик = Строка.Контрагент;
        НовЗапись.Цена = Строка.Цена;
КонецЦикла;
НаборЗаписей.Записать();
115 sf
 
02.09.14
18:14
(112) эко тебя зацепило)))
(114) верни все обратно как дед Декарт говорит ))))

Иногда мне кажется что ВР написал бота. хорошего бота, РенеДекарт, потому что судя по ветке ты ни одной мысли своей не сказал, но зато за всеми повторил и раз пять ошибся

ps. ладно, Рене, можешь оттягиваться. сегодня тебя кормить не буду больше, сливаюсь. автор вроде решил свой вопрос
116 inkvizitr
 
02.09.14
18:16
(115) да сколько тут написали, я его 5 вариантами решил, только ты свой вариант и не написал) как бы ты реализовал, Декарт свой вариант предложил
117 РенеДекарт
 
03.09.14
09:28
(114)>то начинает в регистре дублировать записи, присваивая им новую дату
- а с какого перепугу дата-то меняется? конечно, будет "дублировать", т.к. это другая запись получается.
Чтобы не было дубляжа - нужно все поля идентичными держать.
А так - тут дата другая, тут - цифра, так вообще не пойми что будет в регистре, хоть с прочитать, хоть без.
Если понимаешь, что делаешь - с Прочитать() никаких дублей не будет.
118 Крошка Ру
 
03.09.14
13:26
(117) Да с чего ты взял, что если в Набор записей, уже содержащий запись, добавить новую запись с таким же ключом, то не добавиться новая, а заменится старая запись? Ты с менеджером записи путаешь.