Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. В УТ 10.3. Документ поступление товаров услуг делает движение в регистр сведений цены номенклатуры. Периодичность регистра в пределах дня. Значить товар может делать движению только один раз в день. Но есть токая задача. Пример : В первым документа поступление я указал товар (Клавиатура 002) и движения было. А в втором документа я уже указал два товар один из них Клавиатура 002 а другой Экран. Когда пользователь нажмёт кнопку ОК, как надо появляется сообщение запись с такими ключевыми полями существует. Задача в том что код проста сделал движению только для товара Экран.
Написал код в процедуру Обработка проведение. Но бывают ошибки. Можете дать советы что как решить эту задачу.
Спасибо всем за ранее.

```1c
    ТипЦенаПродажи = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");

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

Срез последних тоже использовал но не работал.
---
А, ну конечно же... :)

Замените

```1c
    Если ПустаяСтрока(Выборка.Номенклатура) Тогда
```

на

```1c
    Если Не Выборка.Следующий() Тогда
```
---
Раз у Вас периодичность "День", то и отбор по периоду должен быть соответствующий - кратный дню.
Замените

```1c
    Запрос.УстановитьПараметр("Дата", Дата);
```

на

```1c
    Запрос.УстановитьПараметр("Дата", НачалоДня(Дата));
```
---
Спасибо за вниманию.
Но по-моему я код писал не в правильным месте. Ошибка появляется.
---
Попробуйте еще убрать условие по регистратору из запроса.
---
```1c
    ТипЦенаПродажи = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");

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

Может это не надо делать в процедуре обработка проведение
---
А, ну конечно же... :)

Замените

```1c
    Если ПустаяСтрока(Выборка.Номенклатура) Тогда
```

на

```1c
    Если Не Выборка.Следующий() Тогда
```
---
Спасибо вам большое.
Почему не работал с этим кодом?
Если ПустаяСтрока(Выборка.Номенклатура) Тогда

Запрос будить возвращать пустой или заполненный строка. Ну там и есть оператор условию.
---
Потому что Вы выбрали данные запросом, но не попытались спозиционироваться на первой строке результата.
---
Зачем вам делать у цен номенклатуры еще один регистратор? Проще делать по следующему алгоритму:
1) при проведении первого за день поступления товаров создаем документ установки цен номенклатуры и заполняем его всеми товарами из поступления
2) при проведении следующих документов поступлений получаем ранее созданный документ установки цен и дополняем его новыми строками или изменяем цены у существующих
---
Вот именно как сделать второй вариант
---
примерно так:

```1c
    Установка = НайтиДокументУстановкциЦен();
    УстановкаЦен = Установка.ПолучитьОбъект();
    Для Каждого Строка Из СсылкаНаПоступление.Товары Цикл
    ПараметрыОтбора = Новый Структура("ИменаИзмерений");
    //<ЗаполняемПараметрыОтбора>
    СтрокиУстановки = УстановкаЦен.Товары.НайтиСтроки(ПараметрыОтбора);
    Если СтрокиУстановки.Количество() = 0 Тогда
    //<такой строки нет, добавляем новую>
    ТекущаяСтрока = УстановкаЦен .Товары.Добавить();
    //<заполняем данные новой строки установки цен>
    Иначе
    ТекущаяСтрока = СтрокиУстановки[0];
    КонецЕсли;
    //<при необходимости в строке меняем цену на цену из поступления>
    КонецЦикла;
    УстановкаЦен.Записать(РежимЗаписиДокумента.Проведение);
```

где НайтиДокументУстановкциЦен() - функция, которая возвращает ссылку на документ установки цен
ИменаИзмерений - строка измерений регистра "Цены номенклатуры" через запятую, например "ВидЦены, Номенклатура, Характеристика"
<ЗаполняемПараметрыОтбора> - выполняем заполнение структуры по данным строки поступления товаров
---
запись с такими ключевыми полями существует - именно это и означает, что в пределах периодичности уже есть запись с теми же самыми значениями ключевых полей

варианта 2
1. изменить периодичность регистра
2. изменить состав ключевых полей регистра
---
Первый вариант не надо. Второй вариант можете подробнее? Это что надо сделать в самом регистре?
С кодом можно решать проблему?
---
Подход на мой взгляд неверный в той части , что в Регистр Сведений нужно всегда делать записи последним документом.
То есть утром поступил товар по 10 а вечером по 15 но по вашей схеме цена на следующий день останется 10, хотя последняя была 15 ...

Думайте что не так...