Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Внешняя обработка. Программная загрузка цен номенклатуры. Версия платформы: 8.3.10.2667, версия конфигуратора: 2.4.1.206
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
@lex
Добрый день! Написал внешнюю обработку по загрузке цен номенклатуры. Документ "Установка цен номенклатуры". Движение происходит в регистре сведений "ЦеныНоменклатуры". Загрузка данных происходит из файла Excel в таблицу на форме. Затем циклом по таблице добавляю в документ.
документУстановкаЦен                       = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    документУстановкаЦен.Дата                = РеквизитДатаУстановкиЦены; // Дата, с которой начинает действовать цена с поля формы
    документУстановкаЦен.Ответственный = Пользователи.ТекущийПользователь();
    документУстановкаЦен.Согласован      = Истина;
    документУстановкаЦен.Статус             = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
    
    
    // Заполняем таб.часть "ВидыЦен".
    новаяСтрокаВидЦены              = документУстановкаЦен.ВидыЦен.Добавить();
    новаяСтрокаВидЦены.ВидЦены      = РеквизитВидЦены; // Вид цены, с поля формы
    
    // Заполняем таб.часть "НаборыЗначенийДоступа".
    новаяСтрокаНаборыЗначенийДоступа                           = документУстановкаЦен.НаборыЗначенийДоступа.Добавить();
    новаяСтрокаНаборыЗначенийДоступа.ЗначениеДоступа = РеквизитВидЦены;     
        
    Для Каждого стрТЗ Из РеквизитТаблицаСНовымиЦенами Цикл
        
        // Заполняем таб.часть "Товар".
        новаяСтрокаТовар                                    = документУстановкаЦен.Товары.Добавить();
        новаяСтрокаТовар.ВидЦены                      = РеквизитВидЦены;
        новаяСтрокаТовар.Номенклатура              = стрТЗ.КолонкаНоменклатура;
        новаяСтрокаТовар.Цена                            = стрТЗ.КолонкаЦена;
        новаяСтрокаТовар.ЦенаИзмененаВручную = Истина;             
                        
    КонецЦикла;
    
    //документУстановкаЦен.Записать(РежимЗаписиДокумента.Запись);
    Попытка
        документУстановкаЦен.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        Сообщить(ОписаниеОшибки());         
    КонецПопытки;


При попытке провести документ (программно) выдается ошибка:
{ВнешняяОбработка.УстановкаЦенНаТовары.Форма.Форма.Форма(283)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : ЦеныНоменклатуры: 24.08.2018 0:00:00, Услуги основным цехам, , Минимальная цена (Регистр сведений: Цены номенклатуры; Номер строки: 1520). Что не так делаю, подскажите, пожалуйста?
Примечание: Если документ записать программно, а затем его в пользовательском режиме провести, то он проводится без проблем.
andr_andrey
Цитата(@lex @ 24.08.18, 8:38) необходимо зарегистрироваться для просмотра ссылки
Запись с такими ключевыми полями существует! : ЦеныНоменклатуры: 24.08.2018 0:00:00, Услуги основным цехам, , Минимальная цена (Регистр сведений: Цены номенклатуры; Номер строки: 1520)

Очень лаконичное сообщение.
Поставьте точку останова в модуле объекта в начале процедуры ОбработкаПроведения и посмотрите движения перед записью, дальше задаёте себе вопросы когда, где и почему сформировали дублирующие строки.

Даже если очень захотеть, то не хватает названия конфигурации (есть подозрение, что это ERP), самой внешней обработки и экселя с данными для ответа на ваш вопрос.
@lex
andr_andrey @ Сегодня, 14:12 необходимо зарегистрироваться для просмотра ссылки ,
Спасибо за ответ! Все, разобрался. Да, это ERP. Проблемы были две, 1-я это дубликаты в файле эксель. 2-я - в регистре сведений некоторые позиции уже были заведены на дату, которую выбирал с той же ценой, поэтому и ругался.
ebuofficial2705@gmail.com
@lex @ 24.08.18, 8:38 необходимо зарегистрироваться для просмотра ссылки ,
Здравствуйте, можете поделиться вашей обработкой ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.