7.7 Обработка на основание инвентаризаций сделать оприходование

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Raideres, 2 июн 2017.

  1. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    360
    Симпатии:
    1
    Баллы:
    29
    1с 7.7. ТИС мб есть у кого то Обработка чтобы взять за определенный период инвентаризации и сделать на основание оприходования.
  2. Бухгалтерский угодник
    Online

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.094
    Симпатии:
    489
    Баллы:
    104
    Подобная обработка специфична. Вряд ли есть. Пишется за 5 минут. Максимум за 10
  3. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    360
    Симпатии:
    1
    Баллы:
    29
    хз мне кажется дольше
    Обрезаю базу 1с 7.7. ТиС
    В ней ужасно много складов и фирм хотелось бы чтот придумать чтобы сделать автоматически инвентаризацию по всем складам и фирмам и на основание ее сделать оприходование
    обрезаю базу на 01 01 17 а инвентаризации делаю на 31 12 16..
    мб есть какой то более простой вариант но я его незнаю
  4. Бухгалтерский угодник
    Online

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.094
    Симпатии:
    489
    Баллы:
    104
    А для чего вам нужна при обрезке инвентаризация?
    Выровнять остатки на начало года?
    Не годится.. Если вы удаляете документы на 31.12.16 вам нужно делать ввод остатков, а не инвентаризацию.

    Все это делается так
    1) Запрос к регистру остатков в разрезе складов/фирм
    2) Заполнение документов ввода остатков
    3) Удаление документов за период
    4) Проведение ввода остатков
    5) Перепроведение базы с начала года
  5. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    360
    Симпатии:
    1
    Баллы:
    29

    а я делал по другому
    я делал инвентаризацию по складам и фирмам
    удалял учетное количество обработкой
    делал оприходование


    Вы это делали вручную или обработкой если обработкой можете поделиться?
    1) Запрос к регистру остатков в разрезе складов/фирм
    2) Заполнение документов ввода остатков
  6. Бухгалтерский угодник
    Online

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.094
    Симпатии:
    489
    Баллы:
    104
    Обработка индивидуальна, т.к. у меня конфигурация далеко не типовая... Смысла в ней вам будет мало.
    Запрос по остаткам через конструктор пишется за 3 минуты.
    Ну и заполняйте в цикле вывода в отчет результатов запроса ваши документы...
  7. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    360
    Симпатии:
    1
    Баллы:
    29
    хотя бы как пример посмотрел бы
  8. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    360
    Симпатии:
    1
    Баллы:
    29
    чет за 10 минут не получилось=( уже второй час пробую
  9. Бухгалтерский угодник
    Online

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.094
    Симпатии:
    489
    Баллы:
    104
    Выкладывайте что у вас там получилось.. Посмотрим где ошибка
  10. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    360
    Симпатии:
    1
    Баллы:
    29
    Вот с чего я начал делать

    Код:
    //*******************************************
    Процедура Сформировать()
       
        ДокОснование = СоздатьОбъект("Документ.ИнвентаризацияТМЦ");
        ДокОснование.НайтиДокумент(СсылкаНаОбъект);
       
        Оприход=СоздатьОбъект("Документ.ОприходованиеТМЦ");
        Оприход.Новый();
       
        Оприход.ДатаДок    = ДокОснование.ДатаДок;
        Оприход.Склад    = ДокОснование.Склад;
        Оприход.Фирма    = ДокОснование.Фирма;
        Оприход.Валюта    = ДокОснование.Валюта;
        Оприход.Проект    = ДокОснование.Проект;
    
        Оприход.Курс = ДокОснование.Курс;
        Оприход.Курс = ДокОснование.Кратность;
       
        ВремВидТМЦ    =    ВосстановитьЗначение("ВидТМЦПоУмолчанию");
        Если ПустоеЗначение(Оприход.ВидТМЦ)=1 Тогда
            ВремВидТМЦ = Перечисление.ВидыТМЦ.Товар;
        КонецЕсли;
       
        //Если ТипЦен.найтиПоКоду("00002") = 1  Тогда
        //    Оприход.ТипЦен = ТипЦен.ТекущийЭлемент();
        //КонецЕсли;
        // Цену заполним из справочника
        Если ПустоеЗначение(Оприход.ТипЦен) = 0 Тогда
           
            // получим цену
            Цена = глПолучитьЦену(ДокОснование.Номенклатура, ДокОснование.ТипЦен, ДокОснование.ДатаДок, ДокОснование.Единица, ДокОснование.Валюта, ДокОснование.Курс, ДокОснование.Кратность)
        Иначе   
            Цена = 0; // нет типа цен, нет и цены
        КонецЕсли;
       
        Оприход.Комментарий="##Создано автоматически";        
       
       
        Состояние("Перебор строк документа!");
        Оприход.УдалитьСтроки();
       
    
       
        Пока ДокОснование.ПолучитьСтроку()=1 Цикл
           
            Оприход.НоваяСтрока();
            Оприход.Количество=ДокОснование.Количество;
            Оприход.Номенклатура=ДокОснование.Номенклатура;
            Оприход.Единица=ДокОснование.Единица;
            Оприход.ВидТМЦ = ВремВидТМЦ;
           
            Оприход.Коэффициент=ДокОснование.Коэффициент;
           
           
           
            ЦенаЦены = 0;
            ТовЦена =  глВернутьЦену(Оприход.Номенклатура, Оприход.ТипЦен, Оприход.ДатаДок, ЦенаЦены, Оприход.Единица, Оприход.Валюта);
            Оприход.Цена = глФРМ(ЦенаЦены);
            Оприход.Сумма = Оприход.Цена*Оприход.Количество;
        КонецЦикла;
       
        Оприход.Записать();
        //Оприход.Провести();
    КонецПроцедуры
  11. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    360
    Симпатии:
    1
    Баллы:
    29
    Вот что в итоге вышло..
    не заполняет шапку на основание и не работает процедура создание партии незнаю как правильно ее сделать
    еще вопрос по дате документа он не дает мне сделать 31.12.16
    тип номер документа не уникален.

    Код:
    //*******************************************
    Процедура Сформировать()
        Перем ОприходованныеКоличества;
        Перем ВремЦена, ЕдЦены, ВалютаЦены; // для получения цеы из справочника
    
        ДокОснование = СоздатьОбъект("Документ.ИнвентаризацияТМЦ");
        ДокОснование.НайтиДокумент(СсылкаНаОбъект);
    
        Датадок=ДокОснование.ДатаДок;
        // сформируем список товаров,
        ТекстЗапроса = "//{{ЗАПРОС(ПредСписание)
        |Период с '01.01.1990' по ДатаДок;
        |Без итогов;
        |Основание = Документ.ОприходованиеТМЦ.ДокОснование;
        |Товар = Документ.ОприходованиеТМЦ.Номенклатура;
        |Колво = Документ.ОприходованиеТМЦ.Количество;
        |Коэфф = Документ.ОприходованиеТМЦ.Коэффициент;
        |Функция ВсегоКолво = Сумма(Колво);
        |Группировка Товар без групп;
        |Группировка Коэфф;
        |Условие(Основание = ДокОснование);
        |"//}}ЗАПРОС
        ;
    
        Запрос = СоздатьОбъект("Запрос");
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            //Возврат "Ошибка при отборе товаров.";
        КонецЕсли;
        Запрос.Выгрузить(ОприходованныеКоличества);
    
    
    
        Оприход=СоздатьОбъект("Документ.ОприходованиеТМЦ");
        Оприход.Новый();
        //глЗаполнитьШапкуНаОсн(Оприход.ТекущийДокумент(), ДокОснование, "Покупка");
        Оприход.ДатаДок    = дата('01.01.2017');//ДокОснование.ДатаДок;
        Оприход.Склад    = ДокОснование.Склад;
        Оприход.Фирма    = ДокОснование.Фирма;
        Оприход.Валюта    = ДокОснование.Валюта;
        Оприход.Проект    = ДокОснование.Проект;
        Оприход.Автор    = ДокОснование.Автор;
        Оприход.Курс = ДокОснование.Курс;
        Оприход.Курс = ДокОснование.Кратность;
    
    
    
        ВремВидТМЦ    =    ВосстановитьЗначение("ВидТМЦПоУмолчанию");
        Если ПустоеЗначение(Оприход.ВидТМЦ)=1 Тогда
            ВремВидТМЦ = Перечисление.ВидыТМЦ.Товар;
        КонецЕсли;
    
    
        ТаблицаДокумента = СоздатьОбъект("ТаблицаЗначений");
        ДокОснование.ВыгрузитьТабличнуюЧасть(ТаблицаДокумента);
    
    
        ТаблицаДокумента.ВыбратьСтроки();
        Пока ТаблицаДокумента.ПолучитьСтроку()=1 Цикл
            Если (ТаблицаДокумента.КоличествоУчет < ТаблицаДокумента.Количество) Тогда
                Номенклатура = ТаблицаДокумента.Номенклатура;
                Количество = ТаблицаДокумента.Количество - ТаблицаДокумента.КоличествоУчет;
                // поищем в таблице уже списанных количеств
                Поз = 0;
                Пока (ОприходованныеКоличества.НайтиЗначение(Номенклатура, Поз, "Товар") = 1) и (Количество > 0) Цикл
                    ОприходованныеКоличества.ПолучитьСтрокуПоНомеру(Поз);
                    // пересчитаем количество в единицу измерения инвентаризации
                    СписКолво  = ОприходованныеКоличества.ВсегоКолво * ОприходованныеКоличества.Коэфф /
                                 ?(ПустоеЗначение(ТаблицаДокумента.Коэффициент) = 1, 1, ТаблицаДокумента.Коэффициент);
                    ПогашКолво = Мин(Количество, СписКолво);
                
                    Если ПогашКолво >= СписКолво Тогда
                        ОприходованныеКоличества.УдалитьСтроку(Поз);
                    Иначе
                        ОприходованныеКоличества.ВсегоКолво = (СписКолво - ПогашКолво) * ТаблицаДокумента.Коэффициент /
                                                              ?(ПустоеЗначение(ОприходованныеКоличества.Коэфф) = 1, 1, ОприходованныеКоличества.Коэфф);
                    КонецЕсли;
                
                    Количество = Количество - ПогашКолво;
                
                    Поз = 0;
                КонецЦикла;
            
                Если Количество > 0 Тогда
                    Оприход.НоваяСтрока();
                    Оприход.ВидТМЦ       = ВремВидТМЦ;
                    Оприход.Номенклатура = Номенклатура;
                    Оприход.Количество      = Количество;
                    Оприход.Единица      = ТаблицаДокумента.Единица;
                    Оприход.Коэффициент  = ТаблицаДокумента.Коэффициент;
                
                    Если ДокОснование.ВидОперации = Перечисление.ВидыИнвентаризаций.ПоРознице Тогда
                    
                        // Цену заполним из справочника
                        Если ПустоеЗначение(Оприход.ТипЦен) = 0 Тогда
                        
                            // получим цену
                            Оприход.Цена = глПолучитьЦену(Оприход.Номенклатура, Оприход.ТипЦен, Оприход.ДатаДок, Оприход.Единица, Оприход.Валюта, Оприход.Курс, Оприход.Кратность)
                        Иначе
                            Оприход.Цена = 0; // нет типа цен, нет и цены
                        КонецЕсли;
                    
                        // Розничную цену возьмем из документа
                        РозничнаяЦена    = ТаблицаДокумента.Цена;
                    
                        // посчитаем розничную наценку
                        Если Оприход.Цена <> 0 Тогда                                                 
                            РознЦена = глПересчет(РозничнаяЦена, глРубли, 1, Оприход.Валюта, Оприход.Курс,, Оприход.Кратность);
                            РозничнаяНаценка = (РознЦена - Оприход.Цена) / Оприход.Цена * 100;
                        Иначе
                            РозничнаяНаценка = 0;
                        КонецЕсли;
                    Иначе                
                        Оприход.Цена = ТаблицаДокумента.Цена;
                    КонецЕсли;
                
                    Оприход.Сумма = Оприход.Цена * Оприход.Количество;
                
                    //СоздатьПартию();
                КонецЕсли;
            
            КонецЕсли;
        
        КонецЦикла;
        Оприход.Записать();
        Оприход.Провести();
    КонецПроцедуры
    
    
    //Процедура СоздатьПартию(ПартияИсточник = 0)
    //
    //    Если ПустоеЗначение(Номенклатура) = 1 Тогда
    //        Возврат;
    //    КонецЕсли;
    //    Если ПустоеЗначение(Партия) = 0 Тогда
    //        // если партия уже записана - не трогаем ее!
    //        Возврат;
    //    КонецЕсли;
    //
    //    Если ПустоеЗначение(ПартияИсточник) = 0 Тогда
    //        Если (ПартияИсточник.ГТД.Выбран() = 1)
    //        или  (ПартияИсточник.СтранаПроисхождения.Выбран() = 1)
    //        или  (ПартияИсточник.Свойство.Выбран() = 1)
    //        Тогда
    //            СпрПартии.ИспользоватьВладельца(Номенклатура);
    //            СпрПартии.Новый();
    //            СпрПартии.ГТД                 = ПартияИсточник.ГТД;
    //            СпрПартии.СтранаПроисхождения = ПартияИсточник.СтранаПроисхождения;
    //            СпрПартии.Свойство            = ПартияИсточник.Свойство;
    //            Попытка
    //                СпрПартии.Записать();
    //            Исключение
    //                Сообщить(ОписаниеОшибки(),"I");
    //                Возврат;
    //            КонецПопытки;
    //            Партия = СпрПартии.ТекущийЭлемент();
    //        КонецЕсли;
    //    Иначе
    //        Если (Номенклатура.НомерГТД.Выбран() = 1)
    //        или  (Номенклатура.СтранаПроисхождения.Выбран() = 1)
    //        Тогда
    //            СпрПартии.ИспользоватьВладельца(Номенклатура);
    //            СпрПартии.Новый();
    //            СпрПартии.ГТД                 = Номенклатура.НомерГТД;
    //            СпрПартии.СтранаПроисхождения = Номенклатура.СтранаПроисхождения;
    //            Попытка
    //                СпрПартии.Записать();
    //            Исключение
    //                Сообщить(ОписаниеОшибки(),"I");
    //                Возврат;
    //            КонецПопытки;
    //            Партия = СпрПартии.ТекущийЭлемент();
    //        КонецЕсли;
    //    КонецЕсли;
    //
    //КонецПроцедуры // СоздатьПартию()
    Последнее редактирование: 8 июн 2017
  12. Бухгалтерский угодник
    Online

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.094
    Симпатии:
    489
    Баллы:
    104
    По номеру.. У вас создается новый документ текущей датой.. т.е. нумерация берется из текущего года. Используйте метод РабочаяДата(ПрошлыйГод) чтобы 1с поставила номер из прошлого года. По шапке гляну завтра. Лень читать на ночь глядя

Поделиться этой страницей