Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Данные по регистру при проведении документа 2 страниц V   1 2 >          
maxst22 Подменю пользователя
сообщение 11.06.14, 19:35
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Доброго времени суток. Платформа 8.3.4.465, Конфигурация "Управление торговлей для Украины", (2.3.20.1)

При проведении документа "Реализация товаров и услуг" хочу воспользоваться уже готовыми данными из регистра "Продажи", но
элементарный запрос не дает никаких результатов...
Движения документа по регистру "продажи" есть.

Свою процедуру (с запросом) ставлю в самом конце стандартной процедуры "ОбработкаПроведения()"

Данные по регистру "Партии товаров" получить удается, а "Продажи" - нет.
В чем может быть причина?

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


тоже самое с регистром "Продажи" - НЕ РАБОТАЕТ icon_cuss.gif
    "ВЫБРАТЬ
    |    Продажи.Номенклатура,
    |    Продажи.Количество,
    |    Продажи.Стоимость
    |ИЗ
    |    РегистрНакопления.Продажи КАК Продажи
    |ГДЕ
    |    Продажи.Регистратор = &Регистратор";

Понятно, в конце добавляю
Запрос.УстановитьПараметр("Регистратор", Ссылка);

Ardi Подменю пользователя
сообщение 11.06.14, 21:23
Сообщение #2

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Например
Движения по партиям записываются из подписки.
А по продажам допустим в этот момент движения не записаны.


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

rpodgornyy Подменю пользователя
сообщение 11.06.14, 21:35
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 139
Из: Киев
Спасибо сказали: 14 раз
Рейтинг: 0

Хм... из любопытства в рабочей базе прогнал запрос через консоль - всё работает... Посмотрите внимательнее движения по регистру "Продажи"...

maxst22 Подменю пользователя
сообщение 11.06.14, 22:20
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(rpodgornyy @ 11.06.14, 22:35) *
Хм... из любопытства в рабочей базе прогнал запрос через консоль - всё работает... Посмотрите внимательнее движения по регистру "Продажи"...


Через консоль понятно все будет работать, и у меня работает... проблема что не работает в модуле документа при проведении
В самом конце процедуры "ОбработкаПроведения" после всех движений, пишу свой запрос к обращению к регистру "Продажи"

вот так сказать весь текст моего азпроса + кусочек типового...
    // Движения по документу
    Если Не Отказ Тогда

        // Подготовим таблицу скидок для проведения.
        ТаблицаПоСкидкам = ПодготовитьТаблицуСкидок(ТаблицаПоТоварам, ТаблицаПоУслугам, СтруктураШапкиДокумента);

        ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоСкидкам, ТаблицаПоТаре,
                            ТаблицаПоУслугам, ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам, Отказ, Заголовок);
    КонецЕсли;

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


Процедура ДвиженияПоРегистрам() делает движения по регистру "Продажи" 100%

Vofka Подменю пользователя
сообщение 12.06.14, 7:43
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

rpodgornyy, когда вы делаете запрос в консоли, то движения документа уже записаны в базу.

maxst22, на момент когда вы выполняете запрос движения в базу ещё не записаны.

Спасибо сказали: rpodgornyy,

Rayne Подменю пользователя
сообщение 12.06.14, 7:45
Сообщение #6

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

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

Для каждого Запись из НаборЗаписей Цикл
    //анализируем информацию и что-то с ней делаем
КонецЦикла;


Или набор записей в таблицу значений выгрузить.

Также можно обратиться к коллекции движений документа: Движения.Продажи (дальше перебрать, выгрузить или что там еще).

Странно, что партии по вашему запросу доступны. У меня несколько раз возникала необходимость получать движения по партиям в обработке проведения - запросом не удалось (УТП, УПП).


И да - консолью проверять бесполезно, присоединяюсь, момент уже не тот... smile.gif


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

maxst22 Подменю пользователя
сообщение 12.06.14, 12:04
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Не получается sad.gif
Еще раз: вот кусок модуля процедуры "ОбработкаПроведения()"

 Процедура ОбработкаПроведения(Отказ, РежимПроведения)
         //                 ...............
        // прочие стандартные действия....
       //        ...........


    // в процедуре ДвиженияПоРегистрам(...) записываются движения в т.ч. по регистру "Продажи". Проверял даже в отладчике!
    // Конфигурация ТИПОВАЯ УТ для Украины!!! Ничего в движениях документа и тем более в глобальных процедурах НЕ менялось

    // Движения по документу
    Если Не Отказ Тогда

        // Подготовим таблицу скидок для проведения.
        ТаблицаПоСкидкам = ПодготовитьТаблицуСкидок(ТаблицаПоТоварам, ТаблицаПоУслугам, СтруктураШапкиДокумента);

        ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоСкидкам, ТаблицаПоТаре,
                            ТаблицаПоУслугам, ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам, Отказ, Заголовок);
                            
    КонецЕсли;
    
    // НЕ рабочий код:
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Продажи.Номенклатура,
    |    Продажи.Количество,
    |    Продажи.Стоимость
    |ИЗ
    |    РегистрНакопления.Продажи КАК Продажи
    |ГДЕ
    |    Продажи.Регистратор = &ТекДок";
    
    Запрос.УстановитьПараметр("ТекДок", Ссылка);
    тз = Запрос.Выполнить().Выгрузить();
    тз.ВыбратьСтроку();
    
    // Рабочий код:
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПартииТоваровНаСкладах.Номенклатура,
    |    ПартииТоваровНаСкладах.Количество,
    |    ПартииТоваровНаСкладах.Стоимость
    |ИЗ
    |    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
    |ГДЕ
    |    ПартииТоваровНаСкладах.Регистратор = &ТекДок";
    
    Запрос.УстановитьПараметр("ТекДок", Ссылка);
    тз = Запрос.Выполнить().Выгрузить();
    тз.ВыбратьСтроку();
    
    // совет от "Rayne"  (не сработало...)
    НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
    НаборЗаписей.Прочитать();
    
    Для каждого Запись из НаборЗаписей Цикл
        //анализируем информацию и что-то с ней делаем
        Сообщить("Тов. = "+Запись.Номенклатура+"; Стоимость = "+Запись.Стоимость);
    КонецЦикла;


Попробуйте кто-нибудь в типовой УТ такое сделать...
Может прикол в том, что "Продажи" - это регистр оборотов?

Почему хочу именно запросом, потому что на самом деле мне нужно вычислить довольно много всяких данных на основе уже сформированных движений по регистрам этого документа
там будет и "партии" и др. данные. Дальше мне надо будет записать полученные данные в собственный регистр...
Вот получается "споткнулся" в самом начале, на самом элементарном smile.gif.

Rayne Подменю пользователя
сообщение 12.06.14, 12:21
Сообщение #8

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

Обратись тогда к коллекции движений.
Для каждого Движение из Движения.Продажи Цикл
         //...
         //что-то делаем
КонецЦикла;


УТ ставить не буду ради "попробовать" smile.gif В УПП отладчиком коллекция движений видна.


Цитата
Не получается sad.gif


Ээ... А у меня получается. Ради интереса не поленилась написать кусок и проверить отладчиком, что у меня в наборе записей. Конфа УПП, серверный вариант. Не думаю, что по части регистра Продажи есть совсем уж кардинальные различия... Я через набор записей обращалась к регистру Партии в УТ. В обработке проведения.

А что у вас в наборе записей? Он пустой?


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

maxst22 Подменю пользователя
сообщение 12.06.14, 12:29
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Rayne @ 12.06.14, 13:21) *
обращалась к регистру Партии в УТ


так партии у меня тоже срабатывают. Не могу получить по "Продажи"

Rayne Подменю пользователя
сообщение 12.06.14, 12:34
Сообщение #10

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

Что-то тут не клеится smile.gif

Что в наборе записей в отладчике?
Что в коллекции движений Продажи в отладчике?

Продажи в этом плане проще регистра партий должны быть.


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

maxst22 Подменю пользователя
сообщение 12.06.14, 12:41
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

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


Все РАБОТАЕТ!!! ПОЧЕМУ??? Где волшебство?

Rayne Подменю пользователя
сообщение 12.06.14, 12:48
Сообщение #12

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

Видимо, разница все-таки есть... Стало интересно, проверила на УТ.

Движения.Продажи - заполнены, можно обратиться к ним.

Для каждого Движение из Движения.Продажи Цикл
   //...
КонецЦикла;


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

Спасибо сказали: maxst22, Powerman,

maxst22 Подменю пользователя
сообщение 12.06.14, 12:55
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Rayne @ 12.06.14, 13:48) *
Видимо, разница все-таки есть... Стало интересно, проверила на УТ.

Движения.Продажи - заполнены, можно обратиться к ним.

Для каждого Движение из Движения.Продажи Цикл
   //...
КонецЦикла;



Блин, ПОЛУЧАЕТСЯ!!!
а чего же тогда запрос не работает?

Буду дальше "долбать". ОЧЕНЬ нужно все это дело запросом вытаскивать... (ранее объяснял почему)

Rayne Подменю пользователя
сообщение 12.06.14, 12:56
Сообщение #14

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

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

Наверное, в разных конфигурациях в разное время вызывается процедура типа "ЗаписатьДвиженияДокументаВРегистр"...

А в чем разница, чем получить результат? Чем так принципиален запрос?


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

maxst22 Подменю пользователя
сообщение 12.06.14, 13:05
Сообщение #15

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Rayne @ 12.06.14, 13:56) *
Видимо, не записаны еще. Лучше не стоит в обработке проведения запросами обращаться к движениям по регистрам этого же документа. Надежнее взять либо набор записей или коллекцию движений.

Наверное, в разных конфигурациях в разное время вызывается процедура типа "ЗаписатьДвиженияДокументаВРегистр"...

А в чем разница, чем получить результат? Чем так принципиален запрос?


Так запрос пишу в самом конце процедуры. Уже все должно быть записано.
Где тогда (в какой момент времени) 1С записывает движения в регистр?
В процедуре ДвиженияПоРегистрам(...) вызывается процедура ДвиженияПоРегистрамУпр(...)
и вот в ней уже идет запись в "Продажи":
            Если Не Отказ Тогда
                Движения.Продажи.ВыполнитьДвижения();
            КонецЕсли;


И уже после всего этого я пытаюсь получить данные из "Продажи"

Ладно... тема пока открыта. Напишу, если получится через запрос решить ситуацию.

Большое спасибо "Rayne" за совет.

Rayne Подменю пользователя
сообщение 12.06.14, 13:11
Сообщение #16

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

Все же интересно узнать, чем принципиально получение данных запросом smile.gif


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

maxst22 Подменю пользователя
сообщение 12.06.14, 13:19
Сообщение #17

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Rayne @ 12.06.14, 14:11) *
Все же интересно узнать, чем принципиально получение данных запросом smile.gif


Единственное, что я заметил, так это то, что в запросе я указывал условие
    |ГДЕ
    |    Продажи.ДокументПродажи = &ТекДок";


Но, если мы выгружаем движения документа в тз
    тзПродажи = Новый ТаблицаЗначений;
    тзПродажи = Движения.Продажи.Выгрузить();
    тзПродажи.ВыбратьСтроку("рег. Продажи движения");


то там четко видно, что колонка "Регистратор" - пустая!!, а колонка "ДокументПродажи" - это измерение регистра - заполнена.

Переделал в запросе на
    |ГДЕ
    |    Продажи.ДокументПродажи = &ТекДок";


Но увы... не помогло sad.gif

Цитата(maxst22 @ 12.06.14, 14:17) *
Единственное, что я заметил, так это то, что в запросе я указывал условие
    |ГДЕ
    |    Продажи.ДокументПродажи = &ТекДок";


Сори, первоначально было
    |ГДЕ
    |    Продажи.Регистратор = &ТекДок";


Переделал на
    |ГДЕ
    |    Продажи.ДокументПродажи = &ТекДок";

Rayne Подменю пользователя
сообщение 12.06.14, 13:22
Сообщение #18

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 17 раз
Рейтинг: 0

maxst22, я ж спрашиваю не о безуспешных результатах, а почему данные, которые можно получить из коллекции движений, не напрягаясь, нужно получать именно запросом? Их точно так же можно обработать, как и выборку или выгрузку из запроса.



Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

maxst22 Подменю пользователя
сообщение 12.06.14, 16:14
Сообщение #19

Общительный
**
Группа: Пользователи
Сообщений: 48
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Rayne @ 12.06.14, 14:22) *
maxst22, я ж спрашиваю не о безуспешных результатах, а почему данные, которые можно получить из коллекции движений, не напрягаясь, нужно получать именно запросом? Их точно так же можно обработать, как и выборку или выгрузку из запроса.

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

rpodgornyy Подменю пользователя
сообщение 12.06.14, 20:17
Сообщение #20

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 139
Из: Киев
Спасибо сказали: 14 раз
Рейтинг: 0

А если параметр устанавливать:

Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);


Как вариант попробовать вынести запрос в отдельную процедуру или прописать в конце процедуры "ДвиженияПоРегистрам"...

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 9:39
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!