Консультация № 140197
18.07.2008, 13:22
0.00 руб.
0 15 2
Время доброе.
Подскажите как решить следующую задачку:
Имеем клиента(реализатора ака магазин), по нему документ о инвентаризации на какое-то число, затем идут приходные-расходные накладные за какой-то период и затем снова документ об инвентаризации. Как сделать отчет с формированием в одной строке по номенклатурной позиции её начальный остаток (инвентаризация), приход клиенту(расходные накладные), возврат от клиента(приходные), конечный остаток(инвентаризация) и итог продаж. Документы инвентаризации находятся на границах перида временного интервала. Раздельно данные получаю, свести их в одну строку не могу
Посоветуйте пожалуйста что можно сделать.
З.Ы. С ТЗ не работал

Обсуждение

Неизвестный
18.07.2008, 15:24
общий
это ответ
Здравствуйте, Jon_joni!

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

В типовой Торговле для Украины видел такую строку: ДатаНач=ДатаДок-1;
Затем запрос делался на дату ДатаНач, т.е. не вечер предыдущего дня или утро текущего. Это тоже следует учитывать.

Ну и второй вариант, загнать все данные в таблицу с 5-ю колонками: Товар, НачОстаток, Приход, Расход, КонОстаток и свернуть её по товарам. После этого в каждой строчке у Вас будет готовая информация.

В Приложении ссылка на пример для первого варианта (с учетом особенностей моей конфигурации).

С уважением, Владимир.

Приложение:
http://rusfaq.ru/upload/8006.0 Кб доступен до 18.08.2008, 15:21
Неизвестный
18.07.2008, 15:44
общий
Jon_joni, напишите, пожалуйста, как Вы получеате данные по раздельности, а потом я помогу поместить их в ТЗ.
По ссылке Миста - Учебник 1С - Таблица значений Вы найдете основы работы с ТЗ. А опыт прийдёт.
Неизвестный
18.07.2008, 19:12
общий
Обозначу сразу некоторые моменты:
В 1С пока не силён, пришлось столкнуться по смене рода деятельности,
имеющаяся ИБ досталась в наследство, причём года 2.5 она была безконтрольна практически (человек её дописавший и поддерживающий уехал из города совсем, связи с ним нет)
корни у конфигурации походу растут из 7.5
База под SQL7
Даные получаю двумя вариантами:
1) из документов перебором нужных на даты(поскольку документы инвентаризации одининаковы, то в условия вписываються даты документов).
Документ инвентаризации (используют документ ввод остатков реалезатора) в начале и в окончании временного периода (+/- один день расхода-прихода документами обычно нет, до него просто не отправляют товар для того чтоб легче щитать, а после обычно пара дней на ввод).
Документы прихода-расхода приходная и расходная накладная для магазинов (ещё есть для опта)
Документ инвентаризации на окончании врменного интервала.
2) приход-возврат запросом по клиенту из регистра остатка товаров (данные по отправке и возврату достоверны, но не дают начальный и конечный остаток)

запрос по документам выполняется много быстрее , так что орентир на него пока.
Неизвестный
18.07.2008, 20:04
общий
это ответ
Здравствуйте, Jon_joni! Судя по вашему последнему комментарию запросы по документам вы уже освоили хотя "...в 1С пока не сильны..." как пишете , поэтому предлагаю следующий вариант создайте таблицу значений где каждая строка будет соответствовать товару и с колонками (вам придется освоить поиск товара по таблице значений, что просто):
1 товар - это понятно товар
2 (может две колонки отдельно для суммы и количества если это надо) начальный остаток - сюда попадут даные из табличной части документа инвентаризация на начало периода
3 (смотри п.2) приход - сюда плюсуем приходы товара для каждой приходной и возвратной накладной
4 (смотри п.2) расход - сюда плюсуем расходы товара для каждой расходной накладной
5 (смотри п.2) конечный остаток - сюда попадут даные из табличной части документа инвентаризация на конец периода

Первым выбирается документ Инвентаризация на начало периода и количество строк в таблице значений будет равно количеству строк документ Инвентаризация на начало периода , при этом заполняется поля начального остатка в строках товара,
Потом перебираем товары документы приходов, расходов и возвратов за период, если товар уже есть в таблице то плюсуем соответствующие поля строки для данного товара , если такого товара в таблице нет создаем новую строку и заполняем из текущего документа соответствующие поля строки.
Поля конечного остатка заполняются по документу Инвентаризвция на конец периода.
Косяк данного варианта в том что начало и конец периода отчета не могут быть произволными и должны соответствовать документам Инвентаризация , но иначе без запроса по регистрам никак.
Я так тихо подозреваю что вы хотели бы получить здесь готовую обработку, но без наличия файла конфигурации 1Cv7.MD это бесполезно.
Изучайте 1С и будет вам счастье. Удачи.
Неизвестный
18.07.2008, 20:06
общий
Чуть прокосячил возвраты должны идти с расходами или минусовать приход думайте сами как лучше
Неизвестный
19.07.2008, 10:34
общий
?
необходимый итог таков (его уже описывал)
начальный остаток (инвентаризация)+отправка клиенту(расходные накладные)-возврат(приходные)-конечный остаток(инвенаризация)=нужное
Неизвестный
21.07.2008, 10:30
общий
Александр Николаевич
Пока что выходит так:
(используюя сие накорябанное)
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Клиент = Документ.ВводОстатковРеализатора.Клиент, Документ.ПриходнаяНакладнаяС.Клиент, Документ.РасходнаяНакладнаяС.Клиент;
|ТоварНачОст = Документ.ВводОстатковРеализатора.Товар;
|ТоварОтправ = Документ.РасходнаяНакладнаяС.Товар;
|ТоварВозврат = Документ.ПриходнаяНакладнаяС.Товар;
|КоличествоНачОст = Документ.ВводОстатковРеализатора.Количество;
|КоличествоОтправ = Документ.РасходнаяНакладнаяС.Количество;
|КоличествоВозврат = Документ.ПриходнаяНакладнаяС.Количество;
|СтоимостьОстаток = Документ.ВводОстатковРеализатора.Стоимость;
|ТоварКонОст = Документ.ВводОстатковРеализатора.Товар;
|КоличествоКонОст = Документ.ВводОстатковРеализатора.Количество;
|ДатаДок = Документ.ВводОстатковРеализатора.ДатаДок;
|Функция КоличествоОстатокСумма = Сумма(КоличествоНачОст) когда(ДатаДок = ВыбНачПериода);
|Функция КоличествоОтправСумма = Сумма(КоличествоОтправ);
|Функция КоличествоВозвратСумма = Сумма(КоличествоВозврат);
|Функция КоличествоКонОстСумма = Сумма(КоличествоКонОст) когда(ДатаДок = ВыбКонПериода);
|Группировка ТоварНачОст упорядочить по ТоварНачОст.Наименование без групп;
|Группировка ТоварОтправ упорядочить по ТоварОтправ.Наименование без групп;
|Группировка ТоварВозврат упорядочить по ТоварВозврат.Наименование без групп;
|Группировка ТоварКонОст упорядочить по ТоварКонОст.Наименование без групп;
|Условие(Клиент = ВыбКлиент);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка() = 1 Цикл
// Заполнение полей Сформировать
Таб.ВывестиСекцию("Сформировать");
КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры


На выходе имеем табличку из 8 колонок (пока так хочеться)
Загвозка в том что документы инвентаризации располагаются в таблице отчёта соответственно по строке товара, а вот расход приход сами по себе и по отдельности :-(

таблица выглядит так - 8 столбцов (всего 9, последний под сумму денежную)
1-4 - наименование товара (начостаток отправлено возврат конечный) 5-8 количество соответственно

при запросе в таком виде как по коду выходит (5-8 опускаю так как они от 1-4 зависят):
1,2,4 пустые, заполнена 3 Возврат
далее после неё
1,3,4 пустые, заполнена 2 Отправленно
затем 2,3 пустые а 1,4 заполнены соответственно по номенклатуре построчно из документов инвентаризации , то есть 1,4 - товар, 5 - колво из первого документа 8 из второго.



Неизвестный
22.07.2008, 13:10
общий
Усё, всем спасибо, уже решил, думал правильно, но не додумал малость. Без использования ТЗ.
Таким макаром:
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Клиент = Документ.ПриходнаяНакладнаяС.Клиент, Документ.РасходнаяНакладнаяС.Клиент, Документ.ВводОстатковРеализатора.Клиент;
|Товар = Документ.РасходнаяНакладнаяС.Товар, Документ.ПриходнаяНакладнаяС.Товар, Документ.ВводОстатковРеализатора.Товар;
|КоличествоПрих = Документ.ПриходнаяНакладнаяС.Количество;
|КоличествоРасх = Документ.РасходнаяНакладнаяС.Количество;
|КоличествоНач = Документ.ВводОстатковРеализатора.Количество;
|КоличествоКон = Документ.ВводОстатковРеализатора.Количество;
|ДатаДок = Документ.ВводОстатковРеализатора.ДатаДок;
|Функция КоличествоНачСумма = Сумма(КоличествоНач) когда(ДатаДок = ДатаПред);
|Функция КоличествоРасхСумма = Сумма(КоличествоРасх);
|Функция КоличествоПрихСумма = Сумма(КоличествоПрих);
|Функция КоличествоКонСумма = Сумма(КоличествоКон) когда(ДатаДок = ДатаПосл);
|Группировка Товар без групп;
|Условие(Клиент = ВыбКлиент);
|"//}}ЗАПРОС

Неизвестный
23.07.2008, 12:59
общий
В принципе, почти никаких различий от моей обработки http://rusfaq.ru/upload/800, но Функции с условием у меня не было :)

Раз разобрались - это хорошо. Поздравляю с очередным шагом в освоении 1С
Неизвестный
23.07.2008, 13:20
общий
Как сказать, у меня отбор только по документам, без регистров. а условия ввёл из-за того что документ последней ревизии может быть проведён позже даты учёта.
Неизвестный
23.07.2008, 15:52
общий
Вчера я хотел попоравить Ваш запрос, Но Вы сделали сами. Я хотел акцентировать на том, что не нужно было создавать переменные НачТовар, КонТовар... для каждого конкретного вида документа. Как раз эта конструкция Вас и запутала. Но всё хорошо, что Вы разобрались.
Неизвестный
23.07.2008, 16:55
общий
Просто данные о начальном кол-ве товара и о конечном брались напрямую из однотипных документов, но отличных от документо
в расхода-прихода, потому и вводил их.
Неизвестный
23.07.2008, 16:56
общий
а потом сидел делал другой отчёт и осенило :-)
Неизвестный
23.07.2008, 16:56
общий
Спасибо всем за уделённое время
Неизвестный
23.07.2008, 17:06
общий
Пожалуйста. Для нас это тоже полезно - сидим-сидим, решаем чужие задачки и заодно осеняет как свои сделать. :)
Форма ответа