Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 20:20

как исправить?

Автор Сергей Федоров, 22 апр 2017, 19:50

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

Сергей Федоров

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

Сергей Федоров

Обнаружено логическое завершение исходного текста модуля
   Шапка = Запрос.<<?>>Выполнить().Выбрать(); (Проверка: Сервер

alex0402

Спасибо за Сказать спасибо

Сергей Федоров

Цитата: alex0402 от 22 апр 2017, 19:53
Цитата: Сергей Федоров от 22 апр 2017, 19:50Запрос = Текст "ВЫБРАТЬ

здесь!!!!
а как конкретно исправить? подскажите пожалуйста

Dethmontt

Цитата: Сергей Федоров от 22 апр 2017, 20:36а как конкретно исправить? подскажите пожалуйста

вот так
Запрос.Текст = "ВЫБРАТЬ
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск