helpf.pro
Регистрация

1С7.7:ТиС 9.2 ПеремещениеТМЦ

bugor666
14.12.2010 17:08Прочитано: 4192
Добрый день!
Необходимо выбрать из документов ПеремещениеТМЦ последние цены. Это необходимо, так как документы ПереоценкаРозница не делались. Не знаю как лучше это сделать.
По сути, нужно выбрать все цены в последнем документе периода, к примеру от 30.11.2010, затем в предыдущем выбрать те, которых не было в последнем, и так далее, до тех пор, пока в таблице значений не будет столько строк, сколько наименований товаров перемещалось за определенный период.
В 1С 7.7 я пока дуб, поэтому буду рад примерам, хотя бы отдаленно похожим на то, что нужно мне.
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
14.12.2010 17:35Ответ № 1
(1) Как первый вариант пришедший в голову:
1. Запросом выбирай всю номенклатуру РАЗЛИЧНЫЕ из всех документов,
2. Далее выбирай документы в обратном порядке
3. По каждому документу ищешь номенклатуру без цены
и так пока вся цены не заполнишь
bugor666
15.12.2010 09:20Ответ № 2
У меня с запросами проблема. Я их толком то и в восьмерке не понимаю... *11 Алгоритм то я уже понял какой должен быть...
E_Migachev
15.12.2010 09:39Ответ № 3
(2) bugor666, там же есть конструктор отчетов используй его для создания запросов )

у меня в базе нет документов пперемещения, я сделал пример по поступлениям, выводит список номенклатуры(вот такой код мне выдал конструктор, вся номенклатура существующаяя в документах за указанный период выводится):
Код 1C v 7.x
 Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с (НачКвартала(ТекущаяДата())) по (КонКвартала(ТекущаяДата()));
|Номенклатура = Документ.ПоступлениеТМЦ.Номенклатура;
|Группировка Номенклатура упорядочить по Номенклатура.Наименование;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1)= 1 Цикл
// Заполнение полей Номенклатура
Таб.ВывестиСекцию("Номенклатура");
КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
bugor666
15.12.2010 09:41Ответ № 4
Благодарю! Сейчас попробую слепить...
bugor666
15.12.2010 10:52Ответ № 5
(3) E_Migachev, Осталась одна проблема, как заставить выбирать от конечной даты к начальной?
E_Migachev
15.12.2010 10:59Ответ № 6
(5) Зачем? вообще это регилируется через упорядочить
bugor666
15.12.2010 13:44Ответ № 7
Просто это все мне нужно для переноса остатков из ТиС9.2 в УТ10.3. В УТ при переносе сформировался документ "Переоценка товаров в рознице", в котором на один товар по две, три строки с разными ценами, созданными за весь период. Соответственно этот документ не может быть проведен из-за этих совпадений. Вот я и пытаюсь написать обработку, которая выберет из ТиС только последние цены. Все это вылезет в табличный документ. Я сохраню его в формате Excell, а в УТ я уже легко смогу сделать с этой таблицей все что угодно.

Все таки не могу понять как пользоваться упорядочиванием.
bugor666
15.12.2010 13:49Ответ № 8
(6) E_Migachev, Сделал группировку по номенклатуре, выдает в алфавитном порядке по номенклатуре. Но я не уверен, что цены попадают именно последние. Делаю группировку по дате документа, выдает по нескольку строк одного товара, с одинаковой ценой.

Код 1C v 7.x
 Процедура ПырымТырым()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ПырымТырым)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Цена = Документ.ПеремещениеТМЦ.Цена;
|Наименование = Документ.ПеремещениеТМЦ.Номенклатура;
|Единица = Документ.ПеремещениеТМЦ.Единица;
|Дата = Документ.ПеремещениеТМЦ.ДатаДок;
|Группировка Наименование без групп;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ПырымТырым");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка() = 1 Цикл
// Заполнение полей ПырымТырым
Таб.ВывестиСекцию("ПырымТырым");
КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("ПырымТырым", "");
КонецПроцедуры
E_Migachev
15.12.2010 14:08Ответ № 9
(8) так не получиться! Получай список номенлатуры как я в (3) далее выгружай ее в ТЗ
потом делай выборку документов в обратном порядке и для каждой номенклатуры без цены из ТЗ смотри - в документе указана ли цена!
bugor666
16.12.2010 11:22Ответ № 10
Код 1C v 7.x
 Док.ВыбратьПоПоследовательности(<Дата1>,<Дата2>,<КодПосл>)


Как указать обратную последовательность?
bugor666
16.12.2010 11:43Ответ № 11
...тупанул... нашел то что нужно. *05
bugor666
16.12.2010 15:08Ответ № 12
(6) E_Migachev, Все получилось! Благодарю!
E_Migachev
16.12.2010 16:30Ответ № 13
(12) пожалуйста ), а покажи готовый код *17
bugor666
17.12.2010 08:29Ответ № 14
(13) E_Migachev,
Код 1C v 7.x
 Перем тз;


//*******************************************
// Процедура генерации запроса ПырымТырым.
Функция ПырымТырым()
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ПырымТырым)
|Период с (ДатаЦен) по (ДатаЦен1);
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Номен = Документ.ПеремещениеТМЦ.Номенклатура;
|Единица = Документ.ПеремещениеТМЦ.Единица;
|Группировка Номен упорядочить по Номен.Наименование без групп;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат 0;
КонецЕсли;


Пока Запрос.Группировка() = 1 Цикл
// Заполнение полей ПырымТырым
тз.НоваяСтрока();
тз.Номен=Запрос.ЗначениеУпорядочивания(1,1);
тз.Единица=Запрос.Единица;

КонецЦикла;
// Вывод заполненной формы
Возврат 1;
КонецФункции


//*******************************************

Процедура Сформировать()
Перем н, Сч;
таб=СоздатьОбъект("Таблица");

Если ПырымТырым()=0 Тогда
Сообщить("ПырымТырым не пырымкает и не тырымкает");
Возврат;
КонецЕсли;

док=СоздатьОбъект("Документ.ПеремещениеТМЦ");
тз.ВыбратьСтроки();
Сч=1;
Пока тз.ПолучитьСтроку()=1 Цикл
док.ОбратныйПорядок(1);
док.ВыбратьДокументы(НачГода(ТекущаяДата()),Дата(2010,5,31));

Пока док.ПолучитьДокумент()=1 Цикл
док.ВыбратьСтроки();
Пока док.ПолучитьСтроку()=1 Цикл
Если док.Номенклатура.Наименование=СокрЛП(тз.Номен) Тогда
Если док.Номенклатура.ПометкаУдаления()=1 Тогда
Прервать;
КонецЕсли;
Код=док.Номенклатура.Код;
Номен=док.Номенклатура.Наименование;
Цена=док.Цена;
Единица=док.Единица;
таб.ВывестиСекцию("ТабЗ");
тз.УстановитьЗначение(Сч,"Цена",док.Цена);
Состояние("№"+Сч+" :"+Номен);
Прервать;
КонецЕсли;
КонецЦикла;
Если док.Номенклатура.ПометкаУдаления()=1 Тогда
Прервать;
КонецЕсли;
Если ПустоеЗначение(тз.Цена)=0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Сч=Сч+1;
КонецЦикла;
таб.ТолькоПросмотр(0);
таб.Показать();

КонецПроцедуры



Процедура ПриОткрытии()
ДатаЦен=НачГода(ТекущаяДата());
ДатаЦен1=ТекущаяДата();
тз=СоздатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка("Номен");
тз.НоваяКолонка("Единица");
тз.НоваяКолонка("Цена");

КонецПроцедуры
Подсказка: Для быстрого поиска ответов - используйте 'Поиск'
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.