• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Автоматизация создания документа "Установка цен номенклатуры&quot

  • Автор темы Guest
  • Дата начала
G

Guest

Необходимо автоматически создавать документы "Ценообразование" -> "Установка цен номенклатуры".... документ создать непроблема (стандарт)

Код:
Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Док.Записать();

А вот как дальше быть если я пишу следующее:

Код:
Док.Дата = ТекущаяДата();	
Док.ТипыЦен.Добавить().ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");

то в поле "Тип Цен" устанавливается только 1 тип цен....
Вопросы:
1. как выбрать сразу несколько типов цен?
2. как обратиться к табличной части поля(когда будет 2 типа цен) и заолнить цены выбранной номенклатуры????
 
G

Guest

Ладно... с первым пунктом я мало-мальски разобрался и сделал....
По второму, увидел в конфиге, чтоидут записи в регистр Сведений ЦеныНоменклатуры.... как туда можно загнать эти самые записи.. через Движение или как??? Опять-таки ссылку на ТипЦен как в регистре прописать правильно?
 
W

WildAnther

через движение. у регистра ставиш регистратором документ с которым ты оперируеш и потом в документе в конструкторе движений настраиваеш.
ссылку. просто создай ресурс с типом ссылка наверно.
 
G

Guest

Вот что получилось... однако при проведении документа данные из регистра не попадают в табл часть док-та, а попросту исчезают из регистра... как их связать правильно???
Код:
	Док.Дата = ТекущаяДата();	
Док.ТипыЦен.Добавить().ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");
Док.Записать(РежимЗаписиДокумента.Запись);

НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Док.Ссылка);
НаборЗаписей.Прочитать();

НоваяЗапись = НаборЗаписей.Добавить();	 	
НоваяЗапись.Период = Док.Дата;
НоваяЗапись.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");
НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Nokia 7600");
НоваяЗапись.Регистратор = Док.Ссылка;
НоваяЗапись.Цена = 4000;
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию("руб.");
НоваяЗапись.ПроцентСкидкиНаценки = 40;
НоваяЗапись.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
НоваяЗапись.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип;
НаборЗаписей.Записать();

Тоже самое сделал через Свойство Движение.... Результат Аналогичный =( Вот пример кода:
Код:
	Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Док.Дата = ТекущаяДата();	
Док.ТипыЦен.Добавить().ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");

Движение = Док.Движения.ЦеныНоменклатуры.Добавить();
Движение.Период = Док.Дата;
Движение.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная");
Движение.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Nokia 7600");
Движение.Цена = 400;
Движение.Валюта = Справочники.Валюты.НайтиПоНаименованию("руб.");
Движение.ПроцентСкидкиНаценки = 40;
Движение.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
Движение.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип;
//Движение.Регистратор = Док.Ссылка;

Док.Записать(РежимЗаписиДокумента.Проведение);
 
W

WildAnther

Подожди подожди дак тебе надо ИЗ регистра в ДОКУМЕНТ?
 
G

Guest

Вобще смысл в том чтобы перенести цены номенклатуры из БД и создать програмно документ "Цстановка цен".... а откуда будет регистр создаваться мне вобщем без разницы...
Дык в чем ошибка моя????
 
T

tanat

В отсуствствии знаний.
Регистр должен быть уже создан - это какбы некое хранилище данных, в которое и будете складывать свои значения цен.
НайтиПоНаименованию - это что, для кажэдой номенклатуры так будет? Не проще использовать табличную часть документа?
 
G

Guest

Как создан регистр??? ему надо обязательно указать регистратор! А если док-нт есче не создана что тогда указывать в качестве онного???
Так всетаки как правильн заполнить данными этот документ... почему регистры пропадают, кода я его провожу и не отображаются в документе???
 
T

tanat

Проавдает не регистр, а движения по регистру по данному регистратору. И вы для себя уясните, что объект в системе уже есть. ( в конфигураторе есть документ "установкаЦенНоменклатуры"), а вот движения сами идут уже по конкретному документу, созданному в пользовательском режиме. Вы путаете базоыве понятия. Настоятельо рекомендую почитать литературу( гдето на форуме точно были ссылки, зайти на миста.ру - там почитать).

Я так понял, что вам поставлена задача - автоматизировать установку цен номенклатуры? в самом документе все процедуры, переменные и функции уже есть.Тебе нужно лишь програмно заполнить документ и правильно задействовать существующие процедуры-функции.
 
G

Guest

Вроде шо-то получилось.... обатился к табличной части документа и заполнил цены....
 
W

WildAnther

Блин дак у тебя и регистр не создан.
Сначала добавляеш новый регистр Выбираеш ему измерения ресурсы вообщем те данные которые ты хочеш хранить тут
Потом в созданом регистре ставиш что он подчененый регистратору, и выставляеш регистратора(твой документ) потом в документе
Делаеш "движение" конструктором выбираеш всё что надо и смотриш там код может чего сам пишеш. и всё как бы.. Типовым способом так.
А при проведение он сам создает запись в регистре. а как бы без регистра то нифига не сделаеш...
Если конечно я тебя правильно понял.=)
 
T

tanat

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

примерно так.

А движения будут формироваться при записи документа. и ничего тебе уже прописывать не надо. Конфа, я так понял - УТ?
 
G

Guest

Благодарю за подсказки... вроде получилось что-то.... сделал обращение к табличной части док-та (в ней и был косяк)... он сам регистры при проведении создает как ему надо.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!