Имя: Пароль:
1C
1С v8
Движение регистра выдает ошибку
,
0 LivingStar
 
01.10.13
10:34
Очистил регистр. Провожу первый документ, на обработке проведения выдается ошибка.

шибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.УстановкаФокусногоАссортимента(25)}: Ошибка при вызове метода контекста (Записать)

по причине:
Запись с такими ключевыми полями существует! : ФокусныйАссортимент: 01.01.2013, Номенклатура1 (Регистр сведений: Фокусный ассортимент; Номер строки: 8)

Номенклатура1 это номенклатура находящаяся в первой строке Тч УстанавливаемыйФокусныйАссортимент, в отладчике по коду отрабатывает 7 циклов и идет в записать набор записей. От куда там идет на запись ещё одна таже строка???

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    //
    ТзОтменаФА    = ОтменяемыйФокусныйАссортимент.Выгрузить();
    ТзУстановкаФА = УстанавливаемыйФокусныйАссортимент.Выгрузить();
    // Запись в регистр сведений текущей таблицы документа ОтменяемыйФокусныйАссортимент (отмена номенклатуры фокусным ассортиментом)
    НаборЗаписей = РегистрыСведений.ФокусныйАссортимент.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Период.Установить(Дата);
    НаборЗаписей.Прочитать();
    Для каждого Стр Из ТзОтменаФА Цикл
        Если ТзУстановкаФА.Найти(Стр.Номенклатура, "Номенклатура") = Неопределено Тогда
            НоваяЗапись              = НаборЗаписей.Добавить();
            НоваяЗапись.Период       = Дата;        
            НоваяЗапись.Номенклатура = Стр.Номенклатура;
            НоваяЗапись.ФА           = Ложь;
        КонецЕсли;
    КонецЦикла;
    // Запись в регистр сведений текущей таблицы документа УстанавливаемыйФокусныйАссортимент (установка номенклатуры фокусным ассортиментом)
    Для каждого Стр Из ТзУстановкаФА Цикл
        НоваяЗапись              = НаборЗаписей.Добавить();
        НоваяЗапись.Период       = Дата;        
        НоваяЗапись.Номенклатура = Стр.Номенклатура;
        НоваяЗапись.ФА           = Истина;
    КонецЦикла;
    НаборЗаписей.Записать();
КонецПроцедуры
1 LivingStar
 
01.10.13
11:03
что регистры сведений никому не интересны?
2 LivingStar
 
01.10.13
11:05
по задаче 2 таблицы, в 1 устанавливаемый фокусный ассортимент во второй отменяемый

при проведении у одной номенклатуры ресурс ФА ставлю в истина у другой в ложь, тем самым оставляя на каждый заданный период определенный состав фокусного ассортимента
3 Naumov
 
01.10.13
11:05
какие измерения в регистре? независимый? Периодический?
4 Галахад
 
гуру
01.10.13
11:05
Отладчик вроде давно придумали.
5 LivingStar
 
01.10.13
11:06
(3) периодичность сделал в течении дня, хотя можно было бы оставить в пределах квартала, независимый, решил отказаться от привязки к документу, сейчас вот не могу настроить на работу его, то то не то то то не то
6 LivingStar
 
01.10.13
11:06
(4) я и описал то что видел в отладчике
7 George Wheels
 
01.10.13
11:08
Если в обеих таблицах есть Номенклатура1, то всё различие в поле ФА. Это измерение?
8 goleaff2006
 
01.10.13
11:13
9 LivingStar
 
01.10.13
11:16
(8) спасибо!
(7) ФА это ресурс, измерение номенклатура
суть в том что при проведении документа так как я регисру задал периодичность в пределах дня, в регистр записываются данные по фокусному ассортименту номенклатуры, стала выходить тупая ошибка что в (0) я уже думал почти отладил пока не переключился на другую задачу, сейчас вот не знал что делать с (0). думаю как от сюда вылазить.....
10 goleaff2006
 
01.10.13
11:17
Нельзя в течение дня одну и туже номенклатуру добавлять два раза, что ты и пытался сделать.
11 George Wheels
 
01.10.13
11:18
Во втором цикле сделай проверку на существование записи и меняй её.
12 goleaff2006
 
01.10.13
11:18
или фа сделай измерением.
13 LivingStar
 
01.10.13
13:10
(10) так а я первый документ проводил же, регистр пуст, во второй табличной части ничего нет ( понятно что нельзя, так она вся разная, и в Тч 7 строк, а он пишел про 8ю.... в цикле обрабатываются 7 и переходит на запись...
14 Feunoir
 
01.10.13
13:15

    НаборЗаписей.Прочитать();
    Для каждого Стр Из ТзОтменаФА Цикл
        Если ТзУстановкаФА.Найти(Стр.Номенклатура, "Номенклатура") = Неопределено Тогда
            НоваяЗапись              = НаборЗаписей.Добавить();


А очищать набор записей кто будет, Пушкин?

У тебя записи уже есть, ты их перечитываешь и добавляешь новые. Конечно будет дублирование измерений.
15 LivingStar
 
01.10.13
13:23
(11) Я же в первом цикле перебираю 2ю таблицу и меняю только те значения в ложь которые были установлены в истина предыдущим документом если их нет в первой таблице, так как из первой они и так встанут в истина

(14) А вот это стоит рассмотреть!!! Знаете ещё какая проблема? При отмене проведения нужно же наверное удалять все движения вообще и очищать вторую Тч, оставляя только первую? Так как вторая сама заполняется. Не смог этого сделать, впал в ступор, И был перебит парой других задач.Сейчас хочу эту адекватно все же выправить.

Посоветуйте как очищать равильно движения по регист ру сведений? А то запутываешься в этом ((((
16 Feunoir
 
01.10.13
13:33
(15) В первую очередь я бы рассмотрел возможность сделать регистр подчиненным регистратору. Тогда все проблемы отпадают автоматически. Если это невозможно, тогда при отмене проведения делать что-то типа:


НаборЗаписей = РегистрыСведений.ФокусныйАссортимент.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Дата);
НаборЗаписей.Записать();
17 LivingStar
 
01.10.13
13:39
(16) У меня он был подчиненным регистратору, я отменил... Что может помешать делать регистр подчиненным регистратору???
Он будет ставить введенную в него номенклатуру в фокусный ассортимент с даты документа до введения следующего веть так? Что то меня сбило и я отказался от его использования, но вижу тут куча непредвиденных заморочек....
18 Enders
 
01.10.13
13:53
v8: Изменение записей в регистре сведений подчиненных регистратору
Уже ж спрашивали по данному регистру.
Вместо того что б изобретать колесо с регистром, лучше бы отчет правильно написали.
А регистр сделали подчинённый регистратору, с периодичностью регистратор. И в документе оставили одну таб часть с актуальным ФА, которую б и пихали в регистр.
Или же вообще уйти от регистров, а отчетом отбирать документы за выбранный период отчета. Но в этом случае отчет будет более медленно работать. Да и не красиво, если эти данные будут нужны ещё где-то, кроме отчета.
19 LivingStar
 
01.10.13
13:57
(16) Мне советовали вообще не использовать регистры, остановиться на использовании только документов! Но все равно пытаюсь применить регистры.

Или просто оставить Документ.УстановкаФокусногоАссортимента и им вводить раз в квартал фокусный ассортимент. Не видя всей возможной картины не понятно как все же оставить...
20 LivingStar
 
01.10.13
14:01
(18) Несколько медленно и не совсем правильно, по этому и решил делать по регистру. От подчиненного документа отказался от недопонимания наверное, это же никак не повлияет подчинен он или не подчиненный регистратору регистр, выбирает на дату и показывает...
21 hhhh
 
01.10.13
14:09
(20) правильнее делать документ-регистратор. Это же какое-то событие произошло: директор утвердил фокусный ассортимент, это был какой-то бумажный документ, ему и в 1с должен соответствовать документ. А в этом документе должны быть соответствующие регистры задействованы.
22 Enders
 
01.10.13
15:06
(20) Повлияет
Вы будете видеть каким документом был добавлен ФА. Меньше мороки при отмене проведения, перепроведении документа.
23 LivingStar
 
02.10.13
04:34
(21)(22) Тогда решено, прихожу сегодня, делаю подчиненным регистратору, тестирую, и в обед переношу в рабочую базу! Если успею.