Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка при списании себестоимости по ФИФО
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
YuraRoss
Я начинающий программист 1С. Получил такую задачу – добавить возможность ведения учета товаров по ФИФО, партией будет документ поступление товаров. Для написания текста пользовался статьей – необходимо зарегистрироваться для просмотра ссылки . Но при проверке модуля есть 3 ошибки в которых не могу разобраться.
{Документ.ПоступлениеТоваров.МодульОбъекта(148,82)}: Очікується символ ‘)’
Сообщение.Текст = “Не хватает ” + Строка(ВыборкаНоменклатура.КоличествоВДокументе<> – ВыборкаНоменклатура.КоличествоОстаток) + ” единиц номенклатуры ” + ВыборкаНоменклатура.Номенклатура + “. Проведение невозможно.”; (Перевірка: Сервер)
{Документ.ПоступлениеТоваров.МодульОбъекта(185,35)}: Очікується ключове слово ‘КонецЦикла’ (‘EndDo’)
ОсталосьСписать = ОсталосьСписать <>– КСписанию; (Перевірка: Сервер)
{Документ.ПоступлениеТоваров.МодульОбъекта(189,1)}: Очікується ключове слово ‘КонецПроцедуры’ (‘EndProcedure’)
<>КонецЦикла; (Перевірка: Сервер)
По первой там проверял количество открытых и закрытых скобок, но причина не в этом. А 2 и 3 так же не понимаю потому что цикл и процедура закрыты.
А вот сам текст -
Запрос=Новый Запрос;
Запрос.Текст=
“ВЫБРАТЬ
| ПоступлениеТоваровТовары.Номенклатура,
| СУММА(ПоступлениеТоваровТовары.Количество) КАК Количество,
| СУММА(ПоступлениеТоваровТовары.Сумма) КАК Сумма
|ПОМЕСТИТЬ ВТ
|ИЗ
| Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
|ГДЕ
| ПоступлениеТоваровТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПоступлениеТоваровТовары.Номенклатура
|;
|ВЫБРАТЬ
| ВТ.Номенклатура КАК Номенклатура,
| ВТ.Количество КАК КоличествоВДокументе,
| ВТ.Сумма КАК ВДокументе,
| ОстаткиТоваровОстатки.Партии,
| ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ОстаткиТоваровОстатки.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
| &МоментВремени,
| Номенклатура В
| (ВЫБРАТЬ
| ВТ.Номенклатура
| ИЗ
| ВТ КАК ВТ)) КАК ОстаткиТоваровОстатки
| ПО ВТ.Номенклатура = ОстаткиТоваровОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| ОстаткиТоваровОстатки.Партия.МоментВремени ВОЗР
|ИТОГИ
| МАКСИМУМ(КоличествоВДокументе),
| МАКСИМУМ(СуммаВДокументе),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток)
|ПО
| Номенклатура”;
Запрос.УстановитьПараметр(“МоментВремени”, МоментВремени());
Запрос.УстановитьПараметр(“Ссылка”,Ссылка);

ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаНоменклатура.Следующий() Цикл

Если ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.КоличествоВДокументе Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает " + Строка(ВыборкаНоменклатура.КоличествоВДокументе – ВыборкаНоменклатура.КоличествоОстаток) + " единиц номенклатуры " + ВыборкаНоменклатура.Номенклатура + ". Проведение невозможно.";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;

Если Отказ Тогда
Продолжить;
КонецЕсли;

ОсталосьСписать = ВыборкаНоменклатура.КоличествоВДокументе;

ВыборкаДетЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать 0 Цикл

КСписанию = Мин(ОсталосьСписать, ВыборкаДетЗаписи.КоличествоОстаток);

СуммаСписания = ?(ВыборкаДетЗаписи.КоличествоОстаток =КСписанию,
ВыборкаДетЗаписи.СуммаОстаток,
ВыборкаДетЗаписи.СуммаОстаток/ВыборкаДетЗаписи.КоличествоОстаток * КСписанию);

НовоеДвижение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
НовоеДвижение.Период = Дата;
НовоеДвижение.Регистратор = Ссылка;
НовоеДвижение.Количество = КСписанию;
НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
НовоеДвижение.Партия = ВыборкаДетЗаписи.Партия;
НовоеДвижение.Сумма = СуммаСписания;

НовоеДвижение = Движения.Продажи.Добавить();
НовоеДвижение.Активность = Истина;
НовоеДвижение.Период = Дата;
НовоеДвижение.Регистратор = Ссылка;
НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
НовоеДвижение.Сумма = ВыборкаДетЗаписи.СуммаВДокументе;

НовоеДвижение.Количество = КСписанию;
НовоеДвижение.Себестоимость = СуммаСписания;
ОсталосьСписать = ОсталосьСписать – КСписанию;

КонецЦикла;

КонецЦикла;
КонецПроцедуры

Буду благодарен за помощь.


 ! 

Правила, п.12
 
pablo
Цитата
{Документ.ПоступлениеТоваров.МодульОбъекта(148,82)}: Очікується символ ‘)’
Сообщение.Текст = “Не хватает ” + Строка(ВыборкаНоменклатура.КоличествоВДокументе<> – ВыборкаНоменклатура.КоличествоОстаток) + ” единиц номенклатуры ” + ВыборкаНоменклатура.Номенклатура + “. Проведение невозможно.”; (Перевірка: Сервер)

Что здесь делает <> ?
YuraRoss
Цитата(pablo @ 06.08.14, 14:02) необходимо зарегистрироваться для просмотра ссылки
Что здесь делает <> ?

Я так понимаю что "<>" таким способом програма показывакт место где есть ошибка. Потому что я скинул кроме текста ошибок и сам текст программы и если вы вниманетельно посмотрите, то увидите что в тексте нету такого "<>".
ignsv
Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать 0 Цикл


">" - пропустили походу
я бы рекомендовал сайт Чистова, там люды выкладывают свои решения и они рабочие. Здесь не понятно или Вы синтакс.ошибок наделали или там где качали.
Petre
Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать 0 Цикл
YuraRoss
Цитата(ignsv @ 06.08.14, 14:13) необходимо зарегистрироваться для просмотра ссылки
Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать 0 Цикл


">" - пропустили походу
я бы рекомендовал сайт Чистова, там люды выкладывают свои решения и они рабочие. Здесь не понятно или Вы синтакс.ошибок наделали или там где качали.

Спасибо не заметил этого. Там где я качал так же без ">".
YuraRoss
Думаю тему можно закрывать. Ответа не нашел, но задание мне нужно было выполнить к концу дня. Спасибо за внимание.
YuraRoss
Вот исправленый текст. Там была ошибка изза нечитаемого символа вместо "-" и еще несколько других ошибок.
//Учет ФИФО
    Движения.ОстаткиТоваров.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        Движения.ОстаткиТоваров.Записать();
    КонецЕсли;
    Сортировка = " ВОЗР ";
    
    // Устанавливаем блокировку.
    Блокировка = Новый БлокировкаДанных;
    
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = Товары;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Товар");
    
    Блокировка.Заблокировать();

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