Регистр сведений подчиненный регистратору
Не записывает наборЗаписей ?*
РегистрТЦ=Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("РР-00000012",текущаядата());
НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = РегистрУС.Дата;
НоваяЗапись.Регистратор =РегистрУС.Ссылка;
НоваяЗапись.Магазин=Справочники.Магазины.НайтиПоНаименованию("КЕ");
НоваяЗапись.Номенклатура=Резуль.Ссылка;
НоваяЗапись.Активность=Истина;
НоваяЗапись.Цена =ЦенаХ ;
НаборЗаписей.Записать(Истина);
ПоказатьПо теме из базы знаний
- Отчет по регистрам сведений, подчиненным регистратору
- Правила конвертации между регистрами сведений подчиненным регистратору и независимым
- Регистр сведений, подчиненный регистратору, и независимый регистр сведений в 1С
- Загрузка данных из табличного документа с возможностью загружать данные в регистры сведений, подчиненные регистратору
- Регистры сведений 1С для "чайников"
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Документ УстановкаЦенНоменклатуры не является регистратором регистра СебестоимостьНоменклатуры
РегистрТЦ=Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("РР-00000012",текущаядата());
НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
Документ УстановкаЦенНоменклатуры не является регистратором регистра СебестоимостьНоменклатуры
(1) После создания набора записей его нужно прочитать и очистить. Иначе ты попытаешься сделать второй подобный набор, а этого делать нельзя. Иесли ты хочешь всю номенклатуру в регистр добавить, то нуно это делать в цикле. Я не знаю как у тебя называется ТЧ документа, в примере я назвал ее "Товары"
РегистрТЦ=Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("РР-00000012",текущаядата());
НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
НаборЗаписей.Прочитать();
НаборЗаписей.Записать();
Для Каждого СтрокаТовара из РегистрТЦ.Товары Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = РегистрУС.Дата;
НоваяЗапись.Регистратор =РегистрУС.Ссылка;
НоваяЗапись.Магазин=Справочники.Магазины.НайтиПоНаименованию("КЕ");
НоваяЗапись.Номенклатура=Резуль.Ссылка;
НоваяЗапись.Активность=Истина;
НоваяЗапись.Цена =ЦенаХ ;
КонецЦикла;
НаборЗаписей.Записать(Истина);
Показать
(18)
i=0;
sum=0;//счтиваем общее количество созданных карточек
ФайлExcel="C:\Users\корт\Documents\себестоиомсть\yt10_TOS.xlsx"
ТЗ = ИзExcelВТаблицу(ФайлExcel,1,Истина);
РегистрУС=Документы.УстановкаСебестоимости.НайтиПоНомеру("РР-00000011",текущаядата());
НаборЗаписей2 = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей2.Отбор.Регистратор.Установить(РегистрУС);
//Читаем регистр и добавляем колонку код
наборзаписей2.Прочитать();
ТаблН=наборзаписей2.Выгрузить(,"Номенклатура,Цена");
ТаблН.Колонки.Добавить("Код");
ДЛя каждого стрТ Из ТаблН Цикл
СтрТ.код=стрТ.Номенклатура.Код;
КонецЦикла;
//-к
//-первое определение для чтения ,второй для записи
РегистрТЦ=Документы.УстановкаСебестоимости.НайтиПоНомеру("РР-00000012",текущаядата());
НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
//--чтобы регистр записался
НомерСтроки=Наборзаписей.Количество();
НаборЗаписей.записать();
Для Каждого Стр Из ТЗ Цикл //таблица копий
СебесН=ЧИсло(СтрЗаменить(Стр.Стоимость,Символы.НПП,""));
КодН=Строка(СтрЗаменить(Стр.код,Символы.НПП,""));
КолвоН=Число(Стр.Количество);
Пока СтрДлина(КодН)<11 Цикл
КодН="0"+КодН;
КонецЦикла;
//находим
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Код КАК Код,
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Родитель.Наименование КАК РодительНаименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Код = &Код
| И Номенклатура.Родитель.Наименование = &Наименование";
Запрос.УстановитьПараметр("Код", КодН);
Запрос.УстановитьПараметр("Наименование", "TS Ювелирные изделия");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Резуль=ВыборкаДетальныеЗаписи;// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
Если ЗначениеЗаполнено(Резуль) тогда //Если найдена номенклатура
НайдСтр=ТаблН.Найти(КодН);
ЦенаХ=Окр(СебесН/КолвоН,2);
Если ЗначениеЗаполнено(НайдСтр) тогда // находим интревал округления
РазличиеЦен=Макс(-(НайдСтр.Цена-ЦенаХ),НайдСтр.Цена-ЦенаХ); //модуль числа,чтоб всегда положительное
иначе
РазличиеЦен=ЦенаХ;
КонецЕсли;
Если РазличиеЦен>0.01 Тогда //если различие одна копейка , то оставляем старую цену
Если Не ЗначениеЗаполнено(НайдСтр) или НайдСтр.Цена<>(ЦенаХ) ТОгда
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = РегистрТЦ.Дата;// +(сч)так как врегистр не записываются одинаковые строки в одно время
НоваяЗапись.Регистратор =РегистрТЦ.Ссылка;
НоваяЗапись.Магазин=Справочники.Магазины.НайтиПоНаименованию("TOUS");
НоваяЗапись.Номенклатура=Резуль.Ссылка;
НоваяЗапись.Активность=Истина;
НоваяЗапись.Цена =ЦенаХ ;//ЦенаХ из ексел ут 10
Если Не ЗначениеЗаполнено(НайдСтр) ТОгда
Сообщить("Записано в регистр:"+Резуль.ссылка+" себестоимость:"+Строка(ЦенаХ));
иначе
Сообщить("Записано в регистр:"+Резуль.ссылка+" себестоимость:"+Строка(ЦенаХ)+" была себес:"+строка(НайдСтр.Цена));
КонецЕсли;
КонецЕсли;
КонецЕсли;
i=i+1;
КонецЕсли;
КонецЦикла;
Попытка
НаборЗаписей.Записать();
Исключение
сообщить("Ошибка записи в регистр");
КонецПопытки;
Показать
Вот как-то так проще наверно
i=0;
sum=0;//счтиваем общее количество созданных карточек
ФайлExcel="C:\Users\корт\Documents\себестоиомсть\yt10_TOS.xlsx"
ТЗ = ИзExcelВТаблицу(ФайлExcel,1,Истина);
ТЗ.Колонки.Добавить("Код11",Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(11, ДопустимаяДлина.Фиксированная));
ТЗ.Колонки.Добавить("Себест",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой)));
ТЗ.Колонки.Добавить("Колво",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Любой)));
//Вот это по идее сразу нужно делать в ИзExcelВТаблицу
Стр0="00000000000";
Для Каждого Стр Из ТЗ Цикл //таблица копий
Стр.Себест=Число(СтрЗаменить(Стр.Стоимость,Символы.НПП,""));
Стр.Колво=Число(Стр.Количество);
КодН=СокрЛП(СтрЗаменить(Стр.код,Символы.НПП,""));
Стр.Код11=Лев(Стр0,11-СтрДлина(КодН))+КодН;
КонецЦикла;
ТЗ.Колонки.Удалить("Стоимость");
ТЗ.Колонки.Удалить("Количество");
ТЗ.Колонки.Удалить("код");
РегистрУС=Документы.УстановкаСебестоимости.НайтиПоНомеру("РР-00000011",текущаядата());
РегистрТЦ=Документы.УстановкаСебестоимости.НайтиПоНомеру("РР-00000012",текущаядата());
Родитель=Справочники.Номенклатура.НайтиПоНаименованию("TS Ювелирные изделия",Истина);
Магазин=Справочники.Магазины.НайтиПоНаименованию("TOUS");
//Тут бы по уму проверку, что все это нашлось
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЗ.Код11 КАК Код,
| ТЗ.Себест КАК Себест,
| ТЗ.Колво КАК Колво
|ПОМЕСТИТЬ ТЗ
|ИЗ &ТЗ КАК ТЗ
|;
|ВЫБРАТЬ
| ISNULL(СпрНоменклатура.Ссылка,ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК Номенклатура,
| ВЫРАЗИТЬ(ТЗ.Себест/ТЗ.Колво КАК (Число(15,2)) КАК НоваяЦена,
| ВЫБОР
| КОГДА СпрНоменклатура.Ссылка IS NULL ТОГДА 0
| ИНАЧЕ ISNULL(СебестоимостьНоменклатурыСрезПоследних.Цена,0)
| КОНЕЦ КАК Цена
|ИЗ ТЗ КАК ТЗ
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО СпрНоменклатура.Код = ТЗ.Код,
| И СпрНоменклатура.Родитель = &Родитель
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних(, Регистратор = &Регистратор) КАК СебНомСрезПоследних
| ПО СебНомСрезПоследних.Номенклатура = ISNULL(СпрНоменклатура.Ссылка,ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|";
Запрос.УстановитьПараметр("ТЗ", ТЗ);
Запрос.УстановитьПараметр("РегистрУС", РегистрУС);
Запрос.УстановитьПараметр("Родитель",Родитель);
Выборка = Запрос.Выполнить().Выбрать();
НаборЗаписей = РегистрыСведений.СебестоимостьНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(РегистрТЦ);
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.Номенклатура) Тогда
Если Выборка.Цена=0 ИЛИ Макс(Выборка.Цена-Выборка.НоваяЦена,Выборка.НоваяЦена-Выборка.Цена)>0.01 Тогда
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = РегистрТЦ.Дата;// +(сч)так как врегистр не записываются одинаковые строки в одно время
НоваяЗапись.Регистратор =РегистрТЦ;
НоваяЗапись.Магазин=Магазин;
НоваяЗапись.Номенклатура=Выборка.Номенклатура;
НоваяЗапись.Активность=Истина;
НоваяЗапись.Цена =Выборка.НоваяЦена ;//ЦенаХ из ексел ут 10
Если Не Выборка.Цена=0 ТОгда
Сообщить("Записано в регистр:"+Выборка.Номенклатура+" себестоимость:"+Выборка.НоваяЦена);
иначе
Сообщить("Записано в регистр:"+Выборка.Номенклатура+" себестоимость:"+Выборка.НоваяЦена+" была себес:"+Выборка.Цена);
КонецЕсли;
i=i+1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Попытка
НаборЗаписей.Записать();
Исключение
сообщить("Ошибка записи в регистр");
КонецПопытки;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот