8.х Не удалось записать документ установки цен

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Sunbear, 1 фев 2011.

  1. TopicStarter Overlay
    Sunbear
    Offline

    Sunbear Опытный в 1С

    Регистрация:
    11 фев 2010
    Сообщения:
    112
    Симпатии:
    0
    Баллы:
    26
    1С:Предприятие 8.1 (8.1.13.37) "Управление торговлей", редакция 10.3 (10.3.6.8)

    Не удалось записать документ установки цен: {Документ.ПоступлениеТоваровУслуг(5112)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : ЦенаМосква : Сумка Continent CC02 Grey {нейлон, до 15, 4"} : : 11.10.2010 0:00:00 (Регистр сведений: Цены номенклатуры; Номер строки: 329)

    Когда я меняю значение цены допустим с 75 до 68 р., но не добавляю новых строк в документ установки цен выдает такую ошибку. причем она не может записать цену товара, у которого цена уже записана раньше и ее не нужно менять. Мне просто нужно обновить документ установки цен - изменить новые цены а остальное оставить как было. Вот код из Процедуры ОбработкаПроведения документа поступление товаров.

    Код:
    Если Товары.Количество()>0 и  Не Отказ Тогда
    ДокументУстановкаЦен= ДокументУстановкаЦен.Ссылка.Пустая();
    ВыборкаДокументов = Документы.УстановкаЦенНоменклатуры.Выбрать( началодня(этотобъект.Дата),конецдня(этотобъект.Дата));
    kk2=0;
    Пока ВыборкаДокументов.Следующий() Цикл
    kk2=kk2+1;
    if kk2=1 then
    ДокументУстановкаЦен=ВыборкаДокументов.Ссылка;
    endif;    
    КонецЦикла;  
    Если ДокументУстановкаЦен.Ссылка.Пустая() Тогда
    
    ДокументОбъект1 = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокументОбъект1, глЗначениеПеременной("глТекущийПользователь"));
    ДокументОбъект1.Дата = началодня(этотобъект.Дата);
    
    ИндексСтрокиТаблицыЦен = 0;
    Иначе
    ДокументОбъект1 = ДокументУстановкаЦен.ПолучитьОбъект();
    
    // Определим следующий индекс строки.
    Если ДокументОбъект1.Товары.Количество() = 0 Тогда
    ИндексСтрокиТаблицыЦен = 1;
    Иначе
    СписокИндексов = Новый СписокЗначений;
    СписокИндексов.ЗагрузитьЗначения(ДокументОбъект1.Товары.ВыгрузитьКолонку("ИндексСтрокиТаблицыЦен"));
    СписокИндексов.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
    ИндексСтрокиТаблицыЦен = СписокИндексов[0].Значение + 1;
    КонецЕсли;
    КонецЕсли;
    
    спр= справочники.Номенклатура; 
    flagDobavlen=0;
    ТипЦен1 =  справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничные");
    Для Каждого СтрокаДок Из товары Цикл 
    
    СтрокаТипЦен = ДокументОбъект1.ТипыЦен.Найти(ТипЦен1, "ТипЦен");
    
    Если СтрокаТипЦен = Неопределено Тогда
    СтрокаТипЦен = ДокументОбъект1.ТипыЦен.Добавить();
    СтрокаТипЦен.ТипЦен = ТипЦен1;
    КонецЕсли;
    
    СтруктураПоиска = Новый Структура;
    СтруктураПоиска.Вставить("Номенклатура", СтрокаДок["Номенклатура"]);
    СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
    СтруктураПоиска.Вставить("ТипЦен", ТипЦен1);
    
    СтрокаТовары = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ДокументОбъект1.Товары, СтруктураПоиска);
    
    Если СтрокаТовары = Неопределено Тогда
    СтрокаТовары = ДокументОбъект1.Товары.Добавить();
    СтрокаТовары.Номенклатура = СтрокаДок["Номенклатура"];
    СтрокаТовары.ТипЦен = ТипЦен1;
    СтрокаТовары.ИндексСтрокиТаблицыЦен = ИндексСтрокиТаблицыЦен;
    flagDobavlen=1;
    КонецЕсли;
    
    if   СтрокаТовары.Цена <> СтрокаДок["ЦенаРозн"] then
    СтрокаТовары.Цена = СтрокаДок["ЦенаРозн"];
    СтрокаТовары.ИндексСтрокиТаблицыЦен=ИндексСтрокиТаблицыЦен;
    ИндексСтрокиТаблицыЦен=ИндексСтрокиТаблицыЦен+1;
    СтрокаТовары.Валюта = ТипЦен1.ВалютаЦены;
    СтрокаТовары.ЕдиницаИзмерения = СтрокаДок["Номенклатура"].ЕдиницаДляОтчетов;
    flagDobavlen=1;
    endif;    
    КонецЕсли;
    
    
    
    Попытка
    Если Не(ДокументОбъект1.Товары.Количество() = 0)и flagDobavlen=1 then
    
    ДокументОбъект1.Записать(РежимЗаписиДокумента.Запись);  
    ДокументОбъект1.Записать(РежимЗаписиДокумента.Проведение);
    ДокументУстановкаЦен = ДокументОбъект1.Ссылка;
    
    endif; 
    Исключение
    Сообщить("Не удалось записать документ установки цен: " + ОписаниеОшибки(), СтатусСообщения.Важное);
    Отказ = Истина;
    Возврат;
    КонецПопытки;
    
    
    
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Возможна цена "ЦенаМосква" на "Сумка Continent CC02 Grey {нейлон, до 15, 4"}" - на этот день уже задана другим документов установки цен. Проверьте.
    Если нет, то попробуйте вначале отменить проведение этого документа, изменить цену и потом провести.
  3. TopicStarter Overlay
    Sunbear
    Offline

    Sunbear Опытный в 1С

    Регистрация:
    11 фев 2010
    Сообщения:
    112
    Симпатии:
    0
    Баллы:
    26
    Нет, она не задана другим документом, я проверил :) Попробую отменить проведение этого документа.

Поделиться этой страницей