Имя: Пароль:
1C
1С v8
Программное заполнение документа "Установка цен номенклатуры" в УПП
,
0 discant
 
13.08.12
03:35
Доброго времени суток!
Установка цен номенклатуры заполняется из регистра накопления ПартииТоваровНаСкладе.
ниже код обработки:

Дата = '20120101';
ДокументОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокументОбъект.Дата = ТекущаяДата();

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
              |    ПартииТоваровНаСкладах.Период,
              |    ПартииТоваровНаСкладах.Регистратор,
              |    ПартииТоваровНаСкладах.НомерСтроки,
              |    ПартииТоваровНаСкладах.Активность,
              |    ПартииТоваровНаСкладах.ВидДвижения,
              |    ПартииТоваровНаСкладах.Номенклатура,
              |    ПартииТоваровНаСкладах.Склад,
              |    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
              |    ПартииТоваровНаСкладах.СерияНоменклатуры,
              |    ПартииТоваровНаСкладах.ДокументОприходования,
              |    ПартииТоваровНаСкладах.СтатусПартии,
              |    ПартииТоваровНаСкладах.Заказ,
              |    ПартииТоваровНаСкладах.Качество,
              |    ПартииТоваровНаСкладах.Организация,
              |    ПартииТоваровНаСкладах.Количество,
              |    ПартииТоваровНаСкладах.Стоимость,
              |    ПартииТоваровНаСкладах.КодОперации,
              |    ПартииТоваровНаСкладах.СписаниеПартий,
              |    ПартииТоваровНаСкладах.НомерКорСтроки,
              |    ПартииТоваровНаСкладах.ДокументДвижения,
              |    ПартииТоваровНаСкладах.ДокументДвиженияПериод,
              |    ПартииТоваровНаСкладах.НомерСтрокиСписанныхТоваров
              |ИЗ
              |    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
              |ГДЕ
              |    ПартииТоваровНаСкладах.Период <= &Дата";
Выборка = Запрос.Выполнить().Выбрать();



НовТипЦен = ДокументОбъект.ТипыЦен.Добавить();
НовТипЦен.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("00000000002");
//тчТовары = ДокументОбъект["Товары"];
Пока Выборка.Следующий() Цикл;
   Если Выборка.Количество > 1 Тогда
Цена = Выборка.Стоимость/Выборка.Количество;    
Иначе
Цена = Выборка.Стоимость;
КонецЕсли;
   Если Цена = 1 Тогда
Продолжить;
КонецЕсли;
Объект = ДокументОбъект.Товары.Добавить();
                            Объект.Номенклатура = Выборка.Номенклатура;
Объект.Валюта       = Справочники.Валюты.НайтиПоКоду("643");
Объект.ЕдиницаИзмерения = Выборка.Номенклатура.ЕдиницаХраненияОстатков;
ТипЦены = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
Объект.ТипЦен       = ТипЦены;
Объект["Цена"] = Цена;
Объект["СпособРасчетаЦены"] = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон;
КонецЦикла;
ДокументОбъект.Товары.Свернуть("Номенклатура", "");
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);    

При выполнении выходит сообщение:
{ВнешняяОбработка.ЗаполнениеЦенКонтрагентов.МодульОбъекта(63)}: Ошибка при вызове метода контекста (Записать)
по причине:
{ВнешняяОбработка.ЗаполнениеЦен.МодульОбъекта(63)}: Ошибка при вызове метода контекста (Записать)

по причине:

по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.УстановкаЦенНоменклатуры.МодульОбъекта(293)}: Преобразование значения к типу Булево не может быть выполнено



{ВнешняяОбработка.ЗаполнениеЦен.МодульОбъекта(63)}: Ошибка при вызове метода контекста (Записать)
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);    
{Документ.УстановкаЦенНоменклатуры.МодульОбъекта(293)}: Преобразование значения к типу Булево не может быть выполнено
       Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.СпособРасчетаЦены)

Что не так?
1 France
 
13.08.12
03:46
Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.СпособРасчетаЦены)
2 France
 
13.08.12
03:47
Объект["СпособРасчетаЦены"] = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон
3 FlashC
 
13.08.12
03:57
мдя.. один спросил, другой ответил(((
(0) Вам же чётко дали понять что записать не могу - что стоит проверить - позиция на док (или что там у Вас) есть или нет - как Вы представляете что то Записать, если нет позиции на объекте??? это по общему - так...
4 France
 
13.08.12
04:02
(3) чем вас, уважаемый знаток, ответ не устроил?
5 discant
 
13.08.12
09:39
А как пофиксить?
6 ДемонМаксвелла
 
13.08.12
09:48
Если Выборка.Количество() > 1 Тогда
7 discant
 
13.08.12
09:53
(6) А что здесь?
8 ДемонМаксвелла
 
13.08.12
09:53
увидел, это не то количество.

тогда в отладчике посмотри, как срабатывают условия в твоем коде.
9 discant
 
13.08.12
10:17
А как тогда получить объект документа установкаценноменклатуры?
Если пишу что-то типа
Док = Документы.УстановкаЦенНоменклатуры.НайтиПоНомеру("0000005");
Объект = Док.ПолучитьОбъект();
Ругается на то, что "Элемент не выбран".
Хочется посмотреть отладчиком, как заполнен документ и по образцу его заполнять...
Или может есть еще идеи?
10 ДемонМаксвелла
 
13.08.12
10:34
у тебя вообще в (0) красота. вначале ты хочешь из каждой партии взять цену, добавляешь строки в таблицу Товары. Получаешь по несколько цен на каждую номенклатуру, а потом - финт ушами - сворачиваешь таблицу, оставляя только колонку Номенклатура. И хочешь это чудо провести (вначале хотя бы просто запиши). Кроме того, если мне не изменяет память, в документе есть ещё одна таблица, которую нужно заполнять ценами.
11 discant
 
13.08.12
11:42
(10) Так задача получить все цены из этого регистра до 01.01.12 и установить цены для номенклатуры заполнив и проведя док установкаценноменклатуры... Как можно по-другому решить?
12 Sasha_H
 
13.08.12
11:51
Заполни способ расчета цены, ругается на его сравнение
13 Sasha_H
 
13.08.12
11:53
Подчеркну, ты заполняешь его в шапке, а надо еще и в строка ТЧ.
14 discant
 
13.08.12
11:53
(12) так вот же

Объект["СпособРасчетаЦены"] = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон;
15 hhhh
 
13.08.12
12:02
(14) а во эту строчку видели у себя?

ДокументОбъект.Товары.Свернуть("Номенклатура", "");
16 FIXXXL
 
13.08.12
12:06
(15) по-ходу это проверка была
расходимся :)
17 discant
 
13.08.12
12:09
Я наверно не правильно использую метод свернуть()?
В общем, если не юзать этот метод, то получается, что на одну и ту же позицию в запросе получается несколько цен... Хотелось бы как-то этого избежать и получить одну...
18 discant
 
13.08.12
12:11
Да, сейчас заполнил документ одной позицией... Он провелся, о при попытке его открыть получаем такую ошибку:
{Документ.УстановкаЦенНоменклатуры.Форма.ФормаДокумента.Форма(587)}: Поле объекта не обнаружено (цена)
       НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена;
19 FIXXXL
 
13.08.12
12:23
(17) получай ее сразу в запросе

а документ этот хад какой-то писал
в свое время тож на грабли наступал :)
20 discant
 
13.08.12
12:26
А что в запросе? Вроде ВЫБРАТЬ РАЗЛИЧНЫЕ есть...
21 hhhh
 
13.08.12
12:30
(20) ну там 24 поля. Какое из них тебе нужно различное? 1с - это же не искусственный разум, чтобы твои мысли на лету схватывать?
22 discant
 
13.08.12
12:32
(20) Мне нужно чтобы различалась номенклатура
23 Sasha_H
 
13.08.12
12:38
|    ПартииТоваровНаСкладах.НомерСтроки,
              |    ПартииТоваровНаСкладах.Активность,

это жестоко!!!
24 Sasha_H
 
13.08.12
12:39
по ходу задание не корректно понято и еще более чем хуже не корктно запущено в работу
25 Godofsin
 
13.08.12
12:40
(0)Чо надо-то? заполнить цены по последнему поступлению?
26 discant
 
13.08.12
12:55
(25) Надо взять все цены из регистра партии товаров на складах до 01 января 2012 года и заполнить ими цены номенклатуры...
27 ttk
 
13.08.12
13:19
а если встретятся несколько партий с разными ценами?
28 discant
 
13.08.12
13:46
То брать максимальную...
29 ttk
 
13.08.12
14:39
(28) тогда запрос переделывать надо
30 discant
 
13.08.12
15:55
Уменьшить кол-во полей выборки и поменять условия?
31 Popkorm
 
13.08.12
17:04
(0)это что такое,нафига?!:
ДокументОбъект.Товары.Свернуть("Номенклатура", "");
32 Popkorm
 
13.08.12
17:10
Если Выборка.Количество() > 0 Тогда
Если ЗначениеЗаполнено(Выборка.Стоимость)И ЗначениеЗаполнено(Выборка.Количество) Тогда
Цена = Выборка.Стоимость/Выборка.Количество;
Иначе