Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
12 Дек 2017, 21:11
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Списание материалов  (Прочитано 2630 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pavel-67

  • *
  • Сообщений: 23
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-05
  • Сайт: 
  • Профессия: Ученик 1С
Доброго времени суток! Подскажите кто знает, я еще плохо понимаю все взаимосвязи работы 1с Бухгалтерия версия 8.2, как можно списывать материал с учета на складе после проведения выполненных работ. Хочу что бы списывался материал после проведения акта производственных работ автоматически. Насколько я понимаю должен быть создан документ в котором отображается номенклатура и объем списанного товара. Если не сложно скиньте легкий пример. Спасибо все кто откликнется.  И второй вопрос который меня очень мучает это код проверки остатков на складе ? Как его реализовать в программном коде?


Оффлайн Pavel-67

  • *
  • Сообщений: 23
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-05
  • Сайт: 
  • Профессия: Ученик 1С
Насколько я понимаю получить остатки можно так:

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

Оффлайн Pavel-67

  • *
  • Сообщений: 23
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-05
  • Сайт: 
  • Профессия: Ученик 1С
1С:Предприятие 8.2 (8.2.19.83) Бухгалтерия предприятия, редакция 2.0 (2.0.54.13)
Что никто не знает?
Я перерыл кучу форумов, примеров, но все они ссылаются на Документ.Расходная.Товары которых в документах у меня нет, РегистрНакопления.ОстаткиТоваров которых так же нет. Может кто то сможет за деньги разъяснить или написать? Мне нужно функцией просто проверить остаток номенклатуры на определенный день, в ответ получить количество. Может это очень сложно?
Добавлено: 16 Сен 2014, 22:52

Спасибо все специалистам!! (
Если кто-то ищет решение подобной задачи, то я реализовал ее так:
Функция ПолучитьОстаток(Номенклатура, Дата)
   
   //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
     КоличествоНаскладе = 0;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ХозрасчетныйОстатки.Субконто1.Представление КАК Наименование,
   |   ХозрасчетныйОстатки.КоличествоОстаток КАК Остаток,
   |   ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
   |   ЦеныНоменклатурыСрезПоследних.Регистратор.Ссылка КАК ДокументЗарегистрировавшийЦену
   |ИЗ
   |   РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , , ) КАК ХозрасчетныйОстатки
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
   |      ПО ХозрасчетныйОстатки.Субконто1.Код = ЦеныНоменклатурыСрезПоследних.Номенклатура.Код";

   
   
   Запрос.Параметры.Вставить("Номенклатура", Номенклатура);
   Запрос.Параметры.Вставить("Дата", Дата);


   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      // Вставить обработку выборки ВыборкаДетальныеЗаписи
      Если ВыборкаДетальныеЗаписи.Наименование = Номенклатура.Наименование Тогда
         КоличествоНаскладе =  ВыборкаДетальныеЗаписи.Остаток;
      КонецЕсли;
   КонецЦикла;
    
     возврат КоличествоНаскладе;
   
КонецФункции

Последний раз редактировалось: Pavel-67; 16 Сен 2014, 22:52. Причина: Объединение сообщений

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Спасибо все специалистам!! (

Что вы сразу в истерику.
Молчат - значит либо нечего сказать, либо в данный период нашлись другие дела (семья, работа и пр.) помимо форума :thwrt:

Остатки получаете в корне неправильно.
1. А если у номенклатуры еще нет записи в регистре ЦеныНоменклатуры? Остаток не получите, хотя он будет
2. Остатки по регистру бухгалтерии получаете по всем счетам и по всей номенклатуре, что ооооооочень неоптимально.
3. В запрос передаете параметр "Номенклатура"... Зачем? В самом запросе его так и не используете.
4. Далее в обходе выборки делаете отбор по НАИМЕНОВАНИЮ номенклатуры... А если будет несколько номенклатур с одинаковым наименованием? Получите остаток ПОСЛЕДНЕГО. А если у вас КОНТРАГЕНТ будет называться как одна из НОМЕНКЛАТУР и будет остаток по счету взаиморасчетов?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
на основе образной базы...
так что допилите под себя...

Функция ОстаткиНоменклатуры(Номенклатура, Дата)

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

КонецФункции
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Pavel-67

  • *
  • Сообщений: 23
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-05
  • Сайт: 
  • Профессия: Ученик 1С
на основе образной базы...
так что допилите под себя...

Функция ОстаткиНоменклатуры(Номенклатура, Дата)

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

КонецФункции


К сожалению у меня данный код не работает.

Поле объекта не обнаружено (ВидыСубконто)
   видысубконто.Добавить(планывидовхарактеристик.ВидыСубконто.Материалы); 

{(6, 4)}: Таблица не найдена "РегистрБухгалтерии.Управленческий.Остатки"
<<?>>РегистрБухгалтерии.Управленческий.Остатки(&дата, , , Субконто1 = &Номенклатура) КАК УправленческийОстатки


Я слегка доработал функцию по недостаткам:


Функция ОстаткиНоменклатуры(Номенклатура, Дата)

   //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
     КоличествоНаскладе = 0;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   *,
   |   ХозрасчетныйОстатки.Субконто1.Представление КАК Наименование
   |ИЗ
   |   РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , , ) КАК ХозрасчетныйОстатки
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
   |      ПО ХозрасчетныйОстатки.Субконто1.Код = ЦеныНоменклатурыСрезПоследних.Номенклатура.Код";

   Запрос.Параметры.Вставить("Дата", Дата);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      
      Если Не ВыборкаДетальныеЗаписи.Наименование = Null Тогда   
         
      Если ВыборкаДетальныеЗаписи.Субконто1.Код = Номенклатура.Код Тогда
         КоличествоНаскладе = КоличествоНаскладе +  ВыборкаДетальныеЗаписи.КоличествоОстаток;
      КонецЕсли;
      
      
      
      
      КонецЕсли;   
      
   КонецЦикла;
    
     возврат КоличествоНаскладе;

КонецФункции


1. Тут я убрал не используемый параметр
2. Увеличил конкретику номенклатуры (проверка по коду)
3. Исправил не точность счета (т.е. функция теперь считает не последний результат а сумму)

Может функция и написана не профессионально, но она работает, я ее сверял с инвентаризацией склада.

Добавлено: 21 Сен 2014, 13:02

Что касаемо таблиц, регистров и параметров, то у меня стандартная версия, без изменений 1С:Предприятие 8.2 (8.2.19.83) Бухгалтерия предприятия, редакция 2.0 (2.0.54.13). Инвентаризация по складам происходит, значит есть стандартный алгоритм для данной функции. К сожалению я ее не знаю написал функцию по наитию. 

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Представьте, что вы - директор школы и вам надо выяснить, сколько денег дала мама Иванову Ване из 1го б на обед.
Вы:
1. Сгоняете ВСЮ школу с 1го по 11ый на площадь перед школой
2. Начинаете опрашивать каждого школьника: "Ты Ваня Иванов?"
3. На N-ый раз Ваня вам попадается и вы наконец-то узнаете, сколько у него денег в кармане

Да, я не спорю, результата вы добились, задача решена... Но МЕТОД!
А у вас все примерно так и происходит!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Yura063

  • *****
  • Сообщений: 1045
  • РЕПУТАЦИЯ: 136
  • КПД: 13%
  • Регистрация: 2010-11-15
  • Сайт: yuis.ru
  • Профессия: Программист 1С
Pavel-67, зачем создавать велосипед! Посмотрите как это реализовано в инвентаризации и разберите, если вас не устраивает, что вам люди пишут. 
Помогли, отблагодари!

Оффлайн Pavel-67

  • *
  • Сообщений: 23
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-05
  • Сайт: 
  • Профессия: Ученик 1С
Pavel-67, зачем создавать велосипед! Посмотрите как это реализовано в инвентаризации и разберите, если вас не устраивает, что вам люди пишут.

Добрый день. Велосипед никто и не создает. Была поставлена задача написать функцию которая по исходным данным выдает количественный остаток на момент времени. Посмотреть процесс инвентаризации можно, но человеку который только начинает разбираться все этим тяжка, поэтому я обратился к форуму за помощью. В ответ я получил только замечание от модератора по поводу истерики, и вариант функции который у меня не пошел (о чем я и писал). А сейчас Ваша реплика больше походит на поддакивания модератору.

Извините все специалисты которых я обидел тем, что в вопросе помочь с не сложной функцией (как я понимаю из реплик) мене просто указали на то что я это не понимаю. Извините еще раз Многоуважаемые специалисты.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Внимание, правильный ответ. теперь применительно к Бухгалтерии предприятия (правда 3.0, но надеюсь не суть)

Функция ОстаткиНоменклатуры(Номенклатура, Дата)

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

КонецФункции

Pavel-67, никто на вас не обижался. просто хотел не просто вывалить на вас портянку с кодом, а чтобы вы хоть немного в нем понимали...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
169 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
55 Сообщений
alex0402
49 Сообщений
andron81_81
42 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 318
  • Точка Скрытых: 0
  • Точка Пользователей: 7
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal