8.х Не могу программно записать док УстановкаЦенНоменклатуры

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

  1. TopicStarter Overlay
    albasv
    Offline

    albasv Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Есть интернет-магазин. Надо из него базу перелить в Упп 1.3 в справочник "Номенклатура"
    все получается, только не могу добиться коррекной записи документа "УстановкаЦенНоменклатуры"

    ...

    Код:
    //Добавляем Документ "УстановкаЦенНоменклатуры" чтогб потом записать цену в номенклатуру
    
    СсылкаПользователь = Справочники.Пользователи.НайтиПоНаименованию(Строка(ПараметрыСеанса.ТекущийПользователь)); //"Админ"
    СсылкаТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основная");
    СсылкаВалюта = Справочники.Валюты.НайтиПоНаименованию("руб.");
    ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, элементСсылка);
    Если ВыборкаЕдиниц.Следующий() Тогда
    СсылкаЕдИзм = ВыборкаЕдиниц.Ссылка;
    КонецЕсли;
    
    НовДок = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    НовДок.Комментарий = "Записан программно";
    НовДок.Ответственный = СсылкаПользователь;
    НовДок.НеПроводитьНулевыеЗначения = Истина;
    
    Документ = НовДок;
    Форма = Документ.ПолучитьФорму();
    мКолонкиТовары = Форма.ЭлементыФормы.ТаблицаЦен.Колонки;
    
    ПоказыватьЦену				 = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьЦену");
    ПоказыватьВалюту			   = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьВалюту");
    ПоказыватьЕдиницуИзмерения	 = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьЕдиницуИзмерения");
    ПоказыватьПроцентСкидкиНаценки = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьПроцентСкидкиНаценки");
    ПоказыватьСпособРасчета	    = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьСпособРасчета");
    ПоказыватьХарактеристику	   = ВосстановитьЗначение("УстановкаЦенНоменклатуры_ПоказыватьХарактеристику");
    
    мПоказыватьКод				 = ?(мПоказыватьКод = Неопределено, Ложь, мПоказыватьКод);
    мПоказыватьАртикул			 = ?(мПоказыватьАртикул = Неопределено, Ложь, мПоказыватьАртикул);
    ПоказыватьЦену				 = ?(ПоказыватьЦену = Неопределено, Истина, ПоказыватьЦену);
    ПоказыватьВалюту			   = ?(ПоказыватьВалюту = Неопределено, Истина, ПоказыватьВалюту);
    ПоказыватьЕдиницуИзмерения	 = ?(ПоказыватьЕдиницуИзмерения = Неопределено, Истина, ПоказыватьЕдиницуИзмерения);
    ПоказыватьПроцентСкидкиНаценки = ?(ПоказыватьПроцентСкидкиНаценки = Неопределено, Истина, ПоказыватьПроцентСкидкиНаценки);
    ПоказыватьСпособРасчета	    = ?(ПоказыватьСпособРасчета = Неопределено, Истина, ПоказыватьСпособРасчета);
    ПоказыватьХарактеристику	   = ?(Документ.мИспользоватьХарактеристики, ?(ПоказыватьХарактеристику = Неопределено, Истина, ПоказыватьХарактеристику), Ложь);
    
    мСоответствиеТиповЦен = Новый Соответствие;
    
    НоваяСтрокаТипЦен = НовДок.ТипыЦен.Добавить();
    НоваяСтрокаТипЦен.ТипЦен = СсылкаТипЦен;
    
    
    // Сформируем и заполним таблицу цен.
    Для Каждого СтрокаТипаЦен Из Форма.ТипыЦен Цикл
    НомерСоответствияТекущейКолонки = Форма.ТипыЦен.Индекс(СтрокаТипаЦен);
    мСоответствиеТиповЦен.Вставить(СтрокаТипаЦен.ТипЦен, НомерСоответствияТекущейКолонки);
    
    Если Форма.ТаблицаЦен.Колонки.Найти("цена" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
    Форма.ТаблицаЦен.Колонки.Добавить("цена" + НомерСоответствияТекущейКолонки, ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15, 2, ДопустимыйЗнак.Неотрицательный), СокрЛП(СтрокаТипаЦен.ТипЦен), 10);
    КонецЕсли;
    Если Форма.ТаблицаЦен.Колонки.Найти("СпособРасчета" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
    Форма.ТаблицаЦен.Колонки.Добавить("СпособРасчета"+НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("ПеречислениеСсылка.СпособыРасчетаЦены"), "Способ расчета", 8);
    КонецЕсли;
    Если Форма. ТаблицаЦен.Колонки.Найти("валюта" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
    Форма.ТаблицаЦен.Колонки.Добавить("валюта" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("СправочникСсылка.Валюты"), "Валюта", 8);
    КонецЕсли;
    Если Форма.ТаблицаЦен.Колонки.Найти("единица" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
    Форма.ТаблицаЦен.Колонки.Добавить("единица" + НомерСоответствияТекущейКолонки, Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"), "Единица", 8);
    КонецЕсли;
    Если Форма.ТаблицаЦен.Колонки.Найти("процент" + НомерСоответствияТекущейКолонки) = Неопределено Тогда
    Форма.ТаблицаЦен.Колонки.Добавить("процент" + НомерСоответствияТекущейКолонки, ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15, 2), "% скидки (наценки)", 8);
    КонецЕсли;
    КонецЦикла;
    
    
    Если Форма.ТаблицаЦен.Количество() > 0 Тогда
    ТекстВопроса = "Перед заполнением табличная часть будет очищена. Заполнить?";
    Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , Документ.Метаданные().Представление());
    Если Ответ = КодВозвратаДиалога.Нет Тогда
    Возврат;
    КонецЕсли;
    
    Форма.ТаблицаЦен.Очистить();
    КонецЕсли;
    
    // Получим подчиненные типы цен.
    ПодчиненныеТипыЦен = ПолучитьПодчиненныеТипыЦен(ТипЦенБазовый);
    ПодчиненныеТипыЦен.Добавить(ТипЦенБазовый);
    
    //Обойдем массив в обратном порядке.
    КоличествоПодчиненныхТипов = ПодчиненныеТипыЦен.Количество();
    Для Тмп = 1 По КоличествоПодчиненныхТипов Цикл
    // СтрокаТабличнойЧасти = Документ.ТипыЦен.Добавить();
    // СтрокаТабличнойЧасти.ТипЦен = ПодчиненныеТипыЦен[КоличествоПодчиненныхТипов - Тмп];
    КонецЦикла;
    
    
    ЗаполнитьСписокТиповЦен();
    
    // Обновим состав колонок.
    ОбновитьСоставКолонок();
    ПолучитьСтруктуруПоложенийКолонок();
    ВидимостьКолонок();
    
    
    //*** отсюда заком
    СтруктураПоиска = Новый Структура;
    СтруктураПоиска.Вставить("Номенклатура"			  , элементСсылка);//Выборка.Номенклатура);
    //СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Выборка.ХарактеристикаНоменклатуры);
    
    СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(Форма.ТаблицаЦен, СтруктураПоиска);
    
    Если СтрокаТабличнойЧасти = Неопределено Тогда
    СтрокаТабличнойЧасти = Форма.ТаблицаЦен.Добавить();
    СтрокаТабличнойЧасти.Номенклатура			   = элементСсылка;
    //СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры;
    //СтрокаТабличнойЧасти.ТекущийИндексСтрокиТаблицыЦен = 0;
    КонецЕсли;
    
    ТипЦенНоменклатуры = СсылкаТипЦен;
    
    СтрокаТипаЦен = Документ.ТипыЦен.Найти(ТипЦенНоменклатуры);
    НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[ТипЦенНоменклатуры];
    
    
    
    
    СтрокаТабличнойЧасти["цена" + НомерСоответствияТекущейКолонки]		  = Выборка.ЦенаРеализацииВводимая;//НоваяЦена;
    //СтрокаТабличнойЧасти["СпособРасчета" + НомерСоответствияТекущейКолонки] = СпособРасчетаЦены;
    СтрокаТабличнойЧасти["валюта" + НомерСоответствияТекущейКолонки]	    = СсылкаВалюта;
    СтрокаТабличнойЧасти["единица" + НомерСоответствияТекущейКолонки]	   = СсылкаЕдИзм;
    СтрокаТабличнойЧасти["процент" + НомерСоответствияТекущейКолонки]	   = 0;//НовыйПроцент


    !!! вот если здесь открыть форму модально и нажать кнопку "ОК", то документ записывается корректно, а мне надо записать ЕГО ПРОГРАММНО? т е симитировать нажатие кнопки "ОК" на форме документа, подскажите кто знает...

    конечно я скорее делитант, но я перепробовала методы и через
    1) НовДок.Записать();
    2) Shell

    Прикладываю файл всей обработки

    Вложения:

  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а почему не записывает через НовДок.Записать?

    З.Ы. пользуйтесь тегами для оформления вашего кода
  3. TopicStarter Overlay
    albasv
    Offline

    albasv Опытный в 1С

    Регистрация:
    11 ноя 2011
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Вобщем кому интересно запись Док УстановкаЦенНоменклатуры у меня получилось, выкладываю обработку, но теперь не могу в карточку номенклатуры вписать эту цену, чтобы при ее открытии на странице ЦеныНоменклатуры напротив цены стояла галочка и сама цена, помогите кто знает

    Код:
    // ---ЗАПИСЬ ЦЕНЫ В НОМЕНКЛАТУРУ  ---начало----
    
    //Получим форму Номенклатуры
    Форма = НовыйЭлемент.ПолучитьФорму("ФормаЭлемента");
    //Пропишем цену в Номенклатуре
    // ВЗЯТА  из УПП формаэлемента Номенклатуры страница Цены Номенклатуры событие по кнопке "Перечитать текущие цены"
    //ЦеныНоменклатурыПеречитатьТекущиеЦены();
    
    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    | Цены.ТипЦен КАК ТипЦен,
    | Цены.Цена КАК Цена,
    | Цены.СпособРасчетаЦены КАК СпособРасчетаЦены,
    | Цены.Валюта КАК Валюта,
    | Цены.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    | Цены.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки
    |ИЗ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен В (&ТипыЦен)
    |    И Номенклатура = &Номенклатура И ХарактеристикаНоменклатуры = &ПустаяХарактеристика
    | ) КАК Цены
    |");
    
    Запрос.УстановитьПараметр("Дата", РабочаяДата);
    Запрос.УстановитьПараметр("ТипыЦен", СсылкаТипЦен); //Форма.ЦеныНоменклатуры.ВыгрузитьКолонку("ТипЦен")
    Запрос.УстановитьПараметр("Номенклатура", элементСсылка);
    Запрос.УстановитьПараметр("ПустаяХарактеристика", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
    
    Выборка11 = Запрос.Выполнить().Выбрать();
    Пока Выборка11.Следующий() Цикл
    // здесь НЕ ЗНАЮ как записать чтоб в карточке при открытии номенклатуры стояла галочка напротив цены "Розничная"
    // и стояла сама цена??? через Форма.ЦеныНоменклатуры не получается видимо в этом режиме она пустая, откуда она должна браться???
    СтрокаЦен = Форма.ЦеныНоменклатуры.Найти(Выборка11.ТипЦен, "ТипЦен");
    ЗаполнитьЗначенияСвойств(СтрокаЦен, Выборка11);
    КонецЦикла;
    
    // ---ЗАПИСЬ ЦЕНЫ В НОМЕНКЛАТУРУ  ---окончание----

    Вложения:

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