|
Движения в регистр накопления | ☑ | ||
---|---|---|---|---|
0
Сергей333
17.08.17
✎
11:19
|
Ребят помогите плиз, запарил этот документ уже. В общем Есть документ "МаршрутнаяКартаПроизводства" и таб.часть "ТехнологическиеОперации". В таб. части есть колонка "ВремяНачала" и "ВремяОкончания", так вот если заполнено "ВремяНачала" а Не заполнено "ВремяОкончания" тогда движение должно быть в Приход. А если заполнено и то и другое должно быть в Расход. Но проблема в том что если в таб.части документа присуцтвует одна строка, то все норм, а если две тогда он пишет и Приход и Расход и плюс удваивает. Что делать уже не пойму.
Пытался сделать: Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьРасход(); КонецЕсли; КонецЦикла; Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл Если Не ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьПриход(); КонецЕсли; КонецЦикла; |
|||
1
1dvd
17.08.17
✎
11:21
|
где заполнение измерений, ресурсов и реквизитов регистра?
|
|||
2
vicof
17.08.17
✎
11:21
|
Ну ты быть хоть синтакс-помощник почитал
|
|||
3
Сергей333
17.08.17
✎
11:22
|
Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл
Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьРасход(); КонецЕсли; КонецЦикла; Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И Не ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьПриход(); КонецЕсли; КонецЦикла; |
|||
4
ColonelAp4u
17.08.17
✎
11:23
|
Зачем двойной цикл?
|
|||
5
vicof
17.08.17
✎
11:24
|
Чтобы точно сработало
|
|||
6
1dvd
17.08.17
✎
11:24
|
это не двойной цикл. Это два независимых цикла
|
|||
7
ColonelAp4u
17.08.17
✎
11:25
|
Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл
Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И Не ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьПриход(); ИначеЕсли ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьРасход(); КонецЕсли; КонецЦикла; |
|||
8
r_i_n_i_k
17.08.17
✎
11:25
|
(5) что бы точно сработало цикл должден быть не двойной ,а от 0 до 65535
тогда эти гады точно никуда не денутся и пропишутся в РН как надо!) |
|||
9
ColonelAp4u
17.08.17
✎
11:26
|
(6) я про то зачем одно и тоже дважды в циклах прогонять с разными условиями
|
|||
10
1dvd
17.08.17
✎
11:27
|
(9) меня больше (1) интересует. Потому что иначе это пустой пук от таких движений
|
|||
11
ColonelAp4u
17.08.17
✎
11:28
|
(10) ну это да)
|
|||
12
Рэйв
17.08.17
✎
11:29
|
Движения.ВыполнениеМаршрутныхКарт.ВыполнитьРасход(); - как подсознательное желание большой розовой кнопки "СДЕЛАТЬ ВСЕ!"
:-) |
|||
13
Сергей333
17.08.17
✎
11:29
|
(7) Пишет Прихода два и Расхода 2
|
|||
14
1dvd
17.08.17
✎
11:30
|
(13) а строк сколько?
|
|||
15
Сергей333
17.08.17
✎
11:31
|
(14) 4
|
|||
16
1dvd
17.08.17
✎
11:31
|
(15) ну, и?
|
|||
17
Сергей333
17.08.17
✎
11:32
|
(14) Сорь. Строк в ТЧ 2, только в первой заполнено ВремяНачала и ВремяОкончания, а в другой строке только ВремяНачала.
|
|||
18
1dvd
17.08.17
✎
11:32
|
(17) на (1) будет ответ?
|
|||
19
Сергей333
17.08.17
✎
11:35
|
(18) В Обработке проведения
|
|||
20
Альбатрос
17.08.17
✎
11:36
|
=)
|
|||
21
vicof
17.08.17
✎
11:37
|
Мило
|
|||
22
lera01
17.08.17
✎
11:40
|
(17) Вы же по всем движениям делаете расход, если хоть в какой-то строке есть для этого условия. Все так и должно работать. Постарайтесь изменить логику таким образом, чтобы в цикле по строкам для каждой строки а зависимости от заполненности дат определять вид движения - приход или расход.
|
|||
23
ColonelAp4u
17.08.17
✎
11:43
|
Пришли код из обработки проведения где заполняются измерения
|
|||
24
ColonelAp4u
17.08.17
✎
11:43
|
что то подсказывает что там уже делается движение, а потом снова двигаешь циклом.
|
|||
25
Сергей333
17.08.17
✎
11:46
|
(22) Я это понимаю что так нужно сделать. Но опыта очень мало, я недавно этим занимаюсь. так сказать учусь.
|
|||
26
Сергей333
17.08.17
✎
11:46
|
(23) Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если мУдалятьДвижения Тогда ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ); КонецЕсли; // Сформируем структуру реквизитов шапки документа СтруктураШапкиДокумента = ОбщегоНазначения.СформироватьСтруктуруШапкиДокумента(ЭтотОбъект); // Заголовок для сообщений об ошибках проведения. Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(СтруктураШапкиДокумента); //// Заполним по шапке документа дерево параметров, нужных при проведении. ДеревоПолейЗапросаПоШапке = ОбщегоНазначения.СформироватьДеревоПолейЗапросаПоШапке(); СтруктураШапкиДокумента = УправлениеЗапасами.СформироватьЗапросПоДеревуПолей(ЭтотОбъект, ДеревоПолейЗапросаПоШапке, СтруктураШапкиДокумента, ПолучитьВалютуРегламентированногоУчета()); // Проверим правильность заполнения шапки документа ПроверитьЗаполнениеШапки(СтруктураШапкиДокумента, Отказ, Заголовок); // Получим необходимые данные для проведения и проверки заполенения данных по табличной части "БланкиСтрогогоУчета". СтруктураПолей = Новый Структура; СтруктураПростыхПолей = Новый Структура; СтруктураПолей.Вставить("Операция" , "Операция"); СтруктураПолей.Вставить("НомерОперации" , "НомерОперации"); СтруктураПолей.Вставить("Получил" , "Получил"); СтруктураПолей.Вставить("Выполнил" , "Выполнил"); СтруктураПолей.Вставить("ВремяНачала" , "ВремяНачала"); СтруктураПолей.Вставить("ВремяОкончания" , "ВремяОкончания"); РезультатЗапросаПоТехнологическимОперациям = ОбщегоНазначения.СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "ТехнологическиеОперации", СтруктураПолей, СтруктураПростыхПолей); // Подготовим таблицу товаров для проведения. ТаблицаПоТехнологическимОперациям = ПодготовитьТаблицуТехнологическихОпераций(РезультатЗапросаПоТехнологическимОперациям, СтруктураШапкиДокумента); // Проверить заполнение ТЧ "Товары". ПроверитьЗаполнениеТабличнойЧастиТехнологическиеОперации(ТаблицаПоТехнологическимОперациям, СтруктураШапкиДокумента, Отказ, Заголовок); // Движения по документу ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТехнологическимОперациям, Отказ, Заголовок); Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И Не ЗначениеЗаполнено(ТекСтрока.Получил) Тогда Предупреждение("Не заполнен реквизит Получил"); Отказ = Истина; КонецЕсли; КонецЦикла; Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл Если ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) И Не ЗначениеЗаполнено(ТекСтрока.Выполнил) Тогда Предупреждение("Не заполнен реквизит Выполнил"); Отказ = Истина; КонецЕсли; КонецЦикла; Движения.ВыполнениеМаршрутныхКарт.Записывать = Истина; КонецПроцедуры // ОбработкаПроведения() |
|||
27
dezss
17.08.17
✎
11:49
|
(26) теперь покажи процедуру ДвиженияПоРегистрам
|
|||
28
Сергей333
17.08.17
✎
11:50
|
Процедура ДвиженияПоРегиструВыполнениеМаршрутныхКарт(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТехнологическимОперациям, Отказ, Заголовок)
НаборДвижений = Движения.ВыполнениеМаршрутныхКарт; // Получим таблицу значений, совпадающую со струкутрой набора записей регистра. ТаблицаДвижений = НаборДвижений.Выгрузить(); ТаблицаДвижений.ЗаполнитьЗначения(ЭтотОбъект.Ссылка, "МаршрутнаяКартаПроизводства"); НаборДвижений.Загрузить(ТаблицаДвижений); // Заполним таблицу движений. ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТехнологическимОперациям, ТаблицаДвижений); НаборДвижений.мПериод = Дата; НаборДвижений.мТаблицаДвижений = ТаблицаДвижений; Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И Не ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьПриход(); ИначеЕсли ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьРасход(); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
29
ColonelAp4u
17.08.17
✎
11:55
|
(28) ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТехнологическимОперациям, ТаблицаДвижений);
Вот тут уже делает движения если я не ошибаюсь |
|||
30
Сергей333
17.08.17
✎
11:59
|
(29) Без этого регистр пуст.
|
|||
31
ColonelAp4u
17.08.17
✎
12:03
|
(30) а теперь по пробуй закомментировать вот это
Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И Не ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьПриход(); ИначеЕсли ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьРасход(); КонецЕсли; КонецЦикла; а (29) оставь в рабочем виде |
|||
32
Сергей333
17.08.17
✎
12:05
|
(31) Пусто
|
|||
33
ColonelAp4u
17.08.17
✎
12:06
|
(31) это будет типовой вариант работы записи в данный регистр, именно с 2мя строчками как в ТЧ.
Далее если тебе нужно написать свои движухи тогда все в комментарии и пишешь свои движения в цикле условиями. |
|||
34
ColonelAp4u
17.08.17
✎
12:07
|
(32) team vieawer есть?
|
|||
35
1dvd
17.08.17
✎
12:08
|
(28) ты сначала заполняешь движения по всем строкам, потом делаешь Приход по всем строкам и расход по всем строкам
|
|||
36
Сергей333
17.08.17
✎
12:11
|
(34) Нету. Офисный ПК.
|
|||
37
Сергей333
17.08.17
✎
12:13
|
Как я себе представляю и как сказал (22), мне просто нужно в этом цикле Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл
Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И Не ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьПриход(); ИначеЕсли ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движения.ВыполнениеМаршрутныхКарт.ВыполнитьРасход(); КонецЕсли; КонецЦикла; прописать толи проверку толи движение по строкам. |
|||
38
ВРедная
17.08.17
✎
12:16
|
(37) тебе нужно прочитать и понять, что такое ВыполнитьРасход() и ВыполнитьПриход()
По каким строкам эти команды делают движения. Ты думаешь, программа волшебным образом подбирает строки для прихода и расхода? Может их нужно как-то задать самостоятельно? Отдельно расход и приход? Или вместо этого воспользоваться другим методом? |
|||
39
Сергей333
17.08.17
✎
12:18
|
(38) А для чего тогда условия Если?
|
|||
40
vicof
17.08.17
✎
12:20
|
(39) Ты не поверишь
|
|||
41
ВРедная
17.08.17
✎
12:21
|
(39) еще раз. Что такое по-твоему, команда "Выполнить приход"?
Откуда она берет данные, которые записывает в приход? Ты их где-то прописал? Где? Отдельно приход? Или все строки вместе? Как программе отделить твои приходы от расходов? И еще раз, контрольный, самый главный: "Что такое команда "ВыполнитьПриход"? |
|||
42
ColonelAp4u
17.08.17
✎
12:22
|
(39) ты не понял, (38) тут говорят то выполнить приход делается не по строке а таблице движений как и выполнить расход, я тебе уже предлагал, комментируй все полностью и пиши свои движения. в цикле.
|
|||
43
Сергей333
17.08.17
✎
12:42
|
Это движения из 1С7. Как переделать на 8-ку?
// =============================== Процедура ДвижениеСтрокаМаршрутнаяКарта( СерийныйНомерПродукции = 0, ЭтоТекущаяОперация = 0 ) Регистр.ВыполнениеМаршрутныхКарт.ПривязыватьСтроку(НомерСтроки); Регистр.ВыполнениеМаршрутныхКарт.СерийныйНомерПродукции = СерийныйНомерПродукции; Регистр.ВыполнениеМаршрутныхКарт.МаршрутнаяКарта = ТекущийДокумент(); Регистр.ВыполнениеМаршрутныхКарт.НомерОперации = НомерОперации; Регистр.ВыполнениеМаршрутныхКарт.ТехнологическаяОперация = ТехнологическаяОперация; Регистр.ВыполнениеМаршрутныхКарт.Количество = 1; Регистр.ВыполнениеМаршрутныхКарт.ДатаНачала = ДатаНачала; Регистр.ВыполнениеМаршрутныхКарт.Получил = Получил; Регистр.ВыполнениеМаршрутныхКарт.ДатаОкончания = ДатаОкончания; Регистр.ВыполнениеМаршрутныхКарт.Выполнил = Выполнил; Если (ПустоеЗначение(ДатаНачала) = 0) Или ( ЭтоТекущаяОперация = 1) Тогда Регистр.ВыполнениеМаршрутныхКарт.ДвижениеПриходВыполнить(); КонецЕсли; Если ПустоеЗначение(ДатаОкончания) = 0 Тогда Регистр.ВыполнениеМаршрутныхКарт.ДвижениеРасходВыполнить(); КонецЕсли; КонецПроцедуры // =============================== Процедура ДвиженияМаршрутнаяКарта() Если спСерНомераПродукции.РазмерСписка() = 0 Тогда ПредДатаОкончания = '..'; НайденаТекущаяОперация = 0; ВыбртьСтроки(); Пока ПолучитьСтроку() = 1 Цикл ЭтоаТекущаяОперация = 0; Если (ПустоеЗначение(ДатаНачала) = 1) И (НомерСтроки = 1) // если в первой строке документа не указана дата начала ... Или (ПустоеЗначение(ПредДатаОкончания) = 0) И (ПустоеЗначение(ДатаОкончания) = 1) И (НайденаТекущаяОперация = 0) Тогда // ... или дата окончания в предыдущей строке указана, а в текущей - нет, тогда это текущая операция ЭтоТекущаяОперация = 1; НайденаТекущаяОперация = 1; КонецЕсли; ДвижениеСтрокаМаршрутнаяКарта( , ЭтоТекущаяОперация ); ПредДатаОкончания = ДатаОкончания; КонецЦикла; Иначе ПредДатаОкончания = '..'; НайденаТекущаяОперация = 0; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл ЭтоТекущаяОперация = 0; Если (ПустоеЗначение(ДатаНачала) = 1) И (НомерСтроки = 1) // если в первой строке документа не указана дата начала ... Или (ПустоеЗначение(ПредДатаОкончания) = 0) И (ПустоеЗначение(ДатаОкончания) = 1) И (НайденаТекущаяОперация = 0) Тогда // ... или дата окончания в предыдущей строке указана, а в текущей - нет, тогда это текущая операция ЭтоТекущаяОперация = 1; НайденаТекущаяОперация = 1; КонецЕсли; Для Инд=1 По спСерНомераПродукции.РазмерСписка() Цикл ДвижениеСтрокаМаршрутнаяКарта( спСерНомераПродукции.ПолучитьЗначение(Инд), ЭтоТекущаяОперация ); КонецЦикла; ПредДатаОкончания = ДатаОкончания; КонецЦикла; КонецЕсли; КонецПроцедуры // =============================== |
|||
44
vicof
17.08.17
✎
12:44
|
(43) Заплатить специалисту
|
|||
45
lera01
17.08.17
✎
13:02
|
Сделай примерно следующее: В обработке проведения напрямую пиши движения
Для Каждого ТекСтрока Из ТехнологическиеОперации Цикл Движение=Движения.ВыполнениеМаршрутныхКарт.Добавить(); .......... заполняешь реквизиты этого движения Если ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И Не ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движение.ВидДвижения=ВидДвиженияНакопления.Приход; ИначеЕсли ЗначениеЗаполнено(ТекСтрока.ВремяНачала) И ЗначениеЗаполнено(ТекСтрока.ВремяОкончания) Тогда Движение.ВидДвижения=ВидДвиженияНакопления.Расход; КонецЕсли; КонецЦикла; //простите меня участники данной дискуссии за г**код, но ведь абсолютно нереально здесь объяснить, как сделать иначе и куда залезть в процедурах формирования таблиц движений |
|||
46
Сергей333
17.08.17
✎
13:38
|
(45) Спасибо тебе огромное. И всем остальным тоже, в любом случае за стимуляцию мозга)) В хорошем смысле, это тоже надо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |