Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 06:36

Установка цен номенклатуры

Автор SkyNetYar, 15 июл 2015, 17:03

0 Пользователей и 1 гость просматривают эту тему.

SkyNetYar

Добрый день!
УТ 11.1.10.164
Создаю документ "ввод начальных остатков",заполняю его обработкой "импорт из excel" самописной,документ заполняется нормально,регистрирует остатки нормально,но в обработке еще есть механизм создания документа "установка цен номенклатуры",документ создается,цены заполняются нормально,но движений по этому документу нет!
Цена для документа указывается как розничная(ЦенаПродажи) так и закупочная(Цена)
Что я сделал не так?

&НаСервере
Функция ЗаполнитьНаСервере() Экспорт

// Получение объекта COM, соответствующего файлу
XLSОбъектОсновной = Новый COMОбъект("Excel.Application");
XLSОбъектКниги = XLSОбъектОсновной.WorkBooks;
XLSОбъект = XLSОбъектКниги.Open(ФайлЗагрузки);
Лист = XLSОбъект.Sheets(1);
пСчСтрок = 1; пСчПустых = 0;

мДанные = Новый Массив;

ТЗ = РеквизитФормыВЗначение("Колонки");
Если ТЗ.Найти("ЦенаПродажи") <> Неопределено Тогда
НовУстановкаЦен = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
НовУстановкаЦен.Дата = ТекущаяДата();
НовУстановкаЦен.Согласован = Истина;
НовУстановкаЦен.Комментарий = "Создан автоматически на основании "+СсылкаНаДокумент+" пользователем "+Пользователи.ТекущийПользователь()+" по файлу "+ФайлЗагрузки+"";
        НовУстановкаЦен.ДокументОснование = СсылкаНаДокумент;
НовУстановкаЦен.Ответственный = Пользователи.ТекущийПользователь();
СтрокаТЧ = НовУстановкаЦен.ВидыЦен.Добавить();
СтрокаТЧ.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Цена продажи");
СтрокаТЧ = НовУстановкаЦен.ВидыЦен.Добавить();
СтрокаТЧ.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Цена закупки");
КонецЕсли;

Пока пСчПустых < 20 Цикл

мЗначения = Новый Структура;
Для Каждого СтрокаТЗ из Колонки Цикл
Если СтрокаТЗ.Колонка <> 0 Тогда
пИмя = СтрокаТЗ.ИмяРеквизита;
пИмя = ЗаменитьНедопустимыеСимволыВИмениФайла(пИмя, "_");
мЗначения.Вставить(пИмя, Лист.Cells(пСчСтрок,СтрокаТЗ.Колонка).Value);

Если Найти(пИмя, "Штрих") Тогда
мЗначения.Вставить(СтрЗаменить(пИмя, " ", "_"), СтрЗаменить(Лист.Cells(пСчСтрок,СтрокаТЗ.Колонка).Value, " ", ""));
КонецЕсли;
КонецЕсли;
КонецЦикла;

пКоличество = мЗначения.Количество;
Попытка
пКоличество = Число(пКоличество);
Исключение
пКоличество = 0;
КонецПопытки;

Если пКоличество > 0 Тогда
Номенклатура = ПолучитьНоменклатуру(мЗначения, ТипЗнч(СсылкаНаДокумент) <> Тип("ДокументСсылка.ПересчетТоваров"));
Если Номенклатура <> Неопределено Тогда

Если мЗначения.Свойство("Цена") Тогда
пЦена  = мЗначения.Цена;
Попытка
пЦена = Число(пЦена);
Исключение
пЦена = 0;
КонецПопытки;
Иначе
пЦена = 0;
КонецЕсли;

Если пЦена = 0 Тогда
Если мЗначения.Свойство("Сумма") Тогда
пСумма = мЗначения.Сумма;
Попытка
пСумма = Число(пСумма);
Исключение
пСумма = 0;
КонецПопытки;
/////////////
пЦена = ?(пКоличество<>0, пСумма / пКоличество, 0);
Иначе
пСумма = пЦена * пКоличество;
КонецЕсли;
Иначе
пСумма = пЦена * пКоличество;
КонецЕсли;

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

мДанные.Добавить(СтрокаТЧ);

//+Цены
    //Добовляем цену продажи в установку цен номенклатуры
    Если мЗначения.Свойство("ЦенаПродажи") Тогда
СтрокаТЧ = НовУстановкаЦен.Товары.Добавить();
СтрокаТЧ.Номенклатура = Номенклатура;
СтрокаТЧ.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Цена продажи");
СтрокаТЧ.Цена = мЗначения.ЦенаПродажи;
СтрокаТЧ.ЦенаИзмененаВручную = Истина;
//Добовляем цену закупки в установку цен номенклатуры
СтрокаТЧ = НовУстановкаЦен.Товары.Добавить();
СтрокаТЧ.Номенклатура = Номенклатура;
СтрокаТЧ.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Цена закупки");
СтрокаТЧ.Цена = мЗначения.Цена;
СтрокаТЧ.ЦенаИзмененаВручную = Истина;
КонецЕсли;
//-Цены

КонецЕсли;
Иначе
пСчПустых = пСчПустых + 1;
КонецЕсли;
пСчСтрок = пСчСтрок + 1;
КонецЦикла;

Попытка
НовУстановкаЦен.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;

/////////////////////////
XLSОбъектОсновной.Quit();

Возврат мДанные;

КонецФункции

Kironten

А если вручную провести созданный документ, движения появляются?

SkyNetYar

Цитата: Kironten от 15 июл 2015, 18:42
А если вручную провести созданный документ, движения появляются?
Нет,в том то и дело что нет,цены стоят,но движений документ не делает,обработка создает номенклатуру,и вид товара прописывает,и характеристики,читал что в этом бывает дело,но не в этом случае..
Еще такая особенность,если скопировать строки документа и вставить в новую установку цен,цены не встают..
Если создаю установку цен из прайс-листа,то цены нормально записываются...

Kironten

Ставим точку в ОбработкаПроведения созданного документа и пытаемся провести вручную. Смотрим где наступает отказ и почему.
Скорее всего, что-то недозаполнено. Иначе при ручном проведении, если бы у документа хватало бы необходимых ему данных были бы сформированы движения.

дфтын

да типы цен не заполнены.
программно - там две табличных части. разберитесь с нимим

SkyNetYar

Подсказали бы еще как его поправить,вижу что дело не ладно с этим заполнением,но что то не хватает навыка его поправить :(
Добавлено: 16 июл 2015, 13:17


Оказалось все до опупения просто,не хватало этого:
НовУстановкаЦен.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;

Когда составлял ,почему то спутал с НовУстановкаЦен.Согласован = Истина;
Добавлено: 16 июл 2015, 13:22


Кстате вопрос по теме..,какую нужно ставить дату документу установка цен номенклатуры по отношению к документу основанию?
И документ основание в установке цен номенклатуры все равно не встает :mellow:

Kironten

Цитата: SkyNetYar от 16 июл 2015, 09:00
Кстате вопрос по теме..,какую нужно ставить дату документу установка цен номенклатуры по отношению к документу основанию?
И документ основание в установке цен номенклатуры все равно не встает :mellow:
По поводу даты:
Не уверен, но по-моему пофиг какую.
Важно же только какой датой она попадет в регистр, а это дата установки цен.
По основанию:
Проверьте, в этой строке, у вас переменная заполняется?
НовУстановкаЦен.ДокументОснование = СсылкаНаДокумент;
Если заполняется, то скорее всего напутали с типом документа основания

SkyNetYar

Цитата: Kironten от 16 июл 2015, 13:40
Цитата: SkyNetYar от 16 июл 2015, 09:00
Кстате вопрос по теме..,какую нужно ставить дату документу установка цен номенклатуры по отношению к документу основанию?
И документ основание в установке цен номенклатуры все равно не встает :mellow:
По поводу даты:
Не уверен, но по-моему пофиг какую.
Важно же только какой датой она попадет в регистр, а это дата установки цен.
По основанию:
Проверьте, в этой строке, у вас переменная заполняется?
НовУстановкаЦен.ДокументОснование = СсылкаНаДокумент;
Если заполняется, то скорее всего напутали с типом документа основания
Кажется что пофиг,но насамом деле это влияет например на заполнение ТОРГ-29,если установка цен была раньше приходуемого товара,то в отчет ТОРГ-29 заносится не документ приходывания а документ установки цен номенклатуры,что не правильно!
Документ основания сейчас ковыряю.
Кстате,когда делал в один день установку цен номенклатуры с такими параметрами НачалоДня(ТекущаяДата()); тогда время 00.00.00 и ошибка записи в регистр,поэтому приходится делать ТекущаяДата()

Kironten

Цитата: SkyNetYar от 16 июл 2015, 14:49
Кажется что пофиг,но насамом деле это влияет например на заполнение ТОРГ-29,если установка цен была раньше приходуемого товара,то в отчет ТОРГ-29 заносится не документ приходывания а документ установки цен номенклатуры,что не правильно!
Документ основания сейчас ковыряю.
Кстате,когда делал в один день установку цен номенклатуры с такими параметрами НачалоДня(ТекущаяДата()); тогда время 00.00.00 и ошибка записи в регистр,поэтому приходится делать ТекущаяДата()
Спорное утверждение, что неправильно.
Вы же можете делать установку цен без документа основания и Торг29 не считает это ошибочным. Возможно это не устраивает Вас, но с точки зрения программы, регистратор есть регистратор.
Поскольку периодичность регистра Цены номенклатуры - секунда, я бы посмотрел, что там уже записано на начало дня. Возможно у Вас задвоение по сочетанию измерений на эту дату.

SkyNetYar

Да,возможно Вы правы касаемо ТОРГ-29 и установки,наш бухгалтер не понимает такого документа "установка цен номенклатуры" :xfbnsdfb:
А с регистром, да, так как я вношу сразу 3-и документа с остатками на разные склада,то соответственно "УЦН" с таким параметром НачалоДня тоже упирается в такую же запись,которая уже существует с такой секундой,поэтому и приходится делать ТекущаяДата что бы время различалось у записей.
В этих документах попадается одна и та же номенклатура с той же ценой разумеется.только склад разный.принципе это не проблема.Просто хотелось узнать как правильно устанавливать дату у УЦН по отношению к документу прихода,поскольку номенклатуры не существует до документа "ввод остатков товара" то цена записывается не верно если с параметром НачалоДня так я понимаю..

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск